clqms-be/docs/clqms_database.dbml

855 lines
18 KiB
Plaintext
Raw Normal View History

// CLQMS Database Schema
// Generated from ERD_EXTRACT.md
// Database Markup Language (DBML) for dbdiagram.io and other tools
// ============================================
// TABLE 1: Organization Structure
// ============================================
Table account {
AccountID int [pk]
AccountName varchar(255)
ParentAccountID int
CreateDate datetime
EndDate datetime
}
Table site {
SiteID int [pk]
AccountID int
SiteName varchar(255)
Location varchar(255)
CreateDate datetime
EndDate datetime
}
Table discipline {
DisciplineID int [pk]
DisciplineName varchar(255)
CreateDate datetime
EndDate datetime
}
Table department {
DepartmentID int [pk]
DepartmentName varchar(255)
DisciplineID int
CreateDate datetime
EndDate datetime
}
Table workstation {
WorkstationID int [pk]
SiteID int
DepartmentID int
WorkstationName varchar(255)
LocalDB boolean
CreateDate datetime
EndDate datetime
}
Table instrument {
InstrumentID int [pk]
SiteID int
WorkstationID int
InstrumentAlias varchar(255)
InstrumentName varchar(255)
InstrumentType varchar(255)
CreateDate datetime
EndDate datetime
}
Table personnel {
PersonnelID int [pk]
SiteID int
PersonnelName varchar(255)
Position varchar(255)
CreateDate datetime
EndDate datetime
}
Table personneldocument {
DocID int [pk]
PersonnelID int
DocType varchar(255)
DocFile blob
ExpiryDate datetime
CreateDate datetime
}
Table personnelaccess {
AccessID int [pk]
PersonnelID int
Role varchar(255)
Permissions text
CreateDate datetime
}
Table location {
LocationID int [pk]
SiteID int
ParentLocationID int
LocationTypeID int
LocationName varchar(255)
CreateDate datetime
EndDate datetime
}
Table locationaddress {
AddressID int [pk]
LocationID int
AddressLine1 varchar(255)
AddressLine2 varchar(255)
City varchar(100)
PostalCode varchar(20)
CreateDate datetime
}
Table patient {
PatientID int [pk]
SiteID int
InternalPID int
FirstName varchar(255)
LastName varchar(255)
DateOfBirth datetime
Sex varchar(10)
Race varchar(50)
Ethnicity varchar(50)
Religion varchar(50)
CreateDate datetime
DelDate datetime
}
Table patientcontact {
ContactID int [pk]
InternalPID int
ContactType varchar(50)
ContactValue varchar(255)
CreateDate datetime
}
Table patientinsurance {
InsuranceID int [pk]
InternalPID int
InsuranceProvider varchar(255)
PolicyNumber varchar(100)
GroupNumber varchar(100)
EffectiveDate datetime
ExpiryDate datetime
CreateDate datetime
}
Table patientvisit {
VisitID int [pk]
InternalPID int
SiteID int
VisitClass varchar(50)
VisitType varchar(50)
VisitDate datetime
DischargeDate datetime
CreateDate datetime
}
Table admission {
AdmissionID int [pk]
VisitID int
PatientID int
SiteID int
AdmissionDate datetime
DischargeDate datetime
ADTCode varchar(50)
ReferringParty varchar(255)
BillingAccount varchar(255)
AttendingDoctor varchar(255)
ReferringDoctor varchar(255)
VitalSigns text
CreateDate datetime
}
Table admissionlocation {
ID int [pk]
AdmissionID int
LocationID int
TransferDate datetime
CreateDate datetime
}
Table testorder {
OrderID varchar(13) [pk]
SiteID int
PatientID int
VisitID int
OrderDate datetime
Urgency varchar(50)
Status varchar(50)
OrderingProvider varchar(255)
ProductionSiteID int
CreateDate datetime
EndDate datetime
}
Table testorderdetail {
OrderDetailID int [pk]
OrderID varchar(13)
TestID int
Priority int
Status varchar(50)
CreateDate datetime
}
Table specimen {
SID varchar(17) [pk]
OrderID varchar(13)
SpecimenDefID int
ParentSID varchar(17)
SpecimenType varchar(50)
SpecimenRole varchar(50)
CollectionDate datetime
CollectionSite int
CollectedBy int
ContainerType varchar(50)
Additive varchar(50)
CollectionMethod varchar(50)
BodySite varchar(50)
SpecimenCondition varchar(50)
Status varchar(50)
CreateDate datetime
EndDate datetime
}
Table specimencollection {
ID int [pk]
SID varchar(17)
Activity varchar(50)
ActivityName varchar(100)
ActRes varchar(50)
LocationID int
EquipmentID int
PersonnelID int
ActivityDate datetime
Notes text
CreateDate datetime
}
Table specimentransport {
TransportID int [pk]
SID varchar(17)
SenderID int
ReceiverID int
TransportDate datetime
Condition text
PackagingID varchar(50)
FromLocation int
ToLocation int
CreateDate datetime
}
Table specimenstorage {
StorageID int [pk]
SID varchar(17)
LocationID int
StorageTemperature decimal(10,2)
StorageDate datetime
ThawCount int
ExpiryDate datetime
CreateDate datetime
}
Table testdef {
TestID int [pk]
TestName varchar(255)
TestCode varchar(50)
LOINCCode varchar(50)
TestType varchar(50)
DisciplineID int
SpecimenTypeID int
ContainerTypeID int
ResultType varchar(50)
ResultUnit varchar(50)
Methodology varchar(255)
CreateDate datetime
EndDate datetime
}
Table testdefsite {
ID int [pk]
TestID int
SiteID int
TestNameLocal varchar(255)
TestCodeLocal varchar(50)
WorkstationID int
InstrumentID int
Active boolean
CreateDate datetime
}
Table testdeftech {
ID int [pk]
TestID int
InstrumentID int
InstrumentTestCode varchar(50)
TestMapping varchar(255)
Active boolean
CreateDate datetime
}
Table calculatedtest {
CalculatedTestID int [pk]
TestID int
Formula text
ParamTestID1 int
ParamTestID2 int
ParamTestID3 int
ParamTestID4 int
CreateDate datetime
}
Table grouptest {
GroupTestID int [pk]
GroupTestName varchar(255)
GroupTestType varchar(50)
CreateDate datetime
}
Table grouptestmember {
ID int [pk]
GroupTestID int
TestID int
Sequence int
CreateDate datetime
}
Table panel {
PanelID int [pk]
PanelName varchar(255)
PanelType varchar(50)
ParentPanelID int
DisciplineID int
CreateDate datetime
EndDate datetime
}
Table panelmember {
ID int [pk]
PanelID int
TestID int
Sequence int
CreateDate datetime
}
Table referencerangenumeric {
RefRangeID int [pk]
TestID int
AgeFrom int
AgeTo int
Sex varchar(10)
LowValue decimal(10,2)
HighValue decimal(10,2)
Unit varchar(20)
SpecimenTypeID int
SiteID int
EffectiveDate datetime
ExpiryDate datetime
CreateDate datetime
}
Table referencerangethreshold {
RefRangeID int [pk]
TestID int
AgeFrom int
AgeTo int
Sex varchar(10)
CutOffLow decimal(10,2)
CutOffHigh decimal(10,2)
GrayZoneLow decimal(10,2)
GrayZoneHigh decimal(10,2)
SpecimenTypeID int
SiteID int
EffectiveDate datetime
ExpiryDate datetime
CreateDate datetime
}
Table referencerangetext {
RefRangeID int [pk]
TestID int
AgeFrom int
AgeTo int
Sex varchar(10)
TextValue text
SpecimenTypeID int
SiteID int
EffectiveDate datetime
ExpiryDate datetime
CreateDate datetime
}
Table calibrator {
CalibratorID int [pk]
CalibratorName varchar(255)
Manufacturer varchar(255)
LotNumber varchar(50)
ExpiryDate datetime
TestID int
CreateDate datetime
}
Table calibration {
CalibrationID int [pk]
InstrumentID int
TestID int
CalibratorID int
Level int
CalibrationDate datetime
Factor decimal(10,4)
Absorbance decimal(10,4)
TargetValue decimal(10,4)
TargetUnit varchar(20)
PersonnelID int
Status varchar(50)
CreateDate datetime
}
Table calparinst {
CalParInstID int [pk]
EquipmentID int
Calibrator varchar(255)
LotNo varchar(50)
ExpiryDate datetime
TestInstID1 int
SampleType varchar(50)
Level int
Concentration decimal(10,4)
CalUnit varchar(20)
CreateDate datetime
}
Table qcmaterial {
QCMaterialID int [pk]
MaterialName varchar(255)
Manufacturer varchar(255)
LotNumber varchar(50)
ExpiryDate datetime
Level int
TestID int
TargetMean decimal(10,4)
TargetSD decimal(10,4)
TargetCV decimal(10,4)
CreateDate datetime
}
Table qcresult {
QCResultID int [pk]
InstrumentID int
TestID int
QCMaterialID int
Level int
QCDate datetime
ResultValue decimal(10,4)
Mean decimal(10,4)
SD decimal(10,4)
CV decimal(10,4)
Sigma decimal(10,4)
ZScore decimal(10,4)
Flag varchar(10)
PersonnelID int
Status varchar(50)
CreateDate datetime
}
Table qcstatistic {
StatisticID int [pk]
InstrumentID int
TestID int
QCMaterialID int
Level int
StatisticDate datetime
Mean decimal(10,4)
SD decimal(10,4)
CV decimal(10,4)
SampleSize int
CreateDate datetime
}
Table patres {
ResultID int [pk]
SID varchar(17)
TestID int
OrderID varchar(13)
ResultValue varchar(100)
ResultNumeric decimal(15,5)
ResultText text
ResultUnit varchar(20)
ResultStatus varchar(50)
PersonnelID int
VerificationDate datetime
VerificationPersonnel int
CreateDate datetime
EndDate datetime
}
Table patrestech {
TechResultID int [pk]
ResultID int
InstrumentID int
RawResult text
ResultDate datetime
RerunCount int
Dilution decimal(10,4)
CreateDate datetime
}
Table patresflag {
FlagID int [pk]
ResultID int
FlagType varchar(10)
FlagDescription varchar(255)
CreateDate datetime
}
Table resultdistribution {
DistributionID int [pk]
ResultID int
RecipientType varchar(50)
RecipientID int
DistributionDate datetime
DistributionMethod varchar(50)
Status varchar(50)
CreateDate datetime
}
Table valuesetmember {
MemberID int [pk]
ValueSetID int
MemberCode varchar(50)
MemberValue varchar(255)
DisplayOrder int
Active boolean
CreateDate datetime
}
Table reagent {
ReagentID int [pk]
ReagentName varchar(255)
Manufacturer varchar(255)
CatalogNumber varchar(100)
LotNumber varchar(50)
ExpiryDate datetime
TestID int
InstrumentID int
CreateDate datetime
}
Table reagentusage {
UsageID int [pk]
ReagentID int
TestID int
UsageDate datetime
QuantityUsed decimal(10,2)
PersonnelID int
OrderID varchar(13)
SID varchar(17)
CreateDate datetime
}
Table product {
ProductID int [pk]
CatalogID int
SiteID int
LotNumber varchar(50)
ExpiryDate datetime
Quantity int
ReorderLevel int
LocationID int
CreateDate datetime
}
Table inventorytransaction {
TransactionID int [pk]
ProductID int
TransactionType varchar(50)
Quantity int
TransactionDate datetime
PersonnelID int
ReferenceID varchar(100)
Notes text
CreateDate datetime
}
Table equipment {
EquipmentID int [pk]
EquipmentName varchar(255)
EquipmentType varchar(50)
Manufacturer varchar(255)
Model varchar(100)
SerialNumber varchar(100)
SiteID int
LocationID int
Status varchar(50)
InstallDate datetime
DecommissionDate datetime
CreateDate datetime
}
Table equipmentmaintenance {
MaintenanceID int [pk]
EquipmentID int
MaintenanceType varchar(100)
MaintenanceDate datetime
Description text
PerformedBy varchar(255)
NextMaintenanceDate datetime
CreateDate datetime
}
Table equipmentactivity {
ActivityID int [pk]
EquipmentID int
ActivityType varchar(100)
ActivityDate datetime
ActivityResult varchar(50)
PersonnelID int
Notes text
CreateDate datetime
}
Table equipmenttestcount {
ID int [pk]
EquipmentID int
TestDate datetime
TestType varchar(50)
TestCount int
CreateDate datetime
}
Table doctor {
DoctorID int [pk]
DoctorName varchar(255)
DoctorCode varchar(50)
Specialty varchar(100)
SIP varchar(50)
PracticeLocation varchar(255)
ContactID int
CreateDate datetime
EndDate datetime
}
Table contactdetail {
DetailID int [pk]
ContactID int
DetailType varchar(50)
DetailValue varchar(255)
CreateDate datetime
}
Table auditarchive {
ArchiveID int [pk]
AuditID int
ArchiveDate datetime
ArchiveLocation varchar(255)
CreateDate datetime
}
Table user {
UserID int [pk]
Username varchar(100)
PasswordHash varchar(255)
PersonnelID int
Role varchar(50)
Status varchar(20)
LastLogin datetime
CreateDate datetime
}
Table usersession {
SessionID int [pk]
UserID int
SessionToken varchar(255)
ExpiryDate datetime
IPAddress varchar(50)
CreateDate datetime
}
Table reporttemplate {
TemplateID int [pk]
TemplateName varchar(255)
TemplateType varchar(50)
DisciplineID int
TemplateConfig text
CreateDate datetime
EndDate datetime
}
Table reportoutput {
OutputID int [pk]
TemplateID int
OrderID varchar(13)
OutputFormat varchar(50)
OutputData blob
GeneratedDate datetime
PersonnelID int
CreateDate datetime
}
Table hosttestmapping {
MappingID int [pk]
HostID int
HostTestCode varchar(50)
LocalTestID int
CreateDate datetime
}
Table hostsynclog {
LogID int [pk]
HostID int
SyncDate datetime
RecordsProcessed int
Errors int
Status varchar(20)
Details text
CreateDate datetime
}
// ============================================
// RELATIONSHIPS
// ============================================
// Organization Structure
Ref: account.ParentAccountID > account.AccountID [delete: cascade]
Ref: site.AccountID > account.AccountID
Ref: department.DisciplineID > discipline.DisciplineID
Ref: workstation.SiteID > site.SiteID
Ref: workstation.DepartmentID > department.DepartmentID
Ref: instrument.SiteID > site.SiteID
Ref: instrument.WorkstationID > workstation.WorkstationID
// Personnel
Ref: personnel.SiteID > site.SiteID
Ref: personneldocument.PersonnelID > personnel.PersonnelID
Ref: personnelaccess.PersonnelID > personnel.PersonnelID
// Location Management
Ref: location.SiteID > site.SiteID
Ref: location.ParentLocationID > location.LocationID
Ref: locationaddress.LocationID > location.LocationID
// Patient Registration
Ref: patient.SiteID > site.SiteID
Ref: patientcontact.InternalPID > patient.InternalPID
Ref: patientinsurance.InternalPID > patient.InternalPID
Ref: patientvisit.InternalPID > patient.InternalPID
Ref: patientvisit.SiteID > site.SiteID
// Patient Admission
Ref: admission.VisitID > patientvisit.VisitID
Ref: admission.PatientID > patient.PatientID
Ref: admission.SiteID > site.SiteID
Ref: admissionlocation.AdmissionID > admission.AdmissionID
Ref: admissionlocation.LocationID > location.LocationID
// Test Ordering
Ref: testorder.SiteID > site.SiteID
Ref: testorder.PatientID > patient.PatientID
Ref: testorder.VisitID > patientvisit.VisitID
Ref: testorder.ProductionSiteID > site.SiteID
Ref: testorderdetail.OrderID > testorder.OrderID
// Specimen Management
Ref: specimen.OrderID > testorder.OrderID
Ref: specimencollection.SID > specimen.SID
Ref: specimencollection.LocationID > location.LocationID
Ref: specimencollection.EquipmentID > instrument.InstrumentID
Ref: specimencollection.PersonnelID > personnel.PersonnelID
Ref: specimentransport.SID > specimen.SID
Ref: specimentransport.SenderID > personnel.PersonnelID
Ref: specimentransport.ReceiverID > personnel.PersonnelID
Ref: specimenstorage.SID > specimen.SID
Ref: specimenstorage.LocationID > location.LocationID
// Test Management
Ref: testdef.DisciplineID > discipline.DisciplineID
Ref: testdefsite.TestID > testdef.TestID
Ref: testdefsite.SiteID > site.SiteID
Ref: testdefsite.WorkstationID > workstation.WorkstationID
Ref: testdefsite.InstrumentID > instrument.InstrumentID
Ref: testdeftech.TestID > testdef.TestID
Ref: testdeftech.InstrumentID > instrument.InstrumentID
Ref: calculatedtest.TestID > testdef.TestID
Ref: grouptestmember.GroupTestID > grouptest.GroupTestID
Ref: grouptestmember.TestID > testdef.TestID
Ref: panel.ParentPanelID > panel.PanelID
Ref: panel.DisciplineID > discipline.DisciplineID
Ref: panelmember.PanelID > panel.PanelID
Ref: panelmember.TestID > testdef.TestID
// Reference Range
Ref: referencerangenumeric.TestID > testdef.TestID
Ref: referencerangenumeric.SiteID > site.SiteID
Ref: referencerangethreshold.TestID > testdef.TestID
Ref: referencerangethreshold.SiteID > site.SiteID
Ref: referencerangetext.TestID > testdef.TestID
Ref: referencerangetext.SiteID > site.SiteID
// Calibration
Ref: calibrator.TestID > testdef.TestID
Ref: calibration.InstrumentID > instrument.InstrumentID
Ref: calibration.TestID > testdef.TestID
Ref: calibration.CalibratorID > calibrator.CalibratorID
Ref: calibration.PersonnelID > personnel.PersonnelID
Ref: calparinst.EquipmentID > instrument.InstrumentID
// Quality Control
Ref: qcmaterial.TestID > testdef.TestID
Ref: qcresult.InstrumentID > instrument.InstrumentID
Ref: qcresult.TestID > testdef.TestID
Ref: qcresult.QCMaterialID > qcmaterial.QCMaterialID
Ref: qcresult.PersonnelID > personnel.PersonnelID
Ref: qcstatistic.InstrumentID > instrument.InstrumentID
Ref: qcstatistic.TestID > testdef.TestID
Ref: qcstatistic.QCMaterialID > qcmaterial.QCMaterialID
// Test Results
Ref: patres.SID > specimen.SID
Ref: patres.TestID > testdef.TestID
Ref: patres.OrderID > testorder.OrderID
Ref: patres.PersonnelID > personnel.PersonnelID
Ref: patrestech.ResultID > patres.ResultID
Ref: patrestech.InstrumentID > instrument.InstrumentID
Ref: patresflag.ResultID > patres.ResultID
Ref: resultdistribution.ResultID > patres.ResultID
// Reagent & Inventory
Ref: reagent.TestID > testdef.TestID
Ref: reagent.InstrumentID > instrument.InstrumentID
Ref: reagentusage.ReagentID > reagent.ReagentID
Ref: reagentusage.TestID > testdef.TestID
Ref: reagentusage.PersonnelID > personnel.PersonnelID
Ref: product.SiteID > site.SiteID
Ref: product.LocationID > location.LocationID
Ref: inventorytransaction.ProductID > product.ProductID
Ref: inventorytransaction.PersonnelID > personnel.PersonnelID
// Equipment Management
Ref: equipment.SiteID > site.SiteID
Ref: equipment.LocationID > location.LocationID
Ref: equipmentmaintenance.EquipmentID > equipment.EquipmentID
Ref: equipmentactivity.EquipmentID > equipment.EquipmentID
Ref: equipmentactivity.PersonnelID > personnel.PersonnelID
Ref: equipmenttestcount.EquipmentID > equipment.EquipmentID
// User & Authentication
Ref: user.PersonnelID > personnel.PersonnelID
Ref: usersession.UserID > user.UserID
// Visualization & Reporting
Ref: reporttemplate.DisciplineID > discipline.DisciplineID
Ref: reportoutput.TemplateID > reporttemplate.TemplateID
Ref: reportoutput.OrderID > testorder.OrderID
Ref: reportoutput.PersonnelID > personnel.PersonnelID
// Host System Integration
Ref: hosttestmapping.LocalTestID > testdef.TestID