๐Ÿ”ฌ LIS Master Blueprint โ€” Sample ร— Investigation Lifecycle

ุงู„ูู„ุณูุฉ ุงู„ุฌุฏูŠุฏุฉ: ูƒู„ ุชุญู„ูŠู„ (investigation) ุฏุงุฎู„ request ู„ู‡ ุญุงู„ุฉ ู…ุณุชู‚ู„ุฉ ูˆู…ุณุงุฑ ุญูŠุงุฉ ู…ู†ูุตู„. ุงู„ู€ sample (ุงู„ุฃู†ุจูˆุจุฉ) ุจู‚ุช ู…ุฌุฑุฏ "ุญุงูˆูŠุฉ" ุชุญู…ู„ ุนุฏุฏ ู…ู† ุงู„ุชุญุงู„ูŠู„ ููŠ ู„ุญุธุฉ ู…ุนูŠู‘ู†ุฉ. ู„ูˆ ุงุชุฃุฌู„ ุชุญู„ูŠู„ ูˆุงุญุฏ ู…ู† ุจู†ู„ุŒ ูŠุชู†ู‚ู„ ู„ู€ sample ุขุฎุฑุŒ ูˆูŠุณุฌูŽู‘ู„ ุงู„ุชุบูŠูŠุฑ ููŠ ุณุฌู„ (log). ูƒู„ ุนู…ู„ูŠุฉ ุจุชุณุฌู„ ุชูˆู‚ูŠุชู‡ุง ูˆุงู„ู…ุณุชุฎุฏู… ุงู„ู„ูŠ ุนู…ู„ู‡ุง.

ูก. ุงู„ู€ Data Model ุงู„ู…ูˆุญูŽู‘ุฏ

ุงู„ุฌุฏูˆู„ ุงู„ู…ุญูˆุฑูŠ ุงู„ุฌุฏูŠุฏ: lab_sample_investigations

lab_sample_investigations
โ”œโ”€โ”€ id
โ”œโ”€โ”€ lab_sample_id              FK โ†’ lab_samples (ุงู„ู€ sample ุงู„ุญุงู„ูŠ)
โ”œโ”€โ”€ lab_investigation_id       FK โ†’ lab_investigations (ุงู„ุชุญู„ูŠู„ ุงู„ูุฑุฏูŠ โ€” ู„ูˆ panel memberุŒ ุฏู‡ ุงู„ู€ member ID)
โ”œโ”€โ”€ lab_request_investigation_id  FK โ†’ lab_request_investigations (ุงู„ู€ pivot ุงู„ุฃุตู„ูŠ)
โ”œโ”€โ”€ lab_request_id             FK โ†’ lab_requests (denormalized for fast queries)
โ”œโ”€โ”€ status                     ENUM (state machine ุจุงู„ุฃุณูู„)
โ”œโ”€โ”€ lab_external_lab_id        FK โ†’ lab_external_labs (ู„ู„ู€ outsourced ูู‚ุท)
โ”œโ”€โ”€ external_send_at           TIMESTAMP NULL
โ”œโ”€โ”€ external_received_at       TIMESTAMP NULL
โ”œโ”€โ”€ assigned_to_user_id        FK โ†’ users NULL (ู…ุณุคูˆู„ ุนู† ุงู„ู€ outsourced)
โ”œโ”€โ”€ retest_count               INT DEFAULT 0
โ”œโ”€โ”€ created_at, updated_at, deleted_at
โ””โ”€โ”€ UNIQUE(lab_sample_id, lab_investigation_id, deleted_at)

ุฌุฏูˆู„ ุงู„ุณุฌู„ (audit trail): lab_sample_investigation_logs

lab_sample_investigation_logs
โ”œโ”€โ”€ id
โ”œโ”€โ”€ lab_sample_investigation_id  FK
โ”œโ”€โ”€ lab_sample_id, lab_investigation_id  (denormalized)
โ”œโ”€โ”€ action                       ENUM('created','collected','received','rejected',
โ”‚                                  'deferred','cancelled','outsourced','received_back',
โ”‚                                  'result_entered','rerun','retracted','released',
โ”‚                                  'printed','published')
โ”œโ”€โ”€ from_status, to_status       ENUM
โ”œโ”€โ”€ reason_code                  STRING NULL (e.g. NOT_FAST, HEMOLYZED)
โ”œโ”€โ”€ reason_text                  TEXT NULL (ุณุจุจ ู†ุตูŠ ู„ู„ู€ defer/cancel/reject)
โ”œโ”€โ”€ result_value_before          TEXT NULL (ู„ู„ู€ rerun โ€” ู‚ูŠู…ุฉ ู‚ุจู„ ุงู„ู…ุณุญ)
โ”œโ”€โ”€ meta                         JSON NULL
โ”œโ”€โ”€ user_id                      FK โ†’ users
โ”œโ”€โ”€ ip_address, user_agent
โ””โ”€โ”€ created_at

