Files
ladill-care/docs/openapi/care.yaml
T
isaacclad 2ce4bc8993
Deploy Ladill Care / deploy (push) Successful in 1m26s
feat(assessments): layered clinical assessment engine end-to-end
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.
2026-07-16 22:58:09 +00:00

289 lines
8.1 KiB
YAML

openapi: 3.1.0
info:
title: Ladill Care API
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:
/health:
get:
summary: Health check
servers:
- url: https://care.ladill.com/api
/patients:
get:
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
post:
summary: Book appointment
/bills:
get:
summary: List bills
/drugs:
get:
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 }