Sindh IT Portal — Facilitation DeskSpecification documents
Englishاردوسنڌي
← All documents

Meetings, TRI & Minutes of Meeting

The authoritative specification for all meetings attached to a ticket — TRI tripartite reviews, hearings, departmental and direct meetings, and site visits — and for the upload-first Minutes of Meeting (MoM) lifecycle, AI extraction, approval gating, publish & auto-share, and analytics on the Sindh IT Portal — Facilitation Desk (SITP).

Field Value
Doc ID 21
Status Draft
Owner S&ITD / MAAHIR
Languages EN (master) · UR · SD
Applies to module M (MTG) — Hearings + TRI + MoM
Depends on /specs/en/05-data-model/, /specs/en/06-ticket-workflow/, /specs/en/07-ai-ocr-spec/, /specs/en/04-roles-permissions/, /specs/en/11-security-compliance/, /specs/en/15-tech-architecture/, /specs/en/17-analytics-kpis/, _context.md, _glossary.md
Implements _context.md §5 (MoM upload-first; TRI tripartite; approval only for sensitive/VIP; auto-share)

1. Scope & Definitions

This document is the single source of truth for Module M. It defines every kind of meeting that can attach to a ticket, how meetings are scheduled, how their minutes are produced and shared, and how action items inside the minutes flow back into the ticket as sub-tasks. It is the canonical reference for the meetings, meeting_attendees, mom, mom_approvals, mom_distributions, mom_acknowledgments, and meeting_recordings tables defined in /specs/en/05-data-model/ §4.9.

The ticket lifecycle, SLA, escalation ladder, proof-of-resolution gate, reopen/appeal windows, and the TRI/MoM summary that appears in /specs/en/06-ticket-workflow/ §9–§10 are governed there; this document expands them into the full Module-M specification. Where the two documents appear to differ, this document is authoritative for Module-M behaviour and the ticket-workflow doc defers.

Glossary (short form; see _glossary.md):

Term Meaning
Meeting A scheduled interaction attached to a ticket (TRI, hearing, internal, direct, or site visit).
TRI Tripartite Review meeting — three parties: Company + S&ITD facilitator + concerned Department(s). Triggered from a stalled ticket.
Hearing A quasi-judicial or formal adjudication convened by a department or oversight tier to take evidence and decide.
MoM Minutes of Meeting — the formal record, prepared by the department in its own format and uploaded (upload-first).
Action item A structured, owner-bearing commitment extracted from the MoM that becomes a ticket sub-task on confirmation.
Chair The person presiding over a meeting. For TRI this is the S&ITD facilitator; for hearings, the designated adjudicator.
Facilitator The S&ITD officer assigned to the ticket who convenes and runs TRI meetings.
Quorum The minimum set of required attendees whose presence is needed for a meeting's decisions to be binding.
Acknowledgment A recorded confirmation by a participant that they have received and opened the published MoM.
Provider The video-conferencing platform selected for a virtual/hybrid meeting — Zoom, Google Meet, or Microsoft Teams.

All capabilities described here are individually toggleable via the Feature Flag module (Q) and individually configurable via the per-department / per-category configuration described in §15.


2. Meeting Types

A meeting is always attached to exactly one ticket (the meetings.ticket_id foreign key). One ticket may have several meetings over its lifetime. The system recognises five meeting types, classified by purpose and the parties that must attend. The data model's meetings.type enum (see /specs/en/05-data-model/ §4.9) currently carries tri, hearing, internal; this document specifies the authoritative taxonomy and requires the enum to be extended (see §12 data-model recap) to cover the full set, with a subtype discriminator for further classification.

# Type Purpose Required parties Modality SLA effect MoM mandatory?
T1 TRI (Tripartite Review) Break a stall by getting Company + S&ITD + Department into one room to agree a path forward. Company (Primary Rep), S&ITD (Facilitator, chairs), Concerned Department(s) (Officer + Section Head). Physical / virtual / hybrid Ticket parks to On Hold (clock pauses) for the duration; resumes on outcome (§6). Yes.
T2 Departmental internal Internal coordination, briefing, or decision among officers of one department (or S&ITD) about a ticket, without the company present. Department staff + Section Head/DG as needed; S&ITD facilitator may attend as observer. Usually physical or virtual No SLA pause unless the ticket is moved to On Hold for a reason. Yes (internal MoM; not shared with company).
T3 Company-direct department A bilateral meeting between the company and the concerned department without S&ITD convening (S&ITD still notified and may observe). Company (Primary Rep) + Department (Officer). S&ITD as optional observer. Physical / virtual / hybrid No SLA pause unless moved to On Hold. Yes.
T4 Hearing / adjudication A formal, quasi-judicial proceeding convened to take evidence, hear parties, and decide or recommend. Used for contested matters, RTI appeals, regulatory disputes. Convening authority (Chair/Adjudicator) + Company + Department; court-style protocol. Usually physical (record optional); virtual allowed where statute permits. Ticket parked to On Hold for the duration; resumes on decision. Yes. Hearing order / decision is part of the MoM.
T5 Site visit Physical inspection of premises, infrastructure, or records to verify facts asserted in the ticket. Department inspecting officer + Company representative at site; S&ITD facilitator optional. Physical only No SLA pause unless moved to On Hold for travel/coordination. Yes (visit report with photos/GPS evidence).

Common rules across types:


3. Scheduling & Calendar

3.1 Calendar model

Every meetings row carries scheduled_at, started_at, ended_at (all DATETIME(6), Asia/Karachi timezone by default), a status enum (§11), the modality, and where applicable the video_provider, join_url, and location_address. The portal maintains a per-user calendar view that aggregates every meeting a user is invited to, plus the Sindh Government holiday calendar and each department's business hours (see /specs/en/06-ticket-workflow/ §5.4) so that scheduling honours both.

3.2 Availability and conflict checks

On scheduling, the portal runs a conflict check across all invitees' calendars and the meeting-room / virtual-provider resource:

3.3 Reschedule and cancel

Any organiser (the S&ITD facilitator for TRI; the convening authority for hearings; the officer for internal/direct) can reschedule or cancel a scheduled meeting.

3.4 Reminders

Reminders are sent to all attendees and watchers through their preferred channels per the Notification module (G):

When Who Channels
On scheduling / reschedule All invitees + watchers Email + in-app (multilingual EN/UR/SD); calendar invite (.ics) attached to email.
24 h before scheduled_at All attendees Email + in-app + SMS + WhatsApp.
1 h before scheduled_at All attendees In-app + SMS + WhatsApp (short).
At scheduled_at All attendees In-app push + "Join" deep-link (virtual/hybrid) or location address (physical).
Quorum not met 30 min before Organiser + mandatory parties In-app + SMS alert.
Post-meeting, MoM not uploaded within SLA Responsible officer + S&ITD facilitator In-app + email reminder (§5.1).