ุชุนุฏูŠู„ุงุช ุนู„ู‰ ุฌุฏุงูˆู„ ู‚ุงุฆู…ุฉ

ุงู„ุฌุฏูˆู„ุงู„ุฅุถุงูุฉุงู„ูุงูŠุฏุฉ
lab_investigations tat_hours INT NULL ูˆู‚ุช ุงู„ุฅุฌุงุจุฉ ุงู„ู…ุชูˆู‚ุน ู„ู„ุชุญู„ูŠู„ ุฏุงุฎู„ูŠุงู‹ (TAT ุงู„ุงูุชุฑุงุถูŠ)
lab_external_lab_pricing tat_hours INT NULL TAT ู„ู„ู…ุนู…ู„ ุงู„ุฎุงุฑุฌูŠ ุฏู‡ ู„ู„ุชุญู„ูŠู„ ุฏู‡ (ูŠุทุบู‰ ุนู„ู‰ ุงู„ุงูุชุฑุงุถูŠ)
lab_results printable_comment, internal_note, defer_comment, entry_source ูุตู„ ุงู„ู€ ูฃ ุฃู†ูˆุงุน ูƒูˆู…ู†ุชุณ + ู…ู† ููŠู† ุฏุฎู„ุช ุงู„ู†ุชูŠุฌุฉ
lab_external_lab_referrals assigned_to_user_id FK ู…ุณุคูˆู„ ุฅุฑุณุงู„/ุงุณุชู„ุงู… ุงู„ุชุญู„ูŠู„ ุงู„ุฎุงุฑุฌูŠ

ูข. ุงู„ู€ State Machine ุงู„ู…ูˆุญูŽู‘ุฏ (ู„ูƒู„ ุชุญู„ูŠู„)

ูƒู„ lab_sample_investigation ุจูŠู…ุฑ ุจุญุงู„ุฉ ู…ู† ุงู„ุญุงู„ุงุช ุฏูŠ. ุงู„ู€ state machine ุจูŠุชู… ุงู†ูุงุฐู‡ ุนู„ู‰ ู…ุณุชูˆู‰ ุงู„ุชุญู„ูŠู„ ุงู„ูˆุงุญุฏุŒ ู…ุด ุงู„ู€ sample ุจุงู„ูƒุงู…ู„.
ุงู„ุญุงู„ุฉุงู„ูˆุตูุงู„ู€ Transitions ุงู„ู…ุณู…ูˆุญุฉ
pendingุงู„ุชุญู„ูŠู„ ุถู…ู† sample ุจุงู†ุชุธุงุฑ ุงู„ุชุฌู…ูŠุนโ†’ collected, deferred, cancelled, outsourced
collectedุงู„ู€ sample ุงุชุฌู…ุนุช ู…ู† ุงู„ู…ุฑูŠุถโ†’ received, rejected (ููŠ ุงู„ุงุณุชู‚ุจุงู„)
receivedุงู„ู€ sample ูˆุตู„ุช ุงู„ู…ุนู…ู„ (delivered)โ†’ in_progress, rejected, outsourced
in_progressุงุชุนู…ู„ ุนู„ูŠู‡ start ููŠ ุงู„ูƒุงู† ุจุงู†โ†’ result_entered, rejected, outsourced
result_enteredุงุชุฏุฎู„ุช ู†ุชูŠุฌุฉ (ุฃูˆู„ ู…ุฑุฉ) ู…ู† ุฃูŠ ู…ุตุฏุฑ (manual ุฃูˆ machine โ€” ู†ูุณ ุงู„ุญุงู„ุฉ)โ†’ validated, rerun, retracted, outsourced
validatedุงู„ู…ุณุคูˆู„ ุงู„ูู†ูŠ ูˆุซูŽู‘ู‚ ุงู„ู†ุชูŠุฌุฉโ†’ released, rerun, retracted
releasedุงุชุฃุฐู† ุจุฅุตุฏุงุฑ ุงู„ู†ุชูŠุฌุฉ ู„ู„ู…ุฑูŠุถโ†’ printed, published, retracted
printedุงู„ุชู‚ุฑูŠุฑ ุงุชุทุจุนโ†’ published, retracted
publishedุงุชู†ุดุฑ ู„ู„ู…ุฑูŠุถ ููŠ ุงู„ู€ portalโ†’ retracted (Unpublish)
deferredุงุชุฃุฌู„ ููŠ ุงู„ุชุฌู…ูŠุน (ู„ู…ุนุงุฏ ุชุงู†ูŠ)โ†’ recollected (sample ุฌุฏูŠุฏ)
rejectedุงุชุฑูุถ ููŠ ุงู„ุงุณุชู‚ุจุงู„ (ุชุงู„ู)โ†’ recollected (sample ุฌุฏูŠุฏ)
cancelledุงุชู„ุบู‰ ู†ู‡ุงุฆูŠุงู‹(terminal โ€” ูŠุฑุฌุน ุจู€ "Recollect")
outsourcedุงุชุจุนุช ู„ู…ุนู…ู„ ุฎุงุฑุฌูŠโ†’ external_in_progress โ†’ result_entered
retractedุงุชุณุญุจุช ุงู„ู†ุชูŠุฌุฉ (rerun ุฃูˆ unpublish) โ€” ู…ูุชูˆุญุฉ ู„ุฃูŠ ุนู…ู„ูŠุฉโ†’ result_entered (re-enter) / deferred / cancelled / outsourced / in_progress (rerun) / validated / released / published

