feat(assessments): layered clinical assessment engine end-to-end
Deploy Ladill Care / deploy (push) Successful in 1m26s
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:
+259
-2
@@ -1,8 +1,11 @@
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: Ladill Care API
|
||||
version: 1.0.0
|
||||
description: Healthcare management API at care.ladill.com
|
||||
version: 1.1.0
|
||||
description: |
|
||||
Healthcare management API at care.ladill.com.
|
||||
Assessment and pathway endpoints require organization `settings.rollout.assessments_engine = true`.
|
||||
Public IDs are UUIDs (never internal integer FKs).
|
||||
servers:
|
||||
- url: https://care.ladill.com/api/v1
|
||||
paths:
|
||||
@@ -16,6 +19,13 @@ paths:
|
||||
summary: List patients
|
||||
post:
|
||||
summary: Register patient
|
||||
/patients/{patient}:
|
||||
get:
|
||||
summary: Patient dashboard
|
||||
put:
|
||||
summary: Update patient
|
||||
delete:
|
||||
summary: Archive patient
|
||||
/appointments:
|
||||
get:
|
||||
summary: List appointments
|
||||
@@ -29,3 +39,250 @@ paths:
|
||||
summary: List pharmacy inventory
|
||||
post:
|
||||
summary: Add drug
|
||||
|
||||
/assessment-templates:
|
||||
get:
|
||||
summary: List current system assessment templates
|
||||
tags: [Assessments]
|
||||
security: [{ sanctum: [] }]
|
||||
responses:
|
||||
'200':
|
||||
description: Template catalog with questions
|
||||
'404':
|
||||
description: Assessments engine not enabled
|
||||
|
||||
/patients/{patient}/assessments:
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/PatientUuid'
|
||||
get:
|
||||
summary: List assessments for a patient
|
||||
tags: [Assessments]
|
||||
security: [{ sanctum: [] }]
|
||||
parameters:
|
||||
- name: status
|
||||
in: query
|
||||
schema: { type: string, enum: [draft, completed, cancelled] }
|
||||
- name: template_code
|
||||
in: query
|
||||
schema: { type: string }
|
||||
- name: category
|
||||
in: query
|
||||
schema: { type: string }
|
||||
responses:
|
||||
'200':
|
||||
description: Paginated assessments
|
||||
post:
|
||||
summary: Start assessment (idempotent draft)
|
||||
tags: [Assessments]
|
||||
security: [{ sanctum: [] }]
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [template_code]
|
||||
properties:
|
||||
template_code: { type: string, example: nihss }
|
||||
consultation_uuid: { type: string, format: uuid, nullable: true }
|
||||
visit_uuid: { type: string, format: uuid, nullable: true }
|
||||
responses:
|
||||
'200':
|
||||
description: Existing draft returned
|
||||
'201':
|
||||
description: New draft created
|
||||
'403':
|
||||
description: Capture not allowed for role/template
|
||||
|
||||
/consultations/{consultation}/assessments:
|
||||
post:
|
||||
summary: Start assessment linked to consultation
|
||||
tags: [Assessments]
|
||||
security: [{ sanctum: [] }]
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/ConsultationUuid'
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [template_code]
|
||||
properties:
|
||||
template_code: { type: string }
|
||||
responses:
|
||||
'200':
|
||||
description: Existing draft
|
||||
'201':
|
||||
description: Created
|
||||
|
||||
/assessments/{assessment}:
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/AssessmentUuid'
|
||||
get:
|
||||
summary: Get assessment with answers and score
|
||||
tags: [Assessments]
|
||||
security: [{ sanctum: [] }]
|
||||
responses:
|
||||
'200':
|
||||
description: Assessment detail
|
||||
put:
|
||||
summary: Save draft answers (keyed by question code)
|
||||
tags: [Assessments]
|
||||
security: [{ sanctum: [] }]
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
answers:
|
||||
type: object
|
||||
additionalProperties: true
|
||||
example: { chief_complaint: "Headache", pain_score: 4 }
|
||||
notes: { type: string, nullable: true }
|
||||
responses:
|
||||
'200':
|
||||
description: Updated
|
||||
'422':
|
||||
description: Not draft or validation error
|
||||
|
||||
/assessments/{assessment}/complete:
|
||||
post:
|
||||
summary: Complete assessment (validates required; materializes score if strategy set)
|
||||
tags: [Assessments]
|
||||
security: [{ sanctum: [] }]
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/AssessmentUuid'
|
||||
responses:
|
||||
'200':
|
||||
description: Completed with optional score
|
||||
'422':
|
||||
description: Missing required answers or already completed
|
||||
|
||||
/assessments/{assessment}/cancel:
|
||||
post:
|
||||
summary: Cancel draft assessment
|
||||
tags: [Assessments]
|
||||
security: [{ sanctum: [] }]
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/AssessmentUuid'
|
||||
responses:
|
||||
'200':
|
||||
description: Cancelled
|
||||
|
||||
/assessments/{assessment}/fhir:
|
||||
get:
|
||||
summary: Export assessment as FHIR R4 Bundle (Questionnaire + QuestionnaireResponse)
|
||||
tags: [Assessments]
|
||||
security: [{ sanctum: [] }]
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/AssessmentUuid'
|
||||
responses:
|
||||
'200':
|
||||
description: application/fhir+json Bundle
|
||||
content:
|
||||
application/fhir+json:
|
||||
schema:
|
||||
type: object
|
||||
|
||||
/pathways:
|
||||
get:
|
||||
summary: List active clinical pathway catalog
|
||||
tags: [Pathways]
|
||||
security: [{ sanctum: [] }]
|
||||
responses:
|
||||
'200':
|
||||
description: Pathway catalog with template bindings
|
||||
|
||||
/patients/{patient}/pathways:
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/PatientUuid'
|
||||
get:
|
||||
summary: Active and historical patient pathways
|
||||
tags: [Pathways]
|
||||
security: [{ sanctum: [] }]
|
||||
responses:
|
||||
'200':
|
||||
description: Active + history
|
||||
post:
|
||||
summary: Activate pathway (creates required draft assessments)
|
||||
tags: [Pathways]
|
||||
security: [{ sanctum: [] }]
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: [pathway_code]
|
||||
properties:
|
||||
pathway_code: { type: string, example: stroke }
|
||||
consultation_uuid: { type: string, format: uuid, nullable: true }
|
||||
activation_diagnosis_text: { type: string, nullable: true }
|
||||
responses:
|
||||
'201':
|
||||
description: Activated (idempotent if already active)
|
||||
|
||||
/patients/{patient}/pathways/{patientPathway}/deactivate:
|
||||
post:
|
||||
summary: Deactivate active pathway
|
||||
tags: [Pathways]
|
||||
security: [{ sanctum: [] }]
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/PatientUuid'
|
||||
- name: patientPathway
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: string, format: uuid }
|
||||
responses:
|
||||
'200':
|
||||
description: Deactivated
|
||||
|
||||
/consultations/{consultation}/pathway-suggestions:
|
||||
get:
|
||||
summary: Suggest pathways from persisted diagnoses only
|
||||
tags: [Pathways]
|
||||
security: [{ sanctum: [] }]
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/ConsultationUuid'
|
||||
responses:
|
||||
'200':
|
||||
description: Ranked suggestions with match reasons
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
pathway_code: { type: string }
|
||||
pathway_name: { type: string }
|
||||
rank: { type: integer }
|
||||
match_reason: { type: string }
|
||||
already_active: { type: boolean }
|
||||
|
||||
components:
|
||||
securitySchemes:
|
||||
sanctum:
|
||||
type: http
|
||||
scheme: bearer
|
||||
parameters:
|
||||
PatientUuid:
|
||||
name: patient
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: string, format: uuid }
|
||||
ConsultationUuid:
|
||||
name: consultation
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: string, format: uuid }
|
||||
AssessmentUuid:
|
||||
name: assessment
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: string, format: uuid }
|
||||
|
||||
Reference in New Issue
Block a user