Reminder timing and channels are configurable globally and per department in meeting_reminder_config (keyed by dept_id, type).


4. Modality & Video Providers

4.1 Modality

Each meeting is one of three modalities (meetings.modality):

The modality is chosen per meeting by the organiser and is not constrained by meeting type, with two exceptions: site visits (T5) are always physical; hearings (T4) default to physical unless the convening authority explicitly permits virtual attendance.

4.2 Video providers (configurable per meeting)

The portal integrates three configurable video providers — Zoom, Google Meet, and Microsoft Teams — behind a stable interface. The provider is selected per meeting by the organiser; it is not a global setting, because different departments and officials have different standard platforms.

Capability Zoom Google Meet Microsoft Teams
Create meeting (one-off, on behalf of organiser) ✓ via Server-to-Server OAuth ✓ via Google Workspace service account ✓ via Graph API
Generate time-limited join_url ✓ signed start URL + join URL ✓ meeting code + join link ✓ join URL
Recording (cloud) ✓ auto-record option per meeting ✓ drive-stored recording ✓ OneDrive/SharePoint-stored
Transcript pull (post-meeting) ✓ transcript + speaker labels ✓ auto-captions / transcript ✓ Teams transcript (VTT)
Speaker diarisation ◐ (provider-dependent)
Live captioning (UR/SD)
Data residency Cloud (region-pinnable) Cloud Cloud

Symbols per _conventions.md §8. ✓ supported · ◐ conditional.

Interface contract. Every video-provider integration implements:

VideoProvider {
  createMeeting(meeting)        -> { providerMeetingId, joinUrl, hostUrl, dialIn? }
  updateMeeting(meeting)        -> void
  cancelMeeting(meeting)        -> void
  getJoinUrl(meeting, user)     -> presigned, time-limited URL
  fetchRecording(meeting)       -> { mediaId, durationSeconds, format }
  fetchTranscript(meeting)      -> { mediaId, segments: [{speaker, start, end, text}] }
}

Provider credentials are stored in the secret store (see /specs/en/11-security-compliance/) keyed per (department, provider) so each department can use its own tenant.

On meeting creation the portal calls createMeeting, stores the returned providerMeetingId and a time-limited join_url (presigned; default TTL = scheduled time + 2 hours), and includes the join link in the calendar invite and reminders. Each join_url is rotated on reschedule.

On meeting completion (or on organiser request mid-meeting), the portal can call fetchRecording to pull the cloud recording (subject to consent — §10) and fetchTranscript to pull the speaker-labelled transcript. Both are stored as meeting_recordings rows linked to media_library blobs (encrypted at rest). The transcript feeds the AI transcription MoM mode (§8.2).

Fallback. If the selected provider's API is unavailable at meeting-creation time, the portal falls back to the department's secondary provider; if none is available, it generates a placeholder and asks the organiser to attach a manual meeting link. A meeting is never blocked solely because the provider API is down.


5. AI-Drafted Agenda

For every meeting the AI (module E, capability summary) auto-drafts an agenda from the parent ticket's full context, stored as meetings.agenda_json. The agenda is a suggestion; the facilitator reviews and edits it before invitations are sent (human-in-the-loop, principle P2 of /specs/en/07-ai-ocr-spec/ §1.1).

Inputs to the agenda:

Output structure (agenda_json):

Field Type Notes
title string Auto-generated from the ticket subject.
summary string (≤ 120 words) Concise "why this meeting" framing.
objectives[] string[] 2–5 concrete goals.
discussionItems[] { item, context, owner?, decisionRequired }[] Ordered agenda items, each tagged with the source span in the ticket history.
decisionsRequired[] string[] Items where the meeting must produce a decision.
recommendedAttendees[] { party, role, reason }[] Suggested quorum.
preReads[] { attachmentId, why }[] Documents attendees should review before the meeting.
citations[] { type, id, span }[] Traceability back to ticket history (principle P7).

The agenda is generated in the facilitator's preferred locale and machine-translated into EN/UR/SD for the multilingual invitations. The facilitator can override any field; the diff between AI draft and final is logged to ai_feedback for the improvement loop. For hearings (T4) the agenda additionally surfaces the legal/statutory basis and the list of evidence to be taken on record.


6. TRI Trigger & Flow

6.1 When TRI is requested

A TRI is requested when normal ticket progress stalls. Any of the following can trigger it:

A TRI request moves the parent ticket to On Hold (SLA clock paused) with reason "TRI meeting requested", creates a meetings row with type = 'tri', and notifies all three required parties. The TRI request itself is an audited event.

6.2 Approvals to convene

For non-sensitive tickets the TRI convenes on request without further approval. For sensitive or VIP tickets the request routes to the department's Chair/DG (or S&ITD DG where S&ITD is the concerned department) for sign-off before invitations are sent, mirroring the proof-of-resolution approval logic in /specs/en/06-ticket-workflow/ §7.3.

6.3 Parties and quorum

  1. Company — Primary Authorized Rep (or delegated Admin/Filer), optionally with counsel or technical staff.
  2. S&ITD — the assigned facilitator, who chairs the meeting.
  3. Concerned Department(s) — the assigned officer plus the section head; for multi-department tickets, all concerned departments must attend or send a delegate.

Quorum for a TRI = at least one representative of each of the three parties. If quorum is not met 30 minutes after scheduled_at, the facilitator may either (a) adjourn and reschedule, or (b) proceed as a partial meeting whose MoM is clearly marked "partial — without [party]" and cannot record binding decisions.

6.4 Outcome

At meeting end the facilitator records the outcome as one of:

In every case a MoM is produced and permanently attached per §9.

6.5 TRI flow diagram