ุงู„ู€ Actions โ†” Status Transitions

ุงู„ู€ ActionุฅูŠู‡ ุงู„ู„ูŠ ูŠุญุตู„
Collectูƒู„ rows pending ุนู„ู‰ ุงู„ู€ sample โ†’ collected. ู„ูˆ deferred ู…ูˆุฌูˆุฏุฉุŒ ุชุชุฌุงู‡ู„.
Defer (ููŠ ุงู„ุชุฌู…ูŠุน)ุงุฎุชุงุฑ ุงู„ู€ testsุŒ sample ุฌุฏูŠุฏ is_deferred=trueุŒ rows ุชู†ุชู‚ู„ ุฅู„ูŠู‡ ุจู€ status=deferred.
Cancelุงุฎุชุงุฑ ุงู„ู€ testsุŒ sample ุฌุฏูŠุฏุŒ rows status=cancelled. ู…ุด ู‡ุชุฑุฌุน ุชู„ู‚ุงุฆูŠุงู‹.
Send Outุงุฎุชุงุฑ ุงู„ู€ tests + ู…ุนู…ู„ ุฎุงุฑุฌูŠุŒ sample ุฌุฏูŠุฏุŒ rows status=outsourced + external_lab_id.
Reject (ููŠ ุงู„ุงุณุชู‚ุจุงู„)ุงุฎุชุงุฑ ุงู„ู€ testsุŒ rows ุนู„ู‰ ู†ูุณ sample โ†’ rejected. ุงู„ู€ sample ู…ูŠุชุญุฑูƒุด.
Recollectู…ู† deferred/rejected/cancelled โ†’ sample ุฌุฏูŠุฏ pendingุŒ rows ุชู†ุชู‚ู„.
Receivecollected โ†’ received. ูƒู„ rows ุนู„ู‰ ุงู„ู€ sample โ†’ received.
Start (ุงู„ูƒุงู† ุจุงู†)received โ†’ in_progress (ู„ูƒู„ row ููŠ ุงู„ู€ sample ุงู„ู„ูŠ ู…ุด outsourced/rejected).
Enter Resultin_progress โ†’ result_entered + ูŠู†ุดุฃ row ููŠ lab_results. ุงู„ู€ entry_source ุจูŠุชุญุฏุฏ ุญุณุจ ุงู„ู…ุตุฏุฑ (workflow/validation/external_lab/machine) โ€” ู†ูุณ ุงู„ุญุงู„ุฉุŒ ู†ูุณ ุงู„ู€ rowุŒ ุงุฎุชู„ุงู ุจุณ ููŠ metadata.
Rerunresult_entered/validated โ†’ retracted (ุณุงุจู‚ุงู‹) + result ุฌุฏูŠุฏ + log ููŠู‡ ุงู„ู‚ูŠู…ุฉ ุงู„ู‚ุฏูŠู…ุฉ.
Validate / Release / Print / Publishstatus progression normal.
Unpublish (Retract)ุฃูŠ ุญุงู„ุฉ ู…ู† released / printed / published โ†’ retracted. ุงู„ู†ุชูŠุฌุฉ ุชุฎุชููŠ ู…ู† ุจูˆุฑุชุงู„ ุงู„ู…ุฑูŠุถ ููˆุฑุงู‹. ุงู„ู€ test ูŠู‚ุฏุฑ ูŠุนู…ู„ ุจุนุฏู‡ุง ุฃูŠ ุนู…ู„ูŠุฉ (defer / cancel / send out / rerun / re-validate / re-release / re-publish).

