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

UX Sitemap & Flows

The information architecture, sitemap, role-scoped navigation, key user journeys, and wireframe briefs for every screen of the Sindh IT Portal — Facilitation Desk (SITP). Covers public site, authenticated workspaces per role, mobile-first/PWA behaviour, RTL/multilingual, and accessibility.

Field Value
Doc ID 10
Status Draft
Owner S&ITD / MAAHIR
Languages EN (master) · UR · SD
Applies to modules A. Public Site (PUB), B. Ticketing (TKT), C. Org & RBAC (ORG), I. Analytics (ANL), M. Hearings+TRI+MoM (MTG), Q. Feature Flags (FFG)
Depends on /specs/en/04-roles-permissions/ · /specs/en/06-ticket-workflow/ · /specs/en/16-branding-design-system/ · /specs/en/17-analytics-kpis/ · /specs/en/21-mom-meetings/ · /specs/en/09-i18n-localization/
Cross-refs /specs/en/01-prd/ · /specs/en/02-functional-reqs/ · /specs/en/03-non-functional-reqs/ · /specs/en/19-multichannel-intake/

1. Overview & Scope

This document defines what users see, where they go, and how they move through SITP. It is the UX counterpart to the role model in /specs/en/04-roles-permissions/ and the ticket lifecycle in /specs/en/06-ticket-workflow/. It contains:

The visual identity (Ajrak palette, typography, components) lives in /specs/en/16-branding-design-system/; this document references it but does not duplicate it.


2. UX Principles

These principles are binding on every screen. They are derived from the locked decisions in _context.md §2, §7 and the usability targets in /specs/en/03-non-functional-reqs/.

2.1 Progressive disclosure

Show only what the current task needs; reveal advanced options on demand. The file-ticket wizard exposes conditional fields one category at a time; the ticket-detail page hides internal notes, audit logs, and oversight actions behind expandable panels unless the role is entitled. Configuration screens reveal secondary controls only after a primary choice is made. This keeps the default view scannable while preserving full power for expert users.

2.2 Three-click rule for the company journey

The primary company journey — from the public home page to a submitted ticket with a tracking ID — must complete in three clicks or fewer for a returning, logged-in rep:

  1. Click 1: "File a ticket" (home hero or top utility bar).
  2. Click 2: "Submit" in the file-ticket wizard (category, details, attach).
  3. Click 3: "View ticket" from the confirmation screen.

First-time registration is a separate, longer flow (§6.1), but the filing step itself stays within three clicks once authenticated. Track ID lookup from the home page is a single action (one click + one paste). Navigation depth anywhere in the authenticated area must not exceed three levels before the user reaches a working surface (dashboard, ticket, or form).

2.3 Role-scoped landing and navigation

Every account lands on a dashboard scoped to its role and sees only the navigation its capabilities permit (see /specs/en/04-roles-permissions/ §16). A Filer never sees staff-management screens; a Viewer never sees configuration; an Officer never sees Officials CMS. Navigation is generated declaratively from the capabilities the user actually holds after per-user overrides and ABAC gates, so a granted override surfaces its nav entry immediately and a revoked capability disappears.

2.4 Mobile-first and PWA

SITP is built mobile-first as a Progressive Web App (PWA): installable, offline-capable for drafts and read-only ticket views, and the primary channel for many company reps and field officers. Touch targets are at least 44×44 px. Layouts are designed for the smallest active viewport first and progressively enhance at larger breakpoints (§9). The future React Native (Expo) mobile app reuses the same API contract and navigation model.

2.5 Accessibility — WCAG 2.1 AA

All screens meet WCAG 2.1 AA across English, Urdu, and Sindhi (see _context.md §2 and /specs/en/09-i18n-localization/). Concretely: semantic landmarks, skip-to-content links, full keyboard operability with visible focus, colour-contrast ratios at AA minimums, no colour-only meaning, ARIA where native semantics are insufficient, accessible names on all interactive elements, and a data-table alternative for every chart. Motion respects prefers-reduced-motion. A user-selectable high-contrast mode and font-size control are exposed in the top utility bar.

2.6 Right-to-left (RTL) and multilingual

Urdu and Sindhi render right-to-left. Direction is driven by the Docusaurus/Next.js locale; no inline direction hacks. Layouts are mirror-symmetric: side rails swap sides, icon arrows reverse, the AI chatbot launcher moves to the bottom-left in RTL. All copy uses the approved glossary terms (_glossary.md). A language switcher is always visible in the top utility bar and persists per user.

2.7 Dual calendar

Every date displayed to a user shows both Gregorian and Islamic (Hijri) forms (gov convention; _context.md §2). Date pickers default to Gregorian input with a Hijri companion; SLA chips show business-day counts.

