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/ur/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، واضح علیحدہ درز تاکہ کسی بھی ماڈیول کو بعد میں مائیکروسروس کے طور پر نکالا جا سکے۔
2 API-first ہر صلاحیت ایک ورژن شدہ REST API تک قابل رسائی ہے؛ Next.js پورٹل، مستقبل کا PWA/React Native ایپ، پارٹنر 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 پہلے دن سے جڑے ہوئے ہیں — بعد میں جوڑے نہیں گئے۔
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 فریم ورکس، DB drivers، اور بیرونی SDKs سے الگ تھلگ۔

یہ فن تعمیر مائیکروسروسز کے پھیلاؤ کے بجائے چند اچھی طرح سے چلائے جانے والے اجزاء کو ترجیح دیتا ہے: ایک app DB، ایک cache، ایک سرچ، ایک object store، ایک identity provider، ایک queue، ایک BI ٹول۔ یہ ٹیم کے سائز، Server4Sale پر سنگل ہوسٹنگ نقطہ آغاز، اور صوبائی حکومت کی عملی سادگی کی خواہش سے مطابقت رکھتا ہے۔ درزوں (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 کے متعدد concrete adapters ہیں۔ سروس call کے وقت فی 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 (صرف call کی 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 sنبھالا جاتا ہے (ٹکٹ 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") کو وصول کنندہ کی ترجیحات کے مطابق متعدد 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

دستاویز کا اختتام۔