ูฃ. ุงู„ุดุงุดุงุช (Mockups + Logic)

ูฃ.ูก ุดุงุดุฉ Collection /lab/samples

๐Ÿงช Collection Worklistูขูฆ ู…ุงูŠูˆ ูขู ูขูฆ
๐Ÿ“‹ Pending 12
โฑ Deferred 3
๐Ÿšซ Cancelled 1
๐Ÿ“ค Sent Out 5
๐Ÿ“œ History
Khalid Abdullah ยท MRN-000003LR-2026-00145 โ€” 2 tubes
Serum ยท BiochemistryCHOL, HDL, LDL, VLDL (TG deferred separately)2605266XHLQH-BIO
pending deferred cancelled outsourced

ุงู„ู€ Logic

ูฃ.ูข ุดุงุดุฉ Reception /lab/reception (ุฌุฏูŠุฏุฉ)

๐Ÿ“ฅ ReceptionScan barcode...
๐Ÿ“ฅ To Receive 8
โš  Rejected 2
๐Ÿ“œ History
Khalid Abdullah ยท MRN-000003 โ€” LR-2026-00145Collected: 14:23
Serum ยท BiochemistryCHOL, HDL, LDL, VLDL2605266XHLQH-BIO
collected (in)โ†’ received (out) ุฃูˆ rejected

ุงู„ู€ Logic

ูฃ.ูฃ ุดุงุดุฉ Workflow /lab/worklist (ุงู„ูƒุงู† ุจุงู† ู„ู„ู…ุนู…ู„ ุงู„ุฏุงุฎู„ูŠ)

ุงู„ู€ component ุงู„ูุนู„ูŠ: dept-worklist.component.ts (ูกูขูฆู  ุณุทุฑ). ุดุงุดุฉ ุงู„ูู†ูŠูŠู† ุฏุงุฎู„ ุฃู‚ุณุงู… ุงู„ู…ุนู…ู„ ุจูŠุฏุฎู„ูˆุง ููŠู‡ุง ุงู„ู†ุชุงุฆุฌ. ุงู„ู€ actions ุงู„ู„ูŠ ุจุชู€ run ู‡ู†ุง ู‡ูŠ subset ู…ู† ุงู„ู„ูŠ ุจุชู€ run ููŠ ุงู„ู€ validation screen.
๐Ÿงฌ Biochemistry Section9 received ยท 4 in-progress ยท 12 completed
๐Ÿ“ฅ Received (9)
Khalid ยท LR-145
CHOL, HDL, LDL, VLDL
โš™ In Progress (4)
Sara ยท LR-140 โ€” TG
Value: 152 mg/dL
โœ“ Completed (12)
Ahmed ยท LR-138 โ€” HDL โ†ปร—1
Value: 48 mg/dL

ุงู„ู€ Logic ุงู„ุฌุฏูŠุฏุฉ

ูฃ.ูค ุดุงุดุฉ Validation /lab/validation (superset ู…ู† Workflow)

ุงู„ู€ component ุงู„ูุนู„ูŠ: validation-worklist.component.ts (ูกูจูฉูข ุณุทุฑ). ู†ูุณ ู‚ุฏุฑุงุช ุดุงุดุฉ ุงู„ู€ Workflow + ุฅุถุงูุงุช: validate / release / print / publish. ุงู„ูู†ูŠ ุงู„ู€ senior ุฃูˆ ุงู„ู€ pathologist ู‡ูˆ ุงู„ู„ูŠ ุจูŠุดุชุบู„ ุนู„ูŠู‡ุง.
โœ… ValidationFilter: All sections ยท Status: result_entered
TestPatientValueReferenceFlagSample Hist.Patient Hist.Actions
TGKhalid (LR-145)1520-150โ†‘ High โ†ป x1
was: 168
3 results
last: 134 (3 mo)
HDLSara (LR-140) EXT5240-60Normal โ€”1 result
ุจุนุฏ Validate โ†’ ุฒุฑุงุฑ ุŒ ุจุนุฏ Release โ†’ ูˆ
ุจุนุฏ Publish โ†’ ุฒุฑุงุฑ โ€” ูŠุฑุฌุน ุงู„ุชุญู„ูŠู„ ู„ู€ retracted. ุงู„ู€ test ูŠุฎุชููŠ ู…ู† ุจูˆุฑุชุงู„ ุงู„ู…ุฑูŠุถ ููˆุฑุงู‹ ูˆูŠุจู‚ู‰ ู…ูุชูˆุญ ู„ุฃูŠ ุนู…ู„ูŠุฉ: defer, cancel, send out, rerun, re-validate, re-publish.