2.8 Trust, transparency, and the "single window" promise

The interface constantly reinforces that SITP is the single window owned by S&ITD: the operator line ("Operated by MAAHIR · Powered by Server4Sale") appears in the footer; the public transparency dashboard is one click from the home page; tracking IDs are meaningful (SITP-YYYY-<DEPT>-<NNNNNN>); and resolution proof is visible to the filer. Empty and error states are honest and recoverable (§10).


3. Information Architecture (Sitemap)

3.1 Public site (module A — PUB)

The public site is the marketing, onboarding, and self-service layer. It is fully indexable (SEO, hreflang for EN/UR/SD) and requires no login except where noted.

# Section Pages
P1 Home / landing Hero, quick actions, live transparency counters, featured officials, news carousel.
P2 About / Mandate SITP purpose, S&ITD ownership, PPP model (MAAHIR/Server4Sale), legal mandate, MoUs.
P3 Departments Searchable directory of onboarded departments + sections + service catalog links.
P4 Services / Service catalog Browseable catalog of services per department → drives the dynamic intake form.
P5 How it works Step-by-step onboarding wizard explainer (register → file → track → resolve).
P6 Register / Login Entity-type chooser (5 types) → dynamic registration form; Keycloak OIDC + 2FA.
P7 File a complaint Entry to the file-ticket wizard; routes guest to register or to citizen intake.
P8 Track a ticket Single-field lookup by SITP-YYYY-<DEPT>-<NNNNNN>; public status summary.
P9 Knowledge Base / Help Center Articles, downloadable forms, versioned SOPs, AI semantic search.
P10 News / Announcements / Circulars Content portal (module N).
P11 Officials Minister/SACM, Secretary, DG profiles from Officials CMS (module P).
P12 Transparency Dashboard Public analytics dashboard (module I).
P13 RTI information Sindh RTI Act 2016 deadlines and how to file an RTI request.
P14 Whistleblower / Anonymous intake Restricted-visibility intake channel; no login.
P15 Contact / Help Toll-free IVR, WhatsApp, email, walk-in office details.
Overlay AI chatbot Floating launcher (public + authenticated); deflection to KB.

3.2 Authenticated areas (modules B, C, I, M, Q)

After login, the user is routed to a role-scoped landing dashboard. Shared elements: top utility bar (language, notifications, preferences, profile, 2FA status), in-app messaging (module F), notification centre (module G), and a global ticket/rep search.

Area Owner roles
Company workspace Primary Rep, Admin Rep, Filer, Viewer, Notifications-only
S&ITD facilitation workspace S&ITD Facilitation Officer / Staff
Officer workspace Department Officer / Staff / POC
Department admin console Department Admin
Oversight dashboards DG/Director, Department Secretary, Minister/SACM
Read-only audit explorer Read-only Auditor
Platform admin console Super Admin (S&ITD)
Citizen workspace Citizen
Anonymous status viewer Anonymous / Whistleblower (token-based, no login)

3.3 Sitemap diagram

flowchart TD ROOT["Sindh IT Portal — Facilitation Desk"] subgraph PUB["Public site (no login)"] direction TB Home["Home"] About["About / Mandate"] Depts["Departments"] Services["Services / Catalog"] How["How it works"] Reg["Register / Login"] FilePub["File a complaint"] Track["Track a ticket"] KB["Knowledge Base"] News["News / Circulars"] Officials["Officials"] Transp["Transparency Dashboard"] RTI["RTI info"] WB["Whistleblower intake"] Contact["Contact"] end ROOT --> PUB ROOT --> AUTH["Authenticated area<br/>(role-scoped landing)"] Reg --> AUTH FilePub --> AUTH subgraph AUTH_SUB["Per-role workspaces"] direction TB Comp["Company workspace"] Fac["S&ITD facilitation"] Off["Officer workspace"] DeptAdmin["Dept admin console"] Overs["Oversight dashboards"] AuditExp["Audit explorer"] Super["Platform admin console"] Citz["Citizen workspace"] end AUTH --> AUTH_SUB WB --> AnonView["Anonymous status viewer<br/>(token, no login)"] PUB -.-> BOT["AI chatbot overlay"] AUTH_SUB -.-> BOT

Written description. The sitemap has two top-level branches under the portal root: the public site (no login) and the authenticated area. The public site hosts informational pages (Home, About, Departments, Services, How it works), the main entry points (Register/Login, File a complaint, Track a ticket), the self-service content (Knowledge Base, News, Officials, Transparency Dashboard, RTI info, Contact), and the special whistleblower intake. Register/Login and File a complaint both lead into the authenticated area, which fans out into per-role workspaces: Company, S&ITD facilitation, Officer, Department admin, Oversight dashboards, Audit explorer, Platform admin console, and Citizen. The whistleblower intake bypasses login and routes to a token-based anonymous status viewer. The AI chatbot overlay is reachable from both the public site and the authenticated area.


