All gists

Last active 2 months ago
0 0 1

Flow BOD Reject — Rollback (Action Plans)

Dokumen ini menjelaskan secara rinci apa yang terjadi pada seluruh hierarki Action Plan ketika hasil vote BOD adalah ROLLBACK (reject + rollback ke prerequisite). Bahasa Indonesia; contoh payload request/response tetap dalam bahasa Inggris sesuai konvensi API.

Referensi implementasi: src/features/version/1/action-plans/ — helper utama di action-plans.helpers.ts (restartRollbackSubtree L173, pauseSubtreeForRollback L500, reprocessReleasedChildren L992, markRollbackDownstreamConsumers L371, releaseRollbackPausedDependents L259, assertNotRollbackPaused L465, aggregateBodRound L2200, resolveApprovalNotifyTargets L2659, resolveActionPlanOwnerAdminUserIds L2590).


1. Ikhtisar

Last active 2 months ago
0 0 1

API — Action Plans

Action plan module: Activity → Task → Subtask hierarchy with progress entries, approvers, prerequisites, members, and a BOD (Board of Directors) escalation flow.

General

  • Base: /api/v1/projects/:projectId/action-plans — all paths below are relative to this base.
  • Auth: JWT, @Authorize({ membership: true }) — caller must be a project member.
  • Envelope: responses wrapped { status, message, data }; binary endpoints (PDF/XLSX) bypass the envelope.
  • Access tiers (ProjectActionPlanAccessGuard):
Last active 4 months ago
0 0 1
1 /**
2 * DeleteAnnotationsByUser — soft-delete all annotation layers + annotations
3 * created by a specific user within the given rooms.
4 * Used when canceling/switching a user's assignment on a transmittal.
5 * Caller should resolve room IDs via getRoomByDocument first.
6 */
7 async deleteAnnotationsByUser(request: DeleteAnnotationsByUserRequest): Promise<DeleteAnnotationsByUserResponse> {
8 const roomIds = request.roomIds ?? [];
9 if (roomIds.length === 0) {
10 return { deletedAnnotations: 0, deletedLayers: 0 };