Add full Vaccination, Pathology, and Infusion specialty clinical suites.
Deploy Ladill Care / deploy (push) Successful in 34s
Deploy Ladill Care / deploy (push) Successful in 34s
Mirror Oncology-depth stage flows, workspace controllers, clinical forms, reports/print, demo seed, and suite tests. Pathology stays clinic specialty complementary to the Lab app. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -108,16 +108,23 @@ return [
|
||||
'postop' => 'surg_postop',
|
||||
],
|
||||
'vaccination' => [
|
||||
'screening' => 'vax_screening',
|
||||
'administration' => 'vax_admin',
|
||||
'eligibility' => 'vax_eligibility',
|
||||
'consent' => 'vax_consent',
|
||||
'administer' => 'vax_admin',
|
||||
'observation' => 'vax_observation',
|
||||
],
|
||||
'pathology' => [
|
||||
'request' => 'path_request',
|
||||
'specimen' => 'path_specimen',
|
||||
'processing' => 'path_processing',
|
||||
'report' => 'path_report',
|
||||
'verification' => 'path_verification',
|
||||
],
|
||||
'infusion' => [
|
||||
'assessment' => 'infusion_assessment',
|
||||
'protocol' => 'infusion_protocol',
|
||||
'session' => 'infusion_session',
|
||||
'clinical_notes' => 'clinical_note',
|
||||
'monitoring' => 'infusion_monitoring',
|
||||
],
|
||||
'dermatology' => [
|
||||
'exam' => 'skin_exam',
|
||||
@@ -759,14 +766,25 @@ return [
|
||||
],
|
||||
],
|
||||
'vaccination' => [
|
||||
'vax_screening' => [
|
||||
['name' => 'vaccine', 'label' => 'Vaccine', 'type' => 'text', 'required' => true],
|
||||
'vax_eligibility' => [
|
||||
['name' => 'vaccine', 'label' => 'Vaccine requested', 'type' => 'text', 'required' => true],
|
||||
['name' => 'schedule', 'label' => 'Schedule / indication', 'type' => 'select', 'options' => ['Routine EPI', 'Catch-up', 'Travel', 'Occupational', 'Campaign', 'Other']],
|
||||
['name' => 'prior_doses', 'label' => 'Prior doses / history', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'indications', 'label' => 'Indications', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'contraindications', 'label' => 'Contraindications checked', 'type' => 'boolean', 'required' => true],
|
||||
['name' => 'allergy_history', 'label' => 'Allergy / prior reaction', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'fever_today', 'label' => 'Fever today', 'type' => 'boolean'],
|
||||
['name' => 'pregnancy', 'label' => 'Pregnant / breastfeeding', 'type' => 'boolean'],
|
||||
['name' => 'cleared', 'label' => 'Cleared to vaccinate', 'type' => 'boolean', 'required' => true],
|
||||
],
|
||||
'vax_consent' => [
|
||||
['name' => 'information_given', 'label' => 'Information given', 'type' => 'boolean', 'required' => true],
|
||||
['name' => 'consent_obtained', 'label' => 'Consent obtained', 'type' => 'boolean', 'required' => true],
|
||||
['name' => 'consent_type', 'label' => 'Consent type', 'type' => 'select', 'options' => ['Verbal', 'Written', 'Guardian', 'Implied']],
|
||||
['name' => 'consented_by', 'label' => 'Consented by', 'type' => 'text'],
|
||||
['name' => 'risks_discussed', 'label' => 'Risks / AEFI discussed', 'type' => 'boolean'],
|
||||
['name' => 'notes', 'label' => 'Consent notes', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
'vax_admin' => [
|
||||
['name' => 'vaccine', 'label' => 'Vaccine administered', 'type' => 'text', 'required' => true],
|
||||
['name' => 'dose', 'label' => 'Dose / antigen', 'type' => 'text'],
|
||||
@@ -774,8 +792,18 @@ return [
|
||||
['name' => 'batch', 'label' => 'Batch / lot number', 'type' => 'text', 'required' => true],
|
||||
['name' => 'expiry', 'label' => 'Expiry date', 'type' => 'text'],
|
||||
['name' => 'route', 'label' => 'Route', 'type' => 'select', 'options' => ['IM', 'SC', 'ID', 'Oral', 'Nasal']],
|
||||
['name' => 'administered_by', 'label' => 'Administered by', 'type' => 'text'],
|
||||
['name' => 'adverse_events', 'label' => 'Immediate adverse events', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'next_due', 'label' => 'Next dose due', 'type' => 'text'],
|
||||
['name' => 'outcome', 'label' => 'Administration outcome', 'type' => 'select', 'required' => true, 'options' => ['Completed — observe', 'Deferred', 'Refused', 'Incomplete']],
|
||||
],
|
||||
'vax_observation' => [
|
||||
['name' => 'observation_minutes', 'label' => 'Observation minutes', 'type' => 'number'],
|
||||
['name' => 'vitals', 'label' => 'Vitals / condition', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'aefi', 'label' => 'AEFI', 'type' => 'select', 'options' => ['None', 'Mild', 'Moderate', 'Severe — escalate']],
|
||||
['name' => 'aefi_details', 'label' => 'AEFI details / actions', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'advice', 'label' => 'Home advice', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'outcome', 'label' => 'Disposition', 'type' => 'select', 'required' => true, 'options' => ['Completed — discharged', 'Completed — AEFI follow-up', 'Escalated', 'In progress']],
|
||||
],
|
||||
],
|
||||
'pathology' => [
|
||||
@@ -785,15 +813,55 @@ return [
|
||||
['name' => 'clinical_history', 'label' => 'Clinical history', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
['name' => 'urgency', 'label' => 'Urgency', 'type' => 'select', 'options' => ['Routine', 'Urgent', 'Intra-op']],
|
||||
['name' => 'tests_requested', 'label' => 'Tests requested', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'requesting_clinician', 'label' => 'Requesting clinician', 'type' => 'text'],
|
||||
],
|
||||
'path_specimen' => [
|
||||
['name' => 'received_at', 'label' => 'Received at', 'type' => 'text'],
|
||||
['name' => 'container_label', 'label' => 'Container / accession label', 'type' => 'text', 'required' => true],
|
||||
['name' => 'adequacy', 'label' => 'Specimen adequacy', 'type' => 'select', 'options' => ['Adequate', 'Suboptimal', 'Inadequate']],
|
||||
['name' => 'fixative', 'label' => 'Fixative / medium', 'type' => 'text'],
|
||||
['name' => 'notes', 'label' => 'Receipt notes', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
'path_processing' => [
|
||||
['name' => 'gross', 'label' => 'Gross description', 'type' => 'textarea', 'rows' => 3],
|
||||
['name' => 'blocks', 'label' => 'Blocks / slides', 'type' => 'text'],
|
||||
['name' => 'stains', 'label' => 'Stains / techniques', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'status', 'label' => 'Processing status', 'type' => 'select', 'required' => true, 'options' => ['In process', 'Ready for reporting', 'Hold — missing info']],
|
||||
['name' => 'notes', 'label' => 'Processing notes', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
'path_report' => [
|
||||
['name' => 'gross', 'label' => 'Gross description', 'type' => 'textarea', 'rows' => 3],
|
||||
['name' => 'microscopy', 'label' => 'Microscopy', 'type' => 'textarea', 'required' => true, 'rows' => 4],
|
||||
['name' => 'diagnosis', 'label' => 'Diagnosis', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
['name' => 'comment', 'label' => 'Comment', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'reported_by', 'label' => 'Reported by', 'type' => 'text'],
|
||||
],
|
||||
'path_verification' => [
|
||||
['name' => 'verified', 'label' => 'Report verified', 'type' => 'boolean', 'required' => true],
|
||||
['name' => 'verified_by', 'label' => 'Verified by', 'type' => 'text'],
|
||||
['name' => 'amendments', 'label' => 'Amendments', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'released', 'label' => 'Released to clinician', 'type' => 'boolean'],
|
||||
['name' => 'outcome', 'label' => 'Verification outcome', 'type' => 'select', 'required' => true, 'options' => ['Completed — released', 'Completed — amended', 'Hold', 'In progress']],
|
||||
],
|
||||
],
|
||||
'infusion' => [
|
||||
'infusion_assessment' => [
|
||||
['name' => 'indication', 'label' => 'Indication', 'type' => 'text', 'required' => true],
|
||||
['name' => 'history', 'label' => 'Relevant history', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
['name' => 'allergies', 'label' => 'Allergies', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'baseline_vitals', 'label' => 'Baseline vitals', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'access_plan', 'label' => 'IV access plan', 'type' => 'text'],
|
||||
['name' => 'fit_for_infusion', 'label' => 'Fit for infusion', 'type' => 'boolean', 'required' => true],
|
||||
],
|
||||
'infusion_protocol' => [
|
||||
['name' => 'medication', 'label' => 'Medication / regimen', 'type' => 'text', 'required' => true],
|
||||
['name' => 'dose', 'label' => 'Dose', 'type' => 'text', 'required' => true],
|
||||
['name' => 'diluent', 'label' => 'Diluent / volume', 'type' => 'text'],
|
||||
['name' => 'rate', 'label' => 'Ordered rate', 'type' => 'text'],
|
||||
['name' => 'duration', 'label' => 'Expected duration', 'type' => 'text'],
|
||||
['name' => 'premeds', 'label' => 'Premedications', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'ordered_by', 'label' => 'Ordered by', 'type' => 'text'],
|
||||
],
|
||||
'infusion_session' => [
|
||||
['name' => 'medication', 'label' => 'Medication / regimen', 'type' => 'text', 'required' => true],
|
||||
['name' => 'dose', 'label' => 'Dose', 'type' => 'text'],
|
||||
@@ -804,12 +872,14 @@ return [
|
||||
['name' => 'vitals', 'label' => 'Vitals during infusion', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'reactions', 'label' => 'Reactions / interventions', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'notes', 'label' => 'Session notes', 'type' => 'textarea', 'required' => true, 'rows' => 2],
|
||||
['name' => 'outcome', 'label' => 'Session outcome', 'type' => 'select', 'options' => ['In progress', 'Completed — observe', 'Stopped — reaction', 'Deferred']],
|
||||
],
|
||||
'clinical_note' => [
|
||||
['name' => 'history', 'label' => 'History of present illness', 'type' => 'textarea', 'required' => true, 'rows' => 4],
|
||||
['name' => 'examination', 'label' => 'Examination', 'type' => 'textarea', 'rows' => 3],
|
||||
['name' => 'working_diagnosis', 'label' => 'Working diagnosis', 'type' => 'text'],
|
||||
['name' => 'plan', 'label' => 'Plan', 'type' => 'textarea', 'rows' => 3],
|
||||
'infusion_monitoring' => [
|
||||
['name' => 'post_vitals', 'label' => 'Post-infusion vitals', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'reaction', 'label' => 'Delayed reaction', 'type' => 'select', 'options' => ['None', 'Mild', 'Moderate', 'Severe']],
|
||||
['name' => 'interventions', 'label' => 'Interventions', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'advice', 'label' => 'Discharge advice', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'outcome', 'label' => 'Disposition', 'type' => 'select', 'required' => true, 'options' => ['Completed — discharged', 'Completed — admit / escalate', 'In progress']],
|
||||
],
|
||||
],
|
||||
'dermatology' => [
|
||||
|
||||
@@ -265,10 +265,11 @@ return [
|
||||
'queue_keywords' => ['vaccin', 'immun', 'epi', 'injection'],
|
||||
'access' => 'general',
|
||||
'roles' => ['doctor', 'nurse', 'receptionist'],
|
||||
'specialist_keywords' => ['vaccin', 'immun', 'epi'],
|
||||
],
|
||||
'pathology' => [
|
||||
'label' => 'Pathology',
|
||||
'description' => 'Histopathology, cytology, and pathology service counters.',
|
||||
'description' => 'Clinic histopathology and cytology specialty flow (complementary to the Lab app queue).',
|
||||
'department_type' => 'pathology',
|
||||
'department_name' => 'Pathology',
|
||||
'queue_name' => 'Pathology',
|
||||
@@ -292,6 +293,7 @@ return [
|
||||
'queue_keywords' => ['infusion', 'iv', 'drip', 'day care'],
|
||||
'access' => 'general',
|
||||
'roles' => ['doctor', 'nurse', 'pharmacist', 'receptionist'],
|
||||
'specialist_keywords' => ['infusion', 'iv therapy', 'day care'],
|
||||
],
|
||||
'dermatology' => [
|
||||
'label' => 'Dermatology',
|
||||
|
||||
@@ -624,59 +624,104 @@ return [
|
||||
],
|
||||
'vaccination' => [
|
||||
'stages' => [
|
||||
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
|
||||
['code' => 'screening', 'label' => 'Screening', 'queue_point' => 'chair'],
|
||||
['code' => 'vaccinate', 'label' => 'Vaccination', 'queue_point' => 'chair'],
|
||||
['code' => 'check_in', 'label' => 'Check-in', 'queue_point' => 'waiting'],
|
||||
['code' => 'eligibility', 'label' => 'History / eligibility', 'queue_point' => 'chair'],
|
||||
['code' => 'consent', 'label' => 'Consent', 'queue_point' => 'chair'],
|
||||
['code' => 'administer', 'label' => 'Administer', 'queue_point' => 'chair'],
|
||||
['code' => 'observation', 'label' => 'Observation / AEFI', 'queue_point' => 'obs'],
|
||||
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
|
||||
],
|
||||
'services' => [
|
||||
['code' => 'vax.consult', 'label' => 'Immunization counselling', 'amount_minor' => 2000, 'type' => 'consultation'],
|
||||
['code' => 'vax.admin', 'label' => 'Vaccine administration', 'amount_minor' => 3000, 'type' => 'procedure'],
|
||||
['code' => 'vax.travel', 'label' => 'Travel vaccine package', 'amount_minor' => 8000, 'type' => 'procedure'],
|
||||
],
|
||||
'workspace_tabs' => [
|
||||
'overview' => 'Overview',
|
||||
'screening' => 'Screening',
|
||||
'administration' => 'Administration',
|
||||
'eligibility' => 'History / eligibility',
|
||||
'consent' => 'Consent',
|
||||
'administer' => 'Administer',
|
||||
'observation' => 'Observation / AEFI',
|
||||
'orders' => 'Orders',
|
||||
'billing' => 'Billing',
|
||||
'documents' => 'Documents',
|
||||
],
|
||||
'stage_tabs' => [
|
||||
'check_in' => 'overview',
|
||||
'eligibility' => 'eligibility',
|
||||
'consent' => 'consent',
|
||||
'administer' => 'administer',
|
||||
'observation' => 'observation',
|
||||
'completed' => 'overview',
|
||||
],
|
||||
],
|
||||
'pathology' => [
|
||||
'stages' => [
|
||||
['code' => 'request', 'label' => 'Specimen received', 'queue_point' => 'waiting'],
|
||||
['code' => 'check_in', 'label' => 'Check-in', 'queue_point' => 'waiting'],
|
||||
['code' => 'request', 'label' => 'Request', 'queue_point' => 'waiting'],
|
||||
['code' => 'specimen', 'label' => 'Specimen', 'queue_point' => 'lab'],
|
||||
['code' => 'processing', 'label' => 'Processing', 'queue_point' => 'lab'],
|
||||
['code' => 'reporting', 'label' => 'Reporting', 'queue_point' => 'lab'],
|
||||
['code' => 'report', 'label' => 'Report', 'queue_point' => 'lab'],
|
||||
['code' => 'verified', 'label' => 'Verified', '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'],
|
||||
['code' => 'path.special', 'label' => 'Special stains / IHC', 'amount_minor' => 25000, 'type' => 'lab'],
|
||||
],
|
||||
'workspace_tabs' => [
|
||||
'overview' => 'Overview',
|
||||
'request' => 'Specimen request',
|
||||
'request' => 'Request',
|
||||
'specimen' => 'Specimen',
|
||||
'processing' => 'Processing',
|
||||
'report' => 'Report',
|
||||
'verification' => 'Verification',
|
||||
'billing' => 'Billing',
|
||||
'documents' => 'Documents',
|
||||
],
|
||||
'stage_tabs' => [
|
||||
'check_in' => 'overview',
|
||||
'request' => 'request',
|
||||
'specimen' => 'specimen',
|
||||
'processing' => 'processing',
|
||||
'report' => 'report',
|
||||
'verified' => 'verification',
|
||||
'completed' => 'overview',
|
||||
],
|
||||
],
|
||||
'infusion' => [
|
||||
'stages' => [
|
||||
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
|
||||
['code' => 'infusion', 'label' => 'Infusion', 'queue_point' => 'chair'],
|
||||
['code' => 'observation', 'label' => 'Observation', 'queue_point' => 'obs'],
|
||||
['code' => 'check_in', 'label' => 'Check-in', 'queue_point' => 'waiting'],
|
||||
['code' => 'assessment', 'label' => 'Assessment', 'queue_point' => 'chair'],
|
||||
['code' => 'protocol', 'label' => 'Order / protocol', 'queue_point' => 'chair'],
|
||||
['code' => 'session', 'label' => 'Infusion session', 'queue_point' => 'chair'],
|
||||
['code' => 'monitoring', 'label' => 'Monitoring', 'queue_point' => 'obs'],
|
||||
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
|
||||
],
|
||||
'services' => [
|
||||
['code' => 'inf.assess', 'label' => 'Infusion assessment', 'amount_minor' => 4000, 'type' => 'consultation'],
|
||||
['code' => 'inf.session', 'label' => 'Infusion session', 'amount_minor' => 15000, 'type' => 'procedure'],
|
||||
['code' => 'inf.observe', 'label' => 'Post-infusion observation', 'amount_minor' => 3000, 'type' => 'misc'],
|
||||
],
|
||||
'workspace_tabs' => [
|
||||
'overview' => 'Overview',
|
||||
'assessment' => 'Assessment',
|
||||
'protocol' => 'Protocol / order',
|
||||
'session' => 'Infusion session',
|
||||
'clinical_notes' => 'Clinical notes',
|
||||
'monitoring' => 'Monitoring',
|
||||
'orders' => 'Orders',
|
||||
'billing' => 'Billing',
|
||||
'documents' => 'Documents',
|
||||
],
|
||||
'stage_tabs' => [
|
||||
'check_in' => 'overview',
|
||||
'assessment' => 'assessment',
|
||||
'protocol' => 'protocol',
|
||||
'session' => 'session',
|
||||
'monitoring' => 'monitoring',
|
||||
'completed' => 'overview',
|
||||
],
|
||||
],
|
||||
'dermatology' => [
|
||||
'stages' => [
|
||||
|
||||
Reference in New Issue
Block a user