Merge branch 'feat/procedure-history' into release/v1.39.1

This commit is contained in:
Marc-André Bombeck committed 2026-09-25 08:23:34 +02:00
commit c327ae81d5
59 files changed
+2959 -79

No files matched your search

+169 -9
View File
@@ -14003,6 +14003,39 @@ paths:
"409": *a7
"422": *a4
"429": *a10
/api/encounters/procedures:
get:
tags:
- Records
summary: List procedures and surgeries
description: "The caller's procedure and surgery history: every live visit of kind PROCEDURE with status DONE, newest
first, bounded at 500. Planned, cancelled and missed procedures are not in it; a booked one stays in the visit
list's `upcoming` half. Read at the same section and level as the visit list."
parameters:
- in: query
name: q
schema:
type: string
maxLength: 200
- in: query
name: laterality
schema:
type: string
enum:
- LEFT
- RIGHT
- BOTH
responses:
"200":
description: The procedure history.
content:
application/json:
schema:
$ref: "#/components/schemas/ListProceduresEnvelope"
"401": *a1
"403": *a9
"422": *a4
"429": *a5
/api/encounters/suggest:
get:
tags:
@@ -21442,7 +21475,7 @@ components:
type: number
const: 2
leaves:
maxItems: 94
maxItems: 95
type: array
items:
type: string
@@ -21501,7 +21534,7 @@ components:
type: number
const: 2
leaves:
maxItems: 94
maxItems: 95
type: array
items:
type: string
@@ -24172,7 +24205,7 @@ components:
type: number
const: 2
leaves:
maxItems: 94
maxItems: 95
type: array
items:
type: string
@@ -26965,6 +26998,7 @@ components:
- HOSPITAL
- THERAPY
- OTHER
- PROCEDURE
practitionerId:
anyOf:
- type: string
@@ -26981,6 +27015,19 @@ components:
- type: string
maxLength: 4000
- type: "null"
bodySite:
anyOf:
- type: string
maxLength: 200
- type: "null"
laterality:
anyOf:
- type: string
enum:
- LEFT
- RIGHT
- BOTH
- type: "null"
reminderId:
anyOf:
- type: string
@@ -27013,8 +27060,10 @@ components:
additionalProperties: false
description: "File a visit, or book one. `occurredAt` is the only required field — a visit saves with a date and nothing
else. A future instant with `status: PLANNED` books an appointment and mints exactly one reminder for it.
`reason` and `outcome` are encrypted at rest. The three id arrays pre-link documents, lab results and condition
episodes; an id naming nothing the caller owns is dropped rather than refused, so a link never blocks a save."
`reason`, `outcome` and `bodySite` are encrypted at rest. `kind: PROCEDURE` marks a procedure or surgery;
`bodySite` (free text) and `laterality` (LEFT / RIGHT / BOTH, null when not stated) say where, and are accepted
on any kind. The three id arrays pre-link documents, lab results and condition episodes; an id naming nothing
the caller owns is dropped rather than refused, so a link never blocks a save."
UpdateEncounterRequest:
type: object
properties:
@@ -27040,6 +27089,7 @@ components:
- HOSPITAL
- THERAPY
- OTHER
- PROCEDURE
practitionerId:
anyOf:
- type: string
@@ -27056,6 +27106,19 @@ components:
- type: string
maxLength: 4000
- type: "null"
bodySite:
anyOf:
- type: string
maxLength: 200
- type: "null"
laterality:
anyOf:
- type: string
enum:
- LEFT
- RIGHT
- BOTH
- type: "null"
reminderId:
anyOf:
- type: string
@@ -27084,10 +27147,12 @@ components:
minLength: 1
maxLength: 40
additionalProperties: false
description: Partial edit of a visit; an omitted key leaves the column untouched, and a body naming nothing is a 422.
description: "Partial edit of a visit; an omitted key leaves the column untouched, and a body naming nothing is a 422.
Moving `occurredAt` re-anchors the appointment reminder the visit already owns and never mints a second. Moving
`status` to DONE closes the checkup named by `reminderId`, on the transition only. CANCELLED and NO_SHOW stop
the reminder without deleting the row. A present id array replaces that link family, empty array included.
Switching an existing visit to `kind: PROCEDURE` is an ordinary edit of this kind; nothing has to be entered
again."
EncounterLinkRequest:
type: object
properties:
@@ -35844,6 +35909,7 @@ components:
- HOSPITAL
- THERAPY
- OTHER
- PROCEDURE
practitionerId:
anyOf:
- type: string
@@ -35858,6 +35924,19 @@ components:
- type: string
minLength: 1
- type: "null"
bodySiteEncrypted:
anyOf:
- type: string
minLength: 1
- type: "null"
laterality:
anyOf:
- type: string
enum:
- LEFT
- RIGHT
- BOTH
- type: "null"
reminderId:
anyOf:
- type: string
@@ -60679,6 +60758,7 @@ components:
- HOSPITAL
- THERAPY
- OTHER
- PROCEDURE
practitioner:
anyOf:
- $ref: "#/components/schemas/Practitioner"
@@ -60691,6 +60771,18 @@ components:
anyOf:
- type: string
- type: "null"
bodySite:
anyOf:
- type: string
- type: "null"
laterality:
anyOf:
- type: string
enum:
- LEFT
- RIGHT
- BOTH
- type: "null"
reminderNextDueAt:
anyOf:
- type: string
@@ -60711,14 +60803,18 @@ components:
- practitioner
- reason
- outcome
- bodySite
- laterality
- reminderNextDueAt
- createdAt
- updatedAt
additionalProperties: false
description: "One contact with the healthcare system: a visit that happened, or one that is booked. `practitioner` is
resolved rather than an id. `reason` and `outcome` are the decrypted free text (null on a key-rotation gap).
`reminderNextDueAt` is the server-computed instant a booked appointment next nudges, and is null for a visit
that already happened or whose one-shot reminder is spent."
resolved rather than an id. `reason`, `outcome` and `bodySite` are the decrypted free text (null on a
key-rotation gap). `kind: PROCEDURE` marks a procedure or surgery, and `bodySite` with `laterality` say where;
both are carried on every kind so switching a visit's kind away and back loses nothing. `reminderNextDueAt` is
the server-computed instant a booked appointment next nudges, and is null for a visit that already happened or
whose one-shot reminder is spent."
Practitioner:
type: object
properties:
@@ -60863,6 +60959,69 @@ components:
- data
- error
additionalProperties: false
ListProceduresEnvelope:
type: object
properties:
data:
$ref: "#/components/schemas/ProcedureList"
error:
type: "null"
meta:
type: object
properties:
requestId:
type: string
additionalProperties: false
required:
- data
- error
additionalProperties: false
ProcedureList:
type: object
properties:
procedures:
type: array
items:
$ref: "#/components/schemas/Encounter"
bodySites:
type: array
items:
$ref: "#/components/schemas/BodySiteFacet"
total:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
required:
- procedures
- bodySites
- total
additionalProperties: false
description: The procedure history. `procedures` is the filtered list, newest first. `bodySites` and `total` are
computed over the whole history before the filter, so the filter choices never shrink to the one just picked.
BodySiteFacet:
type: object
properties:
bodySite:
type: string
laterality:
anyOf:
- type: string
enum:
- LEFT
- RIGHT
- BOTH
- type: "null"
count:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
required:
- bodySite
- laterality
- count
additionalProperties: false
description: One body site and side in the procedure history, with how many procedures carry it. Keyed case- and
space-insensitively; `bodySite` is the first spelling seen.
SuggestEncounterEnvelope:
type: object
properties:
@@ -60943,6 +61102,7 @@ components:
- HOSPITAL
- THERAPY
- OTHER
- PROCEDURE
practitionerName:
anyOf:
- type: string