4. Page Inventory

Each page mapped to the role(s) that can reach it and its purpose. Role codes follow /specs/en/04-roles-permissions/ §8 (SA = Super Admin, DA = Department Admin, OF = Officer, DG = DG, SEC = Secretary, MIN = Minister, FO = S&ITD Facilitation Officer, PR = Primary Rep, AR = Admin Rep, FI = Filer, VI = Viewer, CT = Citizen, AN = Anonymous, AU = Read-only Auditor). Public = no login.

4.1 Public pages

Page Role(s) Purpose
Home Public Single-window entry; primary CTAs; live transparency counters.
About / Mandate Public Establish S&ITD ownership, PPP model, legal mandate.
Departments Public Discover onboarded departments and their services.
Services / Catalog Public Browse services that drive the dynamic intake form.
How it works Public Explain register → file → track → resolve.
Register Public (becomes PR/AR) Entity-type chooser + dynamic registration form.
Login All authenticated Keycloak OIDC + 2FA entry.
File a complaint (entry) Public → FI/PR/CT Routes guest to register or citizen intake.
Track a ticket Public Lookup by tracking ID; public status summary.
Knowledge Base Public Articles, forms, SOPs, AI semantic search.
News / Circulars Public Announcements and versioned documents.
Officials Public Minister/Secretary/DG profiles from CMS.
Transparency Dashboard Public Open data on resolution performance.
RTI info Public RTI Act 2016 deadlines and filing.
Whistleblower intake Public (AN) Anonymous/confidential reporting.
Contact / Help Public Channels and office locations.

4.2 Authenticated pages

Page Role(s) Purpose
Company workspace home PR, AR, VI Company ticket overview, drafts, alerts.
File-ticket wizard FI, PR, AR, CT Dynamic conditional intake; AI assist; draft-save.
My tickets (company) PR, AR, FI, VI Filterable list of company tickets.
Ticket detail PR, AR, FI, VI (company side); OF, DG, SEC, MIN, FO, SA (gov side, ABAC) Conversation, attachments, SLA, actions, audit.
Company profile PR, AR (◐) Entity details, verification badge, re-attest.
Representatives management PR, AR (◐) Invite/manage reps; transfer Primary.
MoM viewer (company) PR, AR, FI, VI View/acknowledge minutes for company tickets.
Appeals (file/manage) PR, AR, FI, CT CPGRAMS-style appeal within window.
Company analytics PR, AR, VI (◐) Company-scoped charts and exports.
S&ITD triage inbox FO, SA Queue of New tickets; confirm/override routing.
Officer workspace / My queue OF Assigned tickets, sub-tasks, drafts, KB.
Officer ticket detail OF (+ oversight as ABAC) Resolve with proof; internal notes; TRI request.
Sub-tasks OF, FO, DA Manage parent/child ticket relationships.
Department admin console DA Staff, sub-departments, SLA, KB, analytics, audit.
Staff management DA, SA Invite/activate/deactivate officers; certification status.
Oversight dashboard DG, SEC, MIN KPIs, escalation tiers, directives, GIS heatmap.
Audit explorer AU, SA (◐ DA/DG/SEC) Immutable audit log search and export.
Platform admin console SA Platform-wide configuration.
Departments editor SA Create/edit departments and nested sub-departments.
Officials CMS SA Minister/Secretary/DG records with effective dates.
Integrations config SA SECP/NADRA/FBR/SRB/PSEB/e-Office connectors.
AI engines config SA Pluggable LLM + OCR engine selection and testing.
Feature flags SA (◐ DA) Toggle any capability per dept/env.
Comms config SA (◐ DA) SMTP/SMS/WhatsApp templates and providers.
Holiday calendar SA (◐ DA) Sindh public holidays; Hijri resolution.
TRI meeting page FO, OF, PR, AR (+ oversight) Schedule/hold tripartite meeting; capture consent.
MoM upload + viewer (gov) OF, FO, DA (+ DG approve) Upload, OCR, AI-extract, confirm sub-tasks, publish.
Analytics dashboards All roles (scoped) Role-scoped charts; Metabase-embedded + custom.
Internal messaging All gov roles (◐) DMs, groups, channels (module F).
Notification centre All roles Preferences, digests, quiet hours, two-way replies.
Profile / preferences All roles Account, 2FA, language, accessibility, notification prefs.
Citizen workspace CT File, track, reopen, withdraw, appeal own complaints.
Anonymous status viewer AN Token-based read-only status (no login).

