- Move TestModal from lib/components to routes/(app)/master-data/tests - Add technical configuration form (ResultType, RefType, SpcType, units, etc.) - Add GroupMembersTab for managing group test members - Enhance reference ranges with refvset and refthold support - Update API to handle new test fields (ReqQty, Factor, Decimal, TAT, etc.) - Add database schema documentation (DBML format) - Remove old test-types-reference.md documentation - UI improvements: compact design, updated sidebar, modal sizing - Update DataTable, Modal, SelectDropdown components for compact style - Enhance patient and visit modals with compact layout
641 lines
15 KiB
Plaintext
641 lines
15 KiB
Plaintext
// CLQMS Database Schema
|
|
// Generated from app/Models/ directory
|
|
// Database Markup Language (DBML) for dbdiagram.io and other tools
|
|
|
|
// ============================================
|
|
// TABLE 1: Patient Management
|
|
// ============================================
|
|
|
|
Table patient {
|
|
InternalPID int [pk, increment]
|
|
PatientID varchar(255)
|
|
AlternatePID varchar(255)
|
|
Prefix varchar(50)
|
|
NameFirst varchar(255)
|
|
NameMiddle varchar(255)
|
|
NameMaiden varchar(255)
|
|
NameLast varchar(255)
|
|
Suffix varchar(50)
|
|
NameAlias varchar(255)
|
|
Sex varchar(10)
|
|
Birthdate datetime
|
|
PlaceOfBirth varchar(255)
|
|
Street_1 varchar(255)
|
|
Street_2 varchar(255)
|
|
Street_3 varchar(255)
|
|
City varchar(100)
|
|
Province varchar(100)
|
|
ZIP varchar(20)
|
|
Country varchar(100)
|
|
EmailAddress1 varchar(255)
|
|
EmailAddress2 varchar(255)
|
|
Phone varchar(50)
|
|
MobilePhone varchar(50)
|
|
AccountNumber varchar(100)
|
|
Race varchar(50)
|
|
MaritalStatus varchar(50)
|
|
Religion varchar(50)
|
|
Ethnic varchar(50)
|
|
Citizenship varchar(100)
|
|
DeathIndicator boolean
|
|
TimeOfDeath datetime
|
|
Custodian int [ref: > patient.InternalPID]
|
|
LinkTo int [ref: > patient.InternalPID]
|
|
CreateDate datetime [not null]
|
|
DelDate datetime
|
|
}
|
|
|
|
Table patidt {
|
|
PatIdtID int [pk, increment]
|
|
InternalPID int [not null, ref: > patient.InternalPID]
|
|
IdentifierType varchar(100)
|
|
Identifier varchar(255)
|
|
EffectiveDate datetime
|
|
ExpirationDate datetime
|
|
CreateDate datetime [not null]
|
|
DelDate datetime
|
|
}
|
|
|
|
Table patcom {
|
|
PatComID int [pk, increment]
|
|
InternalPID int [not null, ref: > patient.InternalPID]
|
|
Comment text
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table patatt {
|
|
PatAttID int [pk, increment]
|
|
InternalPID int [not null, ref: > patient.InternalPID]
|
|
UserID int
|
|
Address text
|
|
CreateDate datetime [not null]
|
|
DelDate datetime
|
|
}
|
|
|
|
// ============================================
|
|
// TABLE 2: Visit Management
|
|
// ============================================
|
|
|
|
Table patvisit {
|
|
InternalPVID int [pk, increment]
|
|
InternalPID int [not null, ref: > patient.InternalPID]
|
|
EpisodeID int
|
|
PVID varchar(100)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
ArchivedDate datetime
|
|
DelDate datetime
|
|
}
|
|
|
|
Table patvisitadt {
|
|
PVADTID int [pk, increment]
|
|
InternalPVID int [not null, ref: > patvisit.InternalPVID]
|
|
LocationID int [ref: > location.LocationID]
|
|
ADTCode varchar(50)
|
|
AttDoc varchar(255)
|
|
RefDoc varchar(255)
|
|
AdmDoc varchar(255)
|
|
CnsDoc varchar(255)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
ArchivedDate datetime
|
|
DelDate datetime
|
|
}
|
|
|
|
Table patdiag {
|
|
InternalPVID int [pk, increment]
|
|
InternalPVID int [not null, ref: > patvisit.InternalPVID]
|
|
InternalPID int [not null, ref: > patient.InternalPID]
|
|
DiagCode varchar(50)
|
|
Diagnosis varchar(255)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
ArchivedDate datetime
|
|
DelDate datetime
|
|
}
|
|
|
|
// ============================================
|
|
// TABLE 3: Organization Structure
|
|
// ============================================
|
|
|
|
Table account {
|
|
AccountID int [pk, increment]
|
|
AccountName varchar(255)
|
|
Initial varchar(50)
|
|
Street_1 varchar(255)
|
|
Street_2 varchar(255)
|
|
Street_3 varchar(255)
|
|
City varchar(100)
|
|
Province varchar(100)
|
|
ZIP varchar(20)
|
|
Country varchar(100)
|
|
AreaCode varchar(20)
|
|
EmailAddress1 varchar(255)
|
|
EmailAddress2 varchar(255)
|
|
Phone varchar(50)
|
|
Fax varchar(50)
|
|
Parent int [ref: > account.AccountID]
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table site {
|
|
SiteID int [pk, increment]
|
|
AccountID int [not null, ref: > account.AccountID]
|
|
Parent int [ref: > site.SiteID]
|
|
SiteTypeID int
|
|
SiteClassID int
|
|
SiteCode varchar(50)
|
|
SiteName varchar(255)
|
|
ME varchar(50)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table department {
|
|
DepartmentID int [pk, increment]
|
|
DisciplineID int [ref: > discipline.DisciplineID]
|
|
SiteID int [ref: > site.SiteID]
|
|
DepartmentCode varchar(50)
|
|
DepartmentName varchar(255)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table discipline {
|
|
DisciplineID int [pk, increment]
|
|
SiteID int [ref: > site.SiteID]
|
|
Parent int [ref: > discipline.DisciplineID]
|
|
DisciplineCode varchar(50)
|
|
DisciplineName varchar(255)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table workstation {
|
|
WorkstationID int [pk, increment]
|
|
DepartmentID int [ref: > department.DepartmentID]
|
|
LinkTo int [ref: > workstation.WorkstationID]
|
|
EquipmentID int
|
|
WorkstationCode varchar(50)
|
|
WorkstationName varchar(255)
|
|
Type varchar(50)
|
|
Enable boolean
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
// ============================================
|
|
// TABLE 4: Location Management
|
|
// ============================================
|
|
|
|
Table location {
|
|
LocationID int [pk, increment]
|
|
SiteID int [not null, ref: > site.SiteID]
|
|
Parent int [ref: > location.LocationID]
|
|
LocCode varchar(50)
|
|
LocFull varchar(255)
|
|
Description text
|
|
LocType varchar(50)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table locationaddress {
|
|
LocationID int [pk, ref: > location.LocationID]
|
|
Province int [ref: > areageo.AreaGeoID]
|
|
City int [ref: > areageo.AreaGeoID]
|
|
Street1 varchar(255)
|
|
Street2 varchar(255)
|
|
PostCode varchar(20)
|
|
GeoLocationSystem varchar(50)
|
|
GeoLocationData text
|
|
Phone varchar(50)
|
|
Email varchar(255)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table areageo {
|
|
AreaGeoID int [pk, increment]
|
|
Parent int [ref: > areageo.AreaGeoID]
|
|
AreaCode varchar(50)
|
|
Class varchar(50)
|
|
AreaName varchar(255)
|
|
}
|
|
|
|
// ============================================
|
|
// TABLE 5: Test Management
|
|
// ============================================
|
|
|
|
Table testdefsite {
|
|
TestSiteID int [pk, increment]
|
|
SiteID int [not null, ref: > site.SiteID]
|
|
TestSiteCode varchar(50)
|
|
TestSiteName varchar(255)
|
|
TestType varchar(50) // TEST, PARAM, CALC, GROUP, TITLE
|
|
Description text
|
|
SeqScr int
|
|
SeqRpt int
|
|
IndentLeft int
|
|
FontStyle varchar(50)
|
|
VisibleScr boolean
|
|
VisibleRpt boolean
|
|
CountStat boolean
|
|
CreateDate datetime [not null]
|
|
StartDate datetime
|
|
EndDate datetime
|
|
}
|
|
|
|
Table testdeftech {
|
|
TestTechID int [pk, increment]
|
|
TestSiteID int [not null, ref: > testdefsite.TestSiteID]
|
|
DisciplineID int [ref: > discipline.DisciplineID]
|
|
DepartmentID int [ref: > department.DepartmentID]
|
|
VSet int
|
|
ResultType varchar(50) // NM, TX, DT, TM, VS, HL7
|
|
RefType varchar(50) // NUM, TXT, VSET
|
|
ReqQty decimal(10,4)
|
|
ReqQtyUnit varchar(20)
|
|
Unit1 varchar(50)
|
|
Factor decimal(10,6)
|
|
Unit2 varchar(50)
|
|
Decimal int
|
|
CollReq text
|
|
Method varchar(255)
|
|
ExpectedTAT int
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table testdefcal {
|
|
TestCalID int [pk, increment]
|
|
TestSiteID int [not null, ref: > testdefsite.TestSiteID]
|
|
DisciplineID int [ref: > discipline.DisciplineID]
|
|
DepartmentID int [ref: > department.DepartmentID]
|
|
FormulaInput varchar(500)
|
|
FormulaCode text
|
|
RefType varchar(50)
|
|
Unit1 varchar(50)
|
|
Factor decimal(10,6)
|
|
Unit2 varchar(50)
|
|
Decimal int
|
|
Method varchar(255)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table testdefgrp {
|
|
TestGrpID int [pk, increment]
|
|
TestSiteID int [not null, ref: > testdefsite.TestSiteID]
|
|
Member int [ref: > testdefsite.TestSiteID]
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table testmap {
|
|
TestMapID int [pk, increment]
|
|
TestSiteID int [not null, ref: > testdefsite.TestSiteID]
|
|
ConDefID int [ref: > containerdef.ConDefID]
|
|
HostType varchar(50)
|
|
HostID varchar(100)
|
|
HostDataSource varchar(100)
|
|
HostTestCode varchar(100)
|
|
HostTestName varchar(255)
|
|
ClientType varchar(50)
|
|
ClientID varchar(100)
|
|
ClientDataSource varchar(100)
|
|
ClientTestCode varchar(100)
|
|
ClientTestName varchar(255)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
// ============================================
|
|
// TABLE 6: Reference Ranges
|
|
// ============================================
|
|
|
|
Table refnum {
|
|
RefNumID int [pk, increment]
|
|
SiteID int [not null, ref: > site.SiteID]
|
|
TestSiteID int [not null, ref: > testdefsite.TestSiteID]
|
|
SpcType varchar(50)
|
|
Sex varchar(10)
|
|
Criteria varchar(255)
|
|
AgeStart int
|
|
AgeEnd int
|
|
NumRefType varchar(50) // NR, CR
|
|
RangeType varchar(50) // LL-UL, LL, UL, ABS
|
|
LowSign varchar(5)
|
|
Low decimal(15,5)
|
|
HighSign varchar(5)
|
|
High decimal(15,5)
|
|
Display varchar(50)
|
|
Flag varchar(10)
|
|
Interpretation text
|
|
Notes text
|
|
CreateDate datetime [not null]
|
|
StartDate datetime
|
|
EndDate datetime
|
|
}
|
|
|
|
Table reftxt {
|
|
RefTxtID int [pk, increment]
|
|
SiteID int [not null, ref: > site.SiteID]
|
|
TestSiteID int [not null, ref: > testdefsite.TestSiteID]
|
|
SpcType varchar(50)
|
|
Sex varchar(10)
|
|
Criteria varchar(255)
|
|
AgeStart int
|
|
AgeEnd int
|
|
TxtRefType varchar(50) // TX, VS
|
|
RefTxt text
|
|
Flag varchar(10)
|
|
Notes text
|
|
CreateDate datetime [not null]
|
|
StartDate datetime
|
|
EndDate datetime
|
|
}
|
|
|
|
Table refvset {
|
|
RefVSetID int [pk, increment]
|
|
SiteID int [not null, ref: > site.SiteID]
|
|
TestSiteID int [not null, ref: > testdefsite.TestSiteID]
|
|
SpcType varchar(50)
|
|
Sex varchar(10)
|
|
AgeStart int
|
|
AgeEnd int
|
|
RefTxt varchar(255)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table refthold {
|
|
RefTHoldID int [pk, increment]
|
|
SiteID int [not null, ref: > site.SiteID]
|
|
TestSiteID int [not null, ref: > testdefsite.TestSiteID]
|
|
SpcType varchar(50)
|
|
Sex varchar(10)
|
|
AgeStart int
|
|
AgeEnd int
|
|
Threshold decimal(15,5)
|
|
BelowTxt text
|
|
AboveTxt text
|
|
GrayzoneLow decimal(15,5)
|
|
GrayzoneHigh decimal(15,5)
|
|
GrayzoneTxt text
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
// ============================================
|
|
// TABLE 7: Specimen Management
|
|
// ============================================
|
|
|
|
Table specimen {
|
|
InternalSID int [pk, increment]
|
|
SID varchar(17) [not null, unique]
|
|
SiteID int [not null, ref: > site.SiteID]
|
|
OrderID varchar(13)
|
|
ConDefID int [ref: > containerdef.ConDefID]
|
|
Parent int [ref: > specimen.InternalSID]
|
|
Qty decimal(10,4)
|
|
Unit varchar(20)
|
|
GenerateBy varchar(100)
|
|
SchDateTime datetime
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
ArchiveDate datetime
|
|
}
|
|
|
|
Table specimenstatus {
|
|
SpcStaID int [pk, increment]
|
|
SID varchar(17) [not null, ref: > specimen.SID]
|
|
OrderID varchar(13)
|
|
CurrSiteID int [ref: > site.SiteID]
|
|
CurrLocID int [ref: > location.LocationID]
|
|
UserID int
|
|
SpcAct varchar(50)
|
|
ActRes varchar(50)
|
|
SpcStatus varchar(50)
|
|
Qty decimal(10,4)
|
|
Unit varchar(20)
|
|
SpcCon varchar(50)
|
|
Comment text
|
|
Origin varchar(100)
|
|
GeoLocationSystem varchar(50)
|
|
GeoLocationData text
|
|
DIDType varchar(50)
|
|
DID varchar(100)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
ArchiveDate datetime
|
|
}
|
|
|
|
Table specimencollection {
|
|
SpcColID int [pk, increment]
|
|
SpcStaID int [not null, ref: > specimenstatus.SpcStaID]
|
|
SpRole varchar(50)
|
|
ColMethod varchar(50)
|
|
BodySite varchar(50)
|
|
CntSize varchar(50)
|
|
FastingVolume decimal(10,4)
|
|
ColStart datetime
|
|
ColEnd datetime
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
ArchiveDate datetime
|
|
}
|
|
|
|
Table specimenprep {
|
|
SpcPrpID int [pk, increment]
|
|
SpcStaID int [not null, ref: > specimenstatus.SpcStaID]
|
|
Description text
|
|
Method varchar(255)
|
|
Additive varchar(100)
|
|
AddQty decimal(10,4)
|
|
AddUnit varchar(20)
|
|
PrepStart datetime
|
|
PrepEnd datetime
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
ArchiveDate datetime
|
|
}
|
|
|
|
Table containerdef {
|
|
ConDefID int [pk, increment]
|
|
SiteID int [not null, ref: > site.SiteID]
|
|
ConCode varchar(50)
|
|
ConName varchar(255)
|
|
ConDesc text
|
|
Additive varchar(100)
|
|
ConClass varchar(50)
|
|
Color varchar(50)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
// ============================================
|
|
// TABLE 8: Order Management
|
|
// ============================================
|
|
|
|
Table ordertest {
|
|
InternalOID int [pk, increment]
|
|
OrderID varchar(13) [not null, unique]
|
|
PlacerID varchar(100)
|
|
InternalPID int [not null, ref: > patient.InternalPID]
|
|
SiteID int [ref: > site.SiteID]
|
|
PVADTID int [ref: > patvisitadt.PVADTID]
|
|
ReqApp varchar(100)
|
|
Priority varchar(50)
|
|
TrnDate datetime
|
|
EffDate datetime
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
ArchiveDate datetime
|
|
DelDate datetime
|
|
}
|
|
|
|
Table patres {
|
|
ResultID int [pk, increment]
|
|
SiteID int [ref: > site.SiteID]
|
|
OrderID varchar(13)
|
|
InternalSID int [ref: > specimen.InternalSID]
|
|
SID varchar(17)
|
|
SampleID varchar(100)
|
|
TestSiteID int [ref: > testdefsite.TestSiteID]
|
|
WorkstationID int [ref: > workstation.WorkstationID]
|
|
EquipmentID int
|
|
RefNumID int [ref: > refnum.RefNumID]
|
|
RefTxtID int [ref: > reftxt.RefTxtID]
|
|
TestSiteCode varchar(50)
|
|
AspCnt int
|
|
Result text
|
|
SampleType varchar(50)
|
|
ResultDateTime datetime
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
ArchiveDate datetime
|
|
DelDate datetime
|
|
}
|
|
|
|
// ============================================
|
|
// TABLE 9: Contact Management
|
|
// ============================================
|
|
|
|
Table contact {
|
|
ContactID int [pk, increment]
|
|
NameFirst varchar(255)
|
|
NameLast varchar(255)
|
|
Title varchar(100)
|
|
Initial varchar(50)
|
|
Birthdate datetime
|
|
EmailAddress1 varchar(255)
|
|
EmailAddress2 varchar(255)
|
|
Phone varchar(50)
|
|
MobilePhone1 varchar(50)
|
|
MobilePhone2 varchar(50)
|
|
Specialty varchar(100)
|
|
SubSpecialty varchar(100)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table contactdetail {
|
|
ContactDetID int [pk, increment]
|
|
ContactID int [not null, ref: > contact.ContactID]
|
|
SiteID int [ref: > site.SiteID]
|
|
OccupationID int [ref: > occupation.OccupationID]
|
|
ContactCode varchar(50)
|
|
ContactEmail varchar(255)
|
|
JobTitle varchar(100)
|
|
Department varchar(100)
|
|
ContactStartDate datetime
|
|
ContactEndDate datetime
|
|
}
|
|
|
|
Table medicalspecialty {
|
|
SpecialtyID int [pk, increment]
|
|
Parent int [ref: > medicalspecialty.SpecialtyID]
|
|
SpecialtyText varchar(255)
|
|
Title varchar(100)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table occupation {
|
|
OccupationID int [pk, increment]
|
|
OccCode varchar(50)
|
|
OccText varchar(255)
|
|
Description text
|
|
CreateDate datetime [not null]
|
|
}
|
|
|
|
// ============================================
|
|
// TABLE 10: Value Sets
|
|
// ============================================
|
|
|
|
Table valuesetdef {
|
|
VSetID int [pk, increment]
|
|
SiteID int [not null, ref: > site.SiteID]
|
|
VSName varchar(255)
|
|
VSDesc text
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table valueset {
|
|
VID int [pk, increment]
|
|
SiteID int [not null, ref: > site.SiteID]
|
|
VSetID int [not null, ref: > valuesetdef.VSetID]
|
|
VCategory varchar(100)
|
|
VOrder int
|
|
VValue varchar(255)
|
|
VDesc varchar(255)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
// ============================================
|
|
// TABLE 11: System / Counter
|
|
// ============================================
|
|
|
|
Table counter {
|
|
CounterID int [pk, increment]
|
|
CounterValue bigint
|
|
CounterStart bigint
|
|
CounterEnd bigint
|
|
CounterReset varchar(50)
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
}
|
|
|
|
Table edgeres {
|
|
EdgeResID int [pk, increment]
|
|
SiteID int [ref: > site.SiteID]
|
|
InstrumentID int
|
|
SampleID varchar(100)
|
|
PatientID varchar(100)
|
|
Payload text
|
|
Status varchar(50)
|
|
AutoProcess boolean
|
|
ProcessedAt datetime
|
|
ErrorMessage text
|
|
CreateDate datetime [not null]
|
|
EndDate datetime
|
|
ArchiveDate datetime
|
|
DelDate datetime
|
|
}
|
|
|
|
Table zones {
|
|
id int [pk, increment]
|
|
name varchar(255)
|
|
code varchar(50)
|
|
type varchar(50)
|
|
description text
|
|
status varchar(50)
|
|
created_at datetime
|
|
updated_at datetime
|
|
}
|