flowchart TD Stall([Ticket stalled /<br/>escalated tier ≥2]) --> Req{Who requests<br/>TRI?} Req -- Company / Officer /<br/>Facilitator / Auto-trigger --> Create[Create meetings row type=tri;<br/>ticket → On Hold reason=TRI] Create --> Sensitive1{Sensitive<br/>or VIP ticket?} Sensitive1 -- No --> Agenda Sensitive1 -- Yes --> ConvAppr{Chair/DG<br/>approves convening?} ConvAppr -- No --> Decline[Decline TRI request;<br/>ticket stays On Hold;<br/>reason recorded] ConvAppr -- Yes --> Agenda Agenda[AI auto-drafts agenda<br/>from ticket history + uploads] --> Review[Facilitator reviews/edits agenda] Review --> Modality{Modality} Modality -- Physical --> Venue[Book venue;<br/>set location_address] Modality -- Virtual --> Provider[Select Zoom/Meet/Teams;<br/>createMeeting → join_url] Modality -- Hybrid --> Both[Both venue + provider] Venue --> Invite Provider --> Invite Both --> Invite Invite[Send multilingual invites<br/>+ capture recording consent §10] --> Quorum{Quorum met<br/>at scheduled_at?} Quorum -- No --> Adjourn1[Adjourn;<br/>reschedule] Quorum -- Yes --> Held[Meeting held] Held --> Outcome{Facilitator records outcome} Outcome -- Resolved --> AttachEv[Attach MoM + signed agreement<br/>as evidence] --> ResolveGate[Proof gate §7<br/>of doc 06] --> ResolvedT[/Ticket → Resolved/] Outcome -- Further action items --> SubTasks[Confirm action items<br/>→ become sub-tasks] --> InProgressT[/Ticket → In Progress/] Outcome -- Escalate --> Esc[/Ticket → Escalated at next tier<br/>with meeting record as context/] Outcome -- Adjourn --> Adjourn2[Schedule follow-up TRI;<br/>ticket stays On Hold] Held --> MomProduced[MoM produced §9]

Written description. A TRI starts when a ticket stalls or sits at escalation tier 2 or higher without movement. Any of the company, the officer, the facilitator, or the SLA-engine auto-trigger can request it; the request creates a meetings row of type tri and parks the ticket in On Hold with reason "TRI meeting requested", pausing the SLA clock. For sensitive or VIP tickets the request first goes to the Chair/DG for sign-off; a decline keeps the ticket On Hold with the reason recorded. The AI auto-drafts an agenda from the ticket history and uploads, which the facilitator reviews and edits. Modality is selected per meeting — physical (venue booked), virtual (Zoom/Meet/Teams meeting created and join_url generated), or hybrid (both). Multilingual invitations go out and recording consent is captured before any recording starts. At the scheduled time, quorum is checked; if not met, the facilitator adjourns and reschedules. With quorum met, the meeting proceeds and the facilitator records one of four outcomes: resolved (ticket returns briefly to In Progress to attach the MoM and signed agreement as proof, then moves to Resolved); further action items (action items confirmed as sub-tasks, ticket returns to In Progress); escalate (ticket moves to the next escalation tier with the meeting record as context); or adjourn (follow-up TRI scheduled, ticket stays On Hold). In every case a MoM is produced and permanently attached per §9.


7. Attendees & Roles

7.1 Attendee record

Every person present at (or invited to) a meeting is recorded in meeting_attendees, tagged with a party (company, sitd, department, external) and a free-text role. Internal attendees are linked to users.id; external attendees (counsel, consultants, members of the public in a hearing) are recorded by name only.

7.2 Roles

Role Who holds it Powers in the meeting
Chair Convenes and presides. For TRI = S&ITD facilitator; for hearings = the designated adjudicator; for internal = the senior-most officer; for direct/site visit = the convening officer. Sets the agenda, calls the meeting to order, records the outcome, signs the MoM (or countersigns), approves publication for sensitive/VIP MoMs when authorised.
Facilitator The S&ITD officer assigned to the ticket. Drafts and sends invitations, runs the AI agenda, runs the meeting logistics (provider, recording, consent), uploads or coordinates the MoM.
Party (Company / Dept) The mandatory attendees whose presence is required for quorum. Speak, present evidence, agree to action items, sign the MoM.
Observer Anyone invited without speaking/voting rights (e.g. an S&ITD observer at a direct company-department meeting, or an oversight-tier watcher). May attend; cannot block decisions; receives the MoM.
Note-taker Designated officer responsible for producing or collating the MoM (often the department's officer or the facilitator). Drafts the MoM (in the department's own format) and uploads it (§9).

7.3 Attendance status lifecycle

Each meeting_attendees row moves through invited → accepted | declined → attended | absent. The accepted count drives quorum validation in scheduling (§3.2).

7.4 Quorum rules by type

Type Quorum If not met
T1 TRI ≥1 from each of Company, S&ITD, Department. Adjourn; reschedule; or proceed as partial (no binding decisions).
T2 Internal Convening officer + majority of invitees. Adjourn.
T3 Company-direct ≥1 from Company + ≥1 from Department. Adjourn.
T4 Hearing The adjudicator/Chair + the company + the department (or their authorised representatives). Adjourn; statute-dependent.
T5 Site visit The inspecting officer + a company representative at site. Visit cannot proceed; reschedule.

Quorum rules are configurable per (department, type) in meeting_quorum_config.


8. MoM Lifecycle (Upload-First)

The MoM flow applies to any meeting attached to a ticket — TRI, hearing, internal, direct, or site visit. The department preparing the MoM uploads it in its own format (PDF, Word, or images of a signed paper MoM); upload-first is the default and primary path per _context.md §5. Two alternative modes — manual template entry and AI transcription from recording — are available as feature-flagged toggles (§8.2, §15).