5. Role-Based Navigation and Landing

The role determines the landing dashboard and the primary navigation. The summary below extends /specs/en/04-roles-permissions/ §16 with concrete nav items. Navigation is generated from the user's effective capabilities (after overrides and ABAC), so the lists below are the defaults for each template.

Role Default landing Primary navigation
Super Admin (SA) Platform admin console Departments · Officials CMS · Integrations · AI Engines · Feature Flags · Comms · Holiday Calendar · Audit · Analytics
Department Admin (DA) Department admin console Staff · Sub-departments · SLA · Escalation · KB · Notification templates · Analytics · Audit
Officer / Staff (OF) My assigned tickets My Queue · Sub-tasks · Drafts · TRI · MoM Upload · KB · Analytics · Messages
DG / Director (DG) Department oversight dashboard Department · Escalations · Directives · TRI/MoM approvals · Analytics
Secretary (SEC) Department oversight dashboard Department · Escalations · Directives · VIP approvals · Analytics
Minister / SACM (MIN) Cross-department oversight dashboard Overview · Directives · Escalations · Officials · Analytics
Company Primary Rep (PR) Company workspace Tickets · File · Drafts · Profile · Representatives · MoM · Appeals · Analytics
Filer (FI) New ticket / My tickets File · My Tickets · Drafts · Help
Citizen (CT) My complaints File · My Complaints · Track · Help

Supplementary roles (not in the nine required above but present in the system):

Role Default landing Primary navigation
S&ITD Facilitation Officer (FO) Facilitation triage inbox Triage · TRI · MoM · Companies · Messages
Admin Representative (AR) Company workspace (as Primary, minus transfer/re-attest)
Viewer (VI) Company tickets (read-only) Tickets · Analytics
Notifications-only Notification centre Notifications
Read-only Auditor (AU) Audit explorer Audit · Analytics · Exports

6. Key User Journeys

Eight journeys are rendered as Mermaid flowcharts, each followed by a written description. They map directly to the workflow rules in /specs/en/06-ticket-workflow/ and the roles in /specs/en/04-roles-permissions/.

6.1 Journey 1 — Company registers and files first ticket

flowchart TD Landing(["Public home"]) --> HaveAcct{"Have an<br/>account?"} HaveAcct -- "No" --> EntityType["Choose entity type<br/>(SECP / Sole / Freelancer /<br/>Foreign / Startup)"] HaveAcct -- "Yes" --> Login["Login + 2FA"] EntityType --> DynoForm["Dynamic registration form<br/>by entity type"] DynoForm --> Primary["Mandatory: name<br/>Primary Authorized Rep<br/>+ CNIC + domain email"] Primary --> SubmitReg(["Submit"]) SubmitReg --> Provisional[("Provisional account<br/>instant — file-first")] Provisional --> TwoFA["Verify 2FA / email"] Provisional --> BgChecks[("Background checks run<br/>in parallel:<br/>SECP / FBR / SRB / PSEB / NADRA")] TwoFA --> Workspace(["Company workspace"]) Workspace --> Wizard["File-ticket wizard<br/>(Step 1 of 5)"] Wizard --> CatStep["Pick category —<br/>AI suggests dept + similar ticket"] CatStep --> DynoFields["Dynamic conditional fields<br/>per category"] DynoFields --> Attach["Attachments: AV scan + encrypt"] Attach --> Review["Review + save draft option"] Review --> Submit2(["Submit"]) Submit2 --> TrackID[("Tracking ID allocated<br/>SITP-YYYY-DEPT-NNNNNN")] TrackID --> NewState(["Status = New<br/>confirmation EN/UR/SD"]) BgChecks -. "Verified badge<br/>or hold+appeal" .-> Workspace

Written description. A company visitor lands on the public home page and chooses to register. The registration form is dynamic: the chosen entity type (SECP company, sole proprietor, freelancer, foreign branch, or early startup) drives which fields and verification sources appear. Naming a Primary Authorized Representative (with CNIC and domain email) is mandatory and cannot be skipped. On submission the account is created instantly in a Provisional state — this is the file-first model — and background verification runs in parallel against SECP, FBR, SRB, PSEB, and NADRA. After verifying 2FA/email, the rep lands in the company workspace and opens the file-ticket wizard. The wizard's first step offers an AI-suggested category, destination department, and similar-ticket deflection; selecting a category dynamically renders the conditional fields for that category (e.g. unpaid-dues fields differ from SECP name-conflict fields). After attachments are AV-scanned and encrypted, the rep reviews the entry (with an option to save a draft), submits, and a tracking ID is atomically allocated in the SITP-YYYY-<DEPT>-<NNNNNN> format. The ticket enters New, a multilingual confirmation is sent, and the parallel background checks eventually grant a Verified badge (or hold the account for appeal if they fail).

