Add full Dermatology, Podiatry, and Fertility specialty clinical suites.
Deploy Ladill Care / deploy (push) Successful in 35s

Bring thin catalog modules to the same depth as Cardiology with stages, clinical tabs, reports/print, demo seed, and suite tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-19 22:03:01 +00:00
co-authored by Cursor
parent 7b722c71d0
commit 8c18ecc5c9
35 changed files with 3937 additions and 39 deletions
+114 -28
View File
@@ -127,16 +127,25 @@ return [
'monitoring' => 'infusion_monitoring',
],
'dermatology' => [
'history' => 'derm_history',
'exam' => 'skin_exam',
'clinical_notes' => 'clinical_note',
'investigations' => 'derm_investigation',
'plan' => 'derm_plan',
'procedure' => 'derm_procedure',
],
'podiatry' => [
'history' => 'pod_history',
'exam' => 'foot_exam',
'clinical_notes' => 'clinical_note',
'investigations' => 'pod_investigation',
'plan' => 'pod_plan',
'procedure' => 'pod_procedure',
],
'fertility' => [
'consult' => 'fertility_consult',
'clinical_notes' => 'clinical_note',
'history' => 'fert_history',
'exam' => 'fert_exam',
'investigations' => 'fert_investigation',
'plan' => 'fert_plan',
'cycle' => 'fert_cycle',
],
'child_welfare' => [
'growth' => 'growth',
@@ -883,23 +892,57 @@ return [
],
],
'dermatology' => [
'derm_history' => [
['name' => 'history', 'label' => 'History of present illness', 'type' => 'textarea', 'required' => true, 'rows' => 4],
['name' => 'past_skin', 'label' => 'Past skin history', 'type' => 'textarea', 'rows' => 2],
['name' => 'medications', 'label' => 'Medications', 'type' => 'textarea', 'rows' => 2],
['name' => 'allergies', 'label' => 'Allergies', 'type' => 'text'],
['name' => 'triggers', 'label' => 'Triggers / exposures', 'type' => 'textarea', 'rows' => 2],
['name' => 'family_history', 'label' => 'Family history', 'type' => 'textarea', 'rows' => 2],
],
'skin_exam' => [
['name' => 'chief_complaint', 'label' => 'Chief complaint', 'type' => 'text', 'required' => true],
['name' => 'urgency', 'label' => 'Urgency', 'type' => 'select', 'options' => ['Routine', 'Moderate', 'High', 'Suspected malignancy']],
['name' => 'duration', 'label' => 'Duration', 'type' => 'text'],
['name' => 'distribution', 'label' => 'Distribution', 'type' => 'text'],
['name' => 'morphology', 'label' => 'Lesion morphology', 'type' => 'textarea', 'required' => true, 'rows' => 2],
['name' => 'morphology', 'label' => 'Lesion morphology / notes', 'type' => 'textarea', 'required' => true, 'rows' => 2],
['name' => 'itch_pain', 'label' => 'Itch / pain', 'type' => 'text'],
['name' => 'dermoscopy', 'label' => 'Dermoscopy notes', 'type' => 'textarea', 'rows' => 2],
['name' => 'differential', 'label' => 'Differential diagnosis', '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],
'derm_investigation' => [
['name' => 'modality', 'label' => 'Investigation', 'type' => 'select', 'required' => true, 'options' => ['Biopsy', 'Patch test', 'Culture', 'Bloods', 'Imaging', '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],
],
'derm_plan' => [
['name' => 'diagnosis', 'label' => 'Diagnosis', 'type' => 'text', 'required' => true],
['name' => 'plan', 'label' => 'Plan', 'type' => 'textarea', 'required' => true, 'rows' => 3],
['name' => 'medications', 'label' => 'Medications / topicals', 'type' => 'textarea', 'rows' => 2],
['name' => 'procedure_planned', 'label' => 'Procedure / treatment planned', 'type' => 'boolean'],
['name' => 'follow_up', 'label' => 'Follow-up', 'type' => 'text'],
['name' => 'advice', 'label' => 'Patient advice', 'type' => 'textarea', 'rows' => 2],
],
'derm_procedure' => [
['name' => 'procedure', 'label' => 'Procedure / treatment', '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],
],
],
'podiatry' => [
'pod_history' => [
['name' => 'history', 'label' => 'History of present illness', 'type' => 'textarea', 'required' => true, 'rows' => 4],
['name' => 'diabetes_history', 'label' => 'Diabetes / vascular history', 'type' => 'textarea', 'rows' => 2],
['name' => 'medications', 'label' => 'Medications', 'type' => 'textarea', 'rows' => 2],
['name' => 'allergies', 'label' => 'Allergies', 'type' => 'text'],
['name' => 'footwear', 'label' => 'Footwear / activity', 'type' => 'textarea', 'rows' => 2],
['name' => 'prior_ulcers', 'label' => 'Prior ulcers / amputations', 'type' => 'textarea', 'rows' => 2],
],
'foot_exam' => [
['name' => 'chief_complaint', 'label' => 'Chief complaint', 'type' => 'text', 'required' => true],
['name' => 'side', 'label' => 'Side', 'type' => 'select', 'options' => ['Left', 'Right', 'Bilateral']],
@@ -910,28 +953,71 @@ return [
['name' => 'ulcer', 'label' => 'Ulcer description', 'type' => 'textarea', 'rows' => 2],
['name' => 'offloading', 'label' => 'Offloading / footwear', 'type' => 'text'],
],
'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],
'pod_investigation' => [
['name' => 'modality', 'label' => 'Investigation', 'type' => 'select', 'required' => true, 'options' => ['X-ray', 'Doppler', 'Labs / CRP', 'Wound swab', 'ABI', '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],
],
'pod_plan' => [
['name' => 'diagnosis', 'label' => 'Diagnosis', 'type' => 'text', 'required' => true],
['name' => 'plan', 'label' => 'Plan', 'type' => 'textarea', 'required' => true, 'rows' => 3],
['name' => 'offloading', 'label' => 'Offloading / footwear plan', 'type' => 'textarea', 'rows' => 2],
['name' => 'medications', 'label' => 'Medications / dressings', 'type' => 'textarea', 'rows' => 2],
['name' => 'procedure_planned', 'label' => 'Procedure planned', 'type' => 'boolean'],
['name' => 'follow_up', 'label' => 'Follow-up', 'type' => 'text'],
['name' => 'advice', 'label' => 'Patient advice', 'type' => 'textarea', 'rows' => 2],
],
'pod_procedure' => [
['name' => 'procedure', 'label' => 'Procedure', '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],
],
],
'fertility' => [
'fertility_consult' => [
['name' => 'partner_present', 'label' => 'Partner present', 'type' => 'boolean'],
['name' => 'trying_months', 'label' => 'Trying to conceive (months)', 'type' => 'number'],
['name' => 'cycle_day', 'label' => 'Cycle day', 'type' => 'number'],
['name' => 'amh', 'label' => 'AMH / ovarian reserve notes', 'type' => 'text'],
['name' => 'semen_summary', 'label' => 'Semen analysis summary', 'type' => 'textarea', 'rows' => 2],
['name' => 'tubal_uterine', 'label' => 'Tubal / uterine assessment', 'type' => 'textarea', 'rows' => 2],
['name' => 'plan', 'label' => 'Fertility plan', 'type' => 'textarea', 'required' => true, 'rows' => 3],
],
'clinical_note' => [
'fert_history' => [
['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],
['name' => 'trying_months', 'label' => 'Trying to conceive (months)', 'type' => 'number'],
['name' => 'obstetric_history', 'label' => 'Obstetric / menstrual history', 'type' => 'textarea', 'rows' => 2],
['name' => 'partner_notes', 'label' => 'Partner history', 'type' => 'textarea', 'rows' => 2],
['name' => 'medications', 'label' => 'Medications', 'type' => 'textarea', 'rows' => 2],
['name' => 'allergies', 'label' => 'Allergies', 'type' => 'text'],
],
'fert_exam' => [
['name' => 'chief_complaint', 'label' => 'Chief complaint', 'type' => 'text', 'required' => true],
['name' => 'priority', 'label' => 'Priority', 'type' => 'select', 'options' => ['Routine', 'Time-sensitive', 'Urgent']],
['name' => 'partner_present', 'label' => 'Partner present', 'type' => 'boolean'],
['name' => 'cycle_day', 'label' => 'Cycle day', 'type' => 'number'],
['name' => 'bmi', 'label' => 'BMI', 'type' => 'number'],
['name' => 'exam_findings', 'label' => 'Exam findings', 'type' => 'textarea', 'required' => true, 'rows' => 3],
['name' => 'notes', 'label' => 'Notes', 'type' => 'textarea', 'rows' => 2],
],
'fert_investigation' => [
['name' => 'modality', 'label' => 'Investigation', 'type' => 'select', 'required' => true, 'options' => ['AMH / hormones', 'Semen analysis', 'HSG / tubal', 'Pelvic scan', 'Follicular scan', '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],
],
'fert_plan' => [
['name' => 'diagnosis', 'label' => 'Diagnosis', 'type' => 'text', 'required' => true],
['name' => 'plan', 'label' => 'Fertility plan', 'type' => 'textarea', 'required' => true, 'rows' => 3],
['name' => 'medications', 'label' => 'Medications / stimulation', 'type' => 'textarea', 'rows' => 2],
['name' => 'cycle_planned', 'label' => 'Cycle / procedure note planned', 'type' => 'boolean'],
['name' => 'follow_up', 'label' => 'Follow-up', 'type' => 'text'],
['name' => 'advice', 'label' => 'Patient advice', 'type' => 'textarea', 'rows' => 2],
],
'fert_cycle' => [
['name' => 'cycle_type', 'label' => 'Cycle / procedure type', 'type' => 'select', 'required' => true, 'options' => ['Natural cycle review', 'Stimulation monitoring', 'IUI', 'IVF counselling', 'Trigger / luteal', 'Other']],
['name' => 'cycle_day', 'label' => 'Cycle day', 'type' => 'number'],
['name' => 'outcome', 'label' => 'Outcome', 'type' => 'select', 'required' => true, 'options' => ['Completed — continue', 'Completed uneventfully', 'Deferred', 'Cancelled']],
['name' => 'notes', 'label' => 'Cycle / procedure notes', 'type' => 'textarea', 'required' => true, 'rows' => 3],
['name' => 'next_steps', 'label' => 'Next steps', 'type' => 'textarea', 'rows' => 2],
['name' => 'complications', 'label' => 'Complications', 'type' => 'textarea', 'rows' => 2],
],
],
'child_welfare' => [
+62 -10
View File
@@ -725,62 +725,114 @@ return [
],
'dermatology' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'check_in', 'label' => 'Check-in', 'queue_point' => 'waiting'],
['code' => 'history', 'label' => 'History', 'queue_point' => 'waiting'],
['code' => 'exam', 'label' => 'Skin exam', 'queue_point' => 'chair'],
['code' => 'procedure', 'label' => 'Procedure', 'queue_point' => 'chair'],
['code' => 'investigation', 'label' => 'Investigations', 'queue_point' => 'chair'],
['code' => 'plan', 'label' => 'Diagnosis & plan', 'queue_point' => 'chair'],
['code' => 'procedure', 'label' => 'Procedure / treatment', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'der.consult', 'label' => 'Dermatology consultation', 'amount_minor' => 6000, 'type' => 'consultation'],
['code' => 'der.biopsy', 'label' => 'Skin biopsy', 'amount_minor' => 10000, 'type' => 'procedure'],
['code' => 'der.cryotherapy', 'label' => 'Cryotherapy', 'amount_minor' => 8000, 'type' => 'procedure'],
['code' => 'der.procedure', 'label' => 'Skin procedure', 'amount_minor' => 12000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'history' => 'History',
'exam' => 'Skin exam',
'clinical_notes' => 'Clinical notes',
'investigations' => 'Investigations',
'plan' => 'Diagnosis & plan',
'procedure' => 'Procedure',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
'stage_tabs' => [
'check_in' => 'overview',
'history' => 'history',
'exam' => 'exam',
'investigation' => 'investigations',
'plan' => 'plan',
'procedure' => 'procedure',
'completed' => 'overview',
],
],
'podiatry' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'check_in', 'label' => 'Check-in', 'queue_point' => 'waiting'],
['code' => 'history', 'label' => 'History', 'queue_point' => 'waiting'],
['code' => 'exam', 'label' => 'Foot exam', 'queue_point' => 'chair'],
['code' => 'treatment', 'label' => 'Treatment', 'queue_point' => 'chair'],
['code' => 'investigation', 'label' => 'Investigations', 'queue_point' => 'chair'],
['code' => 'plan', 'label' => 'Diagnosis & plan', 'queue_point' => 'chair'],
['code' => 'procedure', 'label' => 'Procedure', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'pod.consult', 'label' => 'Podiatry consultation', 'amount_minor' => 5000, 'type' => 'consultation'],
['code' => 'pod.assessment', 'label' => 'Diabetic foot assessment', 'amount_minor' => 4500, 'type' => 'consultation'],
['code' => 'pod.debridement', 'label' => 'Wound debridement', 'amount_minor' => 9000, 'type' => 'procedure'],
['code' => 'pod.treatment', 'label' => 'Foot treatment', 'amount_minor' => 8000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'history' => 'History',
'exam' => 'Foot exam',
'clinical_notes' => 'Clinical notes',
'investigations' => 'Investigations',
'plan' => 'Diagnosis & plan',
'procedure' => 'Procedure',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
'stage_tabs' => [
'check_in' => 'overview',
'history' => 'history',
'exam' => 'exam',
'investigation' => 'investigations',
'plan' => 'plan',
'procedure' => 'procedure',
'completed' => 'overview',
],
],
'fertility' => [
'stages' => [
['code' => 'waiting', 'label' => 'Waiting', 'queue_point' => 'waiting'],
['code' => 'consult', 'label' => 'Fertility consult', 'queue_point' => 'chair'],
['code' => 'check_in', 'label' => 'Check-in', 'queue_point' => 'waiting'],
['code' => 'history', 'label' => 'History', 'queue_point' => 'waiting'],
['code' => 'exam', 'label' => 'Exam', 'queue_point' => 'chair'],
['code' => 'investigation', 'label' => 'Investigations', 'queue_point' => 'chair'],
['code' => 'plan', 'label' => 'Diagnosis & plan', 'queue_point' => 'chair'],
['code' => 'cycle', 'label' => 'Cycle / procedure note', 'queue_point' => 'chair'],
['code' => 'completed', 'label' => 'Completed', 'queue_point' => null],
],
'services' => [
['code' => 'fer.consult', 'label' => 'Fertility consultation', 'amount_minor' => 10000, 'type' => 'consultation'],
['code' => 'fer.scan', 'label' => 'Pelvic / follicular scan', 'amount_minor' => 15000, 'type' => 'imaging'],
['code' => 'fer.cycle', 'label' => 'Cycle review', 'amount_minor' => 8000, 'type' => 'consultation'],
['code' => 'fer.iui', 'label' => 'IUI procedure note', 'amount_minor' => 20000, 'type' => 'procedure'],
],
'workspace_tabs' => [
'overview' => 'Overview',
'consult' => 'Fertility consult',
'clinical_notes' => 'Clinical notes',
'history' => 'History',
'exam' => 'Exam',
'investigations' => 'Investigations',
'plan' => 'Diagnosis & plan',
'cycle' => 'Cycle note',
'orders' => 'Orders',
'billing' => 'Billing',
'documents' => 'Documents',
],
'stage_tabs' => [
'check_in' => 'overview',
'history' => 'history',
'exam' => 'exam',
'investigation' => 'investigations',
'plan' => 'plan',
'cycle' => 'cycle',
'completed' => 'overview',
],
],
'child_welfare' => [
'stages' => [