feat(assessments): layered clinical assessment engine end-to-end
Deploy Ladill Care / deploy (push) Successful in 1m26s

Add a template-driven assessment system with universal intake, clinical
pathways, disease instruments (stroke MVP + extended, diabetes, and ten
specialty packs), scoring, patient outcome trends, REST/API + FHIR
export, and Enterprise org-level assessment analytics. Seed packs and
design/licensing docs ship for deploy and pre-GA review.
This commit is contained in:
isaacclad
2026-07-16 22:58:09 +00:00
parent 8896088425
commit 2ce4bc8993
94 changed files with 13430 additions and 56 deletions
@@ -0,0 +1,256 @@
{
"template": {
"code": "universal_intake",
"name": "Universal Intake",
"category": "universal",
"version": 1,
"is_current": true,
"is_active": true,
"scoring_strategy": null,
"description": "Disease-agnostic structured intake: presenting complaint, social history, and functional status. Demographics, allergies, vitals, and labs remain on typed Care forms.",
"meta": {
"capture_roles": ["doctor", "nurse"],
"specialty": "general",
"estimated_minutes": 8,
"attribution": "Ladill Care universal clinical intake (platform-authored). Not a licensed third-party instrument."
}
},
"questions": [
{
"code": "chief_complaint",
"section": "Presenting complaint",
"label": "Chief complaint",
"help_text": "Primary reason for this visit in the patient's own words when possible.",
"answer_type": "textarea",
"is_required": true,
"sort_order": 10,
"options": null,
"validation": { "max": 2000 }
},
{
"code": "hpi",
"section": "Presenting complaint",
"label": "History of presenting illness",
"help_text": "Onset, course, associated features. Free-text symptoms on the consultation remain the narrative source of truth (not auto-synced).",
"answer_type": "textarea",
"is_required": false,
"sort_order": 20,
"options": null,
"validation": { "max": 10000 }
},
{
"code": "duration_value",
"section": "Presenting complaint",
"label": "Duration (value)",
"help_text": "Numeric duration; pair with duration unit.",
"answer_type": "number",
"is_required": false,
"sort_order": 30,
"options": { "min": 0, "max": 9999 },
"validation": { "min": 0, "max": 9999 }
},
{
"code": "duration_unit",
"section": "Presenting complaint",
"label": "Duration unit",
"answer_type": "single_choice",
"is_required": false,
"sort_order": 40,
"options": {
"choices": [
{ "code": "minutes", "label": "Minutes" },
{ "code": "hours", "label": "Hours" },
{ "code": "days", "label": "Days" },
{ "code": "weeks", "label": "Weeks" },
{ "code": "months", "label": "Months" },
{ "code": "years", "label": "Years" }
]
}
},
{
"code": "pain_score",
"section": "Presenting complaint",
"label": "Pain score (010)",
"help_text": "0 = no pain, 10 = worst imaginable pain.",
"answer_type": "scale",
"is_required": false,
"sort_order": 50,
"options": { "min": 0, "max": 10 },
"validation": { "min": 0, "max": 10 }
},
{
"code": "current_symptoms",
"section": "Presenting complaint",
"label": "Current symptoms",
"help_text": "Structured symptom list or free description. Does not replace consultation free-text symptoms.",
"answer_type": "textarea",
"is_required": false,
"sort_order": 60,
"options": null,
"validation": { "max": 5000 }
},
{
"code": "smoking_status",
"section": "Social history",
"label": "Smoking status",
"answer_type": "single_choice",
"is_required": false,
"sort_order": 100,
"options": {
"choices": [
{ "code": "never", "label": "Never smoked" },
{ "code": "former", "label": "Former smoker" },
{ "code": "current", "label": "Current smoker" },
{ "code": "unknown", "label": "Unknown / not asked" }
]
}
},
{
"code": "smoking_pack_years",
"section": "Social history",
"label": "Smoking pack-years",
"help_text": "If former or current smoker. Packs/day × years.",
"answer_type": "number",
"is_required": false,
"sort_order": 110,
"options": { "min": 0, "max": 500, "unit": "pack-years" },
"validation": { "min": 0, "max": 500 }
},
{
"code": "alcohol_use",
"section": "Social history",
"label": "Alcohol use",
"answer_type": "single_choice",
"is_required": false,
"sort_order": 120,
"options": {
"choices": [
{ "code": "none", "label": "None" },
{ "code": "occasional", "label": "Occasional" },
{ "code": "moderate", "label": "Moderate" },
{ "code": "heavy", "label": "Heavy" },
{ "code": "unknown", "label": "Unknown / not asked" }
]
}
},
{
"code": "occupation",
"section": "Social history",
"label": "Occupation",
"answer_type": "text",
"is_required": false,
"sort_order": 130,
"options": null,
"validation": { "max": 255 }
},
{
"code": "mobility",
"section": "Functional status",
"label": "Mobility",
"answer_type": "single_choice",
"is_required": false,
"sort_order": 200,
"options": {
"choices": [
{ "code": "independent", "label": "Independent" },
{ "code": "with_aid", "label": "With aid (stick/frame)" },
{ "code": "wheelchair", "label": "Wheelchair" },
{ "code": "bedbound", "label": "Bedbound" },
{ "code": "unknown", "label": "Unknown" }
]
}
},
{
"code": "communication",
"section": "Functional status",
"label": "Communication",
"answer_type": "single_choice",
"is_required": false,
"sort_order": 210,
"options": {
"choices": [
{ "code": "normal", "label": "Normal" },
{ "code": "impaired", "label": "Impaired" },
{ "code": "non_verbal", "label": "Non-verbal" },
{ "code": "unknown", "label": "Unknown" }
]
}
},
{
"code": "vision",
"section": "Functional status",
"label": "Vision",
"answer_type": "single_choice",
"is_required": false,
"sort_order": 220,
"options": {
"choices": [
{ "code": "normal", "label": "Normal / corrected" },
{ "code": "impaired", "label": "Impaired" },
{ "code": "blind", "label": "Blind" },
{ "code": "unknown", "label": "Unknown" }
]
}
},
{
"code": "hearing",
"section": "Functional status",
"label": "Hearing",
"answer_type": "single_choice",
"is_required": false,
"sort_order": 230,
"options": {
"choices": [
{ "code": "normal", "label": "Normal" },
{ "code": "impaired", "label": "Impaired" },
{ "code": "deaf", "label": "Deaf" },
{ "code": "unknown", "label": "Unknown" }
]
}
},
{
"code": "feeding",
"section": "Functional status",
"label": "Feeding",
"answer_type": "single_choice",
"is_required": false,
"sort_order": 240,
"options": {
"choices": [
{ "code": "independent", "label": "Independent" },
{ "code": "needs_help", "label": "Needs help" },
{ "code": "dependent", "label": "Dependent / tube" },
{ "code": "unknown", "label": "Unknown" }
]
}
},
{
"code": "continence",
"section": "Functional status",
"label": "Continence",
"answer_type": "single_choice",
"is_required": false,
"sort_order": 250,
"options": {
"choices": [
{ "code": "continent", "label": "Continent" },
{ "code": "occasional", "label": "Occasional incontinence" },
{ "code": "incontinent", "label": "Incontinent" },
{ "code": "catheter", "label": "Catheter / diversion" },
{ "code": "unknown", "label": "Unknown" }
]
}
},
{
"code": "baseline_labs_summary",
"section": "Baseline laboratories",
"label": "Baseline labs summary (optional)",
"help_text": "Free-text summary only. Prefer ordered investigation results in Lab for structured values (CBC, glucose, creatinine, electrolytes).",
"answer_type": "textarea",
"is_required": false,
"sort_order": 300,
"options": null,
"validation": { "max": 5000 }
}
]
}