6.2 Journey 2 — Officer triages and resolves with AI assist + proof gate

flowchart TD NewState(["Status = New"]) --> TriageQueue["S&ITD triage inbox"] TriageQueue --> AITriage["AI assist:<br/>summary + category confirm +<br/>urgency/sentiment + draft routing"] AITriage --> Confirm["Facilitator confirms/overrides<br/>category, priority, SLA,<br/>dept/section, sensitivity"] Confirm --> Triaged(["Status = Triaged"]) Triaged --> DeptQueue["Department section queue"] DeptQueue --> Assign["Section head or AI auto-router<br/>assigns officer"] Assign --> Assigned(["Status = Assigned"]) Assigned --> OffWS["Officer workspace"] OffWS --> AIReply["AI assist:<br/>draft reply + similar KB article +<br/>PII redaction on free text"] AIReply --> FirstResp["Send first substantive response"] FirstResp --> InProgress(["Status = In Progress<br/>FRT met"]) InProgress --> WorkCycle["Work cycle:<br/>In Progress <-> Awaiting Parties"] WorkCycle --> Ready["Mark ready to resolve"] Ready --> Proof{"Proof gate:<br/>evidence + note?"} Proof -- "Missing" --> WorkCycle Proof -- "Present" --> Sensitive{"Sensitive / VIP?"} Sensitive -- "No" --> Resolved(["Status = Resolved"]) Sensitive -- "Yes" --> Chair["Chair / DG approval queue"] Chair --> Resolved Resolved --> CSAT[("CSAT window:<br/>accept / reopen / auto-close")]

Written description. A newly filed ticket lands in the S&ITD triage inbox, where the facilitator is supported by AI: an auto-summary, a category confirmation, an urgency/sentiment hint, and a draft routing suggestion. The facilitator confirms or overrides category, priority, SLA, destination department/section, and the sensitivity/VIP flag, moving the ticket to Triaged and into the destination department's section queue. A section head or the AI auto-router assigns an officer, pushing the ticket to Assigned. In the officer workspace, AI again assists — drafting a reply, suggesting a relevant KB article, and redacting PII from free text. The officer sends the first substantive response, satisfying FRT and flipping the ticket to In Progress. Work alternates between In Progress and Awaiting Parties as the company supplies information (each pause/resume stops and starts the SLA clock). When the officer marks the ticket ready to resolve, the proof gate checks for at least one evidence attachment and a resolution note; if missing, the action is blocked and the ticket returns to the work cycle. For sensitive or VIP tickets the resolution package additionally routes to the Chair/DG approval queue. With the gate cleared, the ticket becomes Resolved and the CSAT window opens for company accept, reopen, or auto-close.

6.3 Journey 3 — Escalation to DG / Secretary

flowchart TD Breach(["Resolution SLA breaches"]) --> Esc(["Status = Escalated<br/>(working context preserved)"]) Esc --> Tier1["Tier 1: +2 business days<br/>DG notified + added as watcher"] Tier1 --> Powers1{"DG action<br/>powers ON?"} Powers1 -- "Yes" --> Dir1["Reassign / override SLA /<br/>force-resolve / directive"] Powers1 -- "No, or still unresolved" --> Wait1["+5 more business days"] Wait1 --> Tier2["Tier 2: Secretary notified + watcher<br/>+ WhatsApp channel"] Tier2 --> Powers2{"Secretary action<br/>powers ON?"} Powers2 -- "Yes" --> Dir2["Directive / override SLA /<br/>force-resolve / reassign"] Powers2 -- "No, or still unresolved" --> Wait2["+10 more business days"] Wait2 --> Tier3["Tier 3: SACM + S&ITD Secretary<br/>+ formal directive letter"] Tier3 --> MinDir["Minister directive ON by default"] Dir1 --> DeEsc(["De-escalate -> In Progress"]) Dir2 --> DeEsc MinDir --> DeEsc DeEsc --> OfficerResolves["Officer resumes; resolves with proof"]

Written description. When a ticket's resolution SLA breaches, the SLA engine flips the ticket to Escalated while preserving the underlying working state (so officer context is never lost). At Tier 1 (two unresolved business days after breach), the department's DG/Director is notified and added as a watcher; if the department has configured DG action powers, the DG may reassign, override the SLA, force-resolve, or issue a directive. If the ticket remains unresolved for five more business days, Tier 2 pulls in the Department Secretary — with the same optional action powers, plus WhatsApp-channel notifications. After ten more unresolved business days, Tier 3 notifies the SACM (S&IT) and the S&ITD Secretary, accompanied by a formal directive letter; the Minister's directive power is on by default at this tier. Any directive or action from an empowered oversight tier de-escalates the ticket back to In Progress, where the officer resumes and ultimately resolves it through the proof gate. All escalation events, overrides, and directives are audit-logged. The 2/5/10-day ladder is configurable per department and category (see /specs/en/06-ticket-workflow/ §6).