ุงู„ู€ Logic

ูฃ.ูฅ ุดุงุดุฉ Referrals /lab/referrals

๐Ÿ”„ External Referrals
โŒ› Pending Send 3
๐Ÿ“ค Sent 5
๐Ÿ“ฅ Received 2
โœ“ Completed
TestPatient/ReqExternal LabPriceTATAssigned ToSent AtActions
FT3Khalid ยท LR-145Mokattam Lab120 EGP4 hrsTech: Ahmedโ€”
FT4Sara ยท LR-140Mokattam Lab110 EGP4 hrsTech: Ahmed10:20

ุงู„ู€ Logic

ูฃ.ูฆ ู…ุตุงุฏุฑ ุงู„ู†ุชุงุฆุฌ (Result Entry Sources)

ุงู„ู†ุชูŠุฌุฉ ู„ุฃูŠ ุชุญู„ูŠู„ ู…ู…ูƒู† ุชูŠุฌูŠ ู…ู† ูค ู…ุตุงุฏุฑ. ูƒู„ ู…ุตุฏุฑ ูŠุณุฌู„ ููŠ ุนู…ูˆุฏ lab_results.entry_source + ูŠู†ุชุฌ log ููŠ lab_sample_investigation_logs.
ุงู„ู…ุตุฏุฑุงู„ู€ flowุงู„ู€ entry_source
1. Workflow Screen Manual ุงู„ูู†ูŠ ูŠุฏุฎู„ ุงู„ู†ุชูŠุฌุฉ ููŠ ุงู„ูƒุงู† ุจุงู† ุฃุซู†ุงุก ุงู„ู…ุนุงู„ุฌุฉ workflow
2. Validation Screen Manual ุงู„ูู†ูŠ ูŠุฏุฎู„ ุฃูˆ ูŠุนุฏู„ ุงู„ู†ุชูŠุฌุฉ ููŠ ุตูุญุฉ ุงู„ู€ validation validation
3. External Lab EXT ุงู„ูู†ูŠ ุงู„ู…ุณุคูˆู„ ูŠุณุชู„ู… ุงู„ู†ุชูŠุฌุฉ ู…ู† ุงู„ู…ุนู…ู„ ุงู„ุฎุงุฑุฌูŠ ูˆูŠุฏุฎู„ู‡ุง external_lab
4. Lab Analyzer (Machine API) AUTO ุงู„ุฌู‡ุงุฒ ุจูŠุจุนุช ุงู„ู†ุชูŠุฌุฉ ุจุงู„ู€ barcode โ†’ matching ุชู„ู‚ุงุฆูŠ โ†’ ุฏูƒุชูˆุฑ ูŠู€ validate ุฃูˆ ูŠุนู…ู„ rerun machine

ุงู„ูู„ุณูุฉ: Machine = Manual + Metadata

ุงู„ู€ machine result ูˆุงู„ู€ manual result ู‡ู…ุง ู†ูุณ ุงู„ูƒูŠุงู† โ€” ูƒู„ ุงู„ู„ูŠ ุจูŠุชุบูŠุฑ: ู…ุตุฏุฑ ุงู„ุฅุฏุฎุงู„ + ุจุนุถ ุงู„ู€ metadata.

ู†ูุณ lab_result rowุŒ ู†ูุณ ุงู„ู€ status flow (result_entered โ†’ validated โ†’ ...)ุŒ ู†ูุณ ุงู„ู€ rerun/retract behavior. ุงู„ูุฑู‚ ูู‚ุท:
ManualMachine
entry_sourceworkflow / validation / external_labmachine
entered_byuser_idnull (ุฃูˆ machine_user_id)
entered_atูˆู‚ุช ุงู„ุฅุฏุฎุงู„ูˆู‚ุช ุงุณุชู„ุงู… ู…ู† ุงู„ุฌู‡ุงุฒ
machine_idnullุงู„ู…ุนุฑู‘ู ู„ู„ุฌู‡ุงุฒ
raw_data (JSON)nullุงู„ู€ raw payload ู…ู† ุงู„ุฌู‡ุงุฒ
ุงู„ู„ูŠ ุจู†ุญุชุงุฌู‡: ู†ุถูŠู machine_id + raw_data ุนู„ู‰ lab_results (ุฃูˆ ู†ุณูŠุจ ุงู„ู€ lab_machine_results ู…ู†ูุตู„ ูˆู†ุนู…ู„ FK).
ุงู„ุชูˆุณุนุฉ ุงู„ู…ุณุชู‚ุจู„ูŠุฉ (ู„ุงุญู‚ุงู‹): ู…ุญุทู‘ุด ููŠ ุงู„ู€ scope ุงู„ุญุงู„ูŠ โ€” ุจุณ ุงู„ู€ state machine ุจูŠุงุฎุฏู‡ู… ููŠ ุงู„ุงุนุชุจุงุฑ.

