Avoid coercing missing SiteID, Decimal, and age boundaries to hardcoded defaults so payload intent is retained across test creation and reference range inserts. Align patient result age checks and OpenAPI examples with day-based age bounds, with feature coverage for create variants.
588 lines
15 KiB
YAML
588 lines
15 KiB
YAML
TestDefinitionListItem:
|
|
type: object
|
|
properties:
|
|
TestSiteID:
|
|
type: integer
|
|
TestSiteCode:
|
|
type: string
|
|
TestSiteName:
|
|
type: string
|
|
TestType:
|
|
type: string
|
|
enum: [TEST, PARAM, CALC, GROUP, TITLE]
|
|
SeqScr:
|
|
type: integer
|
|
SeqRpt:
|
|
type: integer
|
|
isVisibleScr:
|
|
type: integer
|
|
enum: [0, 1]
|
|
isVisibleRpt:
|
|
type: integer
|
|
enum: [0, 1]
|
|
isCountStat:
|
|
type: integer
|
|
StartDate:
|
|
type: string
|
|
format: date-time
|
|
EndDate:
|
|
type: string
|
|
format: date-time
|
|
nullable: true
|
|
DisciplineID:
|
|
type: integer
|
|
nullable: true
|
|
DepartmentID:
|
|
type: integer
|
|
nullable: true
|
|
DisciplineName:
|
|
type: string
|
|
nullable: true
|
|
DepartmentName:
|
|
type: string
|
|
nullable: true
|
|
|
|
TestDefinition:
|
|
type: object
|
|
properties:
|
|
TestSiteID:
|
|
type: integer
|
|
SiteID:
|
|
type: integer
|
|
TestSiteCode:
|
|
type: string
|
|
TestSiteName:
|
|
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
|
|
Description:
|
|
type: string
|
|
DisciplineID:
|
|
type: integer
|
|
DisciplineName:
|
|
type: string
|
|
DepartmentID:
|
|
type: integer
|
|
DepartmentName:
|
|
type: string
|
|
ResultType:
|
|
type: string
|
|
enum: [NMRIC, RANGE, TEXT, VSET, NORES]
|
|
description: |
|
|
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)
|
|
RefType:
|
|
type: string
|
|
enum: [RANGE, THOLD, VSET, TEXT, NOREF]
|
|
description: |
|
|
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)
|
|
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
|
|
isVisibleScr:
|
|
type: integer
|
|
default: 1
|
|
description: Screen visibility (0=hidden, 1=visible)
|
|
isVisibleRpt:
|
|
type: integer
|
|
default: 1
|
|
description: Report visibility (0=hidden, 1=visible)
|
|
isCountStat:
|
|
type: integer
|
|
default: 1
|
|
Level:
|
|
type: integer
|
|
isRequestable:
|
|
type: integer
|
|
default: 1
|
|
description: Flag indicating if test can be requested (1=yes, 0=no)
|
|
CreateDate:
|
|
type: string
|
|
format: date-time
|
|
StartDate:
|
|
type: string
|
|
format: date-time
|
|
EndDate:
|
|
type: string
|
|
format: date-time
|
|
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 (for GROUP and CALC types).
|
|
When creating or updating, provide members in details.members array with TestSiteID field.
|
|
Do NOT use Member or SeqScr fields when creating/updating.
|
|
items:
|
|
type: object
|
|
properties:
|
|
TestGrpID:
|
|
type: integer
|
|
description: Group membership record ID
|
|
TestSiteID:
|
|
type: integer
|
|
description: Parent group TestSiteID
|
|
Member:
|
|
type: integer
|
|
description: |
|
|
Member TestSiteID (foreign key to testdefsite).
|
|
**Note**: This field is in the response. When creating/updating, use TestSiteID in details.members array instead.
|
|
TestSiteCode:
|
|
type: string
|
|
description: Member test code
|
|
TestSiteName:
|
|
type: string
|
|
description: Member test name
|
|
TestType:
|
|
type: string
|
|
description: Member test type
|
|
CreateDate:
|
|
type: string
|
|
format: date-time
|
|
EndDate:
|
|
type: string
|
|
format: date-time
|
|
testmap:
|
|
type: array
|
|
description: Test mappings
|
|
items:
|
|
$ref: '#/TestMap'
|
|
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
|
|
SpcType:
|
|
type: string
|
|
description: Specimen type code (e.g., GEN, EDTA)
|
|
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
|
|
description: Minimum patient age in days
|
|
AgeEnd:
|
|
type: integer
|
|
description: Maximum patient age in days
|
|
Flag:
|
|
type: string
|
|
Interpretation:
|
|
type: string
|
|
Notes:
|
|
type: string
|
|
description: Optional note attached to the numeric reference range
|
|
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
|
|
description: Minimum patient age in days
|
|
AgeEnd:
|
|
type: integer
|
|
description: Maximum patient age in days
|
|
RefTxt:
|
|
type: string
|
|
Flag:
|
|
type: string
|
|
examples:
|
|
TEST_numeric:
|
|
summary: Technical test with numeric reference
|
|
value:
|
|
TestSiteID: 1
|
|
SiteID: 1
|
|
TestSiteCode: GLU
|
|
TestSiteName: Glucose
|
|
TestType: TEST
|
|
DisciplineID: 2
|
|
DepartmentID: 2
|
|
ResultType: NMRIC
|
|
RefType: NMRC
|
|
Unit1: mg/dL
|
|
ReqQty: 300
|
|
ReqQtyUnit: uL
|
|
Decimal: 0
|
|
Method: Hexokinase
|
|
SeqScr: 11
|
|
SeqRpt: 11
|
|
isVisibleScr: 1
|
|
isVisibleRpt: 1
|
|
isCountStat: 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: 6570
|
|
AgeEnd: 36135
|
|
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
|
|
isVisibleScr: 1
|
|
isVisibleRpt: 1
|
|
isCountStat: 1
|
|
refnum:
|
|
- RefNumID: 2
|
|
NumRefType: THOLD
|
|
NumRefTypeLabel: Threshold
|
|
RangeType: PANIC
|
|
RangeTypeLabel: Panic Range
|
|
Sex: '1'
|
|
SexLabel: Female
|
|
LowSign: LT
|
|
LowSignLabel: "<"
|
|
High: 40
|
|
AgeStart: 0
|
|
AgeEnd: 43800
|
|
Flag: L
|
|
Interpretation: Critical Low
|
|
TEST_text:
|
|
summary: Technical test with text reference
|
|
value:
|
|
TestSiteID: 3
|
|
SiteID: 1
|
|
TestSiteCode: STAGE
|
|
TestSiteName: Disease Stage
|
|
TestType: TEST
|
|
DisciplineID: 1
|
|
DepartmentID: 1
|
|
ResultType: VSET
|
|
RefType: TEXT
|
|
SeqScr: 50
|
|
SeqRpt: 50
|
|
isVisibleScr: 1
|
|
isVisibleRpt: 1
|
|
isCountStat: 1
|
|
reftxt:
|
|
- RefTxtID: 1
|
|
TxtRefType: TEXT
|
|
TxtRefTypeLabel: Text
|
|
Sex: '2'
|
|
SexLabel: Male
|
|
AgeStart: 6570
|
|
AgeEnd: 36135
|
|
RefTxt: 'NORM=Normal;HYPO=Hypochromic;MACRO=Macrocytic'
|
|
Flag: N
|
|
PARAM:
|
|
summary: Parameter test
|
|
value:
|
|
TestSiteID: 4
|
|
SiteID: 1
|
|
TestSiteCode: HEIGHT
|
|
TestSiteName: Height
|
|
TestType: PARAM
|
|
DisciplineID: 10
|
|
ResultType: NMRIC
|
|
Unit1: cm
|
|
Decimal: 0
|
|
SeqScr: 40
|
|
SeqRpt: 40
|
|
isVisibleScr: 1
|
|
isVisibleRpt: 0
|
|
isCountStat: 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
|
|
isVisibleScr: 1
|
|
isVisibleRpt: 1
|
|
isCountStat: 0
|
|
testdefcal:
|
|
- TestCalID: 1
|
|
DisciplineID: 2
|
|
DepartmentID: 2
|
|
FormulaCode: CKD_EPI(CREA,AGE,GENDER)
|
|
Unit1: mL/min/1.73m2
|
|
Decimal: 0
|
|
testdefgrp:
|
|
- TestSiteID: 21
|
|
TestSiteCode: CREA
|
|
TestSiteName: Creatinine
|
|
TestType: TEST
|
|
- TestSiteID: 51
|
|
TestSiteCode: AGE
|
|
TestSiteName: Age
|
|
TestType: PARAM
|
|
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: 6570
|
|
AgeEnd: 43800
|
|
Flag: N
|
|
Interpretation: Normal
|
|
GROUP:
|
|
summary: Panel/Profile test
|
|
value:
|
|
TestSiteID: 6
|
|
SiteID: 1
|
|
TestSiteCode: LIPID
|
|
TestSiteName: Lipid Panel
|
|
TestType: GROUP
|
|
DisciplineID: 2
|
|
DepartmentID: 2
|
|
SeqScr: 51
|
|
SeqRpt: 51
|
|
isVisibleScr: 1
|
|
isVisibleRpt: 1
|
|
isCountStat: 1
|
|
testdefgrp:
|
|
- TestGrpID: 1
|
|
TestSiteID: 6
|
|
Member: 100
|
|
MemberTestSiteID: 100
|
|
TestSiteCode: CHOL
|
|
TestSiteName: Total Cholesterol
|
|
TestType: TEST
|
|
- TestGrpID: 2
|
|
TestSiteID: 6
|
|
Member: 101
|
|
MemberTestSiteID: 101
|
|
TestSiteCode: TG
|
|
TestSiteName: Triglycerides
|
|
TestType: TEST
|
|
TITLE:
|
|
summary: Section header
|
|
value:
|
|
TestSiteID: 7
|
|
SiteID: 1
|
|
TestSiteCode: CHEM_HEADER
|
|
TestSiteName: '--- CHEMISTRY ---'
|
|
TestType: TITLE
|
|
DisciplineID: 2
|
|
DepartmentID: 2
|
|
SeqScr: 100
|
|
SeqRpt: 100
|
|
isVisibleScr: 1
|
|
isVisibleRpt: 1
|
|
isCountStat: 0
|
|
|
|
TestMap:
|
|
type: object
|
|
properties:
|
|
TestMapID:
|
|
type: integer
|
|
HostType:
|
|
type: string
|
|
description: Host type code (e.g., SITE, WORKSTATION, INSTRUMENT)
|
|
HostID:
|
|
type: string
|
|
description: Host identifier
|
|
ClientType:
|
|
type: string
|
|
description: Client type code (e.g., SITE, WORKSTATION, INSTRUMENT)
|
|
ClientID:
|
|
type: string
|
|
description: Client identifier
|
|
HostName:
|
|
type: string
|
|
description: Resolved host name (from view)
|
|
ClientName:
|
|
type: string
|
|
description: Resolved client name (from view)
|
|
details:
|
|
type: array
|
|
description: Test mapping detail records
|
|
items:
|
|
$ref: '#/TestMapDetail'
|
|
CreateDate:
|
|
type: string
|
|
format: date-time
|
|
EndDate:
|
|
type: string
|
|
format: date-time
|
|
description: Soft delete timestamp
|
|
|
|
TestMapDetail:
|
|
type: object
|
|
properties:
|
|
TestMapDetailID:
|
|
type: integer
|
|
TestMapID:
|
|
type: integer
|
|
HostTestCode:
|
|
type: string
|
|
description: Test code in host system
|
|
HostTestName:
|
|
type: string
|
|
description: Test name in host system
|
|
ConDefID:
|
|
type: integer
|
|
description: Container definition ID
|
|
ClientTestCode:
|
|
type: string
|
|
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
|