Files
ladill-care/config/care_specialty_shell.php
T
isaaccladandCursor 612e021e85
Deploy Ladill Care / deploy (push) Successful in 41s
Reserve floor queues for clinical staff and deepen specialty forms.
Hospital admins no longer see specialty/queue floor nav; Call next is a full-width button; specialty encounters open module-specific clinical forms instead of the general consultation page.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-18 12:04:05 +00:00

489 lines
24 KiB
PHP

<?php
/**
* Specialty shell overlays: stage maps, billable service catalogs, workspace tabs.
* Merged onto catalog entries from care_specialty_modules.php by SpecialtyShellService.
*
* Modules without an entry inherit the generic defaults below.
*
* @return array{
* defaults: array<string, mixed>,
* modules: array<string, array<string, mixed>>
* }
*/
return [
'defaults' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'in_care', 'label' => 'In care', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
[
'code' => 'specialty.consultation',
'label' => 'Specialty consultation',
'amount_minor' => (int) env('CARE_CONSULTATION_FEE_MINOR', 5000),
'type' => 'consultation',
],
],
'workspace_tabs' => [
'overview' => 'Overview',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
'actions' => [
'call_next' => 'Call next patient',
'start' => 'Start specialty encounter',
'complete' => 'Complete',
'order_test' => 'Order test',
'prescribe' => 'Prescribe',
'invoice' => 'Generate invoice',
'discharge' => 'Discharge',
],
],
'modules' => [
'emergency' => [
'stages' => [
['code' => 'arrival', 'label' => 'Arrival / triage', 'queue_point' => 'waiting'],
['code' => 'resus', 'label' => 'Resuscitation', 'queue_point' => 'resus'],
['code' => 'treatment', 'label' => 'Treatment bay', 'queue_point' => 'bay'],
['code' => 'observation', 'label' => 'Observation', 'queue_point' => 'obs'],
['code' => 'disposition', 'label' => 'Disposition', 'queue_point' => null],
],
'services' => [
['code' => 'er.triage', 'label' => 'Emergency triage', 'amount_minor' => 0, 'type' => 'consultation'],
['code' => 'er.consultation', 'label' => 'Emergency consultation', 'amount_minor' => 8000, 'type' => 'consultation'],
['code' => 'er.procedure', 'label' => 'Emergency procedure', 'amount_minor' => 15000, 'type' => 'procedure'],
['code' => 'er.observation', 'label' => 'Observation bed (per hour)', 'amount_minor' => 3000, 'type' => 'misc'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'triage' => 'Triage',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'blood_bank' => [
'stages' => [
['code' => 'request', 'label' => 'Request received', 'queue_point' => 'waiting'],
['code' => 'crossmatch', 'label' => 'Cross-match', 'queue_point' => 'lab'],
['code' => 'issue', 'label' => 'Product issue', 'queue_point' => 'issue'],
['code' => 'transfusion', 'label' => 'Transfusion', 'queue_point' => null],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'bb.crossmatch', 'label' => 'Cross-match', 'amount_minor' => 4000, 'type' => 'lab'],
['code' => 'bb.whole_blood', 'label' => 'Whole blood unit', 'amount_minor' => 12000, 'type' => 'misc'],
['code' => 'bb.packed_rbc', 'label' => 'Packed RBC unit', 'amount_minor' => 15000, 'type' => 'misc'],
['code' => 'bb.platelets', 'label' => 'Platelets unit', 'amount_minor' => 18000, 'type' => 'misc'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'requests' => 'Requests',
'inventory' => 'Inventory',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'dentistry' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting room', 'queue_point' => 'waiting'],
['code' => 'chair', 'label' => 'Chair assignment', 'queue_point' => 'chair'],
['code' => 'procedure', 'label' => 'Procedure', 'queue_point' => 'chair'],
['code' => 'recovery', 'label' => 'Recovery', 'queue_point' => 'recovery'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'den.consult', 'label' => 'Dental consultation', 'amount_minor' => 5000, 'type' => 'consultation'],
['code' => 'den.cleaning', 'label' => 'Scaling / polishing', 'amount_minor' => 8000, 'type' => 'procedure'],
['code' => 'den.fill', 'label' => 'Filling', 'amount_minor' => 12000, 'type' => 'procedure'],
['code' => 'den.extraction', 'label' => 'Extraction', 'amount_minor' => 15000, 'type' => 'procedure'],
['code' => 'den.xray', 'label' => 'Dental X-ray', 'amount_minor' => 4000, 'type' => 'imaging'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'odontogram' => 'Chart',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'ophthalmology' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting room', 'queue_point' => 'waiting'],
['code' => 'exam', 'label' => 'Eye exam', 'queue_point' => 'chair'],
['code' => 'procedure', 'label' => 'Procedure / treatment', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'eye.consult', 'label' => 'Eye consultation', 'amount_minor' => 6000, 'type' => 'consultation'],
['code' => 'eye.refraction', 'label' => 'Refraction / glasses exam', 'amount_minor' => 4000, 'type' => 'procedure'],
['code' => 'eye.iop', 'label' => 'IOP / pressure check', 'amount_minor' => 3000, 'type' => 'procedure'],
['code' => 'eye.fundus', 'label' => 'Fundus examination', 'amount_minor' => 5000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'exam' => 'Eye exam',
'refraction' => 'Refraction',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'physiotherapy' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'assessment', 'label' => 'Assessment', 'queue_point' => 'chair'],
['code' => 'treatment', 'label' => 'Treatment session', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'pt.assessment', 'label' => 'Physio assessment', 'amount_minor' => 5000, 'type' => 'consultation'],
['code' => 'pt.session', 'label' => 'Treatment session', 'amount_minor' => 7000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'assessment' => 'Assessment',
'session' => 'Session notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'maternity' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'antenatal', 'label' => 'Antenatal review', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'mat.anc', 'label' => 'Antenatal visit', 'amount_minor' => 5000, 'type' => 'consultation'],
['code' => 'mat.ultrasound', 'label' => 'Obstetric ultrasound', 'amount_minor' => 12000, 'type' => 'imaging'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'antenatal' => 'Antenatal',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'radiology' => [
'stages' => [
['code' => 'request', 'label' => 'Request received', 'queue_point' => 'waiting'],
['code' => 'imaging', 'label' => 'Imaging', 'queue_point' => 'chair'],
['code' => 'reporting', 'label' => 'Reporting', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'rad.xray', 'label' => 'X-ray', 'amount_minor' => 8000, 'type' => 'imaging'],
['code' => 'rad.ultrasound', 'label' => 'Ultrasound', 'amount_minor' => 15000, 'type' => 'imaging'],
['code' => 'rad.ct', 'label' => 'CT scan', 'amount_minor' => 45000, 'type' => 'imaging'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'request' => 'Imaging request',
'report' => 'Report',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'cardiology' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'exam', 'label' => 'Cardiac exam', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'car.consult', 'label' => 'Cardiology consultation', 'amount_minor' => 8000, 'type' => 'consultation'],
['code' => 'car.ecg', 'label' => 'ECG', 'amount_minor' => 5000, 'type' => 'procedure'],
['code' => 'car.echo', 'label' => 'Echocardiogram', 'amount_minor' => 25000, 'type' => 'imaging'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'exam' => 'Cardiac exam',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'psychiatry' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'assessment', 'label' => 'Mental health assessment', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'psy.consult', 'label' => 'Psychiatry consultation', 'amount_minor' => 8000, 'type' => 'consultation'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'assessment' => 'Assessment',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'pediatrics' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'exam', 'label' => 'Pediatric exam', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'ped.consult', 'label' => 'Pediatric consultation', 'amount_minor' => 5000, 'type' => 'consultation'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'exam' => 'Pediatric exam',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'orthopedics' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'exam', 'label' => 'Ortho exam', 'queue_point' => 'chair'],
['code' => 'procedure', 'label' => 'Procedure / casting', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'ort.consult', 'label' => 'Orthopedic consultation', 'amount_minor' => 6000, 'type' => 'consultation'],
['code' => 'ort.cast', 'label' => 'Casting / splinting', 'amount_minor' => 10000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'exam' => 'Ortho exam',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'ent' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'exam', 'label' => 'ENT exam', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'ent.consult', 'label' => 'ENT consultation', 'amount_minor' => 6000, 'type' => 'consultation'],
['code' => 'ent.procedure', 'label' => 'ENT procedure', 'amount_minor' => 12000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'exam' => 'ENT exam',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'oncology' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'review', 'label' => 'Oncology review', 'queue_point' => 'chair'],
['code' => 'treatment', 'label' => 'Treatment', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'onc.consult', 'label' => 'Oncology consultation', 'amount_minor' => 10000, 'type' => 'consultation'],
['code' => 'onc.chemo', 'label' => 'Chemo day-care session', 'amount_minor' => 50000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'review' => 'Oncology review',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'renal' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'dialysis', 'label' => 'Dialysis / clinic', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'ren.consult', 'label' => 'Nephrology consultation', 'amount_minor' => 8000, 'type' => 'consultation'],
['code' => 'ren.dialysis', 'label' => 'Dialysis session', 'amount_minor' => 35000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'session' => 'Renal session',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'surgery' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'preop', 'label' => 'Pre-op assessment', 'queue_point' => 'chair'],
['code' => 'postop', 'label' => 'Post-op review', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'sur.consult', 'label' => 'Surgical consultation', 'amount_minor' => 8000, 'type' => 'consultation'],
['code' => 'sur.preop', 'label' => 'Pre-op assessment', 'amount_minor' => 5000, 'type' => 'consultation'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'preop' => 'Pre-op',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'vaccination' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'screening', 'label' => 'Screening', 'queue_point' => 'chair'],
['code' => 'vaccinate', 'label' => 'Vaccination', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'vax.admin', 'label' => 'Vaccine administration', 'amount_minor' => 3000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'screening' => 'Screening',
'administration' => 'Administration',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'pathology' => [
'stages' => [
['code' => 'request', 'label' => 'Specimen received', 'queue_point' => 'waiting'],
['code' => 'processing', 'label' => 'Processing', 'queue_point' => 'lab'],
['code' => 'reporting', 'label' => 'Reporting', 'queue_point' => 'lab'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'path.histo', 'label' => 'Histopathology', 'amount_minor' => 20000, 'type' => 'lab'],
['code' => 'path.cyto', 'label' => 'Cytology', 'amount_minor' => 15000, 'type' => 'lab'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'request' => 'Specimen request',
'report' => 'Report',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'infusion' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'infusion', 'label' => 'Infusion', 'queue_point' => 'chair'],
['code' => 'observation', 'label' => 'Observation', 'queue_point' => 'obs'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'inf.session', 'label' => 'Infusion session', 'amount_minor' => 15000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'session' => 'Infusion session',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'dermatology' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'exam', 'label' => 'Skin exam', 'queue_point' => 'chair'],
['code' => 'procedure', 'label' => 'Procedure', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'der.consult', 'label' => 'Dermatology consultation', 'amount_minor' => 6000, 'type' => 'consultation'],
['code' => 'der.procedure', 'label' => 'Skin procedure', 'amount_minor' => 12000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'exam' => 'Skin exam',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'podiatry' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'exam', 'label' => 'Foot exam', 'queue_point' => 'chair'],
['code' => 'treatment', 'label' => 'Treatment', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'pod.consult', 'label' => 'Podiatry consultation', 'amount_minor' => 5000, 'type' => 'consultation'],
['code' => 'pod.treatment', 'label' => 'Foot treatment', 'amount_minor' => 8000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'exam' => 'Foot exam',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'fertility' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'consult', 'label' => 'Fertility consult', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'fer.consult', 'label' => 'Fertility consultation', 'amount_minor' => 10000, 'type' => 'consultation'],
['code' => 'fer.scan', 'label' => 'Pelvic / follicular scan', 'amount_minor' => 15000, 'type' => 'imaging'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'consult' => 'Fertility consult',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
'child_welfare' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'growth', 'label' => 'Growth / wellness', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'cwc.visit', 'label' => 'Well-child visit', 'amount_minor' => 3000, 'type' => 'consultation'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'growth' => 'Growth monitoring',
'clinical_notes' => 'Clinical notes',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
],
],
];