Deploy Ladill Care / deploy (push) Failing after 2m0s
Document healthcare removal from Ladill Queue; keep remote adapter for Phase 5. Co-authored-by: Cursor <cursoragent@cursor.com>
422 lines
15 KiB
PHP
422 lines
15 KiB
PHP
<?php
|
|
|
|
return [
|
|
|
|
'roles' => [
|
|
'super_admin' => 'Super Administrator',
|
|
'hospital_admin' => 'Hospital Administrator',
|
|
'receptionist' => 'Receptionist',
|
|
'doctor' => 'Doctor',
|
|
'nurse' => 'Nurse',
|
|
'lab_technician' => 'Laboratory Technician',
|
|
'pharmacist' => 'Pharmacist',
|
|
'cashier' => 'Cashier',
|
|
'accountant' => 'Accountant',
|
|
],
|
|
|
|
'department_types' => [
|
|
'general' => 'General',
|
|
'outpatient' => 'Outpatient',
|
|
'emergency' => 'Emergency',
|
|
'laboratory' => 'Laboratory',
|
|
'radiology' => 'Radiology',
|
|
'pharmacy' => 'Pharmacy',
|
|
'maternity' => 'Maternity',
|
|
'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',
|
|
'child_welfare' => 'Child Welfare Clinic',
|
|
],
|
|
|
|
/*
|
|
| 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',
|
|
|
|
'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',
|
|
'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),
|
|
'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),
|
|
],
|
|
|
|
'queue' => [
|
|
// native = Care Queue Engine (in-app). remote = Ladill Queue HTTP (legacy cutover).
|
|
'driver' => env('CARE_QUEUE_DRIVER', 'native'),
|
|
'api_url' => env('QUEUE_API_URL', 'https://queue.ladill.com/api/v1'),
|
|
'api_key' => env('QUEUE_API_KEY_CARE'),
|
|
],
|
|
|
|
'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',
|
|
],
|
|
],
|
|
|
|
];
|