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

ٽيڪنالاجي فن تعمير

سنڌ آءِ ٽي پورٽل — سهولت ڊيسڪ (SITP) جو سرِ تا سر انجنيئرنگ فن تعمير: اجزاء، پرتون، ڊيٽا، اے آءِ، سيڪيورٽي، تعيناتي، ۽ عملو۔

خانو قدر
دستاويز آءِ ڊي 15
حيثيت مسودو
مالڪ S&ITD / MAAHIR
ٻوليون EN (master) · UR · SD
لاڳاپيل دستاويزون 03-non-functional-requirements/en.md, 04-functional-requirements/en.md, /specs/sd/06-ticket-workflow/, 09-ai-ocr-architecture/en.md, 16-security-and-compliance/en.md, 18-deployment-and-hosting/en.md

1. فن تعمير جو جائزو ۽ اصول

SITP کي هڪ API-first، ماڊيولر مونوليث جي طور تي انجنيئر ڪيو ويو آهي جنهن ۾ پلگ ايبل اے آءِ/او سي آر پرت آهي، تعمير جي لحاظ کان گهڻ لساني (EN/UR/Sindhi)، هر پرت تي ڪردار تي مبني دائرو، سرِ تا سر feature-flagged، ۽ observability-first۔ هيٺ مرچڙا اصول هن دستاويز جي هر downstream ڊيزائن فيصلي کي ضابطو ڏين ٿا۔

تعميري اصول

# اصول SITP ۾ ان جو مطلب
1 ماڊيولر مونوليث هڪ ئي NestJS تعيناتي جيڪا مضبوطيءَ سان محدود ماڊيولز (Auth، Tickets، Org/RBAC، Files، Notifications، AI-bridge، Comms، Analytics، Integrations، …) تي مشتمل آهي۔ هڪ عمل، هڪ deployable، واضح الڳ sewers تان جو ڪو به ماڊيول بعد ۾ مائڪروسروس جي طور تي ڪڍي سگهجي۔
2 API-first هر صلاحيت هڪ versioned REST API تائين reachable آهي؛ Next.js پورٽل، مستقبل جو PWA/React Native app، پارٽنر webhooks، ۽ Metabase سڀ ساڳيو API استعمال ڪن ٿا۔ UI ۾ ڪا به business logic ناهي۔
3 پلگ ايبل اے آءِ/او سي آر هر LLM ۽ OCR ڪال هڪ مستحڪم انٽرفيس (AIClient، OCRClient، TranscriptionClient) مان گذري ٿي۔ انجنز (Azure OpenAI / Google / AWS / self-hosted Llama+Qwen via Ollama+vLLM؛ Tesseract / Google Doc AI / Azure Doc Intelligence / AWS Textract) في فيچر ۽ في ڊيٽا حساسيت جي لحاظ کان چونڊبا آهن۔
4 گهڻ لساني ۽ RTL-native EN/UR/Sindhi کي فرسٽ ڪلاس سمجهيو وڃي ٿو۔ Locale في صارف محفوظ، JWT ۾ منتشر، templates، سرچ analysis، ڪيلنڊرز (Gregorian + Hijri)، ۽ اے آءِ ترجمي تي لاگو۔
5 ڪردار تي مبني دائرو (RBAC + ABAC) هر API روٽ محفوظ آهي؛ ڊيٽا querys ڪردار ۽ (خفيه/VIP ٽِڪيٽن لاءِ) attribute جي لحاظ کان محدود آهن۔ ڪا به "god queries" ناهي۔
6 Feature-flagged هر صلاحيت کي سپر ايڊمن في محڪمي ۽ في ماحول toggle ڪري سگهجي ٿو۔ ڪوڊ dark موڪليو وڃي ٿو؛ flags runtime تي code paths کي ڪنٽرول ڪن ٿا۔
7 Observability-first Logs (Loki)، metrics (Grafana)، traces (OpenTelemetry)، errors (Sentry) ۽ uptime پهرين ڏينهن کان wired آهن — بعد ۾ نه ملائيا ويا۔
8 Security-by-design باقي ۽ منتقلي ۾ خفيه ڪاري، گهٽ ۾ گهٽ حقِ رسائي، append-only آڊٽ، step-up auth، secrets vault، WAF، rate limiting، هر upload تي AV scan۔
9 Data-residency-aware خود مختار ڊيٽا (CNIC، NADRA lookups، حساس ٽِڪيٽ) on-prem اے آءِ/اسٽوريج تائين موڪلي سگهجي ٿو؛ ڪلائوڊ انجنز صرف انهن ڊيٽا classes لاءِ استعمال ٿين ٿا جن جي policy اجازت ڏيندي آهي۔
10 12-factor / کلين فن تعمير Config ماحول ۾، stateless عملو، disposable containers، logs stdout ۾، admin tasks هڪ ڀيرو جي عمل جي طور تي۔ Domain logic frameworks، DB drivers، ۽ بيروني SDKs کان الڳ۔

