// 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