6.4 Journey 4 — TRI meeting + MoM upload and share

flowchart TD Stall(["Ticket stalled /<br/>escalated tier >= 2"]) --> Req["Request TRI:<br/>company / officer / facilitator / auto"] Req --> OnHold(["Status = On Hold<br/>SLA clock paused"]) OnHold --> Agenda["AI auto-drafts agenda<br/>from ticket history + uploads"] Agenda --> ReviewAg["Facilitator reviews / edits agenda"] ReviewAg --> Modality["Choose modality:<br/>physical / virtual / hybrid"] Modality --> Invite["Send multilingual invites<br/>+ capture recording consent"] Invite --> Held(["TRI meeting held<br/>(3 parties)"]) Held --> Outcome{"Outcome"} Outcome -- "Resolved" --> Upload["Officer uploads MoM<br/>(own format: PDF/Word/images)"] Outcome -- "Action items" --> Upload Outcome -- "Escalate" --> EscNext(["Escalate to next tier<br/>with meeting record"]) Upload --> AV["ClamAV scan + encrypt + store"] AV --> OCR["OCR (multilingual EN/UR/SD)<br/>if scanned"] OCR --> AIEx["AI: summary + action items<br/>+ decisions + attendees + translation"] AIEx --> SideBy["Officer reviews side-by-side<br/>confirms action items -> sub-tasks"] SideBy --> Sens{"Sensitive / VIP?"} Sens -- "No" --> Publish["Publish directly"] Sens -- "Yes" --> ChairApp["Chair / DG approval"] ChairApp --> Publish Publish --> Share["Auto-share participants:<br/>email + in-app + SMS/WhatsApp<br/>acknowledgment tracked"] Publish --> EOffice["Cross-post NITB e-Office<br/>if enabled for dept"]

Written description. When a ticket stalls or sits at escalation tier 2 or higher without movement, any of the company, the officer, the facilitator, or the auto-trigger can request a TRI (Tripartite Review) meeting. The request parks the ticket in On Hold (pausing the SLA clock) and the AI auto-drafts an agenda from the ticket's full history and uploads, which the facilitator reviews and edits. The modality — physical, virtual (Zoom/Meet/Teams), or hybrid — is chosen per meeting, multilingual invites go out, and recording consent is captured. After the three-party meeting, the facilitator records the outcome. For a resolved or partial outcome, the responsible officer uploads the MoM in the department's own format; the file is ClamAV-scanned, encrypted, and stored. Scanned documents run through the pluggable multilingual OCR engine (English, Urdu/Nastaliq, Sindhi/Naskh), and the AI extracts a summary, structured action items with owners and due dates, decisions, and attendees, plus machine translations. The officer reviews the extraction side-by-side with the original and confirms; confirmed action items become sub-tasks on the ticket. For normal tickets the officer publishes directly; for sensitive or VIP tickets the MoM must first pass Chair/DG approval. On publish, the MoM is versioned and permanently attached, auto-shared to all participants across email, in-app, and SMS/WhatsApp per their preferences (with acknowledgments tracked and reminded), and cross-posted to NITB e-Office where enabled. If the meeting cannot resolve the issue, the ticket escalates to the next tier with the meeting record attached.

6.5 Journey 5 — Company appeals

flowchart TD Closed(["Ticket Resolved or Closed"]) --> Decide{"Company action<br/>within window"} Decide -- "Poor CSAT (<= threshold)" --> Enable["Appeal path enabled + pre-filled<br/>+15-day grace"] Decide -- "Manual" --> Form["File appeal<br/>(within 30 days of closure)"] Enable --> Form Form --> Route["Route to next oversight tier<br/>above the one that closed it"] Route --> Review["Authority reviews"] Review --> Decision{"Decision"} Decision -- "Uphold" --> Work(["Back to In Progress<br/>+ directive to section"]) Decision -- "Partially uphold" --> Partial["Sub-tasks added;<br/>In Progress for those items"] Decision -- "Re-route" --> Triaged(["Status = Triaged<br/>different section / dept"]) Decision -- "Reject" --> Letter["Generate rejection letter<br/>+ QR verification"] Letter --> Final(["Status = Closed — terminal"])