ูฃ.ูง Smart Search + Bulk Operations

ููŠ ุดุงุดุงุช ุงู„ู€ Workflow ูˆ Validation โ€” ุงู„ูู†ูŠ ูŠู‚ุฏุฑ ูŠุตููŠ ูˆูŠุนู…ู„ ุงุฎุชูŠุงุฑ ุฌู…ุงุนูŠ ุซู… action ูˆุงุญุฏุฉ ุนู„ู‰ ูƒู„ ุงู„ู…ุฎุชุงุฑ:

ุงู„ู€ Mockup

โœ… Validation โ€” Bulk ModeFiltered: CBC ยท Today ยท entered
๐Ÿ” Filters:
โœ“ 24 selected Clear selection
TestPatientValueRefFlagSourceTime
CBC ยท WBCKhalid (LR-145)6.84-11N๐Ÿ”ฌ Machine14:23
CBC ยท WBCSara (LR-140)5.24-11N๐Ÿ”ฌ Machine14:18
CBC ยท WBCAhmed (LR-138)11.54-11โ†‘๐Ÿ”ฌ Machine14:05
CBC ยท WBCMona (LR-133)4.14-11N๐Ÿ‘ค Manual13:50
Showing 24 of 24 CBC results from today

ุงู„ู€ Use Cases ุงู„ูุนู„ูŠุฉ

Use CaseFilter AppliedBulk Action
ุงู„ู…ูˆุงูู‚ุฉ ุงู„ุฌู…ุงุนูŠุฉ ุนู„ู‰ CBC ุงู„ู†ู‡ุงุฑุฏู‡ Test: CBC ยท Status: entered ยท Date: Today Bulk Validate โ†’ Bulk Release
ุทุจุงุนุฉ ูƒู„ ุชู‚ุงุฑูŠุฑ ุงู„ูŠูˆู… Status: released ยท Date: Today Bulk Print
ู†ุดุฑ ุงู„ุชู‚ุงุฑูŠุฑ ุงู„ู„ูŠ ุงุชุทุจุนุช Status: printed ยท Date: Today Bulk Publish
QC review ู„ู„ู€ CBC ุงู„ูŠูˆู… Test: CBC ยท Date: Today ยท Flag: All (View Only โ€” ู…ู‚ุงุฑู†ุฉ ุงู„ู‚ูŠู… ุจุฏูˆู† action)
ุฅุนุงุฏุฉ ูุญุต ูƒู„ ุงู„ู†ุชุงุฆุฌ ุงู„ุฎุงุฑุฌุฉ ุนู† ุงู„ู€ range Date: Today ยท Flag: Critical Bulk Rerun (ุฃูˆ Bulk Send Out)
ุฅู„ุบุงุก ูƒู„ ุชุญุงู„ูŠู„ request ุงุชุงุฌู„ Patient: X ยท Status: entered Bulk Cancel

ุงู„ู€ Backend

ูƒู„ action ุฌู…ุงุนูŠุฉ ุจุชุฑุณู„ ุทู„ุจ ูˆุงุญุฏ ุจู€ investigation_ids[]:
POST /lis/sample-investigations/bulk-action
{
  action: "validate" | "release" | "print" | "publish" | "unpublish" |
          "rerun" | "send_out" | "cancel" | "defer",
  sample_investigation_ids: [123, 124, 125, ...],
  reason: "..." (ู„ู„ู€ cancel/defer/send_out)
  external_lab_id: 5  (ู„ู„ู€ send_out)
}
ุงู„ู€ BE ุจูŠู€ wrap ููŠ transaction ูˆูŠุฑุฌุน counts: { succeeded: 22, failed: 2, errors: [...] }.

QC / Precision Check Mode

ุฒุฑุงุฑ ุฎุงุต "QC View" ูŠูู„ุชุฑ ูƒู„ ุงู„ู†ุชุงุฆุฌ ุจุชุงุนุช ุชุญู„ูŠู„ ู…ุนูŠู† ููŠ ูุชุฑุฉ + ูŠุนุฑุถู‡ู… ููŠ: ู…ู…ูƒู† ู†ุถุน ุฏู‡ ููŠ Phase ูค ูƒู…ูŠุฒุฉ ุฅุถุงููŠุฉ.

ูค. ุงู„ู€ Comments Architecture