هي فن تعمير مائڪروسروسز جي پکيڙ کان وڌيڪ چند چڱي طرح هلائبا ويندڙ اجزاء کي ترجيح ڏئي ٿو: هڪ app DB، هڪ cache، هڪ سرچ، هڪ object store، هڪ identity provider، هڪ queue، هڪ BI ٽول۔ هي ٽيم جي سائز، Server4Sale تي سنگل هوسٽنگ شروعاتي نقطي، ۽ صوبائي حڪومت جي عملي سادگيءَ جي خواہش سان مطابقت رکي ٿو۔ sewers (interfaces، queues، ماڊيولز) ان طرح ڊيزائن ٿيا آهن جو scale-out، multi-tenant، يا مائڪروسروس ڪڍڻ هڪ refactor آهي، rewrite ناهي۔


2. اعليٰ سطحي فن تعمير ڊاياگرام

پورٽل ٻن عوامي فرنٽ اينڊز (هڪ Next.js مڪمل پورٽل ۽ Docusaurus docs سائيٽ) جي طور تي فراهم ڪيو وڃي ٿو جيڪي nginx reverse proxy جي پويان آهن۔ proxy TLS ختم ڪري ٿو، static docs build براهِ راست serve ڪري ٿو، ۽ /api کي NestJS API gateway، ڊگهي عمر واري WebSocket gateway، Python FastAPI اے آءِ سروس، embedded Metabase، ۽ (admin plane ۾) Keycloak ڏانهن اڳتي موڪلي ٿو۔ API gateway سڀني stateful backends جو واحد داخلي نقطو آهي: MariaDB 10.11 (system of record)، Redis (cache + sessions + queues)، Meilisearch (گهڻ لساني سرچ)، MinIO (S3-متوافق object storage، ClamAV جي پويان)، ۽ BullMQ workers جيڪي OCR/AI/email/SMS/WhatsApp کي offload ڪن ٿا۔ بيروني انضمام — NADRA، SECP، FBR، SRB، PSEB، NITB e-Office، Mailjet، SMS gateways، WhatsApp Business API، Zoom/Meet/Teams — صرف integrations پرت ۾ adapter ماڊيولز ذريعي reachable آهن۔

flowchart LR subgraph Clients["Clients"] WEB["Next.js Full Portal<br/>(App Router + TS)"] DOC["Docusaurus Docs Site<br/>(static, /docs/)"] MOB["PWA → React Native (phase 4)"] PARTNER["Partner / 3rd-party consumers<br/>(REST + webhooks)"] end subgraph Edge["Edge / Reverse Proxy"] NX["nginx<br/>TLS · WAF · static docs · routing"] end subgraph App["Application plane"] GW["NestJS API Gateway<br/>(modular monolith · REST)"] WS["WebSocket Gateway<br/>(Socket.IO / Centrifugo)"] AI["FastAPI AI Service<br/>(Python · pluggable engines)"] WQ["BullMQ Workers<br/>(OCR · AI · email · SMS · WA · exports)"] FF["Feature-Flag Service<br/>(config + cache + audit)"] end subgraph Identity["Identity"] KC["Keycloak<br/>(OIDC · 2FA · SSO)"] end subgraph Data["Stateful backends"] DB[("MariaDB 10.11<br/>system of record")] RD[("Redis<br/>cache · sessions · pub-sub")] MS[("Meilisearch<br/>multilingual search")] MN[("MinIO / S3<br/>encrypted blobs")] CLAM["ClamAV<br/>(AV scan pipeline)"] end subgraph BI["Analytics plane"] MB["Metabase<br/>(embedded · self-hosted)"] end subgraph Ext["External integrations"] NADRA["NADRA (CNIC)"] SECP["SECP"] FBR["FBR / NTN"] SRB["SRB"] PSEB["PSEB"] EOFC["NITB e-Office"] MJ["Mailjet (email)"] SMS["SMS gateway<br/>(Jazz / Telenor)"] WA["WhatsApp Business API"] VID["Zoom / Meet / Teams"] end WEB --> NX DOC --> NX MOB --> NX PARTNER --> NX NX --> DOC NX --> GW NX --> WS NX --> AI NX --> KC NX --> MB GW --> DB GW --> RD GW --> MS GW --> MN GW --> RD GW --> WQ GW --> FF WS <--> RD AI --> MN AI --> RD WQ --> MN MN --> CLAM WQ --> MS MB --> DB GW --> NADRA GW --> SECP GW --> FBR GW --> SRB GW --> PSEB GW --> EOFC WQ --> MJ WQ --> SMS WQ --> WA GW --> VID

ڊاياگرام اجزاء کي planes ۾ گروپ ڪري ٿو — Clients، Edge، Application، Identity، Stateful backends، Analytics، ۽ External integrations — تان جو trust ۽ dependency boundaries واضح ٿين۔ NestJS API gateway اهو واحد جزو آهي جيڪو هر stateful backend ۽ گهڻن بيروني انضمامن سان ڳالهائي ٿو؛ workers اسٽوريج، سرچ، ۽ ٻاهرين notification چينلز سان ڳالهائن ٿا؛ اے آءِ سروس صرف object اسٽوريج ۽ Redis (پنهنجي caching/job state لاءِ) سان ڳالهائي ٿي ۽ gateway ۽ workers جي طرفان سڏجي ٿي، clients جي طرفان براهِ راست ناهي۔ WebSocket gateway API سان pub-sub fan-out لاءِ Redis شيئر ڪري ٿو تان جو API يا workers جي طرفان پيدا ٿيل live updates صحيح متصلي sessions تائين پهچن۔