Written description. From a Resolved or Closed ticket, the company has the CPGRAMS-style appeal path inside its window (default 30 calendar days from closure). A poor CSAT rating (at or below the configured threshold) automatically enables and pre-fills the appeal form and extends the window by a grace period (default +15 days); the company can also file a manual appeal. The appeal routes to the next oversight tier above the one that closed the ticket — a ticket closed at working level goes to the DG; one closed under DG purview goes to the Secretary; one closed under Secretary purview goes to the SACM and S&ITD Secretary. The reviewing authority may uphold (the ticket returns to In Progress with a directive to the section), partially uphold (specific action items become sub-tasks and the ticket returns to In Progress for those items only), re-route (the ticket moves to Triaged for a different section or department), or reject (closure becomes final and a QR-verified rejection letter is generated and sent). Every decision is audited with actor, tier, reasoning, and resulting action.

6.6 Journey 6 — Secretary oversight dashboard

flowchart LR Login(["Secretary logs in"]) --> Dash["Secretary oversight dashboard"] Dash --> KPIs["Dept KPIs:<br/>open / breached / near-breach / escalated"] Dash --> TierView["Escalation tier view:<br/>DG / Secretary / Minister queues"] Dash --> Heat["GIS / district heatmap"] Dash --> Repeat["SLA breach + repeat-offender list"] KPIs --> Drill["Drill into a ticket"] TierView --> Drill Repeat --> Drill Drill --> Action{"Action powers<br/>for this dept?"} Action -- "Yes" --> Directive["Send directive / override SLA /<br/>force-resolve / reassign /<br/>approve sensitive-VIP closure"] Action -- "No (notify-only)" --> Notify["Comment / watch / receive alerts"] Directive --> Audited[("Audited event + reason")] Notify --> Audited

Written description. A Department Secretary (or DG, or Minister) logs in and lands on the oversight dashboard scoped to their department (cross-department for the SACM). The dashboard surfaces department KPIs (open, breached, near-breach, escalated counts), an escalation-tier view separating the DG, Secretary, and Minister queues, a GIS/district heatmap of resolution performance, and a repeat-offender list flagging officers or sections with recurring escalations. The Secretary drills from any KPI, tier, or offender into the underlying ticket detail. Whether the Secretary can then act depends on the department's configured oversight powers: with action powers ON, the Secretary may send a directive, override the SLA, force-resolve, reassign, or approve sensitive/VIP closure; in notify-only mode the Secretary is limited to commenting, watching, and receiving alerts. Every action requires a reason and writes an immutable audit event.

6.7 Journey 7 — Anonymous / whistleblower intake

flowchart TD Public(["Public site"]) --> WB["Whistleblower / Anonymous intake"] WB --> NoLogin["No login required"] NoLogin --> Topic["Pick topic:<br/>corruption / harassment / safety / other"] Topic --> Details["Provide details<br/>+ optional encrypted contact"] Details --> Guard["CAPTCHA + rate-limit + abuse filter"] Guard --> Token[("One-way token generated<br/>reporter identity NOT stored")] Token --> Restricted(["Restricted-visibility ticket<br/>visible only to S&ITD<br/>whistleblower role + Secretary"]) Restricted --> Track["Check status by token<br/>read-only, no login"] Restricted --> SLA["Standard SLA + escalation apply<br/>oversight notifications omit<br/>filer-identifying info"] Restricted --> NotifyOpt["Optional encrypted contact<br/>used only if reporter opted in"]

Written description. A whistleblower reaches the anonymous intake channel from the public site without logging in. They pick a topic (corruption, harassment, safety, other), provide details, and may optionally include an encrypted contact method. CAPTCHA, rate-limiting, and an abuse filter protect the channel. On submission a one-way token is generated and the reporter's identity is not stored in cleartext; the resulting ticket is restricted-visibility, visible only to the designated S&ITD whistleblower-handling role and, optionally, the S&ITD Secretary. The reporter uses their token to check status read-only, with no login. Standard SLA and escalation apply, but all oversight notifications omit filer-identifying information. If the reporter opted in to the encrypted contact, it is used only for follow-up. Retention follows the whistleblower policy in /specs/en/24-trust-safety/.

6.8 Journey 8 — Admin configures department / SLA / AI