8.1 Upload-first lifecycle

  1. Prepare & upload. After the meeting, the designated note-taker (usually the department's officer, sometimes the facilitator) prepares the MoM in the department's own template and uploads it (PDF/DOCX/PNG/JPEG; multiple files allowed). The upload is linked to the meeting and the parent ticket.
  2. AV scan. ClamAV scans every upload (module D). Infected files are quarantined and the upload is rejected with a reason logged in audit_events.
  3. Store. Clean files are encrypted and stored in MinIO under the moms bucket; a mom.source_media_id reference is set and a mom row is created (or its source_media_id updated if a prior draft exists).
  4. OCR (if scanned). Image-only or scanned PDFs route through the pluggable OCR engine (Tesseract on-prem / Google Document AI / Azure Document Intelligence / AWS Textract) per /specs/en/07-ai-ocr-spec/ §3.2 and §4.1. OCR is multilingual (EN + UR + Sindhi, including Nastaliq and Naskh scripts) and produces a searchable text layer with confidence scores; low-confidence spans are flagged for review.
  5. AI extraction. The AI service (module E, capability mom_extract, /specs/en/07-ai-ocr-spec/ §4.11) reads the OCR text (or native text for born-digital files) and extracts:
    • A structured summary of the meeting.
    • Action items — each with owner, ownerType (company/sitd/dept/external), due date (ISO-8601; Hijri preserved), description, priority, and linked ticket.
    • Decisions recorded, with the deciding party.
    • Attendees cross-referenced against the invitee list.
    • A machine translation to EN/UR/SD so participants can read the MoM in their preferred language (mom.body_en, mom.body_ur, mom.body_sd). Extraction results are written to extracted_action_items and a summary to mom.summary_ai.
  6. Officer review & confirm. The uploading officer reviews the extracted action items in a side-by-side view (original document ↔ extracted table), corrects any mis-extraction (wrong owner, wrong date, false positive), and confirms. This is a mandatory human-in-the-loop checkpoint (principle P2). Confirmed action items become sub-tasks on the parent ticket (ticket_subtasks), each with its own owner, due date, and SLA slice (§9.6); the extracted_action_items.status flips to converted and the row is back-linked to the sub-task.

8.2 Alternative modes (feature-flagged)

These modes are off by default and enabled per department via feature flags (see §15):

Mode Feature flag Description Use case
Manual template entry mom.manual_entry Instead of uploading, the officer fills a structured portal-side MoM template (attendees, agenda, decisions, action items) directly. Departments that have not yet digitised their MoM templates; small internal meetings.
AI transcription from recording mom.transcription The meeting recording (§10) is transcribed by the AI (Whisper on-prem / Zoom / Meet provider transcript) and the LLM drafts a MoM from the transcript. The officer reviews and confirms. Virtual/hybrid meetings where the recording is the authoritative record; accessibility cases.

In all three modes the human-in-the-loop confirm step is mandatory; no action item becomes a sub-task without officer sign-off, and no MoM is published without the approval gate (§9.3) clearing.

8.3 MoM lifecycle diagram (upload-first)

flowchart TD Start([Meeting held — any type]) --> Mode{MoM mode} Mode -- Upload-first<br/>default --> Upload[Officer uploads MoM<br/>PDF/Word/images — own format] Mode -- Manual entry<br/>FF mom.manual_entry --> Manual[Officer fills<br/>portal MoM template] Mode -- AI transcription<br/>FF mom.transcription --> Trans[Whisper / Zoom / Meet transcript<br/>→ LLM drafts MoM] Upload --> AV{ClamAV scan} AV -- Infected --> Quarantine[Quarantine + reject<br/>+ audit event] AV -- Clean --> Store[(Encrypted store MinIO<br/>mom.source_media_id set)] Manual --> AsDraft[(mom row in draft;<br/>body_en populated)] Trans --> AsDraft Store --> Born{Born-digital<br/>or scanned?} Born -- Born-digital --> Text[Extract text directly] Born -- Scanned --> OCR[Pluggable OCR:<br/>Tesseract / Doc AI / Azure / Textract<br/>multilingual EN + UR + SD<br/>+ confidence scores] OCR --> Text Text --> AI[AI mom_extract:<br/>summary + action items<br/>+ decisions + attendees<br/>+ EN/UR/SD translation] AI --> Extract[(extracted_action_items rows)] Extract --> Review[Officer reviews<br/>side-by-side] Review --> Confirm[Confirm action items<br/>→ ticket_subtasks created<br/>extracted_action_items.status = converted] AsDraft --> Review Confirm --> Sensitive{Sensitive<br/>or VIP ticket?} Sensitive -- No --> Publish[Mom.status := approved;<br/>publish directly] Sensitive -- Yes --> ApproveQ[Route to<br/>Chair/DG approval queue] ApproveQ --> Decision{Approved?} Decision -- Rejected / Changes requested --> Review Decision -- Approved --> Publish Publish --> Version[(Versioned attach to ticket<br/>immutable, audit-logged<br/>prior versions retained)] Publish --> Share[Auto-share participants<br/>§9.4] Share --> Ack[(Track acknowledgments<br/>§9.5; remind after grace)] Share --> EOffice{e-Office enabled<br/>for dept?} EOffice -- Yes --> Cross[Cross-post to<br/>NITB e-Office file movement]

Written description. After any meeting, the MoM is produced through one of three modes. In the default upload-first mode, the responsible officer uploads the MoM in the department's own format (PDF, Word, or images of a signed paper document). In the manual template entry mode (feature-flagged), the officer fills a structured portal-side template. In the AI transcription mode (feature-flagged), the meeting recording is transcribed by the configured transcription engine and the LLM drafts a MoM from the transcript. For uploads, ClamAV scans every file; infected files are quarantined and rejected with an audit event, while clean files are encrypted and stored in MinIO. Scanned documents run through the pluggable multilingual OCR engine (English, Urdu including Nastaliq, and Sindhi including Naskh) to produce a text layer with confidence scores; born-digital files skip OCR. The AI service (capability mom_extract) then extracts a summary, structured action items with owners and due dates, recorded decisions, and the attendee list, and produces machine translations in all three languages, writing structured rows to extracted_action_items. The uploading officer reviews the extraction side-by-side with the original and confirms — a mandatory checkpoint; confirmed action items become sub-tasks on the parent ticket and the extracted_action_items.status flips to converted. For normal tickets the officer publishes directly; for sensitive or VIP tickets the MoM must first pass Chair/DG approval, and a rejection or "changes requested" returns it to the review step. On publish the MoM is versioned and permanently attached (immutable, prior versions retained), auto-shared to all participants across email, in-app, and SMS/WhatsApp per their preferences with acknowledgments tracked and reminders sent after a grace period. If the department has e-Office integration enabled, the MoM is cross-posted to NITB e-Office as an official file movement.


9. MoM States, Approval, Publish & Share

9.1 MoM states

The mom.status enum carries the canonical persisted state of every MoM. The lifecycle around it (upload → scan → store → OCR → extract → review → confirm → approve → publish → distribute → acknowledge) is a sequence of lifecycle phases that the status field summarises.

State Meaning Who can enter it Next possible states
draft MoM row exists; file uploaded or template started or transcript drafted. Extraction may be pending or in review. System on upload / template-start / transcript-arrival. Officer while editing. approved, revised
approved Officer has confirmed extracted action items and (if sensitive) Chair/DG has approved. Ready to publish. Officer (normal) or Chair/DG (sensitive/VIP). published (on publish)
published MoM is permanently attached to the ticket, versioned, immutable, and auto-shared to participants. Acknowledgment window open. System on publish action. revised (only via the revision path — never back to draft once published).
revised A previously published MoM has been superseded by a new version. The new version is itself published; the prior version remains immutable at its last status but is flagged as superseded. System when a new version is published over an existing one. published (the new version), or terminal as superseded.

Lifecycle phases (not persisted as separate enum values, but tracked in audit_events and mom_history):

uploaded → av_scanned → stored → ocr_pending → ocr_done → extract_pending → extracted → review_pending → confirmed → approval_pending (sensitive) → approved → published → distributed → acknowledged (per recipient).

9.2 MoM state machine

stateDiagram-v2 [*] --> draft: upload / template / transcript draft --> approved: officer confirms +<br/>approval gate cleared draft --> draft: revise during review approved --> published: publish action published --> revised: new version supersedes revised --> published: new version itself published published --> [*]: terminal (immutable, retained) revised --> [*]: prior version, retained as superseded

Written description. An MoM is born in draft — created when a file is uploaded, a manual template is started, or a transcript arrives. It stays in draft through the AV scan, storage, OCR, AI extraction, and officer-review phases; any number of revisions during this window leave it in draft. When the officer has confirmed the extracted action items (and, for sensitive/VIP tickets, the Chair/DG has approved) the MoM moves to approved. The publish action then moves it to published, which is terminal and immutable: the MoM is permanently attached to the ticket, versioned, auto-shared, and its acknowledgment window opens. A published MoM can never return to draft; the only exit is the revised path, taken when a new version is published over it — the new version goes through the same draft → approved → published flow on its own row, and the prior version is flagged as superseded but otherwise retained verbatim.

9.3 Approval gate

Whether a MoM requires approval before publication depends on the ticket's sensitivity classification. The rule is the same one that governs the proof-of-resolution gate for sensitive/VIP tickets (/specs/en/06-ticket-workflow/ §7.3).

Ticket classification Approval required before publish Approver On rejection
Normal (sensitive = false AND vip = false) No. Uploader publishes directly.
Sensitive (sensitive = true) Yes. Routes to Chair/DG approval queue. Department Chair or DG (action tier per /specs/en/06-ticket-workflow/ §6.2). MoM returns to draft with the reviewer's note; uploader edits and re-submits.
VIP (vip = true) Yes. Routes to Chair/DG approval queue. Chair/DG (same gate as sensitive). Same as sensitive.
Hearing (T4) decision Yes (regardless of sensitivity) where the hearing produces a binding decision or order. Convening authority / adjudicator. Returned for correction.

Each approval decision (approve / reject / changes-requested) writes a mom_approvals row with approver_user_id, decision, note, and decided_at, and an audit_events row. Approval routing is configurable per (department, ticket_classification) in mom_approval_config.

9.4 Publish & auto-share

On publish the system:

  1. Persists the MoM as a versioned, immutable attachment. Every revision creates a new mom_documents version row; prior versions are retained and audit-logged, never overwritten. The MoM is permanently attached to the parent ticket and is visible in the ticket timeline.
  2. Auto-shares to all participants — company reps, S&ITD facilitator, department attendees, and oversight watchers (for the audience appropriate to the meeting type; an internal MoM is not shared with the company). Each share writes a mom_distributions row. Channels:
    • Email with the MoM attached (or a secure, time-limited download link if the file is large).
    • In-app notification with a deep-link to the ticket and the MoM.
    • SMS short summary + link.
    • WhatsApp short summary + link.
    • Each channel's content is in the recipient's preferred locale (EN/UR/SD).
  3. Cross-posts to NITB e-Office (module H) if the department has e-Office integration enabled, creating the corresponding official file movement.
  4. Updates ticket-linked artefacts — confirmed action items created as sub-tasks are now visible on the ticket; the ticket status reflects the meeting outcome (§6.4).

9.5 Acknowledgment tracking

Each participant's acknowledgment is tracked against the published MoM in mom_acknowledgments:

Acknowledgment type Meaning How captured
opened Recipient opened the in-app notification or email. Pixel / in-app event.
downloaded Recipient downloaded the MoM file. Secure-link access log.
explicit_ack Recipient explicitly clicked "I acknowledge". Button in-app or in the secure-link landing page.

Non-acknowledgment past a configurable grace (default 3 calendar days) triggers a reminder through the recipient's preferred channels; a second reminder fires at 7 days; non-acknowledgment beyond a configurable final window (default 14 days) is flagged in analytics (§14) and surfaced to the S&ITD facilitator.

9.6 Action items → sub-tasks

When the officer confirms an extracted action item, the system creates a ticket_subtasks row on the parent ticket:


Before any audio or video recording of a meeting starts — physical (dedicated device) or virtual (provider-side) — the portal captures explicit consent from every attendee. Consent is stored in meeting_consent (per attendee: scope, timestamp, IP/device, withdrawal) and surfaced again at the start of the recording.

Aspect Rule
When captured At invitation acceptance (opt-in for the meeting) and re-confirmed verbally/on-screen at recording start.
Granularity Per attendee, per recording scope (audio only / audio + video / transcript).
Storage meeting_consent row per (meeting_id, user_id, scope) with timestamp and IP/device fingerprint.
Withdrawal An attendee may withdraw consent mid-meeting; the recording is paused for that attendee (provider feature-dependent) or the meeting proceeds audio-only for them. Withdrawal is audited.
Refusal If a mandatory attendee refuses consent, the organiser may either (a) proceed without recording (transcript-only or note-taker-only MoM), or (b) for hearings where recording is statutorily required, adjourn and reconvene under the appropriate protocol.
Link to recording Every meeting_recordings row references the consent set in force at recording start; a recording cannot be pulled or stored without a corresponding consent set.
Retention Recordings and transcripts are retained per the data-class retention policy in /specs/en/05-data-model/ §9 and /specs/en/11-security-compliance/; default retention for non-sensitive meeting recordings is 90 days, after which the blob is purged (metadata retained).

Consent capture is mandatory and enforced server-side: the recording-creation endpoint refuses to start without a complete consent set for all in-progress attendees.


11. Meeting States

The meetings.status enum carries four canonical states. Transitions are validated server-side and every transition emits an audit_events row.

State Meaning Who can enter it Next possible states
scheduled Meeting created, invitations sent, quorum tracked. System on create; organiser on reschedule. in_progress, cancelled
in_progress Meeting has started (organiser pressed "Start" or the system detected join at scheduled_at and quorum met). Organiser / facilitator / system auto-start. completed, cancelled
completed Meeting ended. MoM production lifecycle (§8) begins. Organiser / facilitator on "End". terminal (MoM lifecycle takes over).
cancelled Meeting cancelled before completion (organiser cancel, auto-cancel on ticket terminal, no-show). Terminal — record retained for audit. Organiser, oversight tier, or auto on ticket terminal. terminal.

11.1 Meeting state machine

stateDiagram-v2 [*] --> scheduled: create + invite scheduled --> scheduled: reschedule scheduled --> in_progress: start (quorum met) scheduled --> cancelled: organiser cancel /<br/>ticket terminal / no-show in_progress --> completed: end in_progress --> cancelled: abort completed --> [*] cancelled --> [*]

Written description. A meeting is born scheduled when the organiser creates it and invitations go out; it may be rescheduled any number of times while scheduled. When the organiser starts the meeting (and quorum is met for TRI/hearings), it moves to in_progress. On end it moves to completed, at which point the MoM lifecycle (§8) takes over. From scheduled or in_progress the meeting can be moved to cancelled — by the organiser, by an oversight tier, or automatically when the parent ticket reaches a terminal state. Both completed and cancelled are terminal for the meeting record (the record is retained for audit); only the MoM lifecycle continues from completed.


12. Hearing Outcomes

For hearings (T4) the outcome recorded by the adjudicator at meeting end has a richer vocabulary than the general TRI outcome, because a hearing can produce binding decisions:

Outcome Meaning Effect on ticket MoM
Resolved / decided The hearing reached a binding decision in favour of (or partly in favour of) the company. Ticket returns to In Progress briefly to attach the order/decision as evidence, then moves to Resolved through the proof gate. MoM must include the decision text and any order; for binding decisions the approval gate (§9.3) is mandatory.
Further action items The hearing identified specific actions required of one or more parties before a decision can be made. Action items become sub-tasks; ticket returns to In Progress. MoM records the action items and the reason they are required.
Escalate / refer upward The matter is beyond the convening authority's remit and must be referred to a higher tier or a different forum. Ticket moves to Escalated at the next tier or to Triaged for re-routing. MoM records the referral and the receiving authority.
Adjourned The hearing could not conclude (more evidence needed, party absent, legal question outstanding). Ticket stays On Hold; a follow-up hearing is scheduled. MoM records the reason for adjournment and the next date.

For non-hearing meeting types the outcome vocabulary is the general TRI set (resolved / further action items / escalate / adjourn — §6.4).


13. Notifications & Reminders

The Notification module (G) is the delivery substrate for all meeting- and MoM-related notifications. The event keys, channels, and templates are configurable in notification_templates per locale.

Event key Trigger Recipients Channels
meeting.requested TRI/hearing request created Required parties + watchers Email + in-app + SMS
meeting.scheduled Meeting confirmed (quorum met) All attendees Email + in-app + SMS + WhatsApp + .ics
meeting.rescheduled Slot changed All attendees + watchers Email + in-app + SMS + WhatsApp + .ics
meeting.cancelled Cancelled All attendees + watchers Email + in-app + SMS
meeting.reminder.24h / .1h / .at_start Per §3.4 All attendees Email / SMS+WA / in-app push
meeting.consent_required Recording consent pending Each attendee In-app + email
meeting.started Organiser pressed start All attendees + watchers In-app + SMS
meeting.completed End pressed All attendees + watchers In-app + email
mom.uploaded MoM uploaded, in review Facilitator + watchers In-app + email
mom.review_needed Extraction ready for officer review Uploading officer In-app + email
mom.approval_requested Sensitive/VIP MoM awaiting approval Chair/DG approval queue In-app + email + SMS
mom.approval_decision Approval decided Uploader + watchers In-app + email
mom.published Publish action All participants (per audience) Email + in-app + SMS + WhatsApp
mom.ack_reminder Non-ack past grace Non-acknowledging participant Email + in-app + SMS + WhatsApp
mom.ack_overdue Non-ack past final window Participant + facilitator In-app + email

All notifications are templated, multilingual (EN/UR/SD), and respect each recipient's preference center (digest mode, quiet hours) per module G.


14. Multilingual OCR & Translation

MoMs in Sindh government use are often in Urdu (the official working language), frequently in Sindhi (the provincial language), and sometimes in English. The MoM pipeline is multilingual end-to-end:


15. Data Model Recap

The Module-M tables are defined canonically in /specs/en/05-data-model/ §4.9. This section recaps the entity set, relationships, and the two schema deltas this document requires of the data model.

15.1 Entity set

Table Purpose Key relationships
meetings One row per meeting (TRI / hearing / internal / direct / site visit). 1 → N meeting_attendees; 1 → 1 mom; 1 → N meeting_recordings; N → 1 tickets.
meeting_attendees One row per invitee/attendee. N → 1 meetings; N → 1 users (internal).
mom The MoM (1:1 with meeting), versioned, multilingual, with sensitivity flag. 1 → 1 meetings; 1 → N mom_approvals; 1 → N mom_distributions; 1 → N mom_acknowledgments; 1 → 1 media_library (source).
mom_approvals Chair/DG approval decisions for sensitive/VIP MoMs. N → 1 mom; N → 1 users.
mom_distributions One row per channel share on publish. N → 1 mom; N → 1 users / recipient_address.
mom_acknowledgments One row per participant acknowledgment. N → 1 mom; N → 1 users.
meeting_recordings Recording blobs per meeting, with transcript flag. N → 1 meetings; N → 1 media_library.
extracted_action_items Structured output of MoM extraction; converts to sub-tasks. N → 1 mom; 1 → 1 ticket_subtasks (on conversion).
meeting_consent (δ-new) Per-attendee recording consent. N → 1 meetings; N → 1 users.

15.2 Schema deltas (this document requires)

  1. meetings.type enum extension. The current enum ('tri','hearing','internal') must be extended to cover all five types in §2. Proposed: ('tri','hearing','internal','company_direct','site_visit'). Add a subtype VARCHAR(48) NULL discriminator for further classification (e.g. "adjudication" under hearing, "internal_briefing" under internal). See doc 05 §4.9.
  2. meeting_consent new table. Columns: id PK, meeting_id FK, user_id FK, scope ENUM('audio','audio_video','transcript'), granted TINYINT(1), captured_at DATETIME(6), withdrawn_at DATETIME(6) NULL, device_fingerprint VARCHAR(255). Unique on (meeting_id, user_id, scope). Required by §10.

These deltas are noted here as the authoritative Module-M requirement; the canonical DDL lives in /specs/en/05-data-model/ and should be updated to match.

15.3 Entity relationships

erDiagram tickets ||--o{ meetings : "triggers" meetings ||--o{ meeting_attendees : has meetings ||--|| mom : produces meetings ||--o{ meeting_recordings : records meetings ||--o{ meeting_consent : captures mom ||--o{ mom_approvals : gated_by mom ||--o{ mom_distributions : shared_via mom ||--o{ mom_acknowledgments : acked_by mom ||--o{ extracted_action_items : yields extracted_action_items ||--o| ticket_subtasks : converts_to media_library ||--o{ mom : "source file" media_library ||--o{ meeting_recordings : "blob + transcript" users ||--o{ meeting_attendees : "internal attendee" users ||--o{ mom : "uploader / approver" users ||--o{ mom_distributions : "recipient" users ||--o{ mom_acknowledgments : "recipient" users ||--o{ meeting_consent : "consenter"

Written description. A tickets row triggers zero or more meetings. Each meeting has many attendees (internal users linked via users, external recorded by name), produces exactly one mom (1:1), may have several meeting_recordings (one per recording scope), and captures per-attendee meeting_consent for any recording. The mom is gated by zero or more mom_approvals (present only when the ticket is sensitive/VIP), shared via many mom_distributions (one per channel per recipient), and acknowledged via mom_acknowledgments. AI extraction of the MoM's source yields many extracted_action_items, each of which converts to at most one ticket_subtask on officer confirmation. All binary content (MoM source file, recording blob, recording transcript) is stored as media_library rows in MinIO with encryption at rest, referenced by foreign key from the content tables.


16. Analytics

Module-M analytics feed the Analytics module (I) and the dashboards defined in /specs/en/17-analytics-kpis/. The metric families specific to meetings and MoM:

Family Metrics Audience
Meetings held Count by type, department, modality, outcome; month-over-month trend; physical-vs-virtual split; provider usage share. S&ITD leadership, department heads.
TRI effectiveness % of TRI meetings whose outcome was resolved; average time from TRI request to meeting; % of tickets requiring >1 TRI. S&ITD facilitators, oversight tiers.
MoM turnaround Median time from meeting completed to MoM published; % published within target (default 2 business days); % overdue. Department heads, S&ITD.
Action-item completion % of extracted action items completed by due date; average slip; sub-task resolution time. Department heads, facilitators.
Acknowledgment Acknowledgment rate within grace; final-window non-ack rate by department. S&ITD facilitators.
Recording & consent % of meetings recorded; consent refusal rate; recording retention compliance. Security/governance reviewers.
AI extraction quality Officer edit rate on extracted action items; extraction precision/recall vs. golden set (per /specs/en/07-ai-ocr-spec/ §4.11 success metrics). AI service owners.
Cost AI cost per MoM (extraction + translation); provider cost per virtual meeting. MAAHIR operations.

All metrics are sliced by department, category, locale, and time window, and are exported via the Analytics module's standard export channels (PDF/Excel/CSV) and surfaced in scheduled digests.


17. Functional Requirements

ID Requirement MoSCoW
FR-MTG-001 The system SHALL allow a meeting of any of the five types in §2 to be created and attached to a ticket. Must
FR-MTG-002 The system SHALL auto-move the parent ticket to On Hold when a TRI is requested and back to its prior working state on outcome. Must
FR-MTG-003 The system SHALL run conflict, quorum, holiday, and weekend checks on every scheduling attempt and offer valid alternatives on conflict. Must
FR-MTG-004 The system SHALL support physical, virtual, and hybrid modality per meeting, with location_address and video_provider/join_url enforced accordingly. Must
FR-MTG-005 The system SHALL integrate Zoom, Google Meet, and Microsoft Teams behind a stable interface (§4.2) for create/update/cancel, join_url generation, recording pull, and transcript pull. Must
FR-MTG-006 The system SHALL auto-draft a meeting agenda from ticket history and uploads using the AI summary capability, with officer review/edit before invitations. Must
FR-MTG-007 The system SHALL enforce per-type quorum (§7.4) and prevent non-quorate TRI/hearing meetings from recording binding decisions. Must
FR-MTG-008 The system SHALL support the upload-first MoM path: upload → AV scan → encrypt+store → OCR (if scanned) → AI extraction → officer review → confirm. Must
FR-MTG-009 The system SHALL convert each confirmed extracted action item into a ticket_subtasks row with owner, due date, priority, and SLA slice. Must
FR-MTG-010 The system SHALL require Chair/DG approval before publishing the MoM of a sensitive or VIP ticket, and a hearing's binding decision regardless of sensitivity. Must
FR-MTG-011 The system SHALL auto-share a published MoM to all participants via email + in-app + SMS + WhatsApp in the recipient's preferred locale, with secure link/attachment. Must
FR-MTG-012 The system SHALL track per-recipient acknowledgment (opened / downloaded / explicit_ack) and send reminders past the grace window. Must
FR-MTG-013 The system SHALL capture explicit recording consent before any recording starts, store it in meeting_consent, and block recording without a complete consent set. Must
FR-MTG-014 The system SHALL keep every published MoM permanently attached, versioned, immutable, and audit-logged; prior versions retained on revision. Must
FR-MTG-015 The system SHALL perform multilingual OCR (EN/UR/Sindhi) on scanned MoMs and produce parallel translations in mom.body_en/ur/sd. Must
FR-MTG-016 The system SHALL cross-post a published MoM to NITB e-Office where the department has e-Office integration enabled. Should
FR-MTG-017 The system SHALL provide manual template entry and AI transcription MoM modes behind the mom.manual_entry and mom.transcription feature flags. Should
FR-MTG-018 The system SHALL record one of the four hearing outcomes (resolved/decided, further action items, escalate/refer, adjourned) per §12. Must
FR-MTG-019 The system SHALL send the notification matrix in §13 with multilingual templates through module G, respecting each recipient's preference center. Must
FR-MTG-020 The system SHALL expose the analytics families in §16 via the Analytics module's standard dashboards and exports. Should

18. Non-Functional Requirements

ID Requirement MoSCoW
NFR-MTG-001 Provider join_url generation latency ≤ 3 s P95. Must
NFR-MTG-002 Recording pull from provider (post-meeting) completes within 15 minutes of meeting end P95. Should
NFR-MTG-003 OCR + AI extraction completes within 5 minutes per MoM P95 for a 10-page document. Must
NFR-MTG-004 Publish + auto-share fan-out completes within 60 seconds P95 for up to 50 recipients × 4 channels. Must
NFR-MTG-005 Every meeting and MoM transition writes an immutable audit_events row; audit retention per /specs/en/05-data-model/ §9. Must
NFR-MTG-006 MoM source files and recordings are encrypted at rest (AES-256) and access-logged on every download. Must
NFR-MTG-007 If every AI engine and every video provider is unavailable, the portal SHALL still allow manual MoM template entry and physical meetings (degrade gracefully, never block — see /specs/en/07-ai-ocr-spec/ P9). Must
NFR-MTG-008 Recording consent refusal or absence SHALL fail recording closed (no recording stored without consent). Must
NFR-MTG-009 WCAG 2.1 AA conformance across EN/UR/SD for the scheduling UI, the MoM review side-by-side, and the acknowledgment surfaces. Must

19. User Stories

US-MTG-001 — Request a TRI meeting from a stalled ticket [Must]

As a Company Representative (Primary/Admin) I want to click "Request TRI meeting" on my stalled ticket and have S&ITD convene Company + S&ITD + Department in one meeting So that my issue is unblocked without me having to chase each party separately.

Acceptance Criteria (Gherkin)

Scenario: Company requests TRI on an escalated ticket
  Given a ticket owned by me is in status Escalated at tier 2
  And I am the Primary Authorized Rep for the filing company
  When I click "Request TRI meeting" and confirm
  Then a meetings row of type "tri" is created and linked to the ticket
  And the ticket status moves to On Hold with reason "TRI meeting requested"
  And the S&ITD facilitator is notified to convene
  And an audit event "meeting.requested" is recorded

Scenario: Sensitive ticket requires convening approval
  Given the ticket is flagged sensitive = true
  When I request a TRI meeting
  Then the request routes to the Chair/DG approval queue
  And no invitations are sent until approval is granted

US-MTG-002 — Upload the MoM in my department's own format [Must]

As a Department Officer (note-taker) I want to upload the MoM as a PDF/Word/scan in my department's own template So that I do not have to re-format our official minutes into a portal template.

Acceptance Criteria (Gherkin)

Scenario: Successful upload of a scanned MoM
  Given a meeting of any type has status completed and no MoM yet
  When I upload a scanned PDF of the department's MoM
  Then ClamAV scans the file and, on clean, encrypts and stores it
  And a mom row is created with status draft and source_media_id set
  And OCR runs in EN/UR/Sindhi producing a text layer
  And the AI extracts summary, action items, decisions, and attendees
  And extracted_action_items rows are created for officer review

US-MTG-003 — Confirm extracted action items into sub-tasks [Must]

As a Department Officer I want to review the AI-extracted action items side-by-side with the original MoM and confirm the correct ones So that only accurate commitments become ticket sub-tasks.

Acceptance Criteria (Gherkin)

Scenario: Confirm a correctly extracted action item
  Given an extracted_action_item exists with owner "Company Primary Rep" and due date "2026-08-15"
  When I review it side-by-side, correct a typo, and click Confirm
  Then a ticket_subtask is created on the parent ticket with the corrected owner, due date, priority
  And the extracted_action_item.status flips to "converted" and subtask_id is set
  And an audit event records the confirmation

Scenario: Reject a false-positive extraction
  Given an extracted_action_item is in fact a general statement, not a commitment
  When I delete it from the review list
  Then no sub-task is created
  And the item is marked rejected with the officer as actor

US-MTG-004 — Publish a sensitive MoM with Chair/DG approval [Must]

As a S&ITD Facilitator I want the MoM of a sensitive ticket to require Chair/DG approval before it is shared So that sensitive content is reviewed by an accountable authority before it reaches the company.

Acceptance Criteria (Gherkin)

Scenario: Sensitive MoM routed to approval queue
  Given the parent ticket is sensitive = true
  And the officer has confirmed all extracted action items
  When the MoM is submitted for publish
  Then its status stays draft and a mom_approvals row is created pending
  And the Chair/DG approval queue is notified
  And no auto-share occurs

Scenario: Approval granted then published
  Given a sensitive MoM is pending approval
  When the Chair approves it
  Then the mom.status moves to approved then published
  And auto-share fans out to all participants per §9.4
  And mom_distributions rows are written for each channel/recipient

US-MTG-005 — Receive and acknowledge the MoM in my language [Must]

As a Company Representative I want to receive the published MoM in my preferred language and acknowledge it So that I have an authoritative record of what was agreed and the system tracks that I received it.

Acceptance Criteria (Gherkin)

Scenario: Acknowledge a published MoM
  Given a MoM for a meeting I attended has been published
  When I receive the in-app notification and click through to the MoM
  Then the MoM is rendered in my preferred locale (EN/UR/SD)
  And my open is recorded as an acknowledgment of type "opened"
  And when I click "I acknowledge" an "explicit_ack" row is written
  And no further reminders are sent to me

20. Test Cases (reference)

ID Covers Description
TC-MTG-001-01 FR-MTG-002 TRI request moves ticket to On Hold and back to working state on resolved outcome.
TC-MTG-004-01 FR-MTG-004 Hybrid modality requires both location_address and video_provider/join_url.
TC-MTG-005-01 FR-MTG-005 Fallback from primary to secondary video provider on API outage.
TC-MTG-008-01 FR-MTG-008 Upload-first pipeline: infected file rejected; clean file stored; OCR + extraction run.
TC-MTG-009-01 FR-MTG-009 Confirmed action item creates a sub-task and back-links extracted_action_items.subtask_id.
TC-MTG-010-01 FR-MTG-010 Sensitive MoM cannot be published without a mom_approvals row.
TC-MTG-013-01 FR-MTG-013 Recording start refused when any in-progress attendee lacks consent.
TC-MTG-014-01 FR-MTG-014 Published MoM immutable; revision creates a new version row; prior version retained.

21. Feature Flags

Flag Default Effect when on Effect when off
mtg.enabled true Module M fully active. All meeting/MoM endpoints return 410 Gone; tickets still work without meetings.
mtg.tri_auto true SLA-engine auto-TRI trigger active. TRI can be requested only manually.
mtg.provider.zoom / .meet / .teams per dept That provider selectable per meeting. Provider hidden from organiser.
mtg.recording true Recording + consent flow active. No recording; transcript-only MoM mode also disabled.
mtg.eoffice_crosspost per dept MoM cross-posts to NITB e-Office on publish. No cross-post.
mom.manual_entry false Officer can fill the portal MoM template instead of uploading. Upload-first enforced.
mom.transcription false AI transcription MoM mode available. Upload-first enforced.
mom.multilingual_ocr true OCR runs across EN/UR/Sindhi. OCR disabled; only born-digital files extractable.
mom.approval_gate true Sensitive/VIP MoMs require Chair/DG approval. Uploader publishes directly for all tickets (override; audit-logged).
mom.ack_reminders true Non-ack reminder + overdue flows active. Acknowledgment tracking only; no reminders.

Flags are stored in feature_flags (see /specs/en/05-data-model/ §4) and administered by Super Admin per (department, environment) per module Q.


22. Configuration Matrix

Config table Scope Purpose
meeting_reminder_config (dept_id, type) Reminder cadence and channels per meeting type.
meeting_quorum_config (dept_id, type) Quorum rules per meeting type.
mom_approval_config (dept_id, ticket_classification) Approval routing and approver role per classification.
mom_ack_config (dept_id) Acknowledgment grace, second reminder, final window.
meeting_provider_config (dept_id, provider) Provider credentials + primary/secondary selection.
meeting_retention_config (dept_id, classification) Retention period for recordings and transcripts.

23. Cross-References


24. Open Questions

# Question Default assumption (until resolved)
1 Should a TRI on a multi-department ticket require all concerned departments' physical presence, or is virtual attendance sufficient for quorum? Virtual attendance counts toward quorum; one representative per department required.
2 Should the MoM approval gate for hearings be configurable to a different approver than the convening authority? Default = convening authority; configurable per mom_approval_config.
3 Default retention for non-sensitive meeting recordings — 90 days vs 180 days? 90 days; longer retention configurable per meeting_retention_config.
4 Should the AI transcription MoM mode be enabled by default for virtual meetings on Zoom/Meet where transcripts are auto-generated by the provider? Off by default; opt-in per department via mom.transcription flag.
5 Should the portal expose a public (anonymous) hearing schedule, or keep all hearings internal? Internal-only by default; public exposure deferred to a future transparency phase.