3. اجزاء جي فهرست (Component Catalog)

جزو مقصد ٽيڪنالاجي نوٽس
Next.js Portal عوامي سائيٽ، شهري/ڪمپني نمائندو UX، ticketing، KB، dashboards، اندروني مواصلات، دستاويز جي تخليق Next.js (App Router) + TypeScript + Tailwind + shadcn/ui SEO + شروعاتي render لاءِ Server components؛ real-time ۽ ڀاري تعامل لاءِ client islands۔ nginx ذريعي hosted (proxy جي پويان Node runtime)۔
Docusaurus Docs Site عوامي پروڊڪٽ دستاويزون (/docs/) EN/UR/Sindhi ۾ RTL ۽ Hijri-aware مواد سان گڏ Docusaurus (TypeScript) Statically built؛ nginx ذريعي baseUrl: /docs/ تي براهِ راست serve۔ ڪا به backend انحصار ناهي۔
nginx Reverse Proxy TLS termination، WAF (modsecurity/OWASP CRS)، static docs hosting، path routing، gzip/brotli، rate limiting، request sizing nginx هوسٽ تي واحد عوامي ingress۔ /docs/ کي static build؛ /api/ کي NestJS؛ /ws/ کي WebSocket gateway؛ /auth/ کي Keycloak؛ /bi/ کي Metabase۔
NestJS API سڀ business logic: auth، ٽِڪيٽ، org/RBAC، files، notifications، comms، integrations، analytics aggregates، feature flags NestJS (TypeScript) + REST ماڊيولر مونوليث۔ 12-factor۔ MariaDB driver تي Prisma (تجويز ٿيل — §5 ڏسو) استعمال ڪري ٿو۔
MariaDB System of record: صارفين، orgs، ٽِڪيٽ، MoMs، آڊٽ، RBAC، KB، مواد، کنفيگريشن MariaDB 10.11.14 PostgreSQL ناهي۔ سرور تي انسٽال ۽ هلندڙ تصديق ٿيل۔ Urdu/Sindhi درستگي لاءِ utf8mb4 + utf8mb4_unicode_520_ci۔
Redis Cache، session store، BullMQ queues، WebSocket pub-sub adapter، rate-limit counters، feature-flag cache Redis 7 پائيدار queues لاءِ Persistence enabled (AOF)۔
Meilisearch ٽِڪيٽ، KB مضمون، آفيسرن، دستاويزن، ۽ چيٽ تي گهڻ لساني full-text سرچ Meilisearch خاص طور تي ان لاءِ چونڊيو ويو ڇوته اهو Urdu ۽ Sindhi tokenization چڱي طرح سنڀاليندو آهي، جتي MariaDB full-text ڪمزور آهي۔
MinIO + ClamAV uploads ۽ generated دستاويزن لاءِ S3-متوافق object storage؛ هر upload تي AV scanning MinIO + ClamAV (clamd) باقي ۾ خفيه ڪاري؛ versioned buckets؛ presigned time-limited URLs۔ ClamAV هڪ BullMQ worker مان سڏيل sidecar service جي طور تي هلندو آهي۔
Keycloak Identity provider: OIDC، 2FA (TOTP/SMS)، step-up auth، حڪومتي عملي لاءِ SSO، ڪمپني auth Keycloak (self-hosted) Realm-per-actor-class آپشن۔ حڪومتي عملي کي OIDC ذريعي federate ڪري ٿو۔
FastAPI AI Service پلگ ايبل اے آءِ/OCR انجن abstraction، PII redaction، on-prem fallback، هر اے آءِ ڪال جو آڊٽ Python + FastAPI AIClient، OCRClient، TranscriptionClient interfaces کي wrap ڪري ٿو۔ Azure OpenAI / Google / AWS / self-hosted Llama+Qwen via Ollama+vLLM؛ Tesseract / Google Doc AI / Azure Doc Intelligence / AWS Textract لاءِ adapters hosts۔
WebSocket Gateway Live ٽِڪيٽ updates، presence/typing، 3-tier اندروني مواصلات، live dashboards Socket.IO يا Centrifugo Redis pub-sub adapter ذريعي horizontally scaled۔ Keycloak tokens جي خلاف authenticated۔
BullMQ Workers Long-running work offload: OCR، اے آءِ calls، email/SMS/WhatsApp fan-out، PDF/Excel exports، scheduled digests، escalation timers Redis تي Node + BullMQ في job class الڳ worker pools (تاڪه OCR notifications کي بک نه ڪري)۔
Metabase اندروني ڪردارن لاءِ ad-hoc analytics ۽ embedded dashboards Metabase (self-hosted) MariaDB جي replica/schema کان read-only ڳنڍيل۔ منتخب dashboards لاءِ signed URLs ذريعي embedded۔
Mailjet Transactional ۽ inbound email (اطلاعات + replies-to-ticket) Mailjet (SMTP + API + inbound parse) گهڻ لساني templates server-side render؛ inbound webhook replies کي ٽِڪيٽ پيغامن ۾ parse ڪري ٿو۔
SMS Gateway OTP، ٽِڪيٽ اطلاعات، escalations Jazz / Telenor bulk SMS پاڪستان گهريلو ڊليوري لاءِ چونڊيو؛ ٻن providers جي وچ ۾ failover configurable۔
WhatsApp Business API ڪمپنين سان two-way چيٽ، اطلاعات، inbound-to-ticket WhatsApp Business Cloud / BSP Templated message approval out-of-band سنڀاليو وڃي ٿو۔
Video Providers هاءِ برڊ TRI/samaعت virtual ميٽنگون Zoom / Google Meet / Teams Provider في ميٽنگ چونڊيل؛ join links minted ۽ ٽِڪيٽ سان ڳنڍيل۔
Feature-Flag Service في صلاحيت، محڪمي، ۽ ماحول لاءِ مرڪزي، audited runtime toggles MariaDB + Redis cache تي NestJS ماڊيول هر صلاحيت هڪ flag آهي (§12 ڏسو)۔
Observability Stack Logs، metrics، traces، errors، uptime Loki (logs) · Grafana (metrics/dashboards) · OpenTelemetry (traces) · Sentry (errors) · status page Loki + OTel + MariaDB exporter تي واحد Grafana فرنٽ اينڊ۔
CI/CD Lint، typecheck، test، build، migrate، deploy GitHub Actions يا GitLab CI ماحول: devstagingprod۔ Migrations هڪ gated step جي طور تي هلن ٿا۔

