2026-02-16 14:20:52 +07:00
|
|
|
openapi: 3.1.0
|
|
|
|
|
info:
|
|
|
|
|
title: CLQMS - Clinical Laboratory Quality Management System API
|
|
|
|
|
description: |
|
|
|
|
|
API for Clinical Laboratory Quality Management System supporting patient management,
|
|
|
|
|
specimen tracking, test ordering, instrument integration, and laboratory operations.
|
|
|
|
|
|
|
|
|
|
**IMPORTANT:** For OpenAPI tools (Swagger UI, Redoc, Postman, etc.), use the bundled file:
|
|
|
|
|
`api-docs.bundled.yaml` which contains all paths and schemas merged into one file.
|
|
|
|
|
|
|
|
|
|
This file (api-docs.yaml) contains schema references and is meant for development.
|
|
|
|
|
The paths are defined in separate files in the `paths/` directory.
|
|
|
|
|
version: 1.0.0
|
|
|
|
|
contact:
|
|
|
|
|
name: CLQMS API Support
|
|
|
|
|
license:
|
|
|
|
|
name: Proprietary
|
|
|
|
|
servers:
|
|
|
|
|
- url: http://localhost/clqms01/
|
|
|
|
|
description: Local development server
|
|
|
|
|
- url: https://clqms01-api.services-summit.my.id/
|
|
|
|
|
description: Production server
|
|
|
|
|
tags:
|
|
|
|
|
- name: Authentication
|
|
|
|
|
description: User authentication and session management
|
|
|
|
|
- name: Patients
|
|
|
|
|
description: Patient registration and management
|
|
|
|
|
- name: Patient Visits
|
|
|
|
|
description: Patient visit/encounter management
|
|
|
|
|
- name: Organization
|
|
|
|
|
description: Organization structure (accounts, sites, disciplines, departments, workstations)
|
|
|
|
|
- name: Specimen
|
|
|
|
|
description: Specimen and container management
|
|
|
|
|
- name: Tests
|
|
|
|
|
description: Test definitions and test catalog
|
|
|
|
|
- name: Orders
|
|
|
|
|
description: Laboratory order management
|
|
|
|
|
- name: Results
|
|
|
|
|
description: Patient results reporting
|
|
|
|
|
- name: Edge API
|
|
|
|
|
description: Instrument integration endpoints
|
refactor(api-docs): Split Master Data into Contacts and Locations modules
- Split monolithic master-data.yaml into separate contact.yaml and locations.yaml files
- Replace 'Master Data' tag with dedicated 'Contacts' and 'Locations' tags for better API organization
- Add complete CRUD operations for Contacts (GET, POST, PATCH, DELETE, GET by ID)
- Add complete CRUD operations for Locations (GET, POST, PATCH, DELETE, GET by ID)
- Enhance Contact schema with comprehensive fields: NameFirst, NameLast, Title, Initial,
Birthdate, EmailAddress1/2, Phone, MobilePhone1/2, Specialty, SubSpecialty
- Enhance Location schema with additional fields: Description, LocType, improved Parent
field documentation for hierarchical locations
- Update bundled API documentation to reflect new endpoint structure
- Remove deprecated Occupation, MedicalSpecialty, and Counter schemas from bundled docs
2026-02-18 08:45:54 +07:00
|
|
|
- name: Contacts
|
|
|
|
|
description: Contact management (doctors, practitioners, etc.)
|
|
|
|
|
- name: Locations
|
|
|
|
|
description: Location management (rooms, wards, buildings)
|
2026-02-16 14:20:52 +07:00
|
|
|
- name: ValueSets
|
|
|
|
|
description: Value set definitions and items
|
|
|
|
|
- name: Demo
|
|
|
|
|
description: Demo/test endpoints (no authentication)
|
|
|
|
|
paths:
|
|
|
|
|
/api/auth/login:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Authentication
|
|
|
|
|
summary: User login
|
|
|
|
|
description: Authenticate user and receive JWT token via HTTP-only cookie
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/LoginRequest'
|
|
|
|
|
application/x-www-form-urlencoded:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/LoginRequest'
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Login successful
|
|
|
|
|
headers:
|
|
|
|
|
Set-Cookie:
|
|
|
|
|
description: JWT token in HTTP-only cookie
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/LoginResponse'
|
|
|
|
|
'400':
|
|
|
|
|
description: Missing username
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/ErrorResponse'
|
|
|
|
|
'401':
|
|
|
|
|
description: Invalid credentials
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/ErrorResponse'
|
|
|
|
|
/api/auth/logout:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Authentication
|
|
|
|
|
summary: User logout
|
|
|
|
|
description: Clear JWT token cookie
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Logout successful
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
/api/auth/check:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Authentication
|
|
|
|
|
summary: Check authentication status
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
- cookieAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Authenticated
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
authenticated:
|
|
|
|
|
type: boolean
|
|
|
|
|
user:
|
|
|
|
|
type: object
|
|
|
|
|
'401':
|
|
|
|
|
description: Not authenticated
|
|
|
|
|
/api/auth/register:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Authentication
|
|
|
|
|
summary: Register new user
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/RegisterRequest'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: User created
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
/api/auth/change_pass:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Authentication
|
|
|
|
|
summary: Change password
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- current_password
|
|
|
|
|
- new_password
|
|
|
|
|
properties:
|
|
|
|
|
current_password:
|
|
|
|
|
type: string
|
|
|
|
|
format: password
|
|
|
|
|
new_password:
|
|
|
|
|
type: string
|
|
|
|
|
format: password
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Password changed successfully
|
|
|
|
|
/v2/auth/login:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Authentication
|
|
|
|
|
summary: V2 User login
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/LoginRequest'
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Login successful
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/LoginResponse'
|
|
|
|
|
/v2/auth/logout:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Authentication
|
|
|
|
|
summary: V2 User logout
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Logout successful
|
|
|
|
|
/v2/auth/check:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Authentication
|
|
|
|
|
summary: V2 Check authentication
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Auth check result
|
|
|
|
|
/v2/auth/register:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Authentication
|
|
|
|
|
summary: V2 Register new user
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/RegisterRequest'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: User created
|
refactor(api-docs): Split Master Data into Contacts and Locations modules
- Split monolithic master-data.yaml into separate contact.yaml and locations.yaml files
- Replace 'Master Data' tag with dedicated 'Contacts' and 'Locations' tags for better API organization
- Add complete CRUD operations for Contacts (GET, POST, PATCH, DELETE, GET by ID)
- Add complete CRUD operations for Locations (GET, POST, PATCH, DELETE, GET by ID)
- Enhance Contact schema with comprehensive fields: NameFirst, NameLast, Title, Initial,
Birthdate, EmailAddress1/2, Phone, MobilePhone1/2, Specialty, SubSpecialty
- Enhance Location schema with additional fields: Description, LocType, improved Parent
field documentation for hierarchical locations
- Update bundled API documentation to reflect new endpoint structure
- Remove deprecated Occupation, MedicalSpecialty, and Counter schemas from bundled docs
2026-02-18 08:45:54 +07:00
|
|
|
/api/contact:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Contacts
|
|
|
|
|
summary: List contacts
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: ContactName
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Filter by contact name (searches in NameFirst and NameLast)
|
|
|
|
|
- name: Specialty
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Filter by medical specialty code
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of contacts
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/Contact'
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Contacts
|
|
|
|
|
summary: Create new contact
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- NameFirst
|
|
|
|
|
properties:
|
|
|
|
|
NameFirst:
|
|
|
|
|
type: string
|
|
|
|
|
description: First name
|
|
|
|
|
NameLast:
|
|
|
|
|
type: string
|
|
|
|
|
description: Last name
|
|
|
|
|
Title:
|
|
|
|
|
type: string
|
|
|
|
|
description: Title (e.g., Dr, Mr, Mrs)
|
|
|
|
|
Initial:
|
|
|
|
|
type: string
|
|
|
|
|
description: Middle initial
|
|
|
|
|
Birthdate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
description: Date of birth
|
|
|
|
|
EmailAddress1:
|
|
|
|
|
type: string
|
|
|
|
|
format: email
|
|
|
|
|
description: Primary email address
|
|
|
|
|
EmailAddress2:
|
|
|
|
|
type: string
|
|
|
|
|
format: email
|
|
|
|
|
description: Secondary email address
|
|
|
|
|
Phone:
|
|
|
|
|
type: string
|
|
|
|
|
description: Primary phone number
|
|
|
|
|
MobilePhone1:
|
|
|
|
|
type: string
|
|
|
|
|
description: Primary mobile number
|
|
|
|
|
MobilePhone2:
|
|
|
|
|
type: string
|
|
|
|
|
description: Secondary mobile number
|
|
|
|
|
Specialty:
|
|
|
|
|
type: string
|
|
|
|
|
description: Medical specialty code
|
|
|
|
|
SubSpecialty:
|
|
|
|
|
type: string
|
|
|
|
|
description: Sub-specialty code
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Contact created successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
'422':
|
|
|
|
|
description: Validation error
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/ErrorResponse'
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Contacts
|
|
|
|
|
summary: Update contact
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- ContactID
|
|
|
|
|
- NameFirst
|
|
|
|
|
properties:
|
|
|
|
|
ContactID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Contact ID to update
|
|
|
|
|
NameFirst:
|
|
|
|
|
type: string
|
|
|
|
|
description: First name
|
|
|
|
|
NameLast:
|
|
|
|
|
type: string
|
|
|
|
|
description: Last name
|
|
|
|
|
Title:
|
|
|
|
|
type: string
|
|
|
|
|
description: Title (e.g., Dr, Mr, Mrs)
|
|
|
|
|
Initial:
|
|
|
|
|
type: string
|
|
|
|
|
description: Middle initial
|
|
|
|
|
Birthdate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
description: Date of birth
|
|
|
|
|
EmailAddress1:
|
|
|
|
|
type: string
|
|
|
|
|
format: email
|
|
|
|
|
description: Primary email address
|
|
|
|
|
EmailAddress2:
|
|
|
|
|
type: string
|
|
|
|
|
format: email
|
|
|
|
|
description: Secondary email address
|
|
|
|
|
Phone:
|
|
|
|
|
type: string
|
|
|
|
|
description: Primary phone number
|
|
|
|
|
MobilePhone1:
|
|
|
|
|
type: string
|
|
|
|
|
description: Primary mobile number
|
|
|
|
|
MobilePhone2:
|
|
|
|
|
type: string
|
|
|
|
|
description: Secondary mobile number
|
|
|
|
|
Specialty:
|
|
|
|
|
type: string
|
|
|
|
|
description: Medical specialty code
|
|
|
|
|
SubSpecialty:
|
|
|
|
|
type: string
|
|
|
|
|
description: Sub-specialty code
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Contact updated successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
'422':
|
|
|
|
|
description: Validation error
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/ErrorResponse'
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Contacts
|
|
|
|
|
summary: Delete contact
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- ContactID
|
|
|
|
|
properties:
|
|
|
|
|
ContactID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Contact ID to delete
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Contact deleted successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
/api/contact/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Contacts
|
|
|
|
|
summary: Get contact by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Contact ID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Contact details
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/Contact'
|
2026-02-16 14:20:52 +07:00
|
|
|
/api/demo/hello:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Demo
|
|
|
|
|
summary: Hello world endpoint
|
|
|
|
|
description: Simple test endpoint that returns a greeting message
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Successful response
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
example: Hello, World!
|
|
|
|
|
/api/demo/ping:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Demo
|
|
|
|
|
summary: Ping endpoint
|
|
|
|
|
description: Health check endpoint to verify API is running
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: API is running
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
example: pong
|
|
|
|
|
timestamp:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
/api/edge/results:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Edge API
|
|
|
|
|
summary: Receive results from instrument (tiny-edge)
|
|
|
|
|
description: |
|
|
|
|
|
Receives instrument results and stores them in the edgeres table for processing.
|
|
|
|
|
This endpoint is typically called by the tiny-edge middleware connected to laboratory analyzers.
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/EdgeResultRequest'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Result received and queued
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/EdgeResultResponse'
|
|
|
|
|
'400':
|
|
|
|
|
description: Invalid JSON payload
|
|
|
|
|
/api/edge/orders:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Edge API
|
|
|
|
|
summary: Fetch pending orders for instruments
|
|
|
|
|
description: Returns orders that need to be sent to laboratory instruments for testing
|
|
|
|
|
parameters:
|
|
|
|
|
- name: instrument_id
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Filter by instrument
|
|
|
|
|
- name: status
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- pending
|
|
|
|
|
- acknowledged
|
|
|
|
|
description: Filter by status
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of orders
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/EdgeOrder'
|
|
|
|
|
/api/edge/orders/{orderId}/ack:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Edge API
|
|
|
|
|
summary: Acknowledge order delivery
|
|
|
|
|
description: Mark order as acknowledged by the instrument
|
|
|
|
|
parameters:
|
|
|
|
|
- name: orderId
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Edge order ID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Order acknowledged
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
/api/edge/status:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Edge API
|
|
|
|
|
summary: Log instrument status update
|
|
|
|
|
description: Receive status updates from laboratory instruments
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- instrument_id
|
|
|
|
|
- status
|
|
|
|
|
properties:
|
|
|
|
|
instrument_id:
|
|
|
|
|
type: string
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- online
|
|
|
|
|
- offline
|
|
|
|
|
- error
|
|
|
|
|
- maintenance
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
timestamp:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Status logged
|
|
|
|
|
/api/location:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
refactor(api-docs): Split Master Data into Contacts and Locations modules
- Split monolithic master-data.yaml into separate contact.yaml and locations.yaml files
- Replace 'Master Data' tag with dedicated 'Contacts' and 'Locations' tags for better API organization
- Add complete CRUD operations for Contacts (GET, POST, PATCH, DELETE, GET by ID)
- Add complete CRUD operations for Locations (GET, POST, PATCH, DELETE, GET by ID)
- Enhance Contact schema with comprehensive fields: NameFirst, NameLast, Title, Initial,
Birthdate, EmailAddress1/2, Phone, MobilePhone1/2, Specialty, SubSpecialty
- Enhance Location schema with additional fields: Description, LocType, improved Parent
field documentation for hierarchical locations
- Update bundled API documentation to reflect new endpoint structure
- Remove deprecated Occupation, MedicalSpecialty, and Counter schemas from bundled docs
2026-02-18 08:45:54 +07:00
|
|
|
- Locations
|
2026-02-16 14:20:52 +07:00
|
|
|
summary: List locations
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: LocCode
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Filter by location code
|
|
|
|
|
- name: LocName
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Filter by location name (searches in LocFull)
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of locations
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/Location'
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
refactor(api-docs): Split Master Data into Contacts and Locations modules
- Split monolithic master-data.yaml into separate contact.yaml and locations.yaml files
- Replace 'Master Data' tag with dedicated 'Contacts' and 'Locations' tags for better API organization
- Add complete CRUD operations for Contacts (GET, POST, PATCH, DELETE, GET by ID)
- Add complete CRUD operations for Locations (GET, POST, PATCH, DELETE, GET by ID)
- Enhance Contact schema with comprehensive fields: NameFirst, NameLast, Title, Initial,
Birthdate, EmailAddress1/2, Phone, MobilePhone1/2, Specialty, SubSpecialty
- Enhance Location schema with additional fields: Description, LocType, improved Parent
field documentation for hierarchical locations
- Update bundled API documentation to reflect new endpoint structure
- Remove deprecated Occupation, MedicalSpecialty, and Counter schemas from bundled docs
2026-02-18 08:45:54 +07:00
|
|
|
- Locations
|
2026-02-16 14:20:52 +07:00
|
|
|
summary: Create location
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- LocCode
|
|
|
|
|
- LocFull
|
|
|
|
|
properties:
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
refactor(api-docs): Split Master Data into Contacts and Locations modules
- Split monolithic master-data.yaml into separate contact.yaml and locations.yaml files
- Replace 'Master Data' tag with dedicated 'Contacts' and 'Locations' tags for better API organization
- Add complete CRUD operations for Contacts (GET, POST, PATCH, DELETE, GET by ID)
- Add complete CRUD operations for Locations (GET, POST, PATCH, DELETE, GET by ID)
- Enhance Contact schema with comprehensive fields: NameFirst, NameLast, Title, Initial,
Birthdate, EmailAddress1/2, Phone, MobilePhone1/2, Specialty, SubSpecialty
- Enhance Location schema with additional fields: Description, LocType, improved Parent
field documentation for hierarchical locations
- Update bundled API documentation to reflect new endpoint structure
- Remove deprecated Occupation, MedicalSpecialty, and Counter schemas from bundled docs
2026-02-18 08:45:54 +07:00
|
|
|
description: Reference to site
|
2026-02-16 14:20:52 +07:00
|
|
|
LocCode:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 6
|
refactor(api-docs): Split Master Data into Contacts and Locations modules
- Split monolithic master-data.yaml into separate contact.yaml and locations.yaml files
- Replace 'Master Data' tag with dedicated 'Contacts' and 'Locations' tags for better API organization
- Add complete CRUD operations for Contacts (GET, POST, PATCH, DELETE, GET by ID)
- Add complete CRUD operations for Locations (GET, POST, PATCH, DELETE, GET by ID)
- Enhance Contact schema with comprehensive fields: NameFirst, NameLast, Title, Initial,
Birthdate, EmailAddress1/2, Phone, MobilePhone1/2, Specialty, SubSpecialty
- Enhance Location schema with additional fields: Description, LocType, improved Parent
field documentation for hierarchical locations
- Update bundled API documentation to reflect new endpoint structure
- Remove deprecated Occupation, MedicalSpecialty, and Counter schemas from bundled docs
2026-02-18 08:45:54 +07:00
|
|
|
description: Location code (short identifier)
|
2026-02-16 14:20:52 +07:00
|
|
|
Parent:
|
|
|
|
|
type: integer
|
refactor(api-docs): Split Master Data into Contacts and Locations modules
- Split monolithic master-data.yaml into separate contact.yaml and locations.yaml files
- Replace 'Master Data' tag with dedicated 'Contacts' and 'Locations' tags for better API organization
- Add complete CRUD operations for Contacts (GET, POST, PATCH, DELETE, GET by ID)
- Add complete CRUD operations for Locations (GET, POST, PATCH, DELETE, GET by ID)
- Enhance Contact schema with comprehensive fields: NameFirst, NameLast, Title, Initial,
Birthdate, EmailAddress1/2, Phone, MobilePhone1/2, Specialty, SubSpecialty
- Enhance Location schema with additional fields: Description, LocType, improved Parent
field documentation for hierarchical locations
- Update bundled API documentation to reflect new endpoint structure
- Remove deprecated Occupation, MedicalSpecialty, and Counter schemas from bundled docs
2026-02-18 08:45:54 +07:00
|
|
|
nullable: true
|
|
|
|
|
description: Parent location ID for hierarchical locations
|
2026-02-16 14:20:52 +07:00
|
|
|
LocFull:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 255
|
refactor(api-docs): Split Master Data into Contacts and Locations modules
- Split monolithic master-data.yaml into separate contact.yaml and locations.yaml files
- Replace 'Master Data' tag with dedicated 'Contacts' and 'Locations' tags for better API organization
- Add complete CRUD operations for Contacts (GET, POST, PATCH, DELETE, GET by ID)
- Add complete CRUD operations for Locations (GET, POST, PATCH, DELETE, GET by ID)
- Enhance Contact schema with comprehensive fields: NameFirst, NameLast, Title, Initial,
Birthdate, EmailAddress1/2, Phone, MobilePhone1/2, Specialty, SubSpecialty
- Enhance Location schema with additional fields: Description, LocType, improved Parent
field documentation for hierarchical locations
- Update bundled API documentation to reflect new endpoint structure
- Remove deprecated Occupation, MedicalSpecialty, and Counter schemas from bundled docs
2026-02-18 08:45:54 +07:00
|
|
|
description: Full location name
|
|
|
|
|
Description:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 255
|
|
|
|
|
description: Location description
|
|
|
|
|
LocType:
|
|
|
|
|
type: string
|
|
|
|
|
description: Location type code (e.g., ROOM, WARD, BUILDING)
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Location created successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
'422':
|
|
|
|
|
description: Validation error
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/ErrorResponse'
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Locations
|
|
|
|
|
summary: Update location
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- LocationID
|
|
|
|
|
properties:
|
|
|
|
|
LocationID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Location ID to update
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Reference to site
|
|
|
|
|
LocCode:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 6
|
|
|
|
|
description: Location code (short identifier)
|
|
|
|
|
Parent:
|
|
|
|
|
type: integer
|
|
|
|
|
nullable: true
|
|
|
|
|
description: Parent location ID for hierarchical locations
|
|
|
|
|
LocFull:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 255
|
|
|
|
|
description: Full location name
|
|
|
|
|
Description:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 255
|
|
|
|
|
description: Location description
|
|
|
|
|
LocType:
|
|
|
|
|
type: string
|
|
|
|
|
description: Location type code (e.g., ROOM, WARD, BUILDING)
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Location updated successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
'422':
|
|
|
|
|
description: Validation error
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/ErrorResponse'
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Locations
|
|
|
|
|
summary: Delete location
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- LocationID
|
|
|
|
|
properties:
|
|
|
|
|
LocationID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Location ID to delete
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Location deleted successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
/api/location/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Locations
|
|
|
|
|
summary: Get location by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Location ID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Location details
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/Location'
|
2026-02-16 14:20:52 +07:00
|
|
|
/api/ordertest:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Orders
|
|
|
|
|
summary: List orders
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: page
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
- name: perPage
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
- name: InternalPID
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Filter by internal patient ID
|
|
|
|
|
- name: OrderStatus
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- ORD
|
|
|
|
|
- SCH
|
|
|
|
|
- ANA
|
|
|
|
|
- VER
|
|
|
|
|
- REV
|
|
|
|
|
- REP
|
|
|
|
|
description: |
|
|
|
|
|
ORD: Ordered
|
|
|
|
|
SCH: Scheduled
|
|
|
|
|
ANA: Analysis
|
|
|
|
|
VER: Verified
|
|
|
|
|
REV: Reviewed
|
|
|
|
|
REP: Reported
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of orders
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Orders
|
|
|
|
|
summary: Create order
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- PatientID
|
|
|
|
|
- Tests
|
|
|
|
|
properties:
|
|
|
|
|
PatientID:
|
|
|
|
|
type: string
|
|
|
|
|
VisitID:
|
|
|
|
|
type: string
|
|
|
|
|
Priority:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- R
|
|
|
|
|
- S
|
|
|
|
|
- U
|
|
|
|
|
description: |
|
|
|
|
|
R: Routine
|
|
|
|
|
S: Stat
|
|
|
|
|
U: Urgent
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
RequestingPhysician:
|
|
|
|
|
type: string
|
|
|
|
|
Tests:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
TestID:
|
|
|
|
|
type: integer
|
|
|
|
|
SpecimenType:
|
|
|
|
|
type: string
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Order created successfully
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Orders
|
|
|
|
|
summary: Update order
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/OrderTest'
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Order updated
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Orders
|
|
|
|
|
summary: Delete order
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Order deleted
|
|
|
|
|
/api/ordertest/status:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Orders
|
|
|
|
|
summary: Update order status
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- OrderID
|
|
|
|
|
- OrderStatus
|
|
|
|
|
properties:
|
|
|
|
|
OrderID:
|
|
|
|
|
type: string
|
|
|
|
|
OrderStatus:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- ORD
|
|
|
|
|
- SCH
|
|
|
|
|
- ANA
|
|
|
|
|
- VER
|
|
|
|
|
- REV
|
|
|
|
|
- REP
|
|
|
|
|
description: |
|
|
|
|
|
ORD: Ordered
|
|
|
|
|
SCH: Scheduled
|
|
|
|
|
ANA: Analysis
|
|
|
|
|
VER: Verified
|
|
|
|
|
REV: Reviewed
|
|
|
|
|
REP: Reported
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Order status updated
|
|
|
|
|
/api/ordertest/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Orders
|
|
|
|
|
summary: Get order by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Order details
|
|
|
|
|
/api/organization/account/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Get account by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Account details
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/Account'
|
|
|
|
|
/api/organization/site:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: List sites
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of sites
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Create site
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/Site'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Site created
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Update site
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- id
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
SiteName:
|
|
|
|
|
type: string
|
|
|
|
|
SiteCode:
|
|
|
|
|
type: string
|
|
|
|
|
AccountID:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Site updated
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Delete site
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- id
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Site deleted
|
|
|
|
|
/api/organization/site/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Get site by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Site details
|
|
|
|
|
/api/organization/discipline:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: List disciplines
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of disciplines
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Create discipline
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/Discipline'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Discipline created
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Update discipline
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- id
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
DisciplineName:
|
|
|
|
|
type: string
|
|
|
|
|
DisciplineCode:
|
|
|
|
|
type: string
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Discipline updated
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Delete discipline
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- id
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Discipline deleted
|
|
|
|
|
/api/organization/discipline/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Get discipline by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Discipline details
|
|
|
|
|
/api/organization/department:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: List departments
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of departments
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Create department
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/Department'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Department created
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Update department
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- id
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
DeptName:
|
|
|
|
|
type: string
|
|
|
|
|
DeptCode:
|
|
|
|
|
type: string
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Department updated
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Delete department
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- id
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Department deleted
|
|
|
|
|
/api/organization/department/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Get department by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Department details
|
|
|
|
|
/api/organization/workstation:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: List workstations
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of workstations
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Create workstation
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/Workstation'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Workstation created
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Update workstation
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- id
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
WorkstationName:
|
|
|
|
|
type: string
|
|
|
|
|
WorkstationCode:
|
|
|
|
|
type: string
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
DepartmentID:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Workstation updated
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Delete workstation
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- id
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Workstation deleted
|
|
|
|
|
/api/organization/workstation/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Organization
|
|
|
|
|
summary: Get workstation by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Workstation details
|
|
|
|
|
/api/patvisit:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: List patient visits
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: page
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
- name: perPage
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of patient visits
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/PatientVisit'
|
|
|
|
|
total:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Total number of records
|
|
|
|
|
page:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Current page number
|
|
|
|
|
per_page:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Number of records per page
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: Create patient visit
|
|
|
|
|
description: |
|
|
|
|
|
Creates a new patient visit. PVID is auto-generated with 'DV' prefix if not provided.
|
|
|
|
|
Can optionally include PatDiag (diagnosis) and PatVisitADT (ADT information).
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- InternalPID
|
|
|
|
|
properties:
|
|
|
|
|
PVID:
|
|
|
|
|
type: string
|
|
|
|
|
description: Visit ID (auto-generated with DV prefix if not provided)
|
|
|
|
|
InternalPID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Patient ID (required)
|
|
|
|
|
EpisodeID:
|
|
|
|
|
type: string
|
|
|
|
|
description: Episode identifier
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Site reference
|
|
|
|
|
PatDiag:
|
|
|
|
|
type: object
|
|
|
|
|
description: Optional diagnosis information
|
|
|
|
|
properties:
|
|
|
|
|
DiagCode:
|
|
|
|
|
type: string
|
|
|
|
|
Diagnosis:
|
|
|
|
|
type: string
|
|
|
|
|
PatVisitADT:
|
|
|
|
|
type: object
|
|
|
|
|
description: Optional ADT information
|
|
|
|
|
properties:
|
|
|
|
|
ADTCode:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- A01
|
|
|
|
|
- A02
|
|
|
|
|
- A03
|
|
|
|
|
- A04
|
|
|
|
|
- A08
|
|
|
|
|
LocationID:
|
|
|
|
|
type: integer
|
|
|
|
|
AttDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
RefDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
AdmDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
CnsDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Visit created successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
PVID:
|
|
|
|
|
type: string
|
|
|
|
|
InternalPVID:
|
|
|
|
|
type: integer
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: Update patient visit
|
|
|
|
|
description: |
|
|
|
|
|
Updates an existing patient visit. InternalPVID is required.
|
|
|
|
|
Can update main visit data, PatDiag, and add new PatVisitADT records.
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- InternalPVID
|
|
|
|
|
properties:
|
|
|
|
|
InternalPVID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Visit ID (required)
|
|
|
|
|
PVID:
|
|
|
|
|
type: string
|
|
|
|
|
InternalPID:
|
|
|
|
|
type: integer
|
|
|
|
|
EpisodeID:
|
|
|
|
|
type: string
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
PatDiag:
|
|
|
|
|
type: object
|
|
|
|
|
description: Diagnosis information (will update if exists)
|
|
|
|
|
properties:
|
|
|
|
|
DiagCode:
|
|
|
|
|
type: string
|
|
|
|
|
Diagnosis:
|
|
|
|
|
type: string
|
|
|
|
|
PatVisitADT:
|
|
|
|
|
type: array
|
|
|
|
|
description: Array of ADT records to add (new records only)
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
ADTCode:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- A01
|
|
|
|
|
- A02
|
|
|
|
|
- A03
|
|
|
|
|
- A04
|
|
|
|
|
- A08
|
|
|
|
|
LocationID:
|
|
|
|
|
type: integer
|
|
|
|
|
AttDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
RefDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
AdmDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
CnsDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
sequence:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Used for ordering multiple ADT records
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Visit updated successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
PVID:
|
|
|
|
|
type: string
|
|
|
|
|
InternalPVID:
|
|
|
|
|
type: integer
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: Delete patient visit
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Visit deleted successfully
|
|
|
|
|
/api/patvisit/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: Get visit by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: PVID (visit identifier like DV00001)
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Visit details
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/PatientVisit'
|
|
|
|
|
/api/patvisit/patient/{patientId}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: Get visits by patient ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: patientId
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Internal Patient ID (InternalPID)
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Patient visits list
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/PatientVisit'
|
|
|
|
|
/api/patvisitadt:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: Create ADT record
|
|
|
|
|
description: Create a new Admission/Discharge/Transfer record
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/PatVisitADT'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: ADT record created successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: Update ADT record
|
|
|
|
|
description: Update an existing ADT record
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/PatVisitADT'
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: ADT record updated successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: Delete ADT visit (soft delete)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- PVADTID
|
|
|
|
|
properties:
|
|
|
|
|
PVADTID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: ADT record ID to delete
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: ADT visit deleted successfully
|
|
|
|
|
/api/patvisitadt/visit/{visitId}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: Get ADT history by visit ID
|
|
|
|
|
description: Retrieve the complete Admission/Discharge/Transfer history for a visit, including all locations and doctors
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: visitId
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Internal Visit ID (InternalPVID)
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: ADT history retrieved successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
example: ADT history retrieved
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
PVADTID:
|
|
|
|
|
type: integer
|
|
|
|
|
InternalPVID:
|
|
|
|
|
type: integer
|
|
|
|
|
ADTCode:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- A01
|
|
|
|
|
- A02
|
|
|
|
|
- A03
|
|
|
|
|
- A04
|
|
|
|
|
- A08
|
|
|
|
|
LocationID:
|
|
|
|
|
type: integer
|
|
|
|
|
LocationName:
|
|
|
|
|
type: string
|
|
|
|
|
AttDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
AttDocFirstName:
|
|
|
|
|
type: string
|
|
|
|
|
AttDocLastName:
|
|
|
|
|
type: string
|
|
|
|
|
RefDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
RefDocFirstName:
|
|
|
|
|
type: string
|
|
|
|
|
RefDocLastName:
|
|
|
|
|
type: string
|
|
|
|
|
AdmDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
AdmDocFirstName:
|
|
|
|
|
type: string
|
|
|
|
|
AdmDocLastName:
|
|
|
|
|
type: string
|
|
|
|
|
CnsDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
CnsDocFirstName:
|
|
|
|
|
type: string
|
|
|
|
|
CnsDocLastName:
|
|
|
|
|
type: string
|
|
|
|
|
CreateDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
EndDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: Delete ADT visit (soft delete)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- PVADTID
|
|
|
|
|
properties:
|
|
|
|
|
PVADTID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: ADT record ID to delete
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: ADT visit deleted successfully
|
|
|
|
|
/api/patvisitadt/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Patient Visits
|
|
|
|
|
summary: Get ADT record by ID
|
|
|
|
|
description: Retrieve a single ADT record by its ID, including location and doctor details
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: ADT record ID (PVADTID)
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: ADT record retrieved successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
example: ADT record retrieved
|
|
|
|
|
data:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
PVADTID:
|
|
|
|
|
type: integer
|
|
|
|
|
InternalPVID:
|
|
|
|
|
type: integer
|
|
|
|
|
ADTCode:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- A01
|
|
|
|
|
- A02
|
|
|
|
|
- A03
|
|
|
|
|
- A04
|
|
|
|
|
- A08
|
|
|
|
|
LocationID:
|
|
|
|
|
type: integer
|
|
|
|
|
LocationName:
|
|
|
|
|
type: string
|
|
|
|
|
AttDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
AttDocFirstName:
|
|
|
|
|
type: string
|
|
|
|
|
AttDocLastName:
|
|
|
|
|
type: string
|
|
|
|
|
RefDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
RefDocFirstName:
|
|
|
|
|
type: string
|
|
|
|
|
RefDocLastName:
|
|
|
|
|
type: string
|
|
|
|
|
AdmDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
AdmDocFirstName:
|
|
|
|
|
type: string
|
|
|
|
|
AdmDocLastName:
|
|
|
|
|
type: string
|
|
|
|
|
CnsDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
CnsDocFirstName:
|
|
|
|
|
type: string
|
|
|
|
|
CnsDocLastName:
|
|
|
|
|
type: string
|
|
|
|
|
CreateDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
EndDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
/api/patient:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Patients
|
|
|
|
|
summary: List patients
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: page
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 1
|
|
|
|
|
- name: perPage
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 20
|
|
|
|
|
- name: InternalPID
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Filter by internal patient ID
|
|
|
|
|
- name: PatientID
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Filter by patient ID
|
|
|
|
|
- name: Name
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Search by patient name
|
|
|
|
|
- name: Birthdate
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
format: date
|
|
|
|
|
description: Filter by birthdate (YYYY-MM-DD)
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of patients
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/PatientListResponse'
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Patients
|
|
|
|
|
summary: Create new patient
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/Patient'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Patient created successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
'422':
|
|
|
|
|
description: Validation error
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/ErrorResponse'
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Patients
|
|
|
|
|
summary: Update patient
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/Patient'
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Patient updated successfully
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Patients
|
|
|
|
|
summary: Delete patient (soft delete)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- InternalPID
|
|
|
|
|
properties:
|
|
|
|
|
InternalPID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Internal patient record ID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Patient deleted successfully
|
|
|
|
|
/api/patient/check:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Patients
|
|
|
|
|
summary: Check if patient exists
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: PatientID
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Patient ID to check
|
|
|
|
|
- name: EmailAddress1
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
format: email
|
|
|
|
|
description: Email address to check
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Patient check result
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
exists:
|
|
|
|
|
type: boolean
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/Patient'
|
|
|
|
|
/api/patient/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Patients
|
|
|
|
|
summary: Get patient by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Internal patient record ID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Patient details
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/Patient'
|
|
|
|
|
/api/results:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Results
|
|
|
|
|
summary: Get patient results
|
|
|
|
|
description: Retrieve patient test results with optional filters
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: InternalPID
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Filter by internal patient ID
|
|
|
|
|
- name: OrderID
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Filter by order ID
|
|
|
|
|
- name: TestCode
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Filter by test code
|
|
|
|
|
- name: date_from
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
format: date
|
|
|
|
|
description: Filter results from date (YYYY-MM-DD)
|
|
|
|
|
- name: date_to
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
format: date
|
|
|
|
|
description: Filter results to date (YYYY-MM-DD)
|
|
|
|
|
- name: verified_only
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: boolean
|
|
|
|
|
default: false
|
|
|
|
|
description: Return only verified results
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of patient results
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
ResultID:
|
|
|
|
|
type: integer
|
|
|
|
|
InternalPID:
|
|
|
|
|
type: integer
|
|
|
|
|
OrderID:
|
|
|
|
|
type: string
|
|
|
|
|
TestID:
|
|
|
|
|
type: integer
|
|
|
|
|
TestCode:
|
|
|
|
|
type: string
|
|
|
|
|
TestName:
|
|
|
|
|
type: string
|
|
|
|
|
ResultValue:
|
|
|
|
|
type: string
|
|
|
|
|
Unit:
|
|
|
|
|
type: string
|
|
|
|
|
ReferenceRange:
|
|
|
|
|
type: string
|
|
|
|
|
AbnormalFlag:
|
|
|
|
|
type: string
|
|
|
|
|
Verified:
|
|
|
|
|
type: boolean
|
|
|
|
|
VerifiedBy:
|
|
|
|
|
type: string
|
|
|
|
|
VerifiedDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
ResultDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Results
|
|
|
|
|
summary: Create or update result
|
|
|
|
|
description: Create a new result or update an existing result entry
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- InternalPID
|
|
|
|
|
- TestID
|
|
|
|
|
- ResultValue
|
|
|
|
|
properties:
|
|
|
|
|
InternalPID:
|
|
|
|
|
type: integer
|
|
|
|
|
OrderID:
|
|
|
|
|
type: string
|
|
|
|
|
TestID:
|
|
|
|
|
type: integer
|
|
|
|
|
ResultValue:
|
|
|
|
|
type: string
|
|
|
|
|
Unit:
|
|
|
|
|
type: string
|
|
|
|
|
AbnormalFlag:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- H
|
|
|
|
|
- L
|
|
|
|
|
- 'N'
|
|
|
|
|
- A
|
|
|
|
|
- C
|
|
|
|
|
description: H=High, L=Low, N=Normal, A=Abnormal, C=Critical
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Result created successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
/api/results/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Results
|
|
|
|
|
summary: Get result by ID
|
|
|
|
|
description: Retrieve a specific result entry by its ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Result ID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Result details
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
ResultID:
|
|
|
|
|
type: integer
|
|
|
|
|
InternalPID:
|
|
|
|
|
type: integer
|
|
|
|
|
OrderID:
|
|
|
|
|
type: string
|
|
|
|
|
TestID:
|
|
|
|
|
type: integer
|
|
|
|
|
TestCode:
|
|
|
|
|
type: string
|
|
|
|
|
TestName:
|
|
|
|
|
type: string
|
|
|
|
|
ResultValue:
|
|
|
|
|
type: string
|
|
|
|
|
Unit:
|
|
|
|
|
type: string
|
|
|
|
|
ReferenceRange:
|
|
|
|
|
type: string
|
|
|
|
|
AbnormalFlag:
|
|
|
|
|
type: string
|
|
|
|
|
Verified:
|
|
|
|
|
type: boolean
|
|
|
|
|
VerifiedBy:
|
|
|
|
|
type: string
|
|
|
|
|
VerifiedDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
ResultDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Results
|
|
|
|
|
summary: Update result
|
|
|
|
|
description: Update an existing result entry
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Result ID
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
ResultValue:
|
|
|
|
|
type: string
|
|
|
|
|
Unit:
|
|
|
|
|
type: string
|
|
|
|
|
AbnormalFlag:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- H
|
|
|
|
|
- L
|
|
|
|
|
- 'N'
|
|
|
|
|
- A
|
|
|
|
|
- C
|
|
|
|
|
Verified:
|
|
|
|
|
type: boolean
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Result updated successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Results
|
|
|
|
|
summary: Delete result
|
|
|
|
|
description: Soft delete a result entry
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Result ID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Result deleted successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
/api/results/{id}/verify:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Results
|
|
|
|
|
summary: Verify result
|
|
|
|
|
description: Mark a result as verified by the current user
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Result ID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Result verified successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SuccessResponse'
|
|
|
|
|
/api/specimen:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: List specimens
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of specimens
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Create specimen
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/Specimen'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Specimen created
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Update specimen
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/Specimen'
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Specimen updated
|
|
|
|
|
/api/specimen/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Get specimen by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Specimen details
|
|
|
|
|
/api/specimen/container:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: List container definitions
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of container definitions
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Create container definition
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/ContainerDef'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Container definition created
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Update container definition
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Container definition updated
|
|
|
|
|
/api/specimen/container/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Get container definition by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Container definition details
|
|
|
|
|
/api/specimen/containerdef:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: List container definitions (alias)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of container definitions
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Create container definition (alias)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/ContainerDef'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Container definition created
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Update container definition (alias)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Container definition updated
|
|
|
|
|
/api/specimen/prep:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: List specimen preparations
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of specimen preparations
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Create specimen preparation
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SpecimenPrep'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Specimen preparation created
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Update specimen preparation
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Specimen preparation updated
|
|
|
|
|
/api/specimen/prep/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Get specimen preparation by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Specimen preparation details
|
|
|
|
|
/api/specimen/status:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: List specimen statuses
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of specimen statuses
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Create specimen status
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SpecimenStatus'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Specimen status created
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Update specimen status
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Specimen status updated
|
|
|
|
|
/api/specimen/status/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Get specimen status by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Specimen status details
|
|
|
|
|
/api/specimen/collection:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: List specimen collection methods
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of collection methods
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Create specimen collection method
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
$ref: '#/components/schemas/SpecimenCollection'
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Collection method created
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Update specimen collection method
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Collection method updated
|
|
|
|
|
/api/specimen/collection/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Specimen
|
|
|
|
|
summary: Get specimen collection method by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Collection method details
|
2026-02-23 16:49:39 +07:00
|
|
|
/api/test/testmap:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: List all test mappings
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: page
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 1
|
|
|
|
|
description: Page number for pagination
|
|
|
|
|
- name: perPage
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 20
|
|
|
|
|
description: Number of items per page
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of test mappings
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/TestMap'
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: Create test mapping
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
TestSiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Test Site ID (required)
|
|
|
|
|
HostType:
|
|
|
|
|
type: string
|
|
|
|
|
description: Host type code
|
|
|
|
|
HostID:
|
|
|
|
|
type: string
|
|
|
|
|
description: Host identifier
|
|
|
|
|
HostTestCode:
|
|
|
|
|
type: string
|
|
|
|
|
description: Test code in host system
|
|
|
|
|
HostTestName:
|
|
|
|
|
type: string
|
|
|
|
|
description: Test name in host system
|
|
|
|
|
ClientType:
|
|
|
|
|
type: string
|
|
|
|
|
description: Client type code
|
|
|
|
|
ClientID:
|
|
|
|
|
type: string
|
|
|
|
|
description: Client identifier
|
|
|
|
|
ConDefID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Connection definition ID
|
|
|
|
|
ClientTestCode:
|
|
|
|
|
type: string
|
|
|
|
|
description: Test code in client system
|
|
|
|
|
ClientTestName:
|
|
|
|
|
type: string
|
|
|
|
|
description: Test name in client system
|
|
|
|
|
required:
|
|
|
|
|
- TestSiteID
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Test mapping created
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Created TestMapID
|
|
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: Update test mapping
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
TestMapID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Test Map ID (required)
|
|
|
|
|
TestSiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
HostType:
|
|
|
|
|
type: string
|
|
|
|
|
HostID:
|
|
|
|
|
type: string
|
|
|
|
|
HostTestCode:
|
|
|
|
|
type: string
|
|
|
|
|
HostTestName:
|
|
|
|
|
type: string
|
|
|
|
|
ClientType:
|
|
|
|
|
type: string
|
|
|
|
|
ClientID:
|
|
|
|
|
type: string
|
|
|
|
|
ConDefID:
|
|
|
|
|
type: integer
|
|
|
|
|
ClientTestCode:
|
|
|
|
|
type: string
|
|
|
|
|
ClientTestName:
|
|
|
|
|
type: string
|
|
|
|
|
required:
|
|
|
|
|
- TestMapID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Test mapping updated
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Updated TestMapID
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: Soft delete test mapping
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
TestMapID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Test Map ID to delete (required)
|
|
|
|
|
required:
|
|
|
|
|
- TestMapID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Test mapping deleted successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Deleted TestMapID
|
|
|
|
|
'404':
|
|
|
|
|
description: Test mapping not found or already deleted
|
|
|
|
|
/api/test/testmap/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: Get test mapping by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Test Map ID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Test mapping details
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/TestMap'
|
|
|
|
|
'404':
|
|
|
|
|
description: Test mapping not found
|
|
|
|
|
/api/test/testmap/by-testsite/{testSiteID}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: Get test mappings by test site
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: testSiteID
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Test Site ID
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of test mappings for the test site
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/TestMap'
|
|
|
|
|
/api/test/testmap/by-host/{hostType}/{hostID}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: Get test mappings by host
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: hostType
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Host type code
|
|
|
|
|
- name: hostID
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Host identifier
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of test mappings for the host
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/TestMap'
|
|
|
|
|
/api/test/testmap/by-client/{clientType}/{clientID}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: Get test mappings by client
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: clientType
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Client type code
|
|
|
|
|
- name: clientID
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Client identifier
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of test mappings for the client
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/TestMap'
|
2026-02-16 14:20:52 +07:00
|
|
|
/api/tests:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: List test definitions
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: page
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 1
|
|
|
|
|
description: Page number for pagination
|
|
|
|
|
- name: perPage
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 20
|
|
|
|
|
description: Number of items per page
|
|
|
|
|
- name: SiteID
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Filter by site ID
|
|
|
|
|
- name: TestType
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- TEST
|
|
|
|
|
- PARAM
|
|
|
|
|
- CALC
|
|
|
|
|
- GROUP
|
|
|
|
|
- TITLE
|
|
|
|
|
description: Filter by test type
|
|
|
|
|
- name: VisibleScr
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
enum:
|
|
|
|
|
- 0
|
|
|
|
|
- 1
|
|
|
|
|
description: Filter by screen visibility (0=hidden, 1=visible)
|
|
|
|
|
- name: VisibleRpt
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
enum:
|
|
|
|
|
- 0
|
|
|
|
|
- 1
|
|
|
|
|
description: Filter by report visibility (0=hidden, 1=visible)
|
|
|
|
|
- name: search
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Search by test code or name
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of test definitions
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/TestDefinition'
|
|
|
|
|
pagination:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
total:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Total number of records matching the query
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: Create test definition
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
2026-02-19 13:20:24 +07:00
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Site ID (required)
|
|
|
|
|
TestSiteCode:
|
|
|
|
|
type: string
|
|
|
|
|
description: Test code (required)
|
|
|
|
|
TestSiteName:
|
|
|
|
|
type: string
|
|
|
|
|
description: Test name (required)
|
|
|
|
|
TestType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- TEST
|
|
|
|
|
- PARAM
|
|
|
|
|
- CALC
|
|
|
|
|
- GROUP
|
|
|
|
|
- TITLE
|
|
|
|
|
description: Test type (required)
|
|
|
|
|
Description:
|
|
|
|
|
type: string
|
|
|
|
|
DisciplineID:
|
|
|
|
|
type: integer
|
|
|
|
|
DepartmentID:
|
|
|
|
|
type: integer
|
|
|
|
|
ResultType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- NMRIC
|
2026-02-20 13:47:47 +07:00
|
|
|
- RANGE
|
|
|
|
|
- TEXT
|
2026-02-19 13:20:24 +07:00
|
|
|
- VSET
|
2026-02-20 13:47:47 +07:00
|
|
|
- NORES
|
2026-02-19 13:20:24 +07:00
|
|
|
RefType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
2026-02-20 13:47:47 +07:00
|
|
|
- RANGE
|
2026-02-19 13:20:24 +07:00
|
|
|
- THOLD
|
|
|
|
|
- VSET
|
2026-02-20 13:47:47 +07:00
|
|
|
- TEXT
|
|
|
|
|
- NOREF
|
2026-02-19 13:20:24 +07:00
|
|
|
VSet:
|
|
|
|
|
type: integer
|
|
|
|
|
ReqQty:
|
|
|
|
|
type: number
|
|
|
|
|
format: decimal
|
|
|
|
|
ReqQtyUnit:
|
|
|
|
|
type: string
|
|
|
|
|
Unit1:
|
|
|
|
|
type: string
|
|
|
|
|
Factor:
|
|
|
|
|
type: number
|
|
|
|
|
format: decimal
|
|
|
|
|
Unit2:
|
|
|
|
|
type: string
|
|
|
|
|
Decimal:
|
|
|
|
|
type: integer
|
|
|
|
|
CollReq:
|
|
|
|
|
type: string
|
|
|
|
|
Method:
|
|
|
|
|
type: string
|
|
|
|
|
ExpectedTAT:
|
|
|
|
|
type: integer
|
|
|
|
|
SeqScr:
|
|
|
|
|
type: integer
|
|
|
|
|
SeqRpt:
|
|
|
|
|
type: integer
|
|
|
|
|
IndentLeft:
|
|
|
|
|
type: integer
|
|
|
|
|
FontStyle:
|
|
|
|
|
type: string
|
|
|
|
|
VisibleScr:
|
|
|
|
|
type: integer
|
|
|
|
|
VisibleRpt:
|
|
|
|
|
type: integer
|
|
|
|
|
CountStat:
|
|
|
|
|
type: integer
|
|
|
|
|
details:
|
|
|
|
|
type: object
|
|
|
|
|
description: Type-specific details
|
|
|
|
|
refnum:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
reftxt:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
testmap:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- SiteID
|
|
|
|
|
- TestSiteCode
|
|
|
|
|
- TestSiteName
|
|
|
|
|
- TestType
|
2026-02-16 14:20:52 +07:00
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: Test definition created
|
2026-02-19 13:20:24 +07:00
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: created
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
TestSiteId:
|
|
|
|
|
type: integer
|
2026-02-16 14:20:52 +07:00
|
|
|
patch:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: Update test definition
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
2026-02-19 13:20:24 +07:00
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
TestSiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Test Site ID (required)
|
|
|
|
|
TestSiteCode:
|
|
|
|
|
type: string
|
|
|
|
|
TestSiteName:
|
|
|
|
|
type: string
|
|
|
|
|
TestType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- TEST
|
|
|
|
|
- PARAM
|
|
|
|
|
- CALC
|
|
|
|
|
- GROUP
|
|
|
|
|
- TITLE
|
|
|
|
|
Description:
|
|
|
|
|
type: string
|
|
|
|
|
DisciplineID:
|
|
|
|
|
type: integer
|
|
|
|
|
DepartmentID:
|
|
|
|
|
type: integer
|
|
|
|
|
ResultType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- NMRIC
|
2026-02-20 13:47:47 +07:00
|
|
|
- RANGE
|
|
|
|
|
- TEXT
|
2026-02-19 13:20:24 +07:00
|
|
|
- VSET
|
2026-02-20 13:47:47 +07:00
|
|
|
- NORES
|
2026-02-19 13:20:24 +07:00
|
|
|
RefType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
2026-02-20 13:47:47 +07:00
|
|
|
- RANGE
|
2026-02-19 13:20:24 +07:00
|
|
|
- THOLD
|
|
|
|
|
- VSET
|
2026-02-20 13:47:47 +07:00
|
|
|
- TEXT
|
|
|
|
|
- NOREF
|
2026-02-19 13:20:24 +07:00
|
|
|
VSet:
|
|
|
|
|
type: integer
|
|
|
|
|
ReqQty:
|
|
|
|
|
type: number
|
|
|
|
|
format: decimal
|
|
|
|
|
ReqQtyUnit:
|
|
|
|
|
type: string
|
|
|
|
|
Unit1:
|
|
|
|
|
type: string
|
|
|
|
|
Factor:
|
|
|
|
|
type: number
|
|
|
|
|
format: decimal
|
|
|
|
|
Unit2:
|
|
|
|
|
type: string
|
|
|
|
|
Decimal:
|
|
|
|
|
type: integer
|
|
|
|
|
CollReq:
|
|
|
|
|
type: string
|
|
|
|
|
Method:
|
|
|
|
|
type: string
|
|
|
|
|
ExpectedTAT:
|
|
|
|
|
type: integer
|
|
|
|
|
SeqScr:
|
|
|
|
|
type: integer
|
|
|
|
|
SeqRpt:
|
|
|
|
|
type: integer
|
|
|
|
|
IndentLeft:
|
|
|
|
|
type: integer
|
|
|
|
|
FontStyle:
|
|
|
|
|
type: string
|
|
|
|
|
VisibleScr:
|
|
|
|
|
type: integer
|
|
|
|
|
VisibleRpt:
|
|
|
|
|
type: integer
|
|
|
|
|
CountStat:
|
|
|
|
|
type: integer
|
|
|
|
|
details:
|
|
|
|
|
type: object
|
|
|
|
|
description: Type-specific details
|
|
|
|
|
refnum:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
reftxt:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
testmap:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- TestSiteID
|
2026-02-16 14:20:52 +07:00
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Test definition updated
|
2026-02-19 13:20:24 +07:00
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
TestSiteId:
|
|
|
|
|
type: integer
|
2026-02-16 14:20:52 +07:00
|
|
|
/api/tests/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: Get test definition by ID
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
2026-02-19 13:20:24 +07:00
|
|
|
description: Test Site ID
|
2026-02-16 14:20:52 +07:00
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Test definition details
|
2026-02-19 13:20:24 +07:00
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/TestDefinition'
|
|
|
|
|
'404':
|
|
|
|
|
description: Test not found
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- Tests
|
|
|
|
|
summary: Soft delete test definition
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Test Site ID to delete
|
|
|
|
|
requestBody:
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
TestSiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Optional - can be provided in body instead of path
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Test disabled successfully
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
TestSiteId:
|
|
|
|
|
type: integer
|
|
|
|
|
EndDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
'404':
|
|
|
|
|
description: Test not found
|
|
|
|
|
'422':
|
|
|
|
|
description: Test already disabled
|
2026-02-16 14:20:52 +07:00
|
|
|
/api/valueset:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: List lib value sets
|
2026-02-23 13:16:06 +07:00
|
|
|
description: List all library/system value sets from JSON files with item counts. Returns an array of objects with value, label, and count properties.
|
2026-02-16 14:20:52 +07:00
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: search
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
2026-02-23 13:16:06 +07:00
|
|
|
description: Optional search term to filter value set names or labels
|
2026-02-16 14:20:52 +07:00
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of lib value sets with item counts
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
data:
|
2026-02-23 13:16:06 +07:00
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/ValueSetListItem'
|
2026-02-16 14:20:52 +07:00
|
|
|
example:
|
2026-02-23 13:16:06 +07:00
|
|
|
- value: sex
|
|
|
|
|
label: Sex
|
|
|
|
|
count: 3
|
|
|
|
|
- value: marital_status
|
|
|
|
|
label: Marital Status
|
|
|
|
|
count: 6
|
|
|
|
|
- value: order_status
|
|
|
|
|
label: Order Status
|
|
|
|
|
count: 6
|
2026-02-16 14:20:52 +07:00
|
|
|
/api/valueset/{key}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: Get lib value set by key
|
|
|
|
|
description: |
|
|
|
|
|
Get a specific library/system value set from JSON files.
|
|
|
|
|
|
|
|
|
|
**Available value set keys:**
|
|
|
|
|
- `activity_result` - Activity Result
|
|
|
|
|
- `additive` - Additive
|
|
|
|
|
- `adt_event` - ADT Event
|
|
|
|
|
- `area_class` - Area Class
|
|
|
|
|
- `body_site` - Body Site
|
|
|
|
|
- `collection_method` - Collection Method
|
|
|
|
|
- `container_cap_color` - Container Cap Color
|
|
|
|
|
- `container_class` - Container Class
|
|
|
|
|
- `container_size` - Container Size
|
|
|
|
|
- `country` - Country
|
|
|
|
|
- `death_indicator` - Death Indicator
|
|
|
|
|
- `did_type` - DID Type
|
|
|
|
|
- `enable_disable` - Enable/Disable
|
|
|
|
|
- `entity_type` - Entity Type
|
|
|
|
|
- `ethnic` - Ethnic
|
|
|
|
|
- `fasting_status` - Fasting Status
|
|
|
|
|
- `formula_language` - Formula Language
|
|
|
|
|
- `generate_by` - Generate By
|
|
|
|
|
- `identifier_type` - Identifier Type
|
|
|
|
|
- `location_type` - Location Type
|
|
|
|
|
- `marital_status` - Marital Status
|
|
|
|
|
- `math_sign` - Math Sign
|
|
|
|
|
- `numeric_ref_type` - Numeric Reference Type
|
|
|
|
|
- `operation` - Operation (CRUD)
|
|
|
|
|
- `order_priority` - Order Priority
|
|
|
|
|
- `order_status` - Order Status
|
|
|
|
|
- `race` - Race (Ethnicity)
|
|
|
|
|
- `range_type` - Range Type
|
|
|
|
|
- `reference_type` - Reference Type
|
|
|
|
|
- `religion` - Religion
|
|
|
|
|
- `requested_entity` - Requested Entity
|
|
|
|
|
- `result_type` - Result Type
|
|
|
|
|
- `result_unit` - Result Unit
|
|
|
|
|
- `sex` - Sex
|
|
|
|
|
- `site_class` - Site Class
|
|
|
|
|
- `site_type` - Site Type
|
|
|
|
|
- `specimen_activity` - Specimen Activity
|
|
|
|
|
- `specimen_condition` - Specimen Condition
|
|
|
|
|
- `specimen_role` - Specimen Role
|
|
|
|
|
- `specimen_status` - Specimen Status
|
|
|
|
|
- `specimen_type` - Specimen Type
|
|
|
|
|
- `test_activity` - Test Activity
|
|
|
|
|
- `test_type` - Test Type
|
|
|
|
|
- `text_ref_type` - Text Reference Type
|
|
|
|
|
- `unit` - Unit
|
|
|
|
|
- `v_category` - VCategory
|
|
|
|
|
- `ws_type` - Workstation Type
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: key
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- activity_result
|
|
|
|
|
- additive
|
|
|
|
|
- adt_event
|
|
|
|
|
- area_class
|
|
|
|
|
- body_site
|
|
|
|
|
- collection_method
|
|
|
|
|
- container_cap_color
|
|
|
|
|
- container_class
|
|
|
|
|
- container_size
|
|
|
|
|
- country
|
|
|
|
|
- death_indicator
|
|
|
|
|
- did_type
|
|
|
|
|
- enable_disable
|
|
|
|
|
- entity_type
|
|
|
|
|
- ethnic
|
|
|
|
|
- fasting_status
|
|
|
|
|
- formula_language
|
|
|
|
|
- generate_by
|
|
|
|
|
- identifier_type
|
|
|
|
|
- location_type
|
|
|
|
|
- marital_status
|
|
|
|
|
- math_sign
|
|
|
|
|
- numeric_ref_type
|
|
|
|
|
- operation
|
|
|
|
|
- order_priority
|
|
|
|
|
- order_status
|
|
|
|
|
- race
|
|
|
|
|
- range_type
|
|
|
|
|
- reference_type
|
|
|
|
|
- religion
|
|
|
|
|
- requested_entity
|
|
|
|
|
- result_type
|
|
|
|
|
- result_unit
|
|
|
|
|
- sex
|
|
|
|
|
- site_class
|
|
|
|
|
- site_type
|
|
|
|
|
- specimen_activity
|
|
|
|
|
- specimen_condition
|
|
|
|
|
- specimen_role
|
|
|
|
|
- specimen_status
|
|
|
|
|
- specimen_type
|
|
|
|
|
- test_activity
|
|
|
|
|
- test_type
|
|
|
|
|
- text_ref_type
|
|
|
|
|
- unit
|
|
|
|
|
- v_category
|
|
|
|
|
- ws_type
|
|
|
|
|
description: Value set key name
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Lib value set details
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/ValueSetLibItem'
|
|
|
|
|
/api/valueset/refresh:
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: Refresh lib ValueSet cache
|
|
|
|
|
description: Clear and reload the library/system ValueSet cache from JSON files. Call this after modifying JSON files in app/Libraries/Data/.
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: Lib ValueSet cache refreshed
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
example: Cache cleared
|
|
|
|
|
/api/valueset/user/items:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: List user value set items
|
|
|
|
|
description: List value set items from database (user-defined)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: VSetID
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Filter by ValueSet ID
|
|
|
|
|
- name: search
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Search term to filter by VValue, VDesc, or VSName
|
|
|
|
|
- name: param
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Alternative search parameter (alias for search)
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of user value set items
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/ValueSetItem'
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: Create user value set item
|
|
|
|
|
description: Create value set item in database (user-defined)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- VSetID
|
|
|
|
|
properties:
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Site reference (default 1)
|
|
|
|
|
VSetID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Reference to value set definition (required)
|
|
|
|
|
VOrder:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Display order (default 0)
|
|
|
|
|
VValue:
|
|
|
|
|
type: string
|
|
|
|
|
description: The value code
|
|
|
|
|
VDesc:
|
|
|
|
|
type: string
|
|
|
|
|
description: The display description/label
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: User value set item created
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/ValueSetItem'
|
|
|
|
|
/api/valueset/user/items/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: Get user value set item by ID
|
|
|
|
|
description: Get value set item from database (user-defined)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: User value set item details
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/ValueSetItem'
|
|
|
|
|
put:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: Update user value set item
|
|
|
|
|
description: Update value set item in database (user-defined)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Site reference
|
|
|
|
|
VSetID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Reference to value set definition
|
|
|
|
|
VOrder:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Display order
|
|
|
|
|
VValue:
|
|
|
|
|
type: string
|
|
|
|
|
description: The value code
|
|
|
|
|
VDesc:
|
|
|
|
|
type: string
|
|
|
|
|
description: The display description/label
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: User value set item updated
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/ValueSetItem'
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: Delete user value set item
|
|
|
|
|
description: Delete value set item from database (user-defined)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: User value set item deleted
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
/api/valueset/user/def:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: List user value set definitions
|
|
|
|
|
description: List value set definitions from database (user-defined)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: search
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: string
|
|
|
|
|
description: Optional search term to filter definitions
|
|
|
|
|
- name: page
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 1
|
|
|
|
|
description: Page number for pagination
|
|
|
|
|
- name: limit
|
|
|
|
|
in: query
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 100
|
|
|
|
|
description: Number of items per page
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: List of user value set definitions
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/ValueSetDef'
|
|
|
|
|
meta:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
total:
|
|
|
|
|
type: integer
|
|
|
|
|
page:
|
|
|
|
|
type: integer
|
|
|
|
|
limit:
|
|
|
|
|
type: integer
|
|
|
|
|
post:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: Create user value set definition
|
|
|
|
|
description: Create value set definition in database (user-defined)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Site reference (default 1)
|
|
|
|
|
VSName:
|
|
|
|
|
type: string
|
|
|
|
|
description: Value set name
|
|
|
|
|
VSDesc:
|
|
|
|
|
type: string
|
|
|
|
|
description: Value set description
|
|
|
|
|
responses:
|
|
|
|
|
'201':
|
|
|
|
|
description: User value set definition created
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/ValueSetDef'
|
|
|
|
|
/api/valueset/user/def/{id}:
|
|
|
|
|
get:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: Get user value set definition by ID
|
|
|
|
|
description: Get value set definition from database (user-defined)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: User value set definition details
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/ValueSetDef'
|
|
|
|
|
put:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: Update user value set definition
|
|
|
|
|
description: Update value set definition in database (user-defined)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Site reference
|
|
|
|
|
VSName:
|
|
|
|
|
type: string
|
|
|
|
|
description: Value set name
|
|
|
|
|
VSDesc:
|
|
|
|
|
type: string
|
|
|
|
|
description: Value set description
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: User value set definition updated
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
data:
|
|
|
|
|
$ref: '#/components/schemas/ValueSetDef'
|
|
|
|
|
delete:
|
|
|
|
|
tags:
|
|
|
|
|
- ValueSets
|
|
|
|
|
summary: Delete user value set definition
|
|
|
|
|
description: Delete value set definition from database (user-defined)
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
parameters:
|
|
|
|
|
- name: id
|
|
|
|
|
in: path
|
|
|
|
|
required: true
|
|
|
|
|
schema:
|
|
|
|
|
type: integer
|
|
|
|
|
responses:
|
|
|
|
|
'200':
|
|
|
|
|
description: User value set definition deleted
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
components:
|
|
|
|
|
securitySchemes:
|
|
|
|
|
bearerAuth:
|
|
|
|
|
type: http
|
|
|
|
|
scheme: bearer
|
|
|
|
|
bearerFormat: JWT
|
|
|
|
|
description: JWT token from login endpoint
|
|
|
|
|
cookieAuth:
|
|
|
|
|
type: apiKey
|
|
|
|
|
in: cookie
|
|
|
|
|
name: token
|
|
|
|
|
description: JWT token stored in HTTP-only cookie
|
|
|
|
|
schemas:
|
|
|
|
|
SuccessResponse:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
code:
|
|
|
|
|
type: integer
|
|
|
|
|
example: 200
|
|
|
|
|
ErrorResponse:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: error
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
errors:
|
|
|
|
|
type: object
|
|
|
|
|
DashboardSummary:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
pendingOrders:
|
|
|
|
|
type: integer
|
|
|
|
|
todayResults:
|
|
|
|
|
type: integer
|
|
|
|
|
criticalResults:
|
|
|
|
|
type: integer
|
|
|
|
|
activePatients:
|
|
|
|
|
type: integer
|
|
|
|
|
LoginRequest:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- username
|
|
|
|
|
- password
|
|
|
|
|
properties:
|
|
|
|
|
username:
|
|
|
|
|
type: string
|
|
|
|
|
example: labuser01
|
|
|
|
|
password:
|
|
|
|
|
type: string
|
|
|
|
|
format: password
|
|
|
|
|
example: secret123
|
|
|
|
|
LoginResponse:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
code:
|
|
|
|
|
type: integer
|
|
|
|
|
example: 200
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
example: Login successful
|
|
|
|
|
RegisterRequest:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- username
|
|
|
|
|
- password
|
|
|
|
|
- email
|
|
|
|
|
properties:
|
|
|
|
|
username:
|
|
|
|
|
type: string
|
|
|
|
|
password:
|
|
|
|
|
type: string
|
|
|
|
|
format: password
|
|
|
|
|
email:
|
|
|
|
|
type: string
|
|
|
|
|
format: email
|
|
|
|
|
full_name:
|
|
|
|
|
type: string
|
|
|
|
|
Patient:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- PatientID
|
|
|
|
|
- Sex
|
|
|
|
|
- NameFirst
|
|
|
|
|
- Birthdate
|
|
|
|
|
properties:
|
|
|
|
|
PatientID:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 30
|
|
|
|
|
pattern: ^[A-Za-z0-9]+$
|
|
|
|
|
description: Internal patient identifier
|
|
|
|
|
AlternatePID:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 30
|
|
|
|
|
pattern: ^[A-Za-z0-9]+$
|
|
|
|
|
Prefix:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 10
|
|
|
|
|
enum:
|
|
|
|
|
- Mr
|
|
|
|
|
- Mrs
|
|
|
|
|
- Ms
|
|
|
|
|
- Dr
|
|
|
|
|
- Prof
|
|
|
|
|
Sex:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- '1'
|
|
|
|
|
- '2'
|
|
|
|
|
description: '1: Female, 2: Male'
|
|
|
|
|
NameFirst:
|
|
|
|
|
type: string
|
|
|
|
|
minLength: 1
|
|
|
|
|
maxLength: 60
|
|
|
|
|
pattern: ^[A-Za-z'\. ]+$
|
|
|
|
|
NameMiddle:
|
|
|
|
|
type: string
|
|
|
|
|
minLength: 1
|
|
|
|
|
maxLength: 60
|
|
|
|
|
NameMaiden:
|
|
|
|
|
type: string
|
|
|
|
|
minLength: 1
|
|
|
|
|
maxLength: 60
|
|
|
|
|
NameLast:
|
|
|
|
|
type: string
|
|
|
|
|
minLength: 1
|
|
|
|
|
maxLength: 60
|
|
|
|
|
Suffix:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 10
|
|
|
|
|
Birthdate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
description: ISO 8601 UTC datetime
|
|
|
|
|
PlaceOfBirth:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 100
|
|
|
|
|
Citizenship:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 100
|
|
|
|
|
Street_1:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 255
|
|
|
|
|
Street_2:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 255
|
|
|
|
|
Street_3:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 255
|
|
|
|
|
ZIP:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 10
|
|
|
|
|
pattern: ^[0-9]+$
|
|
|
|
|
Phone:
|
|
|
|
|
type: string
|
|
|
|
|
pattern: ^\+?[0-9]{8,15}$
|
|
|
|
|
MobilePhone:
|
|
|
|
|
type: string
|
|
|
|
|
pattern: ^\+?[0-9]{8,15}$
|
|
|
|
|
EmailAddress1:
|
|
|
|
|
type: string
|
|
|
|
|
format: email
|
|
|
|
|
maxLength: 100
|
|
|
|
|
EmailAddress2:
|
|
|
|
|
type: string
|
|
|
|
|
format: email
|
|
|
|
|
maxLength: 100
|
|
|
|
|
PatIdt:
|
|
|
|
|
$ref: '#/components/schemas/PatientIdentifier'
|
|
|
|
|
LinkTo:
|
|
|
|
|
type: array
|
|
|
|
|
description: Array of linked patient references
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/LinkedPatient'
|
|
|
|
|
Custodian:
|
|
|
|
|
$ref: '#/components/schemas/Custodian'
|
|
|
|
|
DeathIndicator:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- 'Y'
|
|
|
|
|
- 'N'
|
|
|
|
|
description: 'Y: Yes (deceased), N: No (alive)'
|
|
|
|
|
TimeOfDeath:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
description: ISO 8601 UTC datetime of death
|
|
|
|
|
PatCom:
|
|
|
|
|
type: string
|
|
|
|
|
description: Patient comment/notes
|
|
|
|
|
PatAtt:
|
|
|
|
|
type: array
|
|
|
|
|
description: Patient address entries
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/PatAttEntry'
|
|
|
|
|
Province:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Province AreaGeoID (foreign key to areageo table)
|
|
|
|
|
ProvinceLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Province name (resolved from areageo)
|
|
|
|
|
City:
|
|
|
|
|
type: integer
|
|
|
|
|
description: City AreaGeoID (foreign key to areageo table)
|
|
|
|
|
CityLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: City name (resolved from areageo)
|
|
|
|
|
Country:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 10
|
|
|
|
|
description: Country ISO 3-letter code (e.g., IDN, USA)
|
|
|
|
|
CountryLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Country name (resolved from valueset)
|
|
|
|
|
Race:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 100
|
|
|
|
|
MaritalStatus:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- A
|
|
|
|
|
- B
|
|
|
|
|
- D
|
|
|
|
|
- M
|
|
|
|
|
- S
|
|
|
|
|
- W
|
|
|
|
|
description: 'A: Annulled, B: Separated, D: Divorced, M: Married, S: Single, W: Widowed'
|
|
|
|
|
Religion:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 100
|
|
|
|
|
Ethnic:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 100
|
|
|
|
|
PatientIdentifier:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
IdentifierType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- KTP
|
|
|
|
|
- PASS
|
|
|
|
|
- SSN
|
|
|
|
|
- SIM
|
|
|
|
|
- KTAS
|
|
|
|
|
description: |
|
|
|
|
|
KTP: 16 digit numeric
|
|
|
|
|
PASS: alphanumeric max 9
|
|
|
|
|
SSN: 9 digit numeric
|
|
|
|
|
SIM: 19-20 digit numeric
|
|
|
|
|
KTAS: 11 digit numeric
|
|
|
|
|
Identifier:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 255
|
|
|
|
|
LinkedPatient:
|
|
|
|
|
type: object
|
|
|
|
|
description: Linked patient reference
|
|
|
|
|
properties:
|
|
|
|
|
InternalPID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Internal patient ID of the linked patient
|
|
|
|
|
PatientID:
|
|
|
|
|
type: string
|
|
|
|
|
description: Patient ID of the linked patient
|
|
|
|
|
Custodian:
|
|
|
|
|
type: object
|
|
|
|
|
description: Patient custodian/guardian
|
|
|
|
|
properties:
|
|
|
|
|
InternalPID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Internal patient ID of the custodian
|
|
|
|
|
PatientID:
|
|
|
|
|
type: string
|
|
|
|
|
description: Patient ID of the custodian
|
|
|
|
|
PatAttEntry:
|
|
|
|
|
type: object
|
|
|
|
|
description: Patient address/attorney entry
|
|
|
|
|
properties:
|
|
|
|
|
Address:
|
|
|
|
|
type: string
|
|
|
|
|
description: Address text
|
|
|
|
|
PatientListResponse:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
data:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/Patient'
|
|
|
|
|
pagination:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
page:
|
|
|
|
|
type: integer
|
|
|
|
|
perPage:
|
|
|
|
|
type: integer
|
|
|
|
|
total:
|
|
|
|
|
type: integer
|
|
|
|
|
PatientVisit:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
InternalPVID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Primary key (auto-generated)
|
|
|
|
|
PVID:
|
|
|
|
|
type: string
|
|
|
|
|
description: Visit ID (auto-generated with DV prefix if not provided)
|
|
|
|
|
InternalPID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Reference to patient
|
|
|
|
|
EpisodeID:
|
|
|
|
|
type: string
|
|
|
|
|
description: Episode identifier
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Site reference
|
|
|
|
|
CreateDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
EndDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
ArchivedDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
DelDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
PatDiag:
|
|
|
|
|
type: object
|
|
|
|
|
description: Diagnosis information (optional)
|
|
|
|
|
properties:
|
|
|
|
|
DiagCode:
|
|
|
|
|
type: string
|
|
|
|
|
Diagnosis:
|
|
|
|
|
type: string
|
|
|
|
|
PatVisitADT:
|
|
|
|
|
type: object
|
|
|
|
|
description: ADT (Admission/Discharge/Transfer) information (optional)
|
|
|
|
|
properties:
|
|
|
|
|
ADTCode:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- A01
|
|
|
|
|
- A02
|
|
|
|
|
- A03
|
|
|
|
|
- A04
|
|
|
|
|
- A08
|
|
|
|
|
LocationID:
|
|
|
|
|
type: integer
|
|
|
|
|
AttDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Attending physician ContactID
|
|
|
|
|
RefDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Referring physician ContactID
|
|
|
|
|
AdmDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Admitting physician ContactID
|
|
|
|
|
CnsDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Consulting physician ContactID
|
|
|
|
|
PatVisitADT:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
PVADTID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Primary key (auto-generated)
|
|
|
|
|
InternalPVID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Reference to patient visit
|
|
|
|
|
ADTCode:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- A01
|
|
|
|
|
- A02
|
|
|
|
|
- A03
|
|
|
|
|
- A04
|
|
|
|
|
- A08
|
|
|
|
|
description: |
|
|
|
|
|
A01: Admit
|
|
|
|
|
A02: Transfer
|
|
|
|
|
A03: Discharge
|
|
|
|
|
A04: Register
|
|
|
|
|
A08: Update
|
|
|
|
|
LocationID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Location/ward reference
|
|
|
|
|
AttDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Attending physician ContactID
|
|
|
|
|
RefDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Referring physician ContactID
|
|
|
|
|
AdmDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Admitting physician ContactID
|
|
|
|
|
CnsDoc:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Consulting physician ContactID
|
|
|
|
|
CreateDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
EndDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
ArchivedDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
DelDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
Account:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
AccountName:
|
|
|
|
|
type: string
|
|
|
|
|
AccountCode:
|
|
|
|
|
type: string
|
|
|
|
|
AccountType:
|
|
|
|
|
type: string
|
|
|
|
|
Site:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
SiteName:
|
|
|
|
|
type: string
|
|
|
|
|
SiteCode:
|
|
|
|
|
type: string
|
|
|
|
|
AccountID:
|
|
|
|
|
type: integer
|
|
|
|
|
Discipline:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
DisciplineName:
|
|
|
|
|
type: string
|
|
|
|
|
DisciplineCode:
|
|
|
|
|
type: string
|
|
|
|
|
Department:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
DeptName:
|
|
|
|
|
type: string
|
|
|
|
|
DeptCode:
|
|
|
|
|
type: string
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
Workstation:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
WorkstationName:
|
|
|
|
|
type: string
|
|
|
|
|
WorkstationCode:
|
|
|
|
|
type: string
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
DepartmentID:
|
|
|
|
|
type: integer
|
|
|
|
|
Specimen:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
SpecimenID:
|
|
|
|
|
type: string
|
|
|
|
|
PatientID:
|
|
|
|
|
type: string
|
|
|
|
|
SpecimenType:
|
|
|
|
|
type: string
|
|
|
|
|
description: Specimen type code
|
|
|
|
|
SpecimenTypeLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Specimen type display text
|
|
|
|
|
CollectionDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
CollectionMethod:
|
|
|
|
|
type: string
|
|
|
|
|
description: Collection method code
|
|
|
|
|
CollectionMethodLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Collection method display text
|
|
|
|
|
ContainerID:
|
|
|
|
|
type: integer
|
|
|
|
|
SpecimenStatus:
|
|
|
|
|
type: string
|
|
|
|
|
description: Specimen status code
|
|
|
|
|
SpecimenStatusLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Specimen status display text
|
|
|
|
|
BodySite:
|
|
|
|
|
type: string
|
|
|
|
|
description: Body site code
|
|
|
|
|
BodySiteLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Body site display text
|
|
|
|
|
ContainerDef:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
ContainerCode:
|
|
|
|
|
type: string
|
|
|
|
|
ContainerName:
|
|
|
|
|
type: string
|
|
|
|
|
ConCategory:
|
|
|
|
|
type: string
|
|
|
|
|
description: Container category code
|
|
|
|
|
ConCategoryLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Container category display text
|
|
|
|
|
ConSize:
|
|
|
|
|
type: string
|
|
|
|
|
description: Container size code
|
|
|
|
|
ConSizeLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Container size display text
|
|
|
|
|
CapColor:
|
|
|
|
|
type: string
|
|
|
|
|
description: Cap color code
|
|
|
|
|
CapColorLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Cap color display text
|
|
|
|
|
SpecimenPrep:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
PrepCode:
|
|
|
|
|
type: string
|
|
|
|
|
PrepName:
|
|
|
|
|
type: string
|
|
|
|
|
Description:
|
|
|
|
|
type: string
|
|
|
|
|
SpecimenStatus:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
StatusCode:
|
|
|
|
|
type: string
|
|
|
|
|
StatusName:
|
|
|
|
|
type: string
|
|
|
|
|
Description:
|
|
|
|
|
type: string
|
|
|
|
|
Status:
|
|
|
|
|
type: string
|
|
|
|
|
description: Status code
|
|
|
|
|
StatusLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Status display text
|
|
|
|
|
Activity:
|
|
|
|
|
type: string
|
|
|
|
|
description: Activity code
|
|
|
|
|
ActivityLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Activity display text
|
|
|
|
|
SpecimenCollection:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
CollectionCode:
|
|
|
|
|
type: string
|
|
|
|
|
CollectionName:
|
|
|
|
|
type: string
|
|
|
|
|
Description:
|
|
|
|
|
type: string
|
|
|
|
|
CollectionMethod:
|
|
|
|
|
type: string
|
|
|
|
|
description: Collection method code
|
|
|
|
|
CollectionMethodLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Collection method display text
|
|
|
|
|
Additive:
|
|
|
|
|
type: string
|
|
|
|
|
description: Additive code
|
|
|
|
|
AdditiveLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Additive display text
|
|
|
|
|
SpecimenRole:
|
|
|
|
|
type: string
|
|
|
|
|
description: Specimen role code
|
|
|
|
|
SpecimenRoleLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Specimen role display text
|
|
|
|
|
TestDefinition:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
2026-02-19 13:20:24 +07:00
|
|
|
TestSiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
SiteID:
|
2026-02-16 14:20:52 +07:00
|
|
|
type: integer
|
2026-02-19 13:20:24 +07:00
|
|
|
TestSiteCode:
|
2026-02-16 14:20:52 +07:00
|
|
|
type: string
|
2026-02-19 13:20:24 +07:00
|
|
|
TestSiteName:
|
2026-02-16 14:20:52 +07:00
|
|
|
type: string
|
|
|
|
|
TestType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- TEST
|
|
|
|
|
- PARAM
|
|
|
|
|
- CALC
|
|
|
|
|
- GROUP
|
|
|
|
|
- TITLE
|
|
|
|
|
description: |
|
|
|
|
|
TEST: Technical test
|
|
|
|
|
PARAM: Parameter
|
|
|
|
|
CALC: Calculated
|
|
|
|
|
GROUP: Panel/Profile
|
|
|
|
|
TITLE: Section header
|
2026-02-19 13:20:24 +07:00
|
|
|
Description:
|
|
|
|
|
type: string
|
2026-02-16 14:20:52 +07:00
|
|
|
DisciplineID:
|
|
|
|
|
type: integer
|
|
|
|
|
DisciplineName:
|
|
|
|
|
type: string
|
|
|
|
|
DepartmentID:
|
|
|
|
|
type: integer
|
|
|
|
|
DepartmentName:
|
|
|
|
|
type: string
|
2026-02-19 13:20:24 +07:00
|
|
|
ResultType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- NMRIC
|
2026-02-20 13:47:47 +07:00
|
|
|
- RANGE
|
|
|
|
|
- TEXT
|
2026-02-19 13:20:24 +07:00
|
|
|
- VSET
|
2026-02-20 13:47:47 +07:00
|
|
|
- NORES
|
2026-02-19 13:20:24 +07:00
|
|
|
description: |
|
2026-02-20 13:47:47 +07:00
|
|
|
Result type determines the format of test results:
|
|
|
|
|
- NMRIC: Single numeric value
|
|
|
|
|
- RANGE: Numeric range (min-max)
|
|
|
|
|
- TEXT: Free text result
|
|
|
|
|
- VSET: Value set/enum result
|
|
|
|
|
- NORES: No result (for GROUP and TITLE types)
|
|
|
|
|
|
|
|
|
|
TestType to ResultType mapping:
|
|
|
|
|
- TEST: NMRIC | RANGE | TEXT | VSET
|
|
|
|
|
- PARAM: NMRIC | RANGE | TEXT | VSET
|
|
|
|
|
- CALC: NMRIC (calculated result is always numeric)
|
|
|
|
|
- GROUP: NORES (no result, container only)
|
|
|
|
|
- TITLE: NORES (no result, header only)
|
2026-02-19 13:20:24 +07:00
|
|
|
RefType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
2026-02-20 13:47:47 +07:00
|
|
|
- RANGE
|
2026-02-19 13:20:24 +07:00
|
|
|
- THOLD
|
|
|
|
|
- VSET
|
2026-02-20 13:47:47 +07:00
|
|
|
- TEXT
|
|
|
|
|
- NOREF
|
2026-02-19 13:20:24 +07:00
|
|
|
description: |
|
2026-02-20 13:47:47 +07:00
|
|
|
Reference type determines which reference range table to use:
|
|
|
|
|
- RANGE: Numeric reference range
|
|
|
|
|
- THOLD: Threshold/panic range
|
|
|
|
|
- VSET: Value set reference
|
|
|
|
|
- TEXT: Free text reference
|
|
|
|
|
- NOREF: No reference (for NORES result type)
|
|
|
|
|
|
|
|
|
|
ResultType to RefType mapping:
|
|
|
|
|
- NMRIC: RANGE | THOLD → refnum table
|
|
|
|
|
- RANGE: RANGE | THOLD → refnum table
|
|
|
|
|
- VSET: VSET → reftxt table
|
|
|
|
|
- TEXT: TEXT → reftxt table
|
|
|
|
|
- NORES: NOREF → (no reference table)
|
2026-02-19 13:20:24 +07:00
|
|
|
VSet:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Value set ID for VSET result type
|
|
|
|
|
ReqQty:
|
|
|
|
|
type: number
|
|
|
|
|
format: decimal
|
|
|
|
|
description: Required sample quantity
|
|
|
|
|
ReqQtyUnit:
|
|
|
|
|
type: string
|
|
|
|
|
description: Unit for required quantity
|
|
|
|
|
Unit1:
|
|
|
|
|
type: string
|
|
|
|
|
description: Primary unit
|
|
|
|
|
Factor:
|
|
|
|
|
type: number
|
|
|
|
|
format: decimal
|
|
|
|
|
description: Conversion factor
|
|
|
|
|
Unit2:
|
|
|
|
|
type: string
|
|
|
|
|
description: Secondary unit (after conversion)
|
|
|
|
|
Decimal:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Number of decimal places
|
|
|
|
|
CollReq:
|
|
|
|
|
type: string
|
|
|
|
|
description: Collection requirements
|
|
|
|
|
Method:
|
|
|
|
|
type: string
|
|
|
|
|
description: Test method
|
|
|
|
|
ExpectedTAT:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Expected turnaround time
|
|
|
|
|
SeqScr:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Screen sequence
|
|
|
|
|
SeqRpt:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Report sequence
|
|
|
|
|
IndentLeft:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 0
|
|
|
|
|
FontStyle:
|
|
|
|
|
type: string
|
|
|
|
|
VisibleScr:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 1
|
|
|
|
|
description: Screen visibility (0=hidden, 1=visible)
|
|
|
|
|
VisibleRpt:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 1
|
|
|
|
|
description: Report visibility (0=hidden, 1=visible)
|
|
|
|
|
CountStat:
|
|
|
|
|
type: integer
|
|
|
|
|
default: 1
|
|
|
|
|
Level:
|
|
|
|
|
type: integer
|
|
|
|
|
CreateDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
StartDate:
|
2026-02-16 14:20:52 +07:00
|
|
|
type: string
|
2026-02-19 13:20:24 +07:00
|
|
|
format: date-time
|
|
|
|
|
EndDate:
|
2026-02-16 14:20:52 +07:00
|
|
|
type: string
|
2026-02-19 13:20:24 +07:00
|
|
|
format: date-time
|
|
|
|
|
FormulaInput:
|
|
|
|
|
type: string
|
|
|
|
|
description: Input variables for calculated tests
|
|
|
|
|
FormulaCode:
|
|
|
|
|
type: string
|
|
|
|
|
description: Formula expression for calculated tests
|
|
|
|
|
testdefcal:
|
|
|
|
|
type: array
|
|
|
|
|
description: Calculated test details (only for CALC type)
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
testdefgrp:
|
|
|
|
|
type: array
|
|
|
|
|
description: Group members (only for GROUP type)
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
testmap:
|
|
|
|
|
type: array
|
|
|
|
|
description: Test mappings
|
|
|
|
|
items:
|
|
|
|
|
$ref: '#/components/schemas/TestMap'
|
2026-02-16 14:20:52 +07:00
|
|
|
refnum:
|
|
|
|
|
type: array
|
|
|
|
|
description: Numeric reference ranges (optional). Mutually exclusive with reftxt - a test can only have ONE reference type.
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
RefNumID:
|
|
|
|
|
type: integer
|
|
|
|
|
NumRefType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- NMRC
|
|
|
|
|
- THOLD
|
|
|
|
|
description: NMRC=Numeric range, THOLD=Threshold
|
|
|
|
|
NumRefTypeLabel:
|
|
|
|
|
type: string
|
|
|
|
|
RangeType:
|
|
|
|
|
type: string
|
|
|
|
|
RangeTypeLabel:
|
|
|
|
|
type: string
|
|
|
|
|
Sex:
|
|
|
|
|
type: string
|
|
|
|
|
SexLabel:
|
|
|
|
|
type: string
|
|
|
|
|
LowSign:
|
|
|
|
|
type: string
|
|
|
|
|
LowSignLabel:
|
|
|
|
|
type: string
|
|
|
|
|
HighSign:
|
|
|
|
|
type: string
|
|
|
|
|
HighSignLabel:
|
|
|
|
|
type: string
|
|
|
|
|
High:
|
|
|
|
|
type: number
|
|
|
|
|
format: float
|
|
|
|
|
Low:
|
|
|
|
|
type: number
|
|
|
|
|
format: float
|
|
|
|
|
AgeStart:
|
|
|
|
|
type: integer
|
|
|
|
|
AgeEnd:
|
|
|
|
|
type: integer
|
|
|
|
|
Flag:
|
|
|
|
|
type: string
|
|
|
|
|
Interpretation:
|
|
|
|
|
type: string
|
|
|
|
|
reftxt:
|
|
|
|
|
type: array
|
|
|
|
|
description: Text reference ranges (optional). Mutually exclusive with refnum - a test can only have ONE reference type.
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
RefTxtID:
|
|
|
|
|
type: integer
|
|
|
|
|
TxtRefType:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- TEXT
|
|
|
|
|
- VSET
|
|
|
|
|
description: TEXT=Free text, VSET=Value set
|
|
|
|
|
TxtRefTypeLabel:
|
|
|
|
|
type: string
|
|
|
|
|
Sex:
|
|
|
|
|
type: string
|
|
|
|
|
SexLabel:
|
|
|
|
|
type: string
|
|
|
|
|
AgeStart:
|
|
|
|
|
type: integer
|
|
|
|
|
AgeEnd:
|
|
|
|
|
type: integer
|
|
|
|
|
RefTxt:
|
|
|
|
|
type: string
|
|
|
|
|
Flag:
|
|
|
|
|
type: string
|
|
|
|
|
examples:
|
2026-02-19 13:20:24 +07:00
|
|
|
TEST_numeric:
|
|
|
|
|
summary: Technical test with numeric reference
|
2026-02-16 14:20:52 +07:00
|
|
|
value:
|
2026-02-19 13:20:24 +07:00
|
|
|
TestSiteID: 1
|
|
|
|
|
SiteID: 1
|
|
|
|
|
TestSiteCode: GLU
|
|
|
|
|
TestSiteName: Glucose
|
2026-02-16 14:20:52 +07:00
|
|
|
TestType: TEST
|
2026-02-19 13:20:24 +07:00
|
|
|
DisciplineID: 2
|
|
|
|
|
DepartmentID: 2
|
|
|
|
|
ResultType: NMRIC
|
|
|
|
|
RefType: NMRC
|
|
|
|
|
Unit1: mg/dL
|
|
|
|
|
ReqQty: 300
|
|
|
|
|
ReqQtyUnit: uL
|
|
|
|
|
Decimal: 0
|
|
|
|
|
Method: Hexokinase
|
|
|
|
|
SeqScr: 11
|
|
|
|
|
SeqRpt: 11
|
|
|
|
|
VisibleScr: 1
|
|
|
|
|
VisibleRpt: 1
|
|
|
|
|
CountStat: 1
|
|
|
|
|
refnum:
|
|
|
|
|
- RefNumID: 1
|
|
|
|
|
NumRefType: NMRC
|
|
|
|
|
NumRefTypeLabel: Numeric
|
|
|
|
|
RangeType: REF
|
|
|
|
|
RangeTypeLabel: Reference Range
|
|
|
|
|
Sex: '2'
|
|
|
|
|
SexLabel: Male
|
|
|
|
|
LowSign: GE
|
|
|
|
|
LowSignLabel: '>='
|
|
|
|
|
HighSign: LE
|
|
|
|
|
HighSignLabel: <=
|
|
|
|
|
Low: 70
|
|
|
|
|
High: 100
|
|
|
|
|
AgeStart: 18
|
|
|
|
|
AgeEnd: 99
|
|
|
|
|
Flag: 'N'
|
|
|
|
|
Interpretation: Normal
|
|
|
|
|
TEST_threshold:
|
|
|
|
|
summary: Technical test with threshold reference (panic)
|
|
|
|
|
value:
|
|
|
|
|
TestSiteID: 2
|
|
|
|
|
SiteID: 1
|
|
|
|
|
TestSiteCode: GLU
|
|
|
|
|
TestSiteName: Glucose
|
|
|
|
|
TestType: TEST
|
|
|
|
|
DisciplineID: 2
|
|
|
|
|
DepartmentID: 2
|
|
|
|
|
ResultType: NMRIC
|
|
|
|
|
RefType: THOLD
|
|
|
|
|
Unit1: mg/dL
|
|
|
|
|
Decimal: 0
|
|
|
|
|
Method: Hexokinase
|
|
|
|
|
SeqScr: 11
|
|
|
|
|
SeqRpt: 11
|
|
|
|
|
VisibleScr: 1
|
|
|
|
|
VisibleRpt: 1
|
|
|
|
|
CountStat: 1
|
2026-02-16 14:20:52 +07:00
|
|
|
refnum:
|
|
|
|
|
- RefNumID: 2
|
|
|
|
|
NumRefType: THOLD
|
|
|
|
|
NumRefTypeLabel: Threshold
|
|
|
|
|
RangeType: PANIC
|
|
|
|
|
RangeTypeLabel: Panic Range
|
|
|
|
|
Sex: '1'
|
|
|
|
|
SexLabel: Female
|
|
|
|
|
LowSign: LT
|
|
|
|
|
LowSignLabel: <
|
|
|
|
|
High: 40
|
|
|
|
|
AgeStart: 0
|
|
|
|
|
AgeEnd: 120
|
|
|
|
|
Flag: L
|
|
|
|
|
Interpretation: Critical Low
|
2026-02-19 13:20:24 +07:00
|
|
|
TEST_text:
|
|
|
|
|
summary: Technical test with text reference
|
2026-02-16 14:20:52 +07:00
|
|
|
value:
|
2026-02-19 13:20:24 +07:00
|
|
|
TestSiteID: 3
|
|
|
|
|
SiteID: 1
|
|
|
|
|
TestSiteCode: STAGE
|
|
|
|
|
TestSiteName: Disease Stage
|
2026-02-16 14:20:52 +07:00
|
|
|
TestType: TEST
|
|
|
|
|
DisciplineID: 1
|
|
|
|
|
DepartmentID: 1
|
2026-02-19 13:20:24 +07:00
|
|
|
ResultType: VSET
|
|
|
|
|
RefType: TEXT
|
|
|
|
|
SeqScr: 50
|
|
|
|
|
SeqRpt: 50
|
|
|
|
|
VisibleScr: 1
|
|
|
|
|
VisibleRpt: 1
|
|
|
|
|
CountStat: 1
|
2026-02-16 14:20:52 +07:00
|
|
|
reftxt:
|
2026-02-19 13:20:24 +07:00
|
|
|
- RefTxtID: 1
|
|
|
|
|
TxtRefType: TEXT
|
|
|
|
|
TxtRefTypeLabel: Text
|
|
|
|
|
Sex: '2'
|
|
|
|
|
SexLabel: Male
|
|
|
|
|
AgeStart: 18
|
|
|
|
|
AgeEnd: 99
|
|
|
|
|
RefTxt: NORM=Normal;HYPO=Hypochromic;MACRO=Macrocytic
|
2026-02-16 14:20:52 +07:00
|
|
|
Flag: 'N'
|
|
|
|
|
PARAM:
|
2026-02-19 13:20:24 +07:00
|
|
|
summary: Parameter test
|
2026-02-16 14:20:52 +07:00
|
|
|
value:
|
2026-02-19 13:20:24 +07:00
|
|
|
TestSiteID: 4
|
|
|
|
|
SiteID: 1
|
|
|
|
|
TestSiteCode: HEIGHT
|
|
|
|
|
TestSiteName: Height
|
2026-02-16 14:20:52 +07:00
|
|
|
TestType: PARAM
|
2026-02-19 13:20:24 +07:00
|
|
|
DisciplineID: 10
|
|
|
|
|
ResultType: NMRIC
|
|
|
|
|
Unit1: cm
|
|
|
|
|
Decimal: 0
|
|
|
|
|
SeqScr: 40
|
|
|
|
|
SeqRpt: 40
|
|
|
|
|
VisibleScr: 1
|
|
|
|
|
VisibleRpt: 0
|
|
|
|
|
CountStat: 0
|
|
|
|
|
CALC:
|
|
|
|
|
summary: Calculated test with reference
|
|
|
|
|
value:
|
|
|
|
|
TestSiteID: 5
|
|
|
|
|
SiteID: 1
|
|
|
|
|
TestSiteCode: EGFR
|
|
|
|
|
TestSiteName: eGFR
|
|
|
|
|
TestType: CALC
|
|
|
|
|
DisciplineID: 2
|
|
|
|
|
DepartmentID: 2
|
|
|
|
|
Unit1: mL/min/1.73m2
|
|
|
|
|
Decimal: 0
|
|
|
|
|
SeqScr: 20
|
|
|
|
|
SeqRpt: 20
|
|
|
|
|
VisibleScr: 1
|
|
|
|
|
VisibleRpt: 1
|
|
|
|
|
CountStat: 0
|
|
|
|
|
testdefcal:
|
|
|
|
|
- TestCalID: 1
|
|
|
|
|
DisciplineID: 2
|
|
|
|
|
DepartmentID: 2
|
|
|
|
|
FormulaInput: CREA,AGE,GENDER
|
|
|
|
|
FormulaCode: CKD_EPI(CREA,AGE,GENDER)
|
|
|
|
|
Unit1: mL/min/1.73m2
|
|
|
|
|
Decimal: 0
|
|
|
|
|
refnum:
|
|
|
|
|
- RefNumID: 5
|
|
|
|
|
NumRefType: NMRC
|
|
|
|
|
NumRefTypeLabel: Numeric
|
|
|
|
|
RangeType: REF
|
|
|
|
|
RangeTypeLabel: Reference Range
|
|
|
|
|
Sex: '1'
|
|
|
|
|
SexLabel: Female
|
|
|
|
|
LowSign: GE
|
|
|
|
|
LowSignLabel: '>='
|
|
|
|
|
HighSign: LE
|
|
|
|
|
HighSignLabel: <=
|
|
|
|
|
Low: 10
|
|
|
|
|
High: 20
|
|
|
|
|
AgeStart: 18
|
|
|
|
|
AgeEnd: 120
|
|
|
|
|
Flag: 'N'
|
|
|
|
|
Interpretation: Normal
|
2026-02-16 14:20:52 +07:00
|
|
|
GROUP:
|
2026-02-19 13:20:24 +07:00
|
|
|
summary: Panel/Profile test
|
2026-02-16 14:20:52 +07:00
|
|
|
value:
|
2026-02-19 13:20:24 +07:00
|
|
|
TestSiteID: 6
|
|
|
|
|
SiteID: 1
|
|
|
|
|
TestSiteCode: LIPID
|
|
|
|
|
TestSiteName: Lipid Panel
|
2026-02-16 14:20:52 +07:00
|
|
|
TestType: GROUP
|
2026-02-19 13:20:24 +07:00
|
|
|
DisciplineID: 2
|
|
|
|
|
DepartmentID: 2
|
|
|
|
|
SeqScr: 51
|
|
|
|
|
SeqRpt: 51
|
|
|
|
|
VisibleScr: 1
|
|
|
|
|
VisibleRpt: 1
|
|
|
|
|
CountStat: 1
|
|
|
|
|
testdefgrp:
|
|
|
|
|
- TestGrpID: 1
|
|
|
|
|
Member: 100
|
|
|
|
|
TestSiteCode: CHOL
|
|
|
|
|
TestSiteName: Total Cholesterol
|
|
|
|
|
- TestGrpID: 2
|
|
|
|
|
Member: 101
|
|
|
|
|
TestSiteCode: TG
|
|
|
|
|
TestSiteName: Triglycerides
|
2026-02-16 14:20:52 +07:00
|
|
|
TITLE:
|
2026-02-19 13:20:24 +07:00
|
|
|
summary: Section header
|
2026-02-16 14:20:52 +07:00
|
|
|
value:
|
2026-02-19 13:20:24 +07:00
|
|
|
TestSiteID: 7
|
|
|
|
|
SiteID: 1
|
|
|
|
|
TestSiteCode: CHEM_HEADER
|
|
|
|
|
TestSiteName: '--- CHEMISTRY ---'
|
2026-02-16 14:20:52 +07:00
|
|
|
TestType: TITLE
|
2026-02-19 13:20:24 +07:00
|
|
|
DisciplineID: 2
|
|
|
|
|
DepartmentID: 2
|
|
|
|
|
SeqScr: 100
|
|
|
|
|
SeqRpt: 100
|
|
|
|
|
VisibleScr: 1
|
|
|
|
|
VisibleRpt: 1
|
|
|
|
|
CountStat: 0
|
2026-02-16 14:20:52 +07:00
|
|
|
TestMap:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
TestMapID:
|
|
|
|
|
type: integer
|
2026-02-19 13:20:24 +07:00
|
|
|
TestSiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
HostType:
|
2026-02-16 14:20:52 +07:00
|
|
|
type: string
|
2026-02-19 13:20:24 +07:00
|
|
|
description: Host type code
|
|
|
|
|
HostID:
|
2026-02-16 14:20:52 +07:00
|
|
|
type: string
|
2026-02-19 13:20:24 +07:00
|
|
|
description: Host identifier
|
|
|
|
|
HostTestCode:
|
2026-02-16 14:20:52 +07:00
|
|
|
type: string
|
2026-02-19 13:20:24 +07:00
|
|
|
description: Test code in host system
|
|
|
|
|
HostTestName:
|
2026-02-16 14:20:52 +07:00
|
|
|
type: string
|
2026-02-19 13:20:24 +07:00
|
|
|
description: Test name in host system
|
2026-02-16 14:20:52 +07:00
|
|
|
ClientType:
|
|
|
|
|
type: string
|
|
|
|
|
description: Client type code
|
2026-02-19 13:20:24 +07:00
|
|
|
ClientID:
|
|
|
|
|
type: string
|
|
|
|
|
description: Client identifier
|
|
|
|
|
ConDefID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Connection definition ID
|
|
|
|
|
ClientTestCode:
|
2026-02-16 14:20:52 +07:00
|
|
|
type: string
|
2026-02-19 13:20:24 +07:00
|
|
|
description: Test code in client system
|
|
|
|
|
ClientTestName:
|
|
|
|
|
type: string
|
|
|
|
|
description: Test name in client system
|
|
|
|
|
CreateDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
EndDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
description: Soft delete timestamp
|
2026-02-16 14:20:52 +07:00
|
|
|
OrderTest:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
OrderID:
|
|
|
|
|
type: string
|
|
|
|
|
PatientID:
|
|
|
|
|
type: string
|
|
|
|
|
VisitID:
|
|
|
|
|
type: string
|
|
|
|
|
OrderDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
OrderStatus:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- ORD
|
|
|
|
|
- SCH
|
|
|
|
|
- ANA
|
|
|
|
|
- VER
|
|
|
|
|
- REV
|
|
|
|
|
- REP
|
|
|
|
|
description: |
|
|
|
|
|
ORD: Ordered
|
|
|
|
|
SCH: Scheduled
|
|
|
|
|
ANA: Analysis
|
|
|
|
|
VER: Verified
|
|
|
|
|
REV: Reviewed
|
|
|
|
|
REP: Reported
|
|
|
|
|
OrderStatusLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Order status display text
|
|
|
|
|
Priority:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- R
|
|
|
|
|
- S
|
|
|
|
|
- U
|
|
|
|
|
description: |
|
|
|
|
|
R: Routine
|
|
|
|
|
S: Stat
|
|
|
|
|
U: Urgent
|
|
|
|
|
PriorityLabel:
|
|
|
|
|
type: string
|
|
|
|
|
description: Priority display text
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
RequestingPhysician:
|
|
|
|
|
type: string
|
|
|
|
|
OrderItem:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
id:
|
|
|
|
|
type: integer
|
|
|
|
|
OrderID:
|
|
|
|
|
type: string
|
|
|
|
|
TestID:
|
|
|
|
|
type: integer
|
|
|
|
|
SpecimenID:
|
|
|
|
|
type: string
|
|
|
|
|
Status:
|
|
|
|
|
type: string
|
|
|
|
|
EdgeResultRequest:
|
|
|
|
|
type: object
|
|
|
|
|
required:
|
|
|
|
|
- sample_id
|
|
|
|
|
- instrument_id
|
|
|
|
|
properties:
|
|
|
|
|
sample_id:
|
|
|
|
|
type: string
|
|
|
|
|
description: Sample barcode/identifier
|
|
|
|
|
instrument_id:
|
|
|
|
|
type: string
|
|
|
|
|
description: Instrument identifier
|
|
|
|
|
patient_id:
|
|
|
|
|
type: string
|
|
|
|
|
description: Patient identifier (optional)
|
|
|
|
|
results:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
test_code:
|
|
|
|
|
type: string
|
|
|
|
|
result_value:
|
|
|
|
|
type: string
|
|
|
|
|
unit:
|
|
|
|
|
type: string
|
|
|
|
|
flags:
|
|
|
|
|
type: string
|
|
|
|
|
enum:
|
|
|
|
|
- H
|
|
|
|
|
- L
|
|
|
|
|
- 'N'
|
|
|
|
|
- A
|
|
|
|
|
description: H=High, L=Low, N=Normal, A=Abnormal
|
|
|
|
|
EdgeResultResponse:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
status:
|
|
|
|
|
type: string
|
|
|
|
|
example: success
|
|
|
|
|
message:
|
|
|
|
|
type: string
|
|
|
|
|
example: Result received and queued
|
|
|
|
|
data:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
edge_res_id:
|
|
|
|
|
type: integer
|
|
|
|
|
sample_id:
|
|
|
|
|
type: string
|
|
|
|
|
instrument_id:
|
|
|
|
|
type: string
|
|
|
|
|
EdgeOrder:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
OrderID:
|
|
|
|
|
type: string
|
|
|
|
|
PatientID:
|
|
|
|
|
type: string
|
|
|
|
|
SampleID:
|
|
|
|
|
type: string
|
|
|
|
|
Tests:
|
|
|
|
|
type: array
|
|
|
|
|
items:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
TestCode:
|
|
|
|
|
type: string
|
|
|
|
|
TestName:
|
|
|
|
|
type: string
|
|
|
|
|
SpecimenType:
|
|
|
|
|
type: string
|
|
|
|
|
Priority:
|
|
|
|
|
type: string
|
|
|
|
|
DueDateTime:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
ValueSetLibItem:
|
|
|
|
|
type: object
|
|
|
|
|
description: Library/system value set item from JSON files
|
|
|
|
|
properties:
|
|
|
|
|
value:
|
|
|
|
|
type: string
|
|
|
|
|
description: The value/key code
|
|
|
|
|
label:
|
|
|
|
|
type: string
|
|
|
|
|
description: The display label
|
|
|
|
|
ValueSetDef:
|
|
|
|
|
type: object
|
|
|
|
|
description: User-defined value set definition (from database)
|
|
|
|
|
properties:
|
|
|
|
|
VSetID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Primary key
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Site reference
|
|
|
|
|
VSName:
|
|
|
|
|
type: string
|
|
|
|
|
description: Value set name
|
|
|
|
|
VSDesc:
|
|
|
|
|
type: string
|
|
|
|
|
description: Value set description
|
|
|
|
|
CreateDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
description: Creation timestamp
|
|
|
|
|
EndDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
nullable: true
|
|
|
|
|
description: Soft delete timestamp
|
|
|
|
|
ItemCount:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Number of items in this value set
|
|
|
|
|
ValueSetItem:
|
|
|
|
|
type: object
|
|
|
|
|
description: User-defined value set item (from database)
|
|
|
|
|
properties:
|
|
|
|
|
VID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Primary key
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Site reference
|
|
|
|
|
VSetID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Reference to value set definition
|
|
|
|
|
VOrder:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Display order
|
|
|
|
|
VValue:
|
|
|
|
|
type: string
|
|
|
|
|
description: The value code
|
|
|
|
|
VDesc:
|
|
|
|
|
type: string
|
|
|
|
|
description: The display description/label
|
|
|
|
|
VCategory:
|
|
|
|
|
type: string
|
|
|
|
|
description: Category code
|
|
|
|
|
CreateDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
description: Creation timestamp
|
|
|
|
|
EndDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
nullable: true
|
|
|
|
|
description: Soft delete timestamp
|
|
|
|
|
VSName:
|
|
|
|
|
type: string
|
|
|
|
|
description: Value set name (from joined definition)
|
|
|
|
|
Location:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
LocationID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Primary key
|
|
|
|
|
SiteID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Reference to site
|
|
|
|
|
LocCode:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 6
|
|
|
|
|
description: Location code (short identifier)
|
|
|
|
|
Parent:
|
|
|
|
|
type: integer
|
|
|
|
|
nullable: true
|
|
|
|
|
description: Parent location ID for hierarchical locations
|
|
|
|
|
LocFull:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 255
|
|
|
|
|
description: Full location name
|
|
|
|
|
Description:
|
|
|
|
|
type: string
|
|
|
|
|
maxLength: 255
|
|
|
|
|
description: Location description
|
|
|
|
|
LocType:
|
|
|
|
|
type: string
|
|
|
|
|
description: Location type code (e.g., ROOM, WARD, BUILDING)
|
|
|
|
|
CreateDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
EndDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
nullable: true
|
|
|
|
|
Contact:
|
|
|
|
|
type: object
|
|
|
|
|
properties:
|
|
|
|
|
ContactID:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Primary key
|
|
|
|
|
NameFirst:
|
|
|
|
|
type: string
|
|
|
|
|
description: First name (required)
|
|
|
|
|
NameLast:
|
|
|
|
|
type: string
|
|
|
|
|
description: Last name
|
|
|
|
|
Title:
|
|
|
|
|
type: string
|
|
|
|
|
description: Title (e.g., Dr, Mr, Mrs)
|
|
|
|
|
Initial:
|
|
|
|
|
type: string
|
|
|
|
|
description: Middle initial
|
|
|
|
|
Birthdate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
description: Date of birth
|
|
|
|
|
EmailAddress1:
|
|
|
|
|
type: string
|
|
|
|
|
format: email
|
|
|
|
|
description: Primary email address
|
|
|
|
|
EmailAddress2:
|
|
|
|
|
type: string
|
|
|
|
|
format: email
|
|
|
|
|
description: Secondary email address
|
|
|
|
|
Phone:
|
|
|
|
|
type: string
|
|
|
|
|
description: Primary phone number
|
|
|
|
|
MobilePhone1:
|
|
|
|
|
type: string
|
|
|
|
|
description: Primary mobile number
|
|
|
|
|
MobilePhone2:
|
|
|
|
|
type: string
|
|
|
|
|
description: Secondary mobile number
|
|
|
|
|
Specialty:
|
|
|
|
|
type: string
|
|
|
|
|
description: Medical specialty code
|
|
|
|
|
SubSpecialty:
|
|
|
|
|
type: string
|
|
|
|
|
description: Sub-specialty code
|
|
|
|
|
CreateDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
EndDate:
|
|
|
|
|
type: string
|
|
|
|
|
format: date-time
|
|
|
|
|
description: Occupation display text
|
2026-02-23 13:16:06 +07:00
|
|
|
ValueSetListItem:
|
|
|
|
|
type: object
|
|
|
|
|
description: Library/system value set summary (from JSON files)
|
|
|
|
|
properties:
|
|
|
|
|
value:
|
|
|
|
|
type: string
|
|
|
|
|
description: The value set key/name
|
|
|
|
|
label:
|
|
|
|
|
type: string
|
|
|
|
|
description: The display name/label
|
|
|
|
|
count:
|
|
|
|
|
type: integer
|
|
|
|
|
description: Number of items in this value set
|