ุงู„ู†ูˆุนุนู…ูˆุฏุงู„ุงุณุชุฎุฏุงู…ูŠุธู‡ุฑ ููŠ
Printable Commentlab_results.printable_commentุชุนู„ูŠู‚ ูู†ูŠ ุนู„ู‰ ุงู„ู†ุชูŠุฌุฉ ูŠุทุจุน ู…ุน ุงู„ุชู‚ุฑูŠุฑุงู„ุชู‚ุฑูŠุฑ ุงู„ู…ุทุจูˆุน ู„ู„ู…ุฑูŠุถ
Internal Notelab_results.internal_noteู…ู„ุงุญุธุฉ ุจูŠู† ุงู„ูู†ูŠูŠู† ูู‚ุท (ู…ุด ุจุชุธู‡ุฑ ู„ู„ู…ุฑูŠุถ)ุดุงุดุฉ ุงู„ู€ workflow + validation
Action Reasonlab_sample_investigation_logs.reason_textุณุจุจ ุงู„ู€ defer/cancel/reject/rerunุณุฌู„ ุงู„ุนู…ู„ูŠุงุช ุนู„ู‰ ุงู„ุชุญู„ูŠู„

ูฅ. ุงู„ู€ Audit Trail

ูƒู„ ุนู…ู„ูŠุฉ = log row: ูŠุนู†ูŠ ุชู‚ุฏุฑ ุชุทู„ุน ุชู‚ุฑูŠุฑ: "ุงู„ุชุญู„ูŠู„ X ุงุชุฃุฌู„ ู…ุฑุชูŠู†ุŒ ุงุชุฑูุถ ู…ุฑุฉุŒ ุงุชุนู…ู„ rerun ู…ุฑุฉุŒ ุฎุฏ ูค ุฃูŠุงู… ุนู„ุดุงู† ูŠุฎู„ุต".

ูฆ. ุฎุทุฉ ุงู„ุชู†ููŠุฐ (5 Phases)

ูกDatabase + Models

ูขBE Writers

ูฃBE Readers + Listeners

ูคFrontend

ูฅCleanup

ูง. ุงู„ู„ูŠ ู‡ู†ุณุชููŠุฏ ู…ู†ู‡ ู…ู† ุงู„ู…ูˆุฌูˆุฏ (ู„ุง ู†ุนูŠุฏ ูƒุชุงุจุชู‡)

ุงู„ู„ูŠ ู…ูˆุฌูˆุฏูƒูŠู ู†ุณุชููŠุฏ ู…ู†ู‡
LabResultAuditLog + retest_ofุฃุณุงุณ ุงู„ู€ rerun history โ€” ู†ูˆุณุนู‡ ู„ูŠูƒูˆู† lab_sample_investigation_logs
ุงู„ู€ Defer dialog ุงู„ุญุงู„ูŠ ุจู€ panel membersู†ุทูˆุฑู‡ ู„ูŠูƒูˆู† component ู…ุดุชุฑูƒ ูŠุณุชุฎุฏู… ููŠ Defer/Cancel/Send Out/Reject
dept-worklist.component.ts (ุงู„ู€ workflow)ู†ุถูŠู ุงู„ู€ actions ุงู„ุฌุฏูŠุฏุฉ ูู‚ุท (rerun ูƒุฒุฑุŒ cancelุŒ send-out ูƒุฒุฑ) โ€” ุงู„ู€ structure ุงู„ู‚ุงุฆู… ุจูŠุจู†ูŠ ุงู„ู€ rows ู…ู† lab_resultsุŒ ู‡ู†ุฎู„ูŠู‡ุง ุชุจู†ูŠ ู…ู† lab_sample_investigations
validation-worklist.component.tsู†ูุณู‡ุง ู„ูƒู† ู…ุน ุฅุถุงูุฉ ุนู…ูˆุฏูŠู† history (sample rerun + patient longitudinal). ุงู„ู€ validate/release/print/publish ู…ูˆุฌูˆุฏูŠู† ูุนู„ุงู‹.
ุงู„ู€ Machine integration (LabMachineResult)ู…ูˆุฌูˆุฏ ุจุงู„ูƒุงู…ู„ (matching + approve/reject). ู†ุถูŠู ูู‚ุท: ุฑุจุทู‡ ุจู€ lab_sample_investigations ุจุฏู„ ู…ุง ูŠุฑุจุท ุจู€ lab_results ู…ุจุงุดุฑุฉ ุนู†ุฏ ุงู„ู€ pending state.
Referrals component + serviceู†ุถูŠู TAT + Assigned To + UI tabs
splitTestCodes / buildPanelMemberMapูŠู†ุชู‡ูŠ ุนู…ุฑู‡ู… โ€” ู‡ู†ุดูŠู„ู‡ู… ุจุนุฏ ู…ุง ุงู„ู€ FE ูŠู‚ุฑุฃ ู…ู† sample.investigations

