Add full Radiology, Cardiology, and Psychiatry specialty clinical suites.
Deploy Ladill Care / deploy (push) Successful in 49s
Deploy Ladill Care / deploy (push) Successful in 49s
Mirror the Ophthalmology/Maternity shell pattern with stages, stage_tabs, workspace clinical records, reports/print, demo seeds, and suite tests. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -47,16 +47,23 @@ return [
|
||||
'postnatal' => 'postnatal_note',
|
||||
],
|
||||
'radiology' => [
|
||||
'request' => 'imaging_request',
|
||||
'report' => 'imaging_report',
|
||||
'protocol' => 'imaging_request',
|
||||
'acquisition' => 'imaging_acquisition',
|
||||
'findings' => 'imaging_report',
|
||||
'verification' => 'imaging_verification',
|
||||
],
|
||||
'cardiology' => [
|
||||
'history' => 'cardio_history',
|
||||
'exam' => 'cardiac_exam',
|
||||
'clinical_notes' => 'clinical_note',
|
||||
'investigations' => 'cardio_investigation',
|
||||
'plan' => 'cardio_plan',
|
||||
'procedures' => 'cardio_procedure',
|
||||
],
|
||||
'psychiatry' => [
|
||||
'assessment' => 'mental_status',
|
||||
'clinical_notes' => 'clinical_note',
|
||||
'history' => 'mental_status',
|
||||
'risk' => 'risk_assessment',
|
||||
'plan' => 'psych_plan',
|
||||
'followup' => 'psych_followup',
|
||||
],
|
||||
'pediatrics' => [
|
||||
'exam' => 'pediatric_exam',
|
||||
@@ -363,48 +370,113 @@ return [
|
||||
['name' => 'clinical_info', 'label' => 'Clinical information', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
['name' => 'urgency', 'label' => 'Urgency', 'type' => 'select', 'options' => ['Routine', 'Urgent', 'STAT']],
|
||||
['name' => 'contrast', 'label' => 'Contrast', 'type' => 'select', 'options' => ['None', 'IV', 'Oral', 'Both']],
|
||||
['name' => 'protocol', 'label' => 'Protocol / sequences', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'referrer', 'label' => 'Referring clinician', 'type' => 'text'],
|
||||
],
|
||||
'imaging_acquisition' => [
|
||||
['name' => 'technologist', 'label' => 'Technologist', 'type' => 'text'],
|
||||
['name' => 'equipment', 'label' => 'Equipment / room', 'type' => 'text'],
|
||||
['name' => 'acquisition_status', 'label' => 'Acquisition status', 'type' => 'select', 'required' => true, 'options' => ['Scheduled', 'In progress', 'Acquired', 'Incomplete', 'Cancelled']],
|
||||
['name' => 'contrast_given', 'label' => 'Contrast administered', 'type' => 'boolean'],
|
||||
['name' => 'dose_notes', 'label' => 'Dose / exposure notes', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'quality', 'label' => 'Image quality', 'type' => 'select', 'options' => ['Diagnostic', 'Limited', 'Non-diagnostic', 'Repeat needed']],
|
||||
['name' => 'notes', 'label' => 'Acquisition notes', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
'imaging_report' => [
|
||||
['name' => 'technique', 'label' => 'Technique', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'comparison', 'label' => 'Comparison', 'type' => 'text'],
|
||||
['name' => 'findings', 'label' => 'Findings', 'type' => 'textarea', 'required' => true, 'rows' => 4],
|
||||
['name' => 'impression', 'label' => 'Impression', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
['name' => 'recommendations', 'label' => 'Recommendations', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'critical_result', 'label' => 'Critical / unexpected finding', 'type' => 'boolean'],
|
||||
],
|
||||
'imaging_verification' => [
|
||||
['name' => 'verification_status', 'label' => 'Verification status', 'type' => 'select', 'required' => true, 'options' => ['Draft', 'Preliminary', 'Verified / final', 'Amended']],
|
||||
['name' => 'verified_by', 'label' => 'Verified by', 'type' => 'text', 'required' => true],
|
||||
['name' => 'critical_communicated', 'label' => 'Critical result communicated', 'type' => 'boolean'],
|
||||
['name' => 'communication_notes', 'label' => 'Communication notes', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'notes', 'label' => 'Verification notes', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
],
|
||||
'cardiology' => [
|
||||
'cardio_history' => [
|
||||
['name' => 'history', 'label' => 'History of present illness', 'type' => 'textarea', 'required' => true, 'rows' => 4],
|
||||
['name' => 'past_cardiac', 'label' => 'Past cardiac history', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'medications', 'label' => 'Medications', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'allergies', 'label' => 'Allergies', 'type' => 'text'],
|
||||
['name' => 'risk_factors', 'label' => 'Cardiac risk factors', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'family_history', 'label' => 'Family history', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
'cardiac_exam' => [
|
||||
['name' => 'chief_complaint', 'label' => 'Chief complaint', 'type' => 'text', 'required' => true],
|
||||
['name' => 'nyha_class', 'label' => 'NYHA class', 'type' => 'select', 'options' => ['I', 'II', 'III', 'IV', 'N/A']],
|
||||
['name' => 'bp', 'label' => 'Blood pressure', 'type' => 'text'],
|
||||
['name' => 'hr', 'label' => 'Heart rate', 'type' => 'number'],
|
||||
['name' => 'heart_sounds', 'label' => 'Heart sounds / murmurs', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'ecg_findings', 'label' => 'ECG findings', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'echo_summary', 'label' => 'Echo summary', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'risk_factors', 'label' => 'Cardiac risk factors', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'ecg_findings', 'label' => 'ECG findings', 'type' => 'textarea', 'required' => true, 'rows' => 2],
|
||||
['name' => 'exam_findings', 'label' => 'Exam findings', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
'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],
|
||||
'cardio_investigation' => [
|
||||
['name' => 'modality', 'label' => 'Investigation', 'type' => 'select', 'required' => true, 'options' => ['Echo', 'Stress test', 'Holter', 'Troponin / labs', 'CT angio', 'Other']],
|
||||
['name' => 'indication', 'label' => 'Indication', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'findings', 'label' => 'Findings', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
['name' => 'impression', 'label' => 'Impression', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'recommendations', 'label' => 'Recommendations', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
'cardio_plan' => [
|
||||
['name' => 'diagnosis', 'label' => 'Diagnosis', 'type' => 'text', 'required' => true],
|
||||
['name' => 'plan', 'label' => 'Plan', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
['name' => 'medications', 'label' => 'Medications', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'procedure_planned', 'label' => 'Procedure / intervention planned', 'type' => 'boolean'],
|
||||
['name' => 'follow_up', 'label' => 'Follow-up', 'type' => 'text'],
|
||||
['name' => 'advice', 'label' => 'Patient advice', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
'cardio_procedure' => [
|
||||
['name' => 'procedure', 'label' => 'Procedure / intervention', 'type' => 'text', 'required' => true],
|
||||
['name' => 'indication', 'label' => 'Indication', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'outcome', 'label' => 'Outcome', 'type' => 'select', 'required' => true, 'options' => ['Completed uneventfully', 'Completed with complications', 'Deferred', 'Aborted']],
|
||||
['name' => 'complications', 'label' => 'Complications', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'post_procedure_plan', 'label' => 'Post-procedure plan', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'notes', 'label' => 'Notes', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
],
|
||||
'psychiatry' => [
|
||||
'mental_status' => [
|
||||
['name' => 'chief_complaint', 'label' => 'Presenting complaint', 'type' => 'text', 'required' => true],
|
||||
['name' => 'history', 'label' => 'History of present illness', 'type' => 'textarea', 'rows' => 3],
|
||||
['name' => 'appearance', 'label' => 'Appearance / behaviour', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'mood_affect', 'label' => 'Mood / affect', 'type' => 'text'],
|
||||
['name' => 'thought', 'label' => 'Thought content / process', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'perception', 'label' => 'Perception', 'type' => 'text'],
|
||||
['name' => 'cognition', 'label' => 'Cognition / orientation', 'type' => 'text'],
|
||||
['name' => 'insight', 'label' => 'Insight / judgment', 'type' => 'text'],
|
||||
['name' => 'risk', 'label' => 'Risk assessment', 'type' => 'textarea', 'required' => true, 'rows' => 2],
|
||||
['name' => 'mse_summary', 'label' => 'MSE summary', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
],
|
||||
'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],
|
||||
'risk_assessment' => [
|
||||
['name' => 'overall_risk', 'label' => 'Overall risk level', 'type' => 'select', 'required' => true, 'options' => ['Low', 'Moderate', 'High', 'Imminent']],
|
||||
['name' => 'self_harm', 'label' => 'Self-harm / suicide risk', 'type' => 'select', 'options' => ['None identified', 'Ideation', 'Plan', 'Intent / recent attempt']],
|
||||
['name' => 'harm_others', 'label' => 'Risk to others', 'type' => 'select', 'options' => ['None identified', 'Ideation', 'Plan', 'Intent']],
|
||||
['name' => 'safeguarding', 'label' => 'Safeguarding concerns', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'protective_factors', 'label' => 'Protective factors', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'risk_summary', 'label' => 'Risk summary', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
['name' => 'immediate_actions', 'label' => 'Immediate actions', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
'psych_plan' => [
|
||||
['name' => 'formulation', 'label' => 'Formulation', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
['name' => 'diagnosis', 'label' => 'Working diagnosis', 'type' => 'text'],
|
||||
['name' => 'plan', 'label' => 'Management plan', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
['name' => 'medications', 'label' => 'Medications', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'therapy', 'label' => 'Therapy / psychosocial', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'follow_up', 'label' => 'Follow-up', 'type' => 'text'],
|
||||
['name' => 'crisis_plan', 'label' => 'Crisis / safety plan', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
'psych_followup' => [
|
||||
['name' => 'review_type', 'label' => 'Review type', 'type' => 'select', 'required' => true, 'options' => ['Clinic follow-up', 'Medication review', 'Crisis review', 'Discharge review']],
|
||||
['name' => 'progress', 'label' => 'Progress since last contact', 'type' => 'textarea', 'required' => true, 'rows' => 3],
|
||||
['name' => 'current_risk', 'label' => 'Current risk', 'type' => 'select', 'options' => ['Low', 'Moderate', 'High', 'Imminent']],
|
||||
['name' => 'outcome', 'label' => 'Outcome', 'type' => 'select', 'required' => true, 'options' => ['In progress', 'Follow-up arranged', 'Discharged', 'Referred', 'Admitted']],
|
||||
['name' => 'next_steps', 'label' => 'Next steps', 'type' => 'textarea', 'rows' => 2],
|
||||
['name' => 'notes', 'label' => 'Notes', 'type' => 'textarea', 'rows' => 2],
|
||||
],
|
||||
],
|
||||
'pediatrics' => [
|
||||
|
||||
@@ -118,6 +118,7 @@ return [
|
||||
'queue_keywords' => ['radio', 'imaging', 'x-ray', 'xray', 'ultrasound', 'ct', 'mri'],
|
||||
'access' => 'general',
|
||||
'roles' => ['doctor', 'nurse', 'lab_technician', 'receptionist'],
|
||||
'specialist_keywords' => ['radio', 'radiolog', 'imaging'],
|
||||
],
|
||||
'cardiology' => [
|
||||
'label' => 'Cardiology',
|
||||
@@ -134,7 +135,7 @@ return [
|
||||
'support_roles' => ['nurse'],
|
||||
'view_roles' => ['doctor', 'nurse', 'lab_technician'],
|
||||
'refer_roles' => ['doctor', 'nurse'],
|
||||
'specialist_keywords' => ['cardio', 'cardiology', 'heart'],
|
||||
'specialist_keywords' => ['cardio', 'cardiology', 'heart', 'ecg'],
|
||||
],
|
||||
'psychiatry' => [
|
||||
'label' => 'Psychiatry',
|
||||
@@ -151,7 +152,7 @@ return [
|
||||
'support_roles' => ['nurse'],
|
||||
'view_roles' => ['doctor', 'nurse'],
|
||||
'refer_roles' => ['doctor', 'nurse'],
|
||||
'specialist_keywords' => ['psych', 'psychiatry', 'mental'],
|
||||
'specialist_keywords' => ['psych', 'psychiatry', 'mental', 'behaviour'],
|
||||
],
|
||||
'pediatrics' => [
|
||||
'label' => 'Pediatrics',
|
||||
|
||||
@@ -292,61 +292,113 @@ return [
|
||||
],
|
||||
'radiology' => [
|
||||
'stages' => [
|
||||
['code' => 'request', 'label' => 'Request received', 'queue_point' => 'waiting'],
|
||||
['code' => 'imaging', 'label' => 'Imaging', 'queue_point' => 'chair'],
|
||||
['code' => 'check_in', 'label' => 'Check-in', 'queue_point' => 'waiting'],
|
||||
['code' => 'protocol', 'label' => 'Request / protocol', 'queue_point' => 'waiting'],
|
||||
['code' => 'acquisition', 'label' => 'Acquisition', 'queue_point' => 'chair'],
|
||||
['code' => 'reporting', 'label' => 'Reporting', 'queue_point' => 'chair'],
|
||||
['code' => 'verified', 'label' => 'Verified', 'queue_point' => null],
|
||||
['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'],
|
||||
['code' => 'rad.mri', 'label' => 'MRI', 'amount_minor' => 65000, 'type' => 'imaging'],
|
||||
['code' => 'rad.fluoro', 'label' => 'Fluoroscopy', 'amount_minor' => 20000, 'type' => 'imaging'],
|
||||
['code' => 'rad.contrast', 'label' => 'Contrast administration', 'amount_minor' => 5000, 'type' => 'procedure'],
|
||||
['code' => 'rad.report', 'label' => 'Radiology report', 'amount_minor' => 4000, 'type' => 'consultation'],
|
||||
],
|
||||
'workspace_tabs' => [
|
||||
'overview' => 'Overview',
|
||||
'request' => 'Imaging request',
|
||||
'report' => 'Report',
|
||||
'protocol' => 'Request / protocol',
|
||||
'acquisition' => 'Acquisition',
|
||||
'findings' => 'Findings / report',
|
||||
'verification' => 'Verification',
|
||||
'orders' => 'Orders',
|
||||
'billing' => 'Billing',
|
||||
'documents' => 'Documents',
|
||||
],
|
||||
'stage_tabs' => [
|
||||
'check_in' => 'overview',
|
||||
'protocol' => 'protocol',
|
||||
'acquisition' => 'acquisition',
|
||||
'reporting' => 'findings',
|
||||
'verified' => 'verification',
|
||||
'completed' => 'overview',
|
||||
],
|
||||
],
|
||||
'cardiology' => [
|
||||
'stages' => [
|
||||
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
|
||||
['code' => 'exam', 'label' => 'Cardiac exam', 'queue_point' => 'chair'],
|
||||
['code' => 'check_in', 'label' => 'Check-in', 'queue_point' => 'waiting'],
|
||||
['code' => 'history', 'label' => 'History', 'queue_point' => 'waiting'],
|
||||
['code' => 'exam', 'label' => 'Exam / ECG', 'queue_point' => 'chair'],
|
||||
['code' => 'investigation', 'label' => 'Investigations', 'queue_point' => 'chair'],
|
||||
['code' => 'plan', 'label' => 'Diagnosis & plan', 'queue_point' => 'chair'],
|
||||
['code' => 'procedure', 'label' => 'Procedure / intervention', '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'],
|
||||
['code' => 'car.stress', 'label' => 'Stress test', 'amount_minor' => 18000, 'type' => 'procedure'],
|
||||
['code' => 'car.holter', 'label' => 'Holter monitoring', 'amount_minor' => 15000, 'type' => 'procedure'],
|
||||
['code' => 'car.procedure', 'label' => 'Cardiac procedure', 'amount_minor' => 35000, 'type' => 'procedure'],
|
||||
],
|
||||
'workspace_tabs' => [
|
||||
'overview' => 'Overview',
|
||||
'exam' => 'Cardiac exam',
|
||||
'clinical_notes' => 'Clinical notes',
|
||||
'history' => 'History',
|
||||
'exam' => 'Exam / ECG',
|
||||
'investigations' => 'Investigations',
|
||||
'plan' => 'Diagnosis & plan',
|
||||
'procedures' => 'Procedures',
|
||||
'orders' => 'Orders',
|
||||
'billing' => 'Billing',
|
||||
'documents' => 'Documents',
|
||||
],
|
||||
'stage_tabs' => [
|
||||
'check_in' => 'overview',
|
||||
'history' => 'history',
|
||||
'exam' => 'exam',
|
||||
'investigation' => 'investigations',
|
||||
'plan' => 'plan',
|
||||
'procedure' => 'procedures',
|
||||
'completed' => 'overview',
|
||||
],
|
||||
],
|
||||
'psychiatry' => [
|
||||
'stages' => [
|
||||
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
|
||||
['code' => 'assessment', 'label' => 'Mental health assessment', 'queue_point' => 'chair'],
|
||||
['code' => 'check_in', 'label' => 'Check-in', 'queue_point' => 'waiting'],
|
||||
['code' => 'history', 'label' => 'History / MSE', 'queue_point' => 'waiting'],
|
||||
['code' => 'risk', 'label' => 'Risk assessment', 'queue_point' => 'chair'],
|
||||
['code' => 'formulation', 'label' => 'Formulation / plan', 'queue_point' => 'chair'],
|
||||
['code' => 'review', 'label' => 'Follow-up review', 'queue_point' => 'chair'],
|
||||
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
|
||||
],
|
||||
'services' => [
|
||||
['code' => 'psy.consult', 'label' => 'Psychiatry consultation', 'amount_minor' => 8000, 'type' => 'consultation'],
|
||||
['code' => 'psy.mse', 'label' => 'Mental state examination', 'amount_minor' => 5000, 'type' => 'consultation'],
|
||||
['code' => 'psy.risk', 'label' => 'Risk assessment', 'amount_minor' => 4500, 'type' => 'consultation'],
|
||||
['code' => 'psy.followup', 'label' => 'Follow-up review', 'amount_minor' => 6000, 'type' => 'consultation'],
|
||||
],
|
||||
'workspace_tabs' => [
|
||||
'overview' => 'Overview',
|
||||
'assessment' => 'Assessment',
|
||||
'clinical_notes' => 'Clinical notes',
|
||||
'history' => 'History / MSE',
|
||||
'risk' => 'Risk',
|
||||
'plan' => 'Formulation / plan',
|
||||
'followup' => 'Follow-up',
|
||||
'orders' => 'Orders',
|
||||
'billing' => 'Billing',
|
||||
'documents' => 'Documents',
|
||||
],
|
||||
'stage_tabs' => [
|
||||
'check_in' => 'overview',
|
||||
'history' => 'history',
|
||||
'risk' => 'risk',
|
||||
'formulation' => 'plan',
|
||||
'review' => 'followup',
|
||||
'completed' => 'overview',
|
||||
],
|
||||
],
|
||||
'pediatrics' => [
|
||||
'stages' => [
|
||||
|
||||
Reference in New Issue
Block a user