flowchart TD Admin(["Super Admin / Dept Admin"]) --> Console["Admin console"] Console --> StepUp["Step-up auth<br/>(fresh 2FA for config actions)"] StepUp --> Branch{"Configure"} Branch -- "Department" --> Dept["Create / edit dept + sub-depts<br/>(freely nestable tree)"] Branch -- "SLA" --> SLA["SLA definitions per<br/>dept/category/priority<br/>FRT + resolution targets"] Branch -- "Escalation" --> EscLad["Escalation ladder<br/>tiers + triggers +<br/>oversight powers per tier"] Branch -- "AI engines" --> AIEng["Pluggable engines:<br/>cloud <-> self-hosted toggle<br/>+ OCR engine select"] Branch -- "Feature flags" --> Flags["Toggle any capability<br/>per dept / env<br/>(two-person approval<br/>for sensitive flags)"] Dept --> Audited[("Audit log:<br/>old/new value + reason")] SLA --> Audited EscLad --> Audited AIEng --> Audited Flags --> Audited Audited --> Propagate["Changes propagate:<br/>navigation, dashboards,<br/>letters, Officials CMS,<br/>ticket behaviour"]

Written description. A Super Admin (or Department Admin, within their scope) opens the admin console and completes step-up authentication for configuration actions. From there they branch into the configuration surface they need. Department configuration creates or edits departments and freely nestable sub-departments. SLA configuration edits the sla_definitions rows binding FRT and resolution targets per department/category/priority. Escalation configuration edits the escalation_ladders tiers and triggers and the oversight_powers matrix that toggles each oversight role between notify-only and action. AI engines configuration selects the pluggable LLM (cloud vs self-hosted) and the OCR engine, with a test-connection control. Feature flags toggle any capability per department or environment, with two-person approval required for sensitive global flags (such as disabling the proof gate). Every configuration change is audit-logged with the old value, new value, actor, and a mandatory change-reason, and the change propagates immediately to navigation, dashboards, generated letters, the Officials CMS, and live ticket behaviour.


7. Wireframe Briefs (Key Screens)

Nine textual layout briefs — region-by-region descriptions, not images. They describe the default desktop layout; mobile adaptations are noted where material and follow §9. Visual treatment (colours, type, components) is defined in /specs/en/16-branding-design-system/.

7.1 Home / public landing

7.2 File-ticket wizard (dynamic conditional fields)

A five-step wizard with a sticky stepper header and a contextual AI rail.

7.3 Ticket detail

7.4 Officer workspace

7.5 Oversight dashboard (DG / Secretary / Minister)

7.6 TRI meeting page

7.7 MoM viewer

7.8 Analytics

7.9 Admin feature-flags


8. Design-System Reference

All visual treatment — palette, typography, iconography, components — is defined in /specs/en/16-branding-design-system/. This document consumes it; the key touchpoints are:


9. Responsive Breakpoints

SITP is built mobile-first. Breakpoints follow the Tailwind defaults used across the stack (see /specs/en/15-tech-architecture/):

Breakpoint Min width Behaviour
base (mobile) 0 px (default) Single column; hamburger nav; stacked cards; bottom-drawer AI panel; PWA primary target.
sm 640 px Two-column grids where useful; inline form fields pair up.
md 768 px Persistent left nav appears; tables gain a second dimension; stepper stays inline.
lg 1024 px Side rails (ticket detail, oversight dashboard) appear beside the main column.
xl 1280 px Three-column analytics layouts; multi-pane admin console.
2xl 1536 px Wide dashboards expand; max content width caps for readability.

PWA behaviour. Installable to home screen; offline support for read-only ticket views and draft composition (queued submission on reconnect); push notifications via the web where supported. Touch targets are at least 44×44 px. The future React Native app reuses the same navigation model and API contract.


10. Empty / Loading / Error States

Every list, dashboard, and form defines all three states explicitly. States are honest, recoverable, and on-brand.

10.1 Empty states

10.2 Loading states

10.3 Error states


11. "Simple Enough" Happy Paths Recap

The eight journeys above are rich, but each role's happy path — the path the system optimises for — is deliberately short. These are the experiences the 3-click rule (§2.2) protects.

# Actor Happy path Steps
1 Company (returning rep) Home → "File a ticket" → Submit → View ticket → (later) Accept + CSAT. 5
2 Company (first-time) Home → Register (entity type + Primary Rep) → File first ticket → Track. 4 stages
3 Department Officer See assigned ticket → send first response → resolve with proof. 3
4 Oversight (DG/Secretary/Minister) See breach on dashboard → act (directive/override/approve) or comment. 2
5 S&ITD Facilitator Triage inbox → confirm routing → (later) convene TRI + upload MoM. 3
6 Company (stalled) Ticket → "Request TRI" → attend → receive shared MoM → ack. 4
7 Citizen / Anonymous Home → file (or whistleblower intake) → track by ID/token. 2
8 Admin Console → step-up auth → change one config (dept/SLA/AI/flag) → audited. 3

The rule of thumb: if the happy path needs a help article, the design is not simple enough yet.


12. Cross-References

End of document.