ูจ. ู…ูŠุฒุงุช ู‡ู†ุญุตู„ ุนู„ูŠู‡ุง ู…ุฌุงู†ุงู‹

  1. Audit ุดุงู…ู„: ูƒู„ ุชุญู„ูŠู„ ุนู†ุฏู‡ ุณุฌู„ ูƒุงู…ู„ ุจูƒู„ ุนู…ู„ูŠุงุชู‡
  2. Reports ุฌุฏูŠุฏุฉ: "ูƒู… ุชุญู„ูŠู„ ุงุชุฃุฌู„ ุงู„ูŠูˆู…"ุŒ "ู…ุชูˆุณุท ุฒู…ู† ุงู„ุงุณุชู‚ุจุงู„"ุŒ "TAT ุงู„ูุนู„ูŠ vs ุงู„ุงูุชุฑุงุถูŠ"
  3. Per-test SLA tracking: ู…ู…ูƒู† ุชู‚ูˆู„ "ุฏู‡ ุชุญู„ูŠู„ ุชุฃุฎุฑ ุนู† ุงู„ู€ TAT ุจุชุงุนู‡"
  4. Sample history: ู…ู…ูƒู† ุชุฑุฌุน ู„ุฃูŠ sample ูˆุชุดูˆู ุฑุญู„ุชู‡ุง ูƒุงู…ู„ุฉ
  5. Patient longitudinal: ู†ุชุงุฆุฌ ุงู„ู…ุฑูŠุถ ุนุจุฑ ุงู„ุฒู…ู† ู„ู†ูุณ ุงู„ุชุญู„ูŠู„
  6. No more "panel as one test": ูƒู„ member ูŠุชู… ุชุชุจุนู‡ ุจุดูƒู„ ู…ุณุชู‚ู„

ูฉ. ุงู„ู„ูŠ ู…ุญุชุงุฌ ุชุฃูƒูŠุฏูƒ ุนู„ูŠู‡

  1. ุงู„ู„ูŠ ุนุฑุถุชู‡ ุจุงู„ู€ scope ุฏู‡ ู…ู‚ุจูˆู„ุŸ ูˆู„ุง ููŠ ุญุงุฌุฉ ุชุญุจ ุชุดูŠู„ู‡ุง ุฃูˆ ุชุฒูˆุฏู‡ุงุŸ
  2. ุงู„ู€ Reception screen ู‡ู„ ุนุงูŠุฒู‡ุง ู…ู†ูุตู„ุฉ ุนู† CollectionุŸ (Workflow ุตู†ุงุนุฉ ุงู„ู…ุนู…ู„: collection ุจูŠุนู…ู„ู‡ ุงู„ู€ phlebotomist ููŠ ุนูŠุงุฏุฉุŒ reception ุจูŠุนู…ู„ู‡ ูู†ูŠ ุงู„ู€ lab โ€” ูู…ู†ุทู‚ูŠ ูŠุจู‚ูˆุง ู…ู†ูุตู„ูŠู†).
  3. ุงู„ู€ Cancel ู‡ู„ cancellation ู†ู‡ุงุฆูŠุฉ ุฃู… ู†ุณู…ุญ ุจู€ revivalุŸ
  4. ุงู„ู€ Comments โ€” ูฃ ูƒุงููŠูŠู† (printable/internal/action_reason) ูˆู„ุง ุชุญุชุงุฌ ุชูุตูŠู„ ุชุงู†ูŠุŸ
  5. ุงู„ู€ TAT โ€” ุงู„ุชุญุฐูŠุฑ ู„ู…ุง sample ูŠุชุนุฏู‰ ุงู„ู€ TAT ูŠูƒูˆู† ุนู„ู‰ ุดุงุดุฉ ุงู„ู€ KanbanุŸ ูˆู„ุง ููŠ ุตูุญุฉ ู…ู†ูุตู„ุฉุŸ
  6. Assigned To ู„ู„ู€ referrals โ€” ู‡ู„ ุงู„ู„ูŠ ูŠุณุชู„ู… ุงู„ุชุญู„ูŠู„ ู‡ูˆ ู†ูุณู‡ ุงู„ู„ูŠ ุจุนุช ูˆู„ุง ู…ุฎุชู„ูุŸ
ุจุนุฏ ู…ุง ุชุฃูƒุฏุŒ ุฃุจุฏุฃ Phase 1 ุนู„ู‰ ุงู„ู€ dev backend.