Files
ladill-care/config/care.php
T
isaaccladandCursor 3735be3425
Deploy Ladill Care / deploy (push) Successful in 1m8s
Add Care Units, beds, and dated staff assignments.
Models employment as department/unit/shift placements with primary and temporary kinds so nurses are not permanently bound to a ward.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-20 10:04:39 +00:00

581 lines
20 KiB
PHP

<?php
return [
'roles' => [
'super_admin' => 'Super Administrator',
'hospital_admin' => 'Hospital Administrator',
'department_manager' => 'Department Manager',
'emergency_physician' => 'Emergency Physician',
'ed_nurse' => 'ED Nurse',
'general_physician' => 'General Physician',
'doctor' => 'Doctor (legacy)',
'surgeon' => 'Surgeon',
'theatre_nurse' => 'Theatre Nurse',
'radiologist' => 'Radiologist',
'radiographer' => 'Radiographer',
'lab_technician' => 'Laboratory Technician',
'lab_manager' => 'Laboratory Manager',
'pathologist' => 'Pathologist',
'blood_bank_officer' => 'Blood Bank Officer',
'blood_bank_manager' => 'Blood Bank Manager',
'pharmacist' => 'Pharmacist',
'dentist' => 'Dentist',
'psychiatrist' => 'Psychiatrist',
'physiotherapist' => 'Physiotherapist',
'midwife' => 'Midwife',
'obstetrician' => 'Obstetrician',
'gynecologist' => 'Gynecologist',
'obgyn' => 'OB/GYN Consultant',
'labour_ward_nurse' => 'Labour Ward Nurse',
'pediatrician' => 'Pediatrician',
'oncologist' => 'Oncologist',
'cardiologist' => 'Cardiologist',
'ent_specialist' => 'ENT Specialist',
'dermatologist' => 'Dermatologist',
'ophthalmologist' => 'Ophthalmologist',
'orthopedist' => 'Orthopedist',
'podiatrist' => 'Podiatrist',
'fertility_specialist' => 'Fertility Specialist',
'embryologist' => 'Embryologist',
'fertility_nurse' => 'Fertility Nurse',
'dialysis_nurse' => 'Dialysis Nurse',
'ambulance_staff' => 'Ambulance Staff',
'nurse' => 'Nurse (legacy)',
'receptionist' => 'Receptionist',
'billing_officer' => 'Billing Officer',
'cashier' => 'Cashier',
'accountant' => 'Accountant',
],
'department_types' => [
'general' => 'General',
'outpatient' => 'Outpatient',
'emergency' => 'Emergency',
'laboratory' => 'Laboratory',
'radiology' => 'Radiology',
'pharmacy' => 'Pharmacy',
'womens_health' => "Women's Health (OB/GYN)",
'maternity' => 'Maternity (legacy)',
'dental' => 'Dental',
'ophthalmology' => 'Ophthalmology / Eye care',
'physiotherapy' => 'Physiotherapy',
'blood_bank' => 'Blood Bank',
'cardiology' => 'Cardiology',
'psychiatry' => 'Psychiatry',
'pediatrics' => 'Pediatrics',
'orthopedics' => 'Orthopedics',
'ent' => 'ENT',
'oncology' => 'Oncology',
'renal' => 'Renal Care',
'surgery' => 'Surgery',
'vaccination' => 'Vaccination & Immunization',
'pathology' => 'Pathology',
'infusion' => 'Infusion Centre',
'dermatology' => 'Dermatology',
'podiatry' => 'Podiatry',
'fertility' => 'Fertility & Reproductive Medicine',
'child_welfare' => 'Child Welfare Clinic',
'ambulance' => 'Ambulance',
'nursing' => 'Nursing Services',
],
/*
| Care units live under departments. Kind drives beds (inpatient only)
| and float-pool assignment behaviour.
*/
'care_unit_kinds' => [
'inpatient' => 'Inpatient unit',
'outpatient' => 'Outpatient / clinic',
'service' => 'Service unit',
'float_pool' => 'Float pool',
],
'bed_statuses' => [
'available' => 'Available',
'occupied' => 'Occupied',
'reserved' => 'Reserved',
'maintenance' => 'Maintenance',
'closed' => 'Closed',
],
/*
| Employment assignment kind — not permanent nurse→ward ownership.
| primary = home unit; temporary = float/coverage day(s); specialty = specialty-wide.
*/
'staff_assignment_kinds' => [
'primary' => 'Primary assignment',
'temporary' => 'Temporary assignment',
'specialty' => 'Specialty assignment',
],
'staff_assignment_statuses' => [
'active' => 'Active',
'scheduled' => 'Scheduled',
'ended' => 'Ended',
],
/*
| Post / grade on an assignment (distinct from Member.role RBAC).
*/
'staff_assignment_roles' => [
'staff_nurse' => 'Staff Nurse',
'senior_staff_nurse' => 'Senior Staff Nurse',
'clinic_nurse' => 'Clinic Nurse',
'midwife' => 'Midwife',
'ward_manager' => 'Ward Manager',
'matron' => 'Matron',
'theatre_nurse' => 'Theatre Nurse',
'specialist_nurse' => 'Specialist Nurse',
'float_nurse' => 'Float Nurse',
'consultant' => 'Consultant',
'resident' => 'Resident Doctor',
'other' => 'Other',
],
/*
| Lightweight shift codes until full roster entities (Phase 3).
*/
'staff_shift_codes' => [
'day' => 'Day shift',
'evening' => 'Evening shift',
'night' => 'Night shift',
'rotating' => 'Rotating',
],
/*
| Practitioner specialty options (Admin → Practitioners / Team invite).
| Stored as free-text labels on care_practitioners.specialty.
*/
'practitioner_specialties' => [
'General Practice',
'Internal Medicine',
'Nursing',
'Outpatient',
'Emergency',
'Laboratory',
'Radiology',
'Pharmacy',
"Women's Health (OB/GYN)",
'Maternity / Labour & Delivery',
'Dentistry',
'Ophthalmology / Eye care',
'Physiotherapy',
'Blood Bank',
'Cardiology',
'Psychiatry',
'Pediatrics',
'Orthopedics',
'ENT',
'Oncology',
'Renal Care',
'Surgery',
'Vaccination & Immunization',
'Pathology',
'Infusion Centre',
'Dermatology',
'Podiatry',
'Fertility',
'Child Welfare Clinic',
'Ambulance',
'EMS / Paramedic',
],
/*
| Specialty practice modules (Settings → Modules).
| Pro-gated via plans.*.features specialty_modules — expansions beyond core
| outpatient/lab/pharmacy belong on paid plans, matching queue_integration.
| See config/care_specialty_modules.php (default_on_paid_plans for Emergency / Blood Bank).
*/
'specialty_modules' => require __DIR__.'/care_specialty_modules.php',
/*
| SVG path markup for specialty module icons (Heroicons-style outline).
| Referenced by care.specialty_modules.*.icon identifiers.
*/
'specialty_icons' => require __DIR__.'/care_specialty_icons.php',
'audit_actions' => [
'organization.created' => 'Organization created',
'organization.updated' => 'Organization updated',
'branch.created' => 'Branch created',
'branch.updated' => 'Branch updated',
'department.created' => 'Department created',
'department.updated' => 'Department updated',
'department.deleted' => 'Department deleted',
'practitioner.created' => 'Practitioner added',
'practitioner.updated' => 'Practitioner updated',
'practitioner.deleted' => 'Practitioner removed',
'member.created' => 'Member added',
'member.updated' => 'Member updated',
'member.deleted' => 'Member removed',
'member.invited' => 'Member invited',
'patient.created' => 'Patient registered',
'patient.updated' => 'Patient record updated',
'patient.deleted' => 'Patient record archived',
'appointment.created' => 'Appointment booked',
'appointment.walk_in' => 'Walk-in registered',
'appointment.checked_in' => 'Patient checked in',
'appointment.waiting' => 'Patient added to queue',
'appointment.in_consultation' => 'Consultation started',
'appointment.completed' => 'Appointment completed',
'appointment.cancelled' => 'Appointment cancelled',
'appointment.no_show' => 'Patient marked no-show',
'appointment.meet_scheduled' => 'Video visit scheduled',
'appointment.meet_cancelled' => 'Video visit cancelled',
'visit.checked_in' => 'Visit opened',
'visit.workflow_advanced' => 'Visit workflow advanced',
'visit.completed' => 'Visit completed',
'consultation.started' => 'Consultation started',
'consultation.updated' => 'Consultation updated',
'consultation.completed' => 'Consultation completed',
'investigation.requested' => 'Investigation requested',
'investigation.sample_collected' => 'Sample collected',
'investigation.in_progress' => 'Investigation in progress',
'investigation.results_entered' => 'Investigation results entered',
'investigation.approved' => 'Investigation results approved',
'investigation.delivered' => 'Investigation results delivered',
'investigation.cancelled' => 'Investigation cancelled',
'investigation_type.created' => 'Investigation type created',
'investigation_type.updated' => 'Investigation type updated',
'prescription.created' => 'Prescription created',
'prescription.updated' => 'Prescription updated',
'prescription.activated' => 'Prescription activated',
'prescription.dispensed' => 'Prescription dispensed',
'prescription.cancelled' => 'Prescription cancelled',
'bill.created' => 'Bill created',
'bill.updated' => 'Bill updated',
'bill.line_item_added' => 'Bill line item added',
'bill.voided' => 'Bill voided',
'payment.recorded' => 'Payment recorded',
'financial_obligation.cleared' => 'Financial obligation cleared',
'payment.checkout_started' => 'Online payment checkout started',
'integrations.gateway_connected' => 'Payment gateway connected',
'integrations.gateway_disconnected' => 'Payment gateway disconnected',
'drug.created' => 'Drug added',
'drug.updated' => 'Drug updated',
'drug.batch_received' => 'Drug stock received',
'assessment.started' => 'Assessment started',
'assessment.updated' => 'Assessment updated',
'assessment.completed' => 'Assessment completed',
'assessment.cancelled' => 'Assessment cancelled',
'pathway.activated' => 'Clinical pathway activated',
'pathway.deactivated' => 'Clinical pathway deactivated',
'device.created' => 'Device registered',
'device.updated' => 'Device updated',
'device.deleted' => 'Device removed',
'device.token_issued' => 'Device token issued',
'device.token_revoked' => 'Device token revoked',
],
'assessment_statuses' => [
'draft' => 'Draft',
'completed' => 'Completed',
'cancelled' => 'Cancelled',
],
'assessment_template_categories' => [
'universal' => 'Universal intake',
'disease' => 'Disease-specific',
'outcome' => 'Outcome measures',
'screening' => 'Screening',
],
'assessment_answer_types' => [
'text' => 'Text',
'textarea' => 'Long text',
'number' => 'Number',
'integer' => 'Integer',
'boolean' => 'Yes / No',
'date' => 'Date',
'datetime' => 'Date & time',
'single_choice' => 'Single choice',
'multi_choice' => 'Multiple choice',
'scale' => 'Scale',
'score_item' => 'Score item',
'calculated' => 'Calculated',
],
'patient_pathway_statuses' => [
'active' => 'Active',
'resolved' => 'Resolved',
'inactive' => 'Inactive',
],
'appointment_statuses' => [
'scheduled' => 'Scheduled',
'checked_in' => 'Checked in',
'waiting' => 'Waiting',
'in_consultation' => 'In consultation',
'completed' => 'Completed',
'cancelled' => 'Cancelled',
'no_show' => 'No show',
],
'visit_statuses' => [
'open' => 'Open',
'in_progress' => 'In progress',
'completed' => 'Completed',
],
'consultation_statuses' => [
'draft' => 'Draft',
'completed' => 'Completed',
],
'investigation_categories' => [
'blood' => 'Blood',
'urine' => 'Urine',
'stool' => 'Stool',
'xray' => 'X-Ray',
'ultrasound' => 'Ultrasound',
'ct' => 'CT Scan',
'mri' => 'MRI',
'ecg' => 'ECG',
'custom' => 'Custom',
],
'investigation_statuses' => [
'pending' => 'Pending',
'sample_collected' => 'Sample collected',
'in_progress' => 'In progress',
'awaiting_review' => 'Awaiting review',
'completed' => 'Completed',
'delivered' => 'Delivered',
'cancelled' => 'Cancelled',
],
'prescription_statuses' => [
'draft' => 'Draft',
'active' => 'Active',
'dispensed' => 'Dispensed',
'cancelled' => 'Cancelled',
],
'medication_routes' => [
'oral' => 'Oral',
'topical' => 'Topical',
'injection' => 'Injection',
'inhalation' => 'Inhalation',
'sublingual' => 'Sublingual',
'rectal' => 'Rectal',
'other' => 'Other',
],
'genders' => [
'male' => 'Male',
'female' => 'Female',
'other' => 'Other',
],
'allergy_severities' => [
'mild' => 'Mild',
'moderate' => 'Moderate',
'severe' => 'Severe',
'unknown' => 'Unknown',
],
'document_types' => [
'id_card' => 'ID card',
'insurance_card' => 'Insurance card',
'lab_report' => 'Lab report',
'referral' => 'Referral letter',
'specialty_emergency' => 'Emergency document',
'specialty_blood_bank' => 'Blood bank document',
'specialty_dentistry' => 'Dental document',
'specialty_ophthalmology' => 'Eye care document',
'specialty_physiotherapy' => 'Physiotherapy document',
'specialty_maternity' => "Women's Health document",
'specialty_womens_health' => "Women's Health document",
'other' => 'Other',
],
'patient_number' => [
'prefix' => env('CARE_PATIENT_NUMBER_PREFIX', 'LC'),
],
'invoice_number' => [
'prefix' => env('CARE_INVOICE_PREFIX', 'INV'),
],
'billing' => [
'patient_card_fee_minor' => (int) env('CARE_PATIENT_CARD_FEE_MINOR', 2000),
'consultation_fee_minor' => (int) env('CARE_CONSULTATION_FEE_MINOR', 5000),
'follow_up_fee_minor' => (int) env('CARE_FOLLOW_UP_FEE_MINOR', 3000),
'vitals_fee_minor' => (int) env('CARE_VITALS_FEE_MINOR', 1000),
'minor_procedure_fee_minor' => (int) env('CARE_MINOR_PROCEDURE_FEE_MINOR', 5000),
'home_visit_fee_minor' => (int) env('CARE_HOME_VISIT_FEE_MINOR', 15000),
'currency' => env('CARE_CURRENCY', 'GHS'),
],
'bill_statuses' => [
'draft' => 'Draft',
'open' => 'Open',
'partial' => 'Partially paid',
'paid' => 'Paid',
'void' => 'Void',
],
'bill_line_types' => [
'consultation' => 'Consultation',
'lab' => 'Laboratory',
'imaging' => 'Imaging',
'procedure' => 'Procedure',
'pharmacy' => 'Pharmacy',
'nursing' => 'Nursing',
'misc' => 'Miscellaneous',
],
'payment_methods' => [
'cash' => 'Cash',
'momo' => 'Mobile Money',
'card' => 'Card',
'gateway' => 'Online (gateway)',
'other' => 'Other',
],
'payment_gateways' => [
'paystack' => 'Paystack',
'flutterwave' => 'Flutterwave',
'hubtel' => 'Hubtel',
],
'report_types' => [
'patients' => 'Patients',
'appointments' => 'Appointments',
'laboratory' => 'Laboratory',
'finance' => 'Finance',
'clinical' => 'Clinical trends',
// KD-18: org-level multi-patient assessment analytics (Enterprise assessment_analytics)
'assessments' => 'Assessment analytics',
],
'plans' => [
'free' => [
'label' => 'Free',
'price_minor' => 0,
'max_branches' => 1,
// Free: core patient records, appointments & consults, basic workflows only.
// One branch is created during onboarding; multi-branch management is Pro.
'features' => [],
],
'pro' => [
'label' => 'Pro',
// Billed per active branch / month (unlimited branches).
'price_minor_per_branch' => (int) env('CARE_PRO_PRICE_PER_BRANCH_MINOR', env('CARE_PRO_PRICE_MINOR', 249000)),
'max_branches' => null,
'features' => [
'branches',
'lab',
'pharmacy',
'billing',
'queue_integration',
'clinical_devices',
'specialty_modules',
],
],
'enterprise' => [
'label' => 'Enterprise',
// Billed per active branch / month (unlimited branches).
// Differentiator: multi-dept custom workflows, priority support, analytics, AI.
'price_minor_per_branch' => (int) env('CARE_ENTERPRISE_PRICE_PER_BRANCH_MINOR', env('CARE_ENTERPRISE_PRICE_MINOR', 499000)),
'max_branches' => null,
'features' => [
'branches',
'lab',
'pharmacy',
'billing',
'queue_integration',
'clinical_devices',
'specialty_modules',
// KD-18: org-level multi-patient assessment/outcome analytics
'assessment_analytics',
],
],
],
'device_types' => [
'barcode_scanner' => 'Barcode scanner',
'qr_scanner' => 'QR scanner',
'badge_printer' => 'Badge / label printer',
'thermometer' => 'Thermometer',
'bp_monitor' => 'Blood pressure monitor',
'pulse_ox' => 'Pulse oximeter',
'weight_scale' => 'Weight scale',
'lab_analyzer' => 'Lab analyzer',
'agent' => 'Generic device agent',
'other' => 'Other',
],
/** Types that need a local Care Device Agent (Pro+). Wedge scanners stay free. */
'device_agent_types' => [
'thermometer',
'bp_monitor',
'pulse_ox',
'weight_scale',
'lab_analyzer',
'agent',
],
'device_connection_modes' => [
'browser_wedge' => 'Browser keyboard wedge',
'agent' => 'Local device agent',
'web_bluetooth' => 'Web Bluetooth (experimental)',
'manual' => 'Manual / inventory only',
],
'device_statuses' => [
'active' => 'Active',
'offline' => 'Offline',
'disabled' => 'Disabled',
],
'vital_sources' => [
'manual' => 'Manual entry',
'device' => 'Device',
'import' => 'Import',
],
'enterprise' => [
// Feature tier (not branch-gated); kept for config compatibility.
'min_branches' => (int) env('CARE_ENTERPRISE_MIN_BRANCHES', 1),
],
'prepaid_months' => [6, 12, 24],
'pro' => [
'grace_days' => (int) env('CARE_PRO_GRACE_DAYS', 3),
'period_days' => (int) env('CARE_PRO_PERIOD_DAYS', 30),
],
'display_layouts' => [
'standard' => 'Standard',
'compact' => 'Compact',
],
'announcement_templates' => [
'en' => 'Ticket :ticket, please proceed to :destination.',
'fr' => 'Ticket :ticket, veuillez vous rendre au :destination.',
'tw' => 'Ticket :ticket, mesrɛ kɔ :destination.',
'with_staff' => ':ticket, :staff, :destination.',
],
'display_poll_ms' => (int) env('CARE_DISPLAY_POLL_MS', 1200),
'upgrade_banner' => [
'free' => [
'title' => 'Unlock Care Pro or Enterprise',
'description' => 'Pro from GHS 2490/branch/mo — lab, pharmacy, billing, and in-app service queues. Enterprise adds custom multi-dept workflows, analytics, priority support, and AI-assisted healthcare integration.',
'route' => 'care.pro.index',
'cta' => 'View plans',
],
'pro' => [
'title' => 'Upgrade to Care Enterprise',
'description' => 'Enterprise from GHS 4990/branch/mo — custom multi-dept workflows, assessment analytics, priority support, and AI-assisted healthcare integration on top of your Pro modules.',
'route' => 'care.pro.index',
'cta' => 'View Enterprise',
],
],
];