4. ايپليکيشن پرتون (NestJS)

NestJS تعيناتي کي هڪ کلين فن تعمير ماڊيولر مونوليث جي طور تي منظم ڪيو ويو آهي: هر ماڊيول پنهنجي domain models، DTOs، services، controllers، ۽ persistence جو مالڪ آهي، ۽ ٻين ماڊيولن کي صرف typed interfaces ڏئي ٿو۔ Cross-cutting concerns (validation، auth، logging، tracing، feature flags) shared infrastructure ۾ رهن ٿا جن کي ڪو به domain ماڊيول bypass ناهي ڪندو۔

ماڊيول ميپ

ماڊيول ذميداري اهم ساٿي
Auth Login، Keycloak سان OIDC handshake، 2FA، step-up auth، session/JWT issuance ۽ refresh، RBAC resolution Keycloak، Redis
Tickets ٽِڪيٽ lifecycle (نئون → فرزبندي ٿيل → تفويض ٿيل → جاري → حل ٿيل → بند/ٻيهر کُليو/اپيل)، SLA، escalation، ذيلي ٽاسڪ، merge/split، link، watchers/CC، bulk ops، draft & save-later، resolution-proof gate Org، Files، Notifications، AI-bridge، Comms، Analytics، Meilisearch
Org/RBAC Nested محڪما (محڪمو → سيڪشن → اسٽاف)، DG/سيڪريٽري نگراني، ڪمپني نمائندا (Primary/Admin/Filer/Viewer/Notify)، granular overrides، account lifecycle automation Auth، Files، Analytics
Files Upload، AV scan orchestration، خفيه ڪاري، preview، versioning، presigned download links MinIO، ClamAV (workers ذريعي)، Audit
Notifications email/SMS/WhatsApp/in-app ڏانهن fan-out، templating (گهڻ لساني)، preference center، digests، two-way inbound parse Mailjet، SMS، WA، workers
AI-bridge FastAPI اے آءِ سروس جو thin client؛ feature flags + ڊيٽا حساسيت policy کي ڪال کان اڳ لاگو ڪري ٿو FastAPI اے آءِ سروس، Feature-Flag سروس
Comms 3-tier اندروني مواصلات: ٽِڪيٽ-scoped threads، org-wide inbox، channel-based چيٽ WebSocket gateway، Meilisearch
Analytics Aggregates، materialized views/cubes، عوامي شفافيت ڊيش بورڊ، GIS/ضلعو heatmap MariaDB، Metabase، Redis (live push)
Integrations NADRA/SECP/FBR/SRB/PSEB/e-Office لاءِ adapter pattern؛ inbound/outbound webhooks؛ consumer REST API سڀ بيروني systems، Audit
FeatureFlags toggles read/write؛ cache invalidation؛ تبديلين جو آڊٽ MariaDB، Redis، Audit
Audit هر state-changing action جو append-only آڊٽ لاگ MariaDB
I18n Locale resolution، locale propagation، Gregorian+Hijri formatting، اے آءِ ترجمو passthrough FastAPI اے آءِ سروس
Health/Observability /health، /ready، /metrics، OTel spans، structured logs OTel، Loki

Cross-cutting mechanics


5. ڊيٽا بيس

5.1 انتخاب: MariaDB 10.11 (PostgreSQL ناهي)

