1, 'default_template' => 'legacy_clinic', /* | Facility category → which modules/features to surface. Category controls | features, NOT patient flow (that is the workflow template's job). */ 'categories' => [ 'hospital' => [ 'label' => 'Hospital', 'modules' => ['lab', 'pharmacy', 'imaging', 'billing'], 'default_template' => 'public_hospital_gh', ], 'clinic' => [ 'label' => 'Clinic', 'modules' => ['pharmacy', 'billing'], 'default_template' => 'cashless_clinic', ], 'specialist' => [ 'label' => 'Specialist practice', 'modules' => ['billing'], 'default_template' => 'specialist_practice', ], 'diagnostic' => [ 'label' => 'Diagnostic laboratory', 'modules' => ['lab', 'billing'], 'default_template' => 'diagnostic_centre', ], 'imaging' => [ 'label' => 'Imaging centre', 'modules' => ['imaging', 'billing'], 'default_template' => 'diagnostic_centre', ], 'pharmacy' => [ 'label' => 'Pharmacy', 'modules' => ['pharmacy', 'billing'], 'default_template' => 'pharmacy_led', ], 'dental' => [ 'label' => 'Dental clinic', 'modules' => ['pharmacy', 'billing'], 'default_template' => 'cashless_clinic', ], 'eye' => [ 'label' => 'Eye clinic', 'modules' => ['pharmacy', 'billing'], 'default_template' => 'cashless_clinic', ], 'maternity' => [ 'label' => 'Maternity home', 'modules' => ['lab', 'pharmacy', 'billing'], 'default_template' => 'private_hospital', ], 'herbal_hospital' => [ 'label' => 'Herbal hospital', 'modules' => ['lab', 'pharmacy', 'billing'], 'default_template' => 'herbal_hospital', ], 'herbal_clinic' => [ 'label' => 'Herbal clinic', 'modules' => ['pharmacy', 'billing'], 'default_template' => 'herbal_clinic', ], ], 'payment_modes' => [ 'internal_cashier' => 'Internal cashier', 'external_bank' => 'External bank / payment office', 'digital' => 'Digital (MoMo / card / Paystack)', ], 'clearance_methods' => [ 'payment' => 'Payment received', 'bank_receipt' => 'External bank receipt verified', 'insurance' => 'Insurance authorization', 'credit' => 'Approved credit', 'waiver' => 'Waiver', 'override' => 'Authorized override', ], 'obligation_statuses' => [ 'pending' => 'Pending', 'authorized' => 'Insurance authorized', 'paid' => 'Paid', 'waived' => 'Waived', 'deferred' => 'Deferred / credit', 'void' => 'Void', ], 'stage_types' => [ 'registration' => 'Registration', 'payment' => 'Payment', 'triage' => 'Triage', 'consultation' => 'Consultation', 'laboratory' => 'Laboratory', 'imaging' => 'Imaging', 'procedure' => 'Procedure', 'pharmacy' => 'Pharmacy / dispensing', 'results' => 'Results', 'exit' => 'Exit', 'custom' => 'Custom', ], 'templates' => [ /* | Legacy Clinic — mirrors Care's pre-workflow behavior. No financial | gates. Used to migrate existing orgs so nothing changes for them. */ 'legacy_clinic' => [ 'label' => 'Legacy (no gates)', 'description' => 'Current Ladill Care behavior — reception, consultation, pharmacy with billing after service. No payment gates.', 'stages' => [ ['code' => 'reception', 'name' => 'Reception', 'type' => 'registration', 'queue_context' => 'reception', 'department_type' => 'outpatient', 'default_next' => 'consultation'], ['code' => 'consultation', 'name' => 'Consultation', 'type' => 'consultation', 'queue_context' => 'consultation', 'department_type' => 'general', 'default_next' => 'pharmacy', 'can_return' => true, 'creates_child' => true], ['code' => 'pharmacy', 'name' => 'Pharmacy', 'type' => 'pharmacy', 'queue_context' => 'pharmacy', 'department_type' => 'pharmacy', 'optional' => true, 'default_next' => 'exit'], ['code' => 'exit', 'name' => 'Exit', 'type' => 'exit'], ], ], /* | Standard Public Hospital (Ghana) — cash-first with gates at every step. */ 'public_hospital_gh' => [ 'label' => 'Standard public hospital (Ghana)', 'description' => 'Registration and card purchase, consultation fee before the doctor, and pay-before-service for lab, imaging, and pharmacy. NHIS eligible.', 'stages' => [ ['code' => 'registration', 'name' => 'Registration', 'type' => 'registration', 'queue_context' => 'reception', 'department_type' => 'outpatient', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'patient_card', 'charge_label' => 'Patient card / folder', 'insurance_eligible' => false, 'default_next' => 'triage'], ['code' => 'triage', 'name' => 'Triage', 'type' => 'triage', 'queue_context' => 'triage', 'department_type' => 'general', 'optional' => true, 'default_next' => 'consultation'], ['code' => 'consultation', 'name' => 'Consultation', 'type' => 'consultation', 'queue_context' => 'consultation', 'department_type' => 'general', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'consultation', 'charge_label' => 'Consultation fee', 'insurance_eligible' => true, 'can_return' => true, 'creates_child' => true, 'default_next' => 'pharmacy'], ['code' => 'laboratory', 'name' => 'Laboratory', 'type' => 'laboratory', 'queue_context' => 'laboratory', 'department_type' => 'laboratory', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'lab', 'charge_label' => 'Laboratory tests', 'insurance_eligible' => true, 'optional' => true, 'can_return' => true, 'default_next' => 'consultation'], ['code' => 'imaging', 'name' => 'Imaging', 'type' => 'imaging', 'queue_context' => 'imaging', 'department_type' => 'radiology', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'imaging', 'charge_label' => 'Imaging services', 'insurance_eligible' => true, 'optional' => true, 'can_return' => true, 'default_next' => 'consultation'], ['code' => 'pharmacy', 'name' => 'Pharmacy', 'type' => 'pharmacy', 'queue_context' => 'pharmacy', 'department_type' => 'pharmacy', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'pharmacy', 'charge_label' => 'Medication', 'insurance_eligible' => true, 'optional' => true, 'default_next' => 'exit'], ['code' => 'exit', 'name' => 'Exit', 'type' => 'exit'], ], ], /* | Private Hospital — digital/internal cashier, insurance + corporate. */ 'private_hospital' => [ 'label' => 'Private hospital', 'description' => 'Registration, consultation fee, and pay-before-service for lab/imaging/pharmacy. Card, MoMo, and insurance supported.', 'stages' => [ ['code' => 'registration', 'name' => 'Registration', 'type' => 'registration', 'queue_context' => 'reception', 'department_type' => 'outpatient', 'requires_payment' => true, 'payment_timing' => 'before', 'payment_modes' => ['internal_cashier', 'digital'], 'charge_code' => 'registration', 'charge_label' => 'Registration', 'insurance_eligible' => true, 'default_next' => 'consultation'], ['code' => 'consultation', 'name' => 'Consultation', 'type' => 'consultation', 'queue_context' => 'consultation', 'department_type' => 'general', 'requires_payment' => true, 'payment_timing' => 'before', 'payment_modes' => ['internal_cashier', 'digital'], 'charge_code' => 'consultation', 'charge_label' => 'Consultation fee', 'insurance_eligible' => true, 'can_return' => true, 'creates_child' => true, 'default_next' => 'pharmacy'], ['code' => 'laboratory', 'name' => 'Laboratory', 'type' => 'laboratory', 'queue_context' => 'laboratory', 'department_type' => 'laboratory', 'requires_payment' => true, 'payment_timing' => 'before', 'payment_modes' => ['internal_cashier', 'digital'], 'charge_code' => 'lab', 'charge_label' => 'Laboratory tests', 'insurance_eligible' => true, 'optional' => true, 'can_return' => true, 'default_next' => 'consultation'], ['code' => 'imaging', 'name' => 'Imaging', 'type' => 'imaging', 'queue_context' => 'imaging', 'department_type' => 'radiology', 'requires_payment' => true, 'payment_timing' => 'before', 'payment_modes' => ['internal_cashier', 'digital'], 'charge_code' => 'imaging', 'charge_label' => 'Imaging services', 'insurance_eligible' => true, 'optional' => true, 'can_return' => true, 'default_next' => 'consultation'], ['code' => 'pharmacy', 'name' => 'Pharmacy', 'type' => 'pharmacy', 'queue_context' => 'pharmacy', 'department_type' => 'pharmacy', 'requires_payment' => true, 'payment_timing' => 'before', 'payment_modes' => ['internal_cashier', 'digital'], 'charge_code' => 'pharmacy', 'charge_label' => 'Medication', 'insurance_eligible' => true, 'optional' => true, 'default_next' => 'exit'], ['code' => 'exit', 'name' => 'Exit', 'type' => 'exit'], ], ], /* | NHIS Hospital — insurance-authorization first; cash fallback. */ 'nhis_hospital' => [ 'label' => 'NHIS hospital', 'description' => 'Insurance-authorization gates for consultation, lab, imaging, and pharmacy with cash fallback for non-covered services.', 'stages' => [ ['code' => 'registration', 'name' => 'Registration', 'type' => 'registration', 'queue_context' => 'reception', 'department_type' => 'outpatient', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'registration', 'charge_label' => 'Registration / NHIS verification', 'insurance_eligible' => true, 'default_next' => 'triage'], ['code' => 'triage', 'name' => 'Triage', 'type' => 'triage', 'queue_context' => 'triage', 'department_type' => 'general', 'optional' => true, 'default_next' => 'consultation'], ['code' => 'consultation', 'name' => 'Consultation', 'type' => 'consultation', 'queue_context' => 'consultation', 'department_type' => 'general', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'consultation', 'charge_label' => 'Consultation', 'insurance_eligible' => true, 'can_return' => true, 'creates_child' => true, 'default_next' => 'pharmacy'], ['code' => 'laboratory', 'name' => 'Laboratory', 'type' => 'laboratory', 'queue_context' => 'laboratory', 'department_type' => 'laboratory', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'lab', 'charge_label' => 'Laboratory tests', 'insurance_eligible' => true, 'optional' => true, 'can_return' => true, 'default_next' => 'consultation'], ['code' => 'pharmacy', 'name' => 'Pharmacy', 'type' => 'pharmacy', 'queue_context' => 'pharmacy', 'department_type' => 'pharmacy', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'pharmacy', 'charge_label' => 'Medication', 'insurance_eligible' => true, 'optional' => true, 'default_next' => 'exit'], ['code' => 'exit', 'name' => 'Exit', 'type' => 'exit'], ], ], /* | Cashless private clinic — pay at exit (no gates before service). */ 'cashless_clinic' => [ 'label' => 'Cashless clinic (pay at exit)', 'description' => 'Reception, consultation, and pharmacy with a single payment at exit. No gates block clinical service.', 'stages' => [ ['code' => 'reception', 'name' => 'Reception', 'type' => 'registration', 'queue_context' => 'reception', 'department_type' => 'outpatient', 'default_next' => 'consultation'], ['code' => 'consultation', 'name' => 'Consultation', 'type' => 'consultation', 'queue_context' => 'consultation', 'department_type' => 'general', 'can_return' => true, 'creates_child' => true, 'default_next' => 'pharmacy'], ['code' => 'pharmacy', 'name' => 'Pharmacy', 'type' => 'pharmacy', 'queue_context' => 'pharmacy', 'department_type' => 'pharmacy', 'optional' => true, 'default_next' => 'checkout'], ['code' => 'checkout', 'name' => 'Checkout', 'type' => 'payment', 'queue_context' => 'billing', 'requires_payment' => true, 'payment_timing' => 'after', 'charge_code' => 'visit_total', 'charge_label' => 'Visit total', 'insurance_eligible' => true, 'default_next' => 'exit'], ['code' => 'exit', 'name' => 'Exit', 'type' => 'exit'], ], ], /* | Diagnostic centre — reception → pay → sample → testing → results. */ 'diagnostic_centre' => [ 'label' => 'Diagnostic centre', 'description' => 'Reception, payment before sample collection, testing, and results delivery.', 'stages' => [ ['code' => 'reception', 'name' => 'Reception', 'type' => 'registration', 'queue_context' => 'reception', 'department_type' => 'outpatient', 'default_next' => 'payment'], ['code' => 'payment', 'name' => 'Payment', 'type' => 'payment', 'queue_context' => 'billing', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'lab', 'charge_label' => 'Diagnostic tests', 'insurance_eligible' => true, 'default_next' => 'sample'], ['code' => 'sample', 'name' => 'Sample collection', 'type' => 'laboratory', 'queue_context' => 'laboratory', 'department_type' => 'laboratory', 'default_next' => 'testing'], ['code' => 'testing', 'name' => 'Testing', 'type' => 'laboratory', 'department_type' => 'laboratory', 'default_next' => 'results'], ['code' => 'results', 'name' => 'Results', 'type' => 'results', 'default_next' => 'exit'], ['code' => 'exit', 'name' => 'Exit', 'type' => 'exit'], ], ], /* | Specialist practice — appointment → consultation → pay → exit. */ 'specialist_practice' => [ 'label' => 'Specialist practice', 'description' => 'Appointment-led consultation with payment after service.', 'stages' => [ ['code' => 'reception', 'name' => 'Reception', 'type' => 'registration', 'queue_context' => 'reception', 'department_type' => 'outpatient', 'default_next' => 'consultation'], ['code' => 'consultation', 'name' => 'Consultation', 'type' => 'consultation', 'queue_context' => 'consultation', 'department_type' => 'general', 'can_return' => true, 'creates_child' => true, 'default_next' => 'payment'], ['code' => 'payment', 'name' => 'Payment', 'type' => 'payment', 'queue_context' => 'billing', 'requires_payment' => true, 'payment_timing' => 'after', 'charge_code' => 'consultation', 'charge_label' => 'Consultation fee', 'insurance_eligible' => true, 'default_next' => 'exit'], ['code' => 'exit', 'name' => 'Exit', 'type' => 'exit'], ], ], /* | Pharmacy-led — dispensary counter with pay-before-dispense. */ 'pharmacy_led' => [ 'label' => 'Pharmacy / dispensary', 'description' => 'Prescription intake, billing, payment, and dispensing.', 'stages' => [ ['code' => 'intake', 'name' => 'Prescription intake', 'type' => 'registration', 'queue_context' => 'reception', 'department_type' => 'pharmacy', 'default_next' => 'payment'], ['code' => 'payment', 'name' => 'Payment', 'type' => 'payment', 'queue_context' => 'billing', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'pharmacy', 'charge_label' => 'Medication', 'insurance_eligible' => true, 'default_next' => 'dispensing'], ['code' => 'dispensing', 'name' => 'Dispensing', 'type' => 'pharmacy', 'queue_context' => 'pharmacy', 'department_type' => 'pharmacy', 'default_next' => 'exit'], ['code' => 'exit', 'name' => 'Exit', 'type' => 'exit'], ], ], /* | Standard Herbal Hospital (Ghana) — herbal consultation + preparation | and dispensing with cash/MoMo-first gates. Insurance usually N/A. */ 'herbal_hospital' => [ 'label' => 'Standard herbal hospital (Ghana)', 'description' => 'Registration, herbal consultation fee, and pay-before-service for herbal preparation and dispensing. Lab optional. Cash and MoMo first.', 'stages' => [ ['code' => 'registration', 'name' => 'Registration', 'type' => 'registration', 'queue_context' => 'reception', 'department_type' => 'outpatient', 'requires_payment' => true, 'payment_timing' => 'before', 'payment_modes' => ['internal_cashier', 'external_bank', 'digital'], 'charge_code' => 'patient_card', 'charge_label' => 'Patient card / folder', 'insurance_eligible' => false, 'default_next' => 'consultation'], ['code' => 'consultation', 'name' => 'Herbal consultation', 'type' => 'consultation', 'queue_context' => 'consultation', 'department_type' => 'general', 'requires_payment' => true, 'payment_timing' => 'before', 'payment_modes' => ['internal_cashier', 'external_bank', 'digital'], 'charge_code' => 'consultation', 'charge_label' => 'Consultation fee', 'insurance_eligible' => false, 'can_return' => true, 'creates_child' => true, 'default_next' => 'dispensing'], ['code' => 'laboratory', 'name' => 'Laboratory', 'type' => 'laboratory', 'queue_context' => 'laboratory', 'department_type' => 'laboratory', 'requires_payment' => true, 'payment_timing' => 'before', 'charge_code' => 'lab', 'charge_label' => 'Laboratory tests', 'insurance_eligible' => false, 'optional' => true, 'can_return' => true, 'default_next' => 'consultation'], ['code' => 'preparation', 'name' => 'Herbal preparation', 'type' => 'pharmacy', 'department_type' => 'pharmacy', 'requires_payment' => true, 'payment_timing' => 'before', 'payment_modes' => ['internal_cashier', 'external_bank', 'digital'], 'charge_code' => 'pharmacy', 'charge_label' => 'Herbal medicine', 'insurance_eligible' => false, 'default_next' => 'dispensing'], ['code' => 'dispensing', 'name' => 'Dispensing', 'type' => 'pharmacy', 'queue_context' => 'pharmacy', 'department_type' => 'pharmacy', 'default_next' => 'exit'], ['code' => 'exit', 'name' => 'Exit', 'type' => 'exit'], ], ], /* | Herbal Clinic (simple) — reception → consult → pay → dispense. */ 'herbal_clinic' => [ 'label' => 'Herbal clinic (simple)', 'description' => 'Reception, herbal consultation, payment, then dispensing. Cash and MoMo first.', 'stages' => [ ['code' => 'reception', 'name' => 'Reception', 'type' => 'registration', 'queue_context' => 'reception', 'department_type' => 'outpatient', 'default_next' => 'consultation'], ['code' => 'consultation', 'name' => 'Herbal consultation', 'type' => 'consultation', 'queue_context' => 'consultation', 'department_type' => 'general', 'can_return' => true, 'creates_child' => true, 'default_next' => 'payment'], ['code' => 'payment', 'name' => 'Payment', 'type' => 'payment', 'queue_context' => 'billing', 'requires_payment' => true, 'payment_timing' => 'before', 'payment_modes' => ['internal_cashier', 'digital'], 'charge_code' => 'pharmacy', 'charge_label' => 'Consultation + herbal medicine', 'insurance_eligible' => false, 'default_next' => 'dispensing'], ['code' => 'dispensing', 'name' => 'Dispensing', 'type' => 'pharmacy', 'queue_context' => 'pharmacy', 'department_type' => 'pharmacy', 'default_next' => 'exit'], ['code' => 'exit', 'name' => 'Exit', 'type' => 'exit'], ], ], /* | Custom — minimal starting point for the workflow builder. */ 'custom' => [ 'label' => 'Build custom', 'description' => 'Start with reception and consultation, then build your own stages.', 'stages' => [ ['code' => 'reception', 'name' => 'Reception', 'type' => 'registration', 'queue_context' => 'reception', 'department_type' => 'outpatient', 'default_next' => 'consultation'], ['code' => 'consultation', 'name' => 'Consultation', 'type' => 'consultation', 'queue_context' => 'consultation', 'department_type' => 'general', 'can_return' => true, 'creates_child' => true, 'default_next' => 'exit'], ['code' => 'exit', 'name' => 'Exit', 'type' => 'exit'], ], ], ], ];