System of record MariaDB 10.11.14 آهي، جيڪو اڳ ۾ئي production هوسٽ تي انسٽال ۽ هلندڙ آهي۔ هي هڪ سوچيل سمجهيل، locked فيصلو آهي (_context.md §3 ڏسو)۔ PostgreSQL هن stack ۾ ڪٿي به استعمال ناهي ٿيندو۔ سبب:

5.2 ORM تجويز: Prisma

Locked stack ۾ Prisma ۽ TypeORM ٻئي قابلِ قبول طور تي درج آهن۔ SITP لاءِ Prisma تجويز ٿيل آهي ڇاڪاڻ ته:

  1. First-class MariaDB/MySQL driver. Prisma جو connector MySQL/MariaDB wire protocol کي natively target ڪري ٿو؛ ڪابه ORM-internal SQL translation surprises ناهي۔
  2. Type safety سرِ تا سر هڪ ئي schema.prisma source of truth مان، جيڪو TypeScript-primary ٽيم جي رفتار وڌائي ٿو۔
  3. Migrations explicit، reviewable، ۽ CI-gated آهن — هڪ اهڙي حڪومتي system لاءِ اهم جتي schema change auditable آهي۔
  4. ماڊيولر مونوليث لاءِ بهتر developer ergonomics (هڪ generator، هڪ client، schema // <-- module --> comments ۽ prismaSchemaFolder previews ذريعي divided)، جيڪو MAAHIR انجنيئرن جي وچ ۾ onboarding friction گهٽ ڪري ٿو۔
  5. Raw escape hatch (prisma.$queryRaw) انهن چند cases لاءِ جن کي MariaDB-specific SQL گهرجي (جهڙوڪ RETURNING، materialized-view refresh)۔

Caveat: Prisma اڃا تائين ڪنهن JSON operations لاءِ MariaDB سرور ورژن quirks auto-detect ناهي ڪندو؛ JSON columns لاءِ اسان انهن کي String (validated JSON) جي طور تي model ڪندا آهيون ۽ ضرورت پوڻ تي $queryRaw ذريعي MariaDB جا JSON_* functions استعمال ڪندا آهيون۔ اهڙين cases جو حجم گهٽ آهي۔

5.3 Schema حڪمتِ عملي

5.4 Character set

5.5 Indexing

5.6 Read replicas (مستقبل)

اڄ SITP هڪ ئي MariaDB instance تي هلندو آهي۔ فن تعمير read replicas شامل ڪرنجو آپشن کلي رکي ٿو براءِ: Metabase analytics reads، reporting/exports، ۽ read-heavy عوامي سائيٽ queries۔ Prisma client ان نقطي تي read/write split سان configure ڪيو ويندو؛ سڀ writes (۽ write transactions جي اندر reads) primary ڏانهن ويندا، analytics/dashboard reads replicas ڏانهن ويندا۔ Replication lag هڪ configured threshold کان bounded آهي؛ laggy replicas automatically skip ٿيندا آهن۔

5.7 Backups


6. اے آءِ / OCR فن تعمير

6.1 انجن abstraction (پلگ ايبل)

FastAPI اے آءِ سروس ٽي مستحڪم interfaces ڏئي ٿي۔ هر consumer (NestJS ماڊيول يا BullMQ worker) interface لاءِ programme ڪري ٿو، ڪڏهن به vendor SDK لاءِ ناهي۔

# Illustrative interface contract (per engine family)
class AIClient(Protocol):
    async def complete(self, req: AIRequest) -> AIResponse: ...
    async def embed(self, req: EmbedRequest) -> EmbedResponse: ...

class OCRClient(Protocol):
    async def extract(self, req: OCRRequest) -> OCRResult: ...

class TranscriptionClient(Protocol):
    async def transcribe(self, req: AudioRequest) -> Transcript: ...

هر interface جا multiple concrete adapters آهن۔ سروس ڪال جي وقت في feature ۽ في ڊيٽا-حساسيت class هڪ adapter چونڊتي ٿي، استعمال ڪندي (a) feature-flag سروس، (b) input جي ڊيٽا classification، ۽ (c) environment-level allow-list (تان جو هڪ "خود مختار" ماحول ڪلائوڊ انجنز کي مڪمل طور تي منع ڪري سگهي)۔

انجن خاندان ڪلائوڊ آپشنز On-prem fallback
LLM Azure OpenAI · Google Vertex/Gemini · AWS Bedrock Self-hosted Llama 3 / Qwen via Ollama + vLLM
OCR Google Document AI · Azure Document Intelligence · AWS Textract Tesseract
Transcription (provider في ڪلائوڊ STT) Self-hosted Whisper

6.2 اے آءِ request flow

هر اے آءِ ڪال جو هڪ ئي shape آهي: policy resolve ڪريو → هن feature+sensitivity لاءِ انجن resolve ڪريو → PII redact ڪريو → call ڪريو → ناڪامي تي، fall back ڪريو → log + audit ڪريو → respond ڪريو۔ تحريري وضاحت ڊاياگرام جي پيروي ڪري ٿي۔

flowchart TD R["Request from NestJS module/worker<br/>(feature + sensitivity class + locale)"] P["Policy & feature-flag check<br/>(allowed engines for this feature+sensitivity)"] SEL["Select engine<br/>(cloud or on-prem)"] RED["PII redaction<br/>(CNIC, phone, email, etc.)"] CALL["Call engine adapter"] FB{"OK?"} FALL["Fallback engine<br/>(on-prem or secondary cloud)"] LOG["Structured log + audit row<br/>(engine · latency · tokens/cost · redactions)"] RESP["Return result to caller"] R --> P P --> SEL SEL --> RED RED --> CALL CALL --> FB FB -- no --> FALL FALL --> LOG FB -- yes --> LOG LOG --> RESP

flow چار invariants يقيني بڻائي ٿو: (1) ڪو به اهڙو انجن ڪڏهن به call ناهي ٿيندو جنهن جي policy input جي sensitivity class لاءِ disallow ڪري ٿي؛ (2) PII ان وقت کان اڳ redact ٿي وڃي ٿو جنهن payload trusted boundary ڇڏي ٿو جيڪڏهن ڪلائوڊ انجن چونڊيل هجي؛ (3) ڪنهن به single انجن جي ناڪامي fallback ذريعي recoverable آهي تان جو صارف-facing feature دستياب رهي؛ (4) هر ڪال — بشمول ان جو انجن، latency، cost، ۽ redacted PII tokens جو تعداد — شفافيت ۽ cost governance لاءِ هڪ immutable آڊٽ row ۾ capture ٿئي ٿو۔

6.3 11 اے آءِ صلاحيتون ۽ انجن رهنمائي

# صلاحيت تجويز ٿيل انجن class نوٽس
1 OCR (scanned uploads، MoM images) معيار لاءِ ڪلائوڊ Doc AI/Doc Intelligence/Textract؛ حساس/CNIC-bearing docs لاءِ Tesseract on-prem Output MoM extraction ۽ search indexing ذريعي استعمال ٿئي ٿو۔
2 خلاصو ڪلائوڊ LLM (Azure OpenAI / Gemini) مختصر context؛ PII redaction کان پوءِ موڪڻ محفوظ آهي۔
3 آٽو روٽنگ / درجه بندي ڪلائوڊ يا on-prem LLM؛ پهرين rule layer هاءِ برڊ: ambiguous لاءِ deterministic rules + LLM۔
4 جلديَت / جذباتي حالت ڪلائوڊ LLM يا on-prem سستو، high-volume؛ cost لاءِ on-prem تي غور ڪريو۔
5 مسودو جواب (trilingual) ڪلائوڊ LLM locale + tone جو احترام لازمی؛ ڪڏهن به auto-send ناهي۔
6 ترجمو EN/UR/Sindhi glossary injection سان ڪلائوڊ LLM _glossary.md مان glossary constraints جي طور تي inject۔
7 نقل / similarity جي سڃاڻپ on-prem embeddings + Meilisearch similarity خفيه ٽِڪيٽن لاءِ embeddings boundary ناهي ڇڏيندا۔
8 عوامي چيٽ بوٽ KB تي retrieval سان ڪلائوڊ LLM Strict scope: صرف عوامي KB مواد؛ ڪابه PII قبول ناهي۔
9 PII redaction On-prem rule + regex + on-prem NER ڪنهن به ڪلائوڊ ڪال کان اڳ هلندو آهي (§6.2 ڏسو)۔
10 رجحان / analytics aggregates تي narrative summaries لاءِ ڪلائوڊ LLM Input aggregated/anonymized آهي؛ raw ٽِڪيٽ موڪليا ناهي وڃا۔
11 MoM action-item extraction OCR + redaction کان پوءِ ڪلائوڊ LLM Owner/due-date parsing؛ ذيلي ٽاسڪ جي تخليق کان اڳ آفيسر confirm ڪري ٿو۔

6.4 PII redaction ۽ on-prem fallback

PII redaction هر flow ۾ پهرين هلندو آهي۔ انهن inputs لاءِ جن جي ڊيٽا class ڪلائوڊ پروسيسنگ forbidden ڪري ٿي (مثال طور، raw CNIC، NADRA payloads، خفيه/VIP ٽِڪيٽ)، selector ڪال کي on-prem path (Llama/Qwen + Tesseract/Whisper) ڏانهن route ڪري ٿو۔ Redaction پرت downstream موڪليل redacted payload ۽ هڪ reversible mapping (صرف ڪال جي duration لاءِ memory ۾ رکيل، ڪڏهن به persist ناهي ٿيندو) ٻئي output ڪري ٿي تان جو final response کي caller ڏانهن موٽائڻ کان اڳ re-hydrate ڪري سگهجي۔ هي §1 جي data-residency-aware اصول کي پورو ڪري ٿو۔


7. Real-time پرت

WebSocket gateway چار classes جي live تجربي کي طاقت ڏئي ٿو:

  1. ٽِڪيٽ updates — status، assignment، SLA، watcher notifications، file attachments۔
  2. Presence ۽ typing — ٽِڪيٽ-scoped threads ۽ اندروني مواصلات لاءِ۔
  3. 3-tier اندروني مواصلات — (1) ٽِڪيٽ-scoped private threads، (2) org-wide inbox DMs/groups، (3) مڪمل Slack-style channels (threads، pins، read receipts)۔
  4. Live dashboards — role dashboards ۾ analytics push (مثال طور، open-ticket counts، SLA breach alerts)۔

gateway connections کي Keycloak tokens جي خلاف authenticate ڪري ٿو (connect ۽ periodic refresh تي verified)، هر subscription کي RBAC ۽ ABAC جي خلاف authorize ڪري ٿو، ۽ ڪڏهن به client-asserted scope تي اعتبار ناهي ڪندو۔ Scaling: جڏهن هڪ کان وڌيڪ gateway instances گهرجن، سڀ instances هڪ Redis pub-sub adapter شيئر ڪن ٿا تان جو ڪنهن به NestJS ماڊيول يا ڪنهن به BullMQ worker جي طرفان ڪنهن به هوسٽ تي پيدا ٿيل event صحيح متصلي session تائين پهچي خواه اهو ڪنهن به instance تي هجي۔ Backpressure per-connection سنڀاليو وڃي ٿو (ٽِڪيٽ updates drop ڪرڻ کان اڳ typing indicators drop ڪريو) ۽ gateway connect/disconnect/message لاءِ OTel spans emit ڪري ٿو تان جو Loki/Grafana plane latency ۽ drops کي correlate ڪري سگهي۔


8. سرچ (Meilisearch)

MariaDB full-text Urdu ۽ Sindhi scripts لاءِ ڪمزور آهي؛ Meilisearch پورٽل ۾ گهڻ لساني سرچ جو مالڪ آهي۔


9. اسٽوريج ۽ فائلون


10. Identity ۽ Auth


11. Feature Flag سروس

system جي هر صلاحيت سپر ايڊمن ذريعي، في محڪمي ۽ في ماحول toggleable آهي۔


12. Notifications Pipeline

pipeline هڪ single domain event (مثال طور، "ticket updated") کي وصول ڪندڙ جي ترجيحن مطابق multiple channels ڏانهن fan-out ڪري ٿو۔

flowchart LR EVT["Domain event<br/>(ticket/MoM/etc.)"] DISP["Notifications dispatcher<br/>(resolve channels + locale + prefs)"] TPL["Render template<br/>(multilingual · Gregorian+Hijri)"] Q["BullMQ queue<br/>(per channel)"] OUT["Outbound adapters"] MJ["Mailjet (email)"] SMS["SMS"] WA["WhatsApp"] INAPP["In-app (WS push)"] INB["Inbound:<br/>email reply / WA reply"] PARSE["Parse → resolve ticket by ref"] APPEND["Append as ticket message + notify watchers"] EVT --> DISP DISP --> TPL TPL --> Q Q --> OUT OUT --> MJ OUT --> SMS OUT --> WA OUT --> INAPP INB --> PARSE PARSE --> APPEND

هڪ domain event dispatcher تائين پهچي ٿي، جيڪو per-recipient channels (email/SMS/WhatsApp/in-app)، locale، ۽ preference-center settings (digest بمقابله immediate، quiet hours، per-channel opt-ins) resolve ڪري ٿو۔ Templates وصول ڪندڙ جي locale ۾ server-side render ٿين ٿيون Gregorian ۽ Hijri ٻئي dates سان۔ هر message هڪ per-channel BullMQ queue ۾ enqueue ٿئي ٿي تان جو WhatsApp outage email کي block نه ڪري۔ Outbound adapters Mailjet، SMS gateway، WhatsApp Business API، ۽ in-app WebSocket push کي call ڪن ٿا۔

Two-way inbound هڪ first-class path آهي: inbound email replies (Mailjet جي inbound parse ذريعي) ۽ inbound WhatsApp replies (WhatsApp webhook ذريعي) parse ٿين ٿيون، ٽِڪيٽ subject/recipient ۾ reference مان resolve ٿئي ٿو، ۽ message ٽِڪيٽ thread ۾ append ٿئي ٿي، normal watcher notifications کي trigger ڪندي۔ Rate limiting provider throttling کان بچڻ ۽ صارف quiet hours جو احترام ڪرڻ لاءِ في channel، في وصول ڪندڙ، ۽ في tenant لاگو ٿئي ٿو۔ Digests ۽ preference center صارفين کي non-urgent notifications batch يا mute ڪرڻ ڏين ٿا۔


13. Integrations پرت

integrations ماڊيول هر بيروني حڪومتي ۽ third-party system کي هڪ adapter جي پويان ڏئي ٿو۔ system باقي ڪو به vendor SDK براهِ راست import ناهي ڪندو۔

Adapter سمت نوٽس
NADRA (CNIC verification) Outbound خود مختار ڊيٽا؛ صرف on-prem يا approved-channel۔
SECP (company lookup) Outbound file-first رجسٽريشن دوران استعمال ٿئي ٿو۔
FBR / NTN Outbound Tax-number verification۔
SRB Outbound سنڌ ٽيڪس رجسٽريشن۔
PSEB Outbound IT-industry membership۔
NITB e-Office Outbound ٽِڪيٽ/MoM → official file movement۔
OIDC SSO Bidirectional حڪومتي عملي federation۔
Inbound webhooks Inbound WhatsApp، Mailjet inbound parse، provider callbacks۔
Outbound webhooks + REST API Outbound Partner/consumer integrations؛ documented OpenAPI۔

Cross-cutting concerns:


14. Analytics ۽ BI


15. گهڻ لساني / i18n / RTL


16. سيڪيورٽي فن تعمير


17. تعيناتي ۽ هوسٽنگ

Provider: SITP Server4Sale تي hosted آهي ("Powered by Server4Sale")۔ تفصيلي hosting topology TBD آهي، مگر provider fixed آهي۔ هوسٽ تي verified سرور ماحول هي آهي:

Item Value
OS Ubuntu 24.04.4 LTS
Node v22.23.1
npm 10.9.8
Database MariaDB 10.11.14 (running)
Web server nginx (running)
Container runtime Docker 29.6.1
Git 2.43.0
Free disk 3.4 TB
Free RAM 243 GB

Static docs site nginx ذريعي https://sindhitportal.maahir.io/docs/ تي Docusaurus static build output مان براهِ راست serve ٿئي ٿي۔

flowchart TB INET["Internet<br/>(sindhitportal.maahir.io)"] NX["nginx reverse proxy<br/>TLS · WAF · /docs/ static · /api/ · /ws/ · /auth/ · /bi/"] subgraph Static["Static plane"] DOC["Docusaurus build<br/>(/docs/)"] end subgraph Apps["App containers"] PORTAL["Next.js portal (Node 22)"] API["NestJS API (Node 22)"] WS["WebSocket gateway"] AI["FastAPI AI service (Python)"] WQ["BullMQ workers (Node 22)"] MB["Metabase"] KC["Keycloak"] end subgraph State["Stateful services"] DB[("MariaDB 10.11")] RD[("Redis")] MS[("Meilisearch")] MN[("MinIO + ClamAV")] end INET --> NX NX --> DOC NX --> PORTAL NX --> API NX --> WS NX --> AI NX --> KC NX --> MB API --> DB API --> RD API --> MS API --> MN API --> WQ WS --> RD AI --> MN AI --> RD WQ --> MN WQ --> MS MB --> DB

reverse proxy واحد ingress آهي۔ Static plane Docusaurus build آهي جيڪا disk مان سڌي serve ٿئي ٿي۔ App plane Docker containers جي طور تي هلندي آهي — portal، API، WebSocket gateway، اے آءِ سروس، BullMQ worker pools، Metabase، ۽ Keycloak — هر هڪ پنهنجي container ۽ resource limits سان۔ Stateful plane — MariaDB 10.11، Redis، Meilisearch، MinIO + ClamAV — هوسٽ تي هلندي آهي (MariaDB OS level تي اڳ ۾ئي انسٽال آهي ۽ containers سان local نيٽ ورڪ تي share)۔

Orchestration: اڄ Docker Compose، جڏهن deployment footprint هڪ single هوسٽ کان وڌي تي Kubernetes تائين وڃڻ جو آپشن۔ Compose file ان طرح structured آهي جو هر service definition صاف طور تي هڪ مستقبل جي Kubernetes manifest سان map ٿئي ٿي (في Deploy هڪ service، clear healthchecks، explicit resource requests/limits، secrets as env-from)۔


18. Observability


19. CI/CD


20. Scalability ۽ Performance


21. Disaster Recovery (بنيادي)

بنيادي DR هڪ locked non-functional requirement آهي؛ تفصيلي runbooks deferred۔ بنيادي posture:

تفصيلي runbooks (per-service recovery، contact tree، comms templates) هڪ separate operational دستاويز جي طور تي تيار۔


22. کليل سوالات / TBD

# Item Status
1 Server4Sale تي تفصيلي hosting topology (single هوسٽ بمقابله multi-هوسٽ، نيٽ ورڪ zoning، backup هوسٽ)۔ TBD
2 في feature exact اے آءِ انجن انتخاب (ڪلائوڊ بمقابله on-prem) — defaults §6.3 ۾ تجويز، ڊيٽا-classification policy سان confirm۔ TBD
3 Kubernetes بمقابله Docker Compose graduation trigger (scale، multi-هوسٽ، HA requirements)۔ TBD
4 Read-replica introduction timing ۽ routing policy۔ TBD
5 secrets vault جو انتخاب (Vault بمقابله Server4Sale-managed) ۽ key rotation cadence۔ TBD
6 حتمي RPO/RTO numbers (§21) DR runbook تيار ٿيڻ کان پوءِ۔ TBD
7 Meilisearch HA strategy (replica set) جڏهن load justify ڪري۔ TBD
8 WebSocket gateway انتخاب (Socket.IO بمقابله Centrifugo) — ٻئي viable؛ mobile/PWA client ضروریاتن جي خلاف فيصلو۔ TBD

دستاويز جو اختتام۔