clqms-be/docs/ERD_EXTRACT.md
mahdahar 351d3b6279 docs: extract ERD documentation and add database schema files
- Remove deprecated valueset migration docs and old project planning files
- Add ERD_EXTRACT.md with complete database table definitions
- Add clqms_database.dbml for database modeling
- Add clqms_database.dbdiagram for visual database design
- Add updated prj_3c.md project documentation
2026-01-15 12:37:37 +07:00

1130 lines
36 KiB
Markdown

# CLQMS Database Tables - ERD Source Document
## Overview
This document contains all database tables extracted from prj_3c.md for ERD creation in Figma.
---
## Table 1: Organization Structure
### account
| Column | Type | Description |
|--------|------|-------------|
| AccountID | int | Primary key - from SMCRM |
| AccountName | string | Organization name |
| ParentAccountID | int | Parent organization (for chain labs) |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### site
| Column | Type | Description |
|--------|------|-------------|
| SiteID | int | Primary key - from SMCRM |
| AccountID | int | Foreign key to account |
| SiteName | string | Location name |
| Location | string | Geographic coordinates |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### discipline
| Column | Type | Description |
|--------|------|-------------|
| DisciplineID | int | Primary key |
| DisciplineName | string | e.g., Microbiology, Hematology, Immunology |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### department
| Column | Type | Description |
|--------|------|-------------|
| DepartmentID | int | Primary key |
| DepartmentName | string | Department name |
| DisciplineID | int | Foreign key to discipline |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### workstation
| Column | Type | Description |
|--------|------|-------------|
| WorkstationID | int | Primary key |
| SiteID | int | Foreign key to site |
| DepartmentID | int | Foreign key to department |
| WorkstationName | string | Workstation identifier |
| LocalDB | boolean | Has local database |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### instrument
| Column | Type | Description |
|--------|------|-------------|
| InstrumentID | int | Primary key |
| SiteID | int | Foreign key to site |
| WorkstationID | int | Foreign key to workstation |
| InstrumentAlias | string | Instrument identifier for interfacing |
| InstrumentName | string | Manufacturer model name |
| InstrumentType | string | IVD equipment type |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
---
## Table 2: Personnel
### personnel
| Column | Type | Description |
|--------|------|-------------|
| PersonnelID | int | Primary key |
| SiteID | int | Foreign key to site |
| PersonnelName | string | Full name |
| Position | string | Job title/position |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### personneldocument
| Column | Type | Description |
|--------|------|-------------|
| DocID | int | Primary key |
| PersonnelID | int | Foreign key to personnel |
| DocType | string | Document type (e.g., training certificate) |
| DocFile | blob | Document file |
| ExpiryDate | datetime | Document expiry |
| CreateDate | datetime | UTC+0 |
### personnelaccess
| Column | Type | Description |
|--------|------|-------------|
| AccessID | int | Primary key |
| PersonnelID | int | Foreign key to personnel |
| Role | string | Access role |
| Permissions | string | JSON permissions |
| CreateDate | datetime | UTC+0 |
---
## Table 3: Location Management
### locationtype
| Column | Type | Description |
|--------|------|-------------|
| LocationTypeID | int | Primary key |
| LocationTypeName | string | e.g., floor, point of care, room, bed, mobile, remote |
| CreateDate | datetime | UTC+0 |
### location
| Column | Type | Description |
|--------|------|-------------|
| LocationID | int | Primary key |
| SiteID | int | Foreign key to site |
| ParentLocationID | int | Parent location (cascade) |
| LocationTypeID | int | Foreign key to locationtype |
| LocationName | string | Location name |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### locationaddress
| Column | Type | Description |
|--------|------|-------------|
| AddressID | int | Primary key |
| LocationID | int | Foreign key to location |
| AddressLine1 | string | Address line 1 |
| AddressLine2 | string | Address line 2 |
| City | string | City |
| PostalCode | string | Postal code |
| CreateDate | datetime | UTC+0 |
---
## Table 4: Patient Registration
### patient
| Column | Type | Description |
|--------|------|-------------|
| PatientID | int | Primary key - external ID |
| SiteID | int | Foreign key to site |
| InternalPID | int | Internal patient ID (auto-increment) |
| FirstName | string | First name (encrypted) |
| LastName | string | Last name (encrypted) |
| DateOfBirth | datetime | Date of birth (stored as-is) |
| Sex | string | Gender code |
| Race | string | Race code |
| Ethnicity | string | Ethnicity code |
| Religion | string | Religion code |
| CreateDate | datetime | UTC+0 |
| DelDate | datetime | UTC+0 |
### patientcontact
| Column | Type | Description |
|--------|------|-------------|
| ContactID | int | Primary key |
| InternalPID | int | Foreign key to patient |
| ContactType | string | e.g., phone, email, address |
| ContactValue | string | Contact information (encrypted) |
| CreateDate | datetime | UTC+0 |
### patientinsurance
| Column | Type | Description |
|--------|------|-------------|
| InsuranceID | int | Primary key |
| InternalPID | int | Foreign key to patient |
| InsuranceProvider | string | Insurance company |
| PolicyNumber | string | Policy number |
| GroupNumber | string | Group number |
| EffectiveDate | datetime | Policy effective date |
| ExpiryDate | datetime | Policy expiry date |
| CreateDate | datetime | UTC+0 |
### patientvisit
| Column | Type | Description |
|--------|------|-------------|
| VisitID | int | Primary key |
| InternalPID | int | Foreign key to patient |
| SiteID | int | Foreign key to site |
| VisitClass | string | Visit classification |
| VisitType | string | Visit type |
| VisitDate | datetime | Visit datetime |
| DischargeDate | datetime | Discharge datetime |
| CreateDate | datetime | UTC+0 |
---
## Table 5: Patient Admission
### admission
| Column | Type | Description |
|--------|------|-------------|
| AdmissionID | int | Primary key |
| VisitID | int | Foreign key to patientvisit |
| PatientID | int | Foreign key to patient |
| SiteID | int | Foreign key to site |
| AdmissionDate | datetime | Admission datetime |
| DischargeDate | datetime | Discharge datetime |
| ADTCode | string | Admission-Discharge-Transfer code |
| ReferringParty | string | Referring party |
| BillingAccount | string | Billing account |
| AttendingDoctor | string | Attending doctor |
| ReferringDoctor | string | Referring doctor |
| VitalSigns | json | Heart rate, BP, weight, height |
| CreateDate | datetime | UTC+0 |
### admissionlocation
| Column | Type | Description |
|--------|------|-------------|
| ID | int | Primary key |
| AdmissionID | int | Foreign key to admission |
| LocationID | int | Foreign key to location |
| TransferDate | datetime | Transfer datetime |
| CreateDate | datetime | UTC+0 |
---
## Table 6: Test Ordering
### testorder
| Column | Type | Description |
|--------|------|-------------|
| OrderID | string | Primary key - LLYYMMDDXXXXX format |
| SiteID | int | Foreign key to site (source site) |
| PatientID | int | Foreign key to patient |
| VisitID | int | Foreign key to patientvisit |
| OrderDate | datetime | Order datetime |
| Urgency | string | Order urgency level |
| Status | string | Order status |
| OrderingProvider | string | Ordering doctor |
| ProductionSiteID | int | Foreign key to site (production site) |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### testorderdetail
| Column | Type | Description |
|--------|------|-------------|
| OrderDetailID | int | Primary key |
| OrderID | string | Foreign key to testorder |
| TestID | int | Foreign key to testdef |
| Priority | int | Test priority |
| Status | string | Test order status |
| CreateDate | datetime | UTC+0 |
### orderstatus
| Column | Type | Description |
|--------|------|-------------|
| StatusID | int | Primary key |
| StatusName | string | Status name |
| Description | string | Status description |
| Active | boolean | Is active |
---
## Table 7: Specimen Management
### specimen
| Column | Type | Description |
|--------|------|-------------|
| SID | string | Primary key - OrderID + SSS + C (17 chars) |
| OrderID | string | Foreign key to testorder |
| SpecimenDefID | int | Foreign key to specimendefinition |
| ParentSID | string | Parent specimen (for secondary specimens) |
| SpecimenType | string | Specimen type code |
| SpecimenRole | string | e.g., patient, EQC, blood bag, internal QC |
| CollectionDate | datetime | Collection datetime |
| CollectionSite | int | Collection site |
| CollectedBy | int | Personnel ID |
| ContainerType | string | Container type code |
| Additive | string | Additive code |
| CollectionMethod | string | Collection method code |
| BodySite | string | Body site code |
| SpecimenCondition | string | Specimen condition |
| Status | string | Current specimen status |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### specimencollection
| Column | Type | Description |
|--------|------|-------------|
| ID | int | Primary key |
| SID | string | Foreign key to specimen |
| Activity | string | Activity code |
| ActivityName | string | Activity name |
| ActRes | string | Activity result |
| LocationID | int | Foreign key to location |
| EquipmentID | int | Foreign key to instrument |
| PersonnelID | int | Personnel performing activity |
| ActivityDate | datetime | Activity datetime |
| Notes | string | Activity notes |
| CreateDate | datetime | UTC+0 |
### specimenstatus
| Column | Type | Description |
|--------|------|-------------|
| StatusID | int | Primary key |
| SiteID | int | Site ID |
| LocationID | int | Location ID |
| EquipmentID | int | Instrument ID |
| Activity | string | Activity code |
| ActivityName | string | Activity name |
| ActRes | string | Activity result |
| SpecimenStatus | string | Specimen status name |
| Description | string | Status description |
### specimentransport
| Column | Type | Description |
|--------|------|-------------|
| TransportID | int | Primary key |
| SID | string | Foreign key to specimen |
| SenderID | int | Sender personnel ID |
| ReceiverID | int | Receiver personnel ID |
| TransportDate | datetime | Transport datetime |
| Condition | json | Transport conditions (temperature, etc.) |
| PackagingID | string | Packaging identification |
| FromLocation | int | From location |
| ToLocation | int | To location |
| CreateDate | datetime | UTC+0 |
### specimenstorage
| Column | Type | Description |
|--------|------|-------------|
| StorageID | int | Primary key |
| SID | string | Foreign key to specimen |
| LocationID | int | Storage location ID |
| StorageTemperature | decimal | Storage temperature |
| StorageDate | datetime | Storage datetime |
| ThawCount | int | Number of thaws |
| ExpiryDate | datetime | Storage expiry |
| CreateDate | datetime | UTC+0 |
---
## Table 8: Specimen Definitions
### specimendefinition
| Column | Type | Description |
|--------|------|-------------|
| SpecimenDefID | int | Primary key |
| SpecimenName | string | Specimen name |
| SpecimenCode | string | Specimen code |
| SpecimenTypeID | int | Foreign key to specimentype |
| ContainerTypeID | int | Foreign key to containertype |
| AdditiveID | int | Foreign key to additive |
| CollectionMethodID | int | Foreign key to collectionmethod |
| Volume | decimal | Required volume |
| VolumeUnit | string | Volume unit |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### specimentype
| Column | Type | Description |
|--------|------|-------------|
| SpecimenTypeID | int | Primary key |
| SpecimenTypeName | string | e.g., blood, urine, stool, tissue |
| CodingSystem | string | Coding system (LOINC, etc.) |
| Code | string | Code value |
| CreateDate | datetime | UTC+0 |
### containertype
| Column | Type | Description |
|--------|------|-------------|
| ContainerTypeID | int | Primary key |
| ContainerName | string | Container name |
| ContainerCode | string | Container code |
| Volume | decimal | Container volume |
| VolumeUnit | string | Volume unit |
| CreateDate | datetime | UTC+0 |
### additive
| Column | Type | Description |
|--------|------|-------------|
| AdditiveID | int | Primary key |
| AdditiveName | string | Additive name |
| AdditiveCode | string | Additive code |
| Description | string | Additive description |
| CreateDate | datetime | UTC+0 |
### collectionmethod
| Column | Type | Description |
|--------|------|-------------|
| MethodID | int | Primary key |
| MethodName | string | Method name |
| MethodCode | string | Method code |
| Description | string | Method description |
| CreateDate | datetime | UTC+0 |
### bodysite
| Column | Type | Description |
|--------|------|-------------|
| BodySiteID | int | Primary key |
| BodySiteName | string | Body site name |
| CodingSystem | string | Coding system |
| Code | string | Code value |
| CreateDate | datetime | UTC+0 |
### specimenrole
| Column | Type | Description |
|--------|------|-------------|
| RoleID | int | Primary key |
| RoleName | string | Role name |
| RoleCode | string | Role code |
| Description | string | Role description |
| CreateDate | datetime | UTC+0 |
### specimencondition
| Column | Type | Description |
|--------|------|-------------|
| ConditionID | int | Primary key |
| ConditionName | string | Condition name |
| ConditionCode | string | Condition code |
| Description | string | Condition description |
| CreateDate | datetime | UTC+0 |
---
## Table 9: Test Management
### testdef
| Column | Type | Description |
|--------|------|-------------|
| TestID | int | Primary key |
| TestName | string | Test name |
| TestCode | string | Test code |
| LOINCCode | string | LOINC code |
| TestType | string | Test type (atomic, calculated, profile, etc.) |
| DisciplineID | int | Foreign key to discipline |
| SpecimenTypeID | int | Foreign key to specimentype |
| ContainerTypeID | int | Foreign key to containertype |
| ResultType | string | Result type (numeric, range, text, valueset) |
| ResultUnit | string | Result unit (UCUM) |
| Methodology | string | Test methodology |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### testdefsite
| Column | Type | Description |
|--------|------|-------------|
| ID | int | Primary key |
| TestID | int | Foreign key to testdef |
| SiteID | int | Foreign key to site |
| TestNameLocal | string | Local test name |
| TestCodeLocal | string | Local test code |
| WorkstationID | int | Default workstation |
| InstrumentID | int | Default instrument |
| Active | boolean | Is active |
| CreateDate | datetime | UTC+0 |
### testdeftech
| Column | Type | Description |
|--------|------|-------------|
| ID | int | Primary key |
| TestID | int | Foreign key to testdef |
| InstrumentID | int | Foreign key to instrument |
| InstrumentTestCode | string | Test code on instrument |
| TestMapping | string | Test mapping (one-to-many) |
| Active | boolean | Is active |
| CreateDate | datetime | UTC+0 |
### calculatedtest
| Column | Type | Description |
|--------|------|-------------|
| CalculatedTestID | int | Primary key |
| TestID | int | Foreign key to testdef |
| Formula | string | Calculation formula |
| ParamTestID1 | int | Parameter test 1 |
| ParamTestID2 | int | Parameter test 2 |
| ParamTestID3 | int | Parameter test 3 |
| ParamTestID4 | int | Parameter test 4 |
| CreateDate | datetime | UTC+0 |
### grouptest
| Column | Type | Description |
|--------|------|-------------|
| GroupTestID | int | Primary key |
| GroupTestName | string | Group test name |
| GroupTestType | string | Type (Profile, Functional Procedure, Superset) |
| CreateDate | datetime | UTC+0 |
### grouptestmember
| Column | Type | Description |
|--------|------|-------------|
| ID | int | Primary key |
| GroupTestID | int | Foreign key to grouptest |
| TestID | int | Foreign key to testdef |
| Sequence | int | Display sequence |
| CreateDate | datetime | UTC+0 |
### panel
| Column | Type | Description |
|--------|------|-------------|
| PanelID | int | Primary key |
| PanelName | string | Panel name |
| PanelType | string | Fixed or Flexible |
| ParentPanelID | int | Parent panel (for nested panels) |
| DisciplineID | int | Foreign key to discipline |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### panelmember
| Column | Type | Description |
|--------|------|-------------|
| ID | int | Primary key |
| PanelID | int | Foreign key to panel |
| TestID | int | Foreign key to testdef |
| Sequence | int | Display sequence |
| CreateDate | datetime | UTC+0 |
---
## Table 10: Reference Range
### referencerangenumeric
| Column | Type | Description |
|--------|------|-------------|
| RefRangeID | int | Primary key |
| TestID | int | Foreign key to testdef |
| AgeFrom | int | Age from (years) |
| AgeTo | int | Age to (years) |
| Sex | string | Gender |
| LowValue | decimal | Low reference value |
| HighValue | decimal | High reference value |
| Unit | string | Unit |
| SpecimenTypeID | int | Foreign key to specimentype |
| SiteID | int | Foreign key to site |
| EffectiveDate | datetime | Effective date |
| ExpiryDate | datetime | Expiry date |
| CreateDate | datetime | UTC+0 |
### referencerangethreshold
| Column | Type | Description |
|--------|------|-------------|
| RefRangeID | int | Primary key |
| TestID | int | Foreign key to testdef |
| AgeFrom | int | Age from (years) |
| AgeTo | int | Age to (years) |
| Sex | string | Gender |
| CutOffLow | decimal | Low cut-off |
| CutOffHigh | decimal | High cut-off |
| GrayZoneLow | decimal | Low gray zone |
| GrayZoneHigh | decimal | High gray zone |
| SpecimenTypeID | int | Foreign key to specimentype |
| SiteID | int | Foreign key to site |
| EffectiveDate | datetime | Effective date |
| ExpiryDate | datetime | Expiry date |
| CreateDate | datetime | UTC+0 |
### referencerangetext
| Column | Type | Description |
|--------|------|-------------|
| RefRangeID | int | Primary key |
| TestID | int | Foreign key to testdef |
| AgeFrom | int | Age from (years) |
| AgeTo | int | Age to (years) |
| Sex | string | Gender |
| TextValue | string | Text reference value |
| SpecimenTypeID | int | Foreign key to specimentype |
| SiteID | int | Foreign key to site |
| EffectiveDate | datetime | Effective date |
| ExpiryDate | datetime | Expiry date |
| CreateDate | datetime | UTC+0 |
---
## Table 11: Calibration
### calibrator
| Column | Type | Description |
|--------|------|-------------|
| CalibratorID | int | Primary key |
| CalibratorName | string | Calibrator name |
| Manufacturer | string | Manufacturer |
| LotNumber | string | Lot number |
| ExpiryDate | datetime | Expiry date |
| TestID | int | Foreign key to testdef |
| CreateDate | datetime | UTC+0 |
### calibration
| Column | Type | Description |
|--------|------|-------------|
| CalibrationID | int | Primary key |
| InstrumentID | int | Foreign key to instrument |
| TestID | int | Foreign key to testdef |
| CalibratorID | int | Foreign key to calibrator |
| Level | int | Calibration level |
| CalibrationDate | datetime | Calibration datetime |
| Factor | decimal | Calibration factor |
| Absorbance | decimal | Absorbance value |
| TargetValue | decimal | Target value |
| TargetUnit | string | Target unit |
| PersonnelID | int | Personnel performing calibration |
| Status | string | Calibration status |
| CreateDate | datetime | UTC+0 |
### caldef
| Column | Type | Description |
|--------|------|-------------|
| CalDefID | int | Primary key |
| Calibrator | string | Calibrator name |
| LotNumber | string | Lot number |
| ExpiryDate | datetime | Expiry date |
| Reagent | string | Reagent name |
| SpcTypeID | int | Specimen type ID |
| Level | int | Level |
| Value | decimal | Value |
| Unit | string | Unit |
| InstrumentAlias | string | Instrument alias |
| CreateDate | datetime | UTC+0 |
### calparinst
| Column | Type | Description |
|--------|------|-------------|
| CalParInstID | int | Primary key |
| EquipmentID | int | Foreign key to instrument |
| Calibrator | string | Calibrator name |
| LotNo | string | Lot number |
| ExpiryDate | datetime | Expiry date |
| TestInstID1 | int | Test instrument ID 1 |
| SampleType | string | Sample type |
| Level | int | Level |
| Concentration | decimal | Concentration |
| CalUnit | string | Calibration unit |
| CreateDate | datetime | UTC+0 |
---
## Table 12: Quality Control
### qcmaterial
| Column | Type | Description |
|--------|------|-------------|
| QCMaterialID | int | Primary key |
| MaterialName | string | QC material name |
| Manufacturer | string | Manufacturer |
| LotNumber | string | Lot number |
| ExpiryDate | datetime | Expiry date |
| Level | int | QC level |
| TestID | int | Foreign key to testdef |
| TargetMean | decimal | Target mean |
| TargetSD | decimal | Target SD |
| TargetCV | decimal | Target CV |
| CreateDate | datetime | UTC+0 |
### qcresult
| Column | Type | Description |
|--------|------|-------------|
| QCResultID | int | Primary key |
| InstrumentID | int | Foreign key to instrument |
| TestID | int | Foreign key to testdef |
| QCMaterialID | int | Foreign key to qcmaterial |
| Level | int | QC level |
| QCDate | datetime | QC datetime |
| ResultValue | decimal | QC result value |
| Mean | decimal | Mean |
| SD | decimal | Standard deviation |
| CV | decimal | Coefficient of variation |
| Sigma | decimal | Sigma score |
| ZScore | decimal | Z-score |
| Flag | string | Result flag |
| PersonnelID | int | Personnel performing QC |
| Status | string | QC status |
| CreateDate | datetime | UTC+0 |
### qcstatistic
| Column | Type | Description |
|--------|------|-------------|
| StatisticID | int | Primary key |
| InstrumentID | int | Foreign key to instrument |
| TestID | int | Foreign key to testdef |
| QCMaterialID | int | Foreign key to qcmaterial |
| Level | int | QC level |
| StatisticDate | datetime | Statistic date |
| Mean | decimal | Calculated mean |
| SD | decimal | Calculated SD |
| CV | decimal | Calculated CV |
| SampleSize | int | Sample size |
| CreateDate | datetime | UTC+0 |
---
## Table 13: Test Results
### patres
| Column | Type | Description |
|--------|------|-------------|
| ResultID | int | Primary key |
| SID | string | Foreign key to specimen |
| TestID | int | Foreign key to testdef |
| OrderID | string | Foreign key to testorder |
| ResultValue | string | Result value |
| ResultNumeric | decimal | Numeric result |
| ResultText | string | Text result |
| ResultUnit | string | Result unit |
| ResultStatus | string | Result status |
| PersonnelID | int | Personnel entering result |
| VerificationDate | datetime | Verification datetime |
| VerificationPersonnel | int | Verifying personnel |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### patrestech
| Column | Type | Description |
|--------|------|-------------|
| TechResultID | int | Primary key |
| ResultID | int | Foreign key to patres |
| InstrumentID | int | Foreign key to instrument |
| RawResult | string | Raw instrument result |
| ResultDate | datetime | Result datetime |
| RerunCount | int | Rerun count |
| Dilution | decimal | Dilution factor |
| CreateDate | datetime | UTC+0 |
### patresflag
| Column | Type | Description |
|--------|------|-------------|
| FlagID | int | Primary key |
| ResultID | int | Foreign key to patres |
| FlagType | string | Flag type (H, L, A, etc.) |
| FlagDescription | string | Flag description |
| CreateDate | datetime | UTC+0 |
### resultdistribution
| Column | Type | Description |
|--------|------|-------------|
| DistributionID | int | Primary key |
| ResultID | int | Foreign key to patres |
| RecipientType | string | Recipient type |
| RecipientID | int | Recipient ID |
| DistributionDate | datetime | Distribution datetime |
| DistributionMethod | string | Distribution method |
| Status | string | Distribution status |
| CreateDate | datetime | UTC+0 |
---
## Table 14: Value Set
### valueset
| Column | Type | Description |
|--------|------|-------------|
| ValueSetID | int | Primary key |
| ValueSetName | string | Value set name |
| ValueSetCode | string | Value set code |
| Description | string | Description |
| CodingSystem | string | Coding system |
| CreateDate | datetime | UTC+0 |
### valuesetmember
| Column | Type | Description |
|--------|------|-------------|
| MemberID | int | Primary key |
| ValueSetID | int | Foreign key to valueset |
| MemberCode | string | Member code |
| MemberValue | string | Member value |
| DisplayOrder | int | Display order |
| Active | boolean | Is active |
| CreateDate | datetime | UTC+0 |
---
## Table 15: Reagent & Inventory
### reagent
| Column | Type | Description |
|--------|------|-------------|
| ReagentID | int | Primary key |
| ReagentName | string | Reagent name |
| Manufacturer | string | Manufacturer |
| CatalogNumber | string | Catalog number |
| LotNumber | string | Lot number |
| ExpiryDate | datetime | Expiry date |
| TestID | int | Foreign key to testdef |
| InstrumentID | int | Foreign key to instrument |
| CreateDate | datetime | UTC+0 |
### reagentusage
| Column | Type | Description |
|--------|------|-------------|
| UsageID | int | Primary key |
| ReagentID | int | Foreign key to reagent |
| TestID | int | Foreign key to testdef |
| UsageDate | datetime | Usage datetime |
| QuantityUsed | decimal | Quantity used |
| PersonnelID | int | Personnel using reagent |
| OrderID | string | Related order ID |
| SID | string | Related specimen ID |
| CreateDate | datetime | UTC+0 |
### productcatalog
| Column | Type | Description |
|--------|------|-------------|
| ProductID | int | Primary key |
| ProductName | string | Product name |
| ProductCode | string | Product code |
| Category | string | Product category |
| Manufacturer | string | Manufacturer |
| SMCRMRef | string | Reference to SMCRM |
| CreateDate | datetime | UTC+0 |
### product
| Column | Type | Description |
|--------|------|-------------|
| ProductID | int | Primary key |
| CatalogID | int | Foreign key to productcatalog |
| SiteID | int | Foreign key to site |
| LotNumber | string | Lot number |
| ExpiryDate | datetime | Expiry date |
| Quantity | int | Quantity on hand |
| ReorderLevel | int | Reorder level |
| LocationID | int | Storage location |
| CreateDate | datetime | UTC+0 |
### inventorytransaction
| Column | Type | Description |
|--------|------|-------------|
| TransactionID | int | Primary key |
| ProductID | int | Foreign key to product |
| TransactionType | string | Transaction type (receipt, use, adjust) |
| Quantity | int | Transaction quantity |
| TransactionDate | datetime | Transaction datetime |
| PersonnelID | int | Personnel |
| ReferenceID | string | Reference ID |
| Notes | string | Transaction notes |
| CreateDate | datetime | UTC+0 |
---
## Table 16: Equipment Management
### equipment
| Column | Type | Description |
|--------|------|-------------|
| EquipmentID | int | Primary key |
| EquipmentName | string | Equipment name |
| EquipmentType | string | Equipment type (IVD, non-IVD) |
| Manufacturer | string | Manufacturer |
| Model | string | Model number |
| SerialNumber | string | Serial number |
| SiteID | int | Foreign key to site |
| LocationID | int | Foreign key to location |
| Status | string | Equipment status |
| InstallDate | datetime | Installation date |
| DecommissionDate | datetime | Decommission date |
| CreateDate | datetime | UTC+0 |
### equipmentmaintenance
| Column | Type | Description |
|--------|------|-------------|
| MaintenanceID | int | Primary key |
| EquipmentID | int | Foreign key to equipment |
| MaintenanceType | string | Maintenance type |
| MaintenanceDate | datetime | Maintenance datetime |
| Description | string | Maintenance description |
| PerformedBy | string | Performed by |
| NextMaintenanceDate | datetime | Next maintenance date |
| CreateDate | datetime | UTC+0 |
### equipmentactivity
| Column | Type | Description |
|--------|------|-------------|
| ActivityID | int | Primary key |
| EquipmentID | int | Foreign key to equipment |
| ActivityType | string | Activity type |
| ActivityDate | datetime | Activity datetime |
| ActivityResult | string | Activity result |
| PersonnelID | int | Personnel |
| Notes | string | Activity notes |
| CreateDate | datetime | UTC+0 |
### equipmenttestcount
| Column | Type | Description |
|--------|------|-------------|
| ID | int | Primary key |
| EquipmentID | int | Foreign key to equipment |
| TestDate | datetime | Test date |
| TestType | string | Test type (calibration, QC, patient, other) |
| TestCount | int | Number of tests |
| CreateDate | datetime | UTC+0 |
---
## Table 17: Doctor & Contact
### doctor
| Column | Type | Description |
|--------|------|-------------|
| DoctorID | int | Primary key |
| DoctorName | string | Doctor name |
| DoctorCode | string | Doctor code |
| Specialty | string | Specialty |
| SIP | string | SIP number |
| PracticeLocation | string | Practice location |
| ContactID | int | Foreign key to contact |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### contact
| Column | Type | Description |
|--------|------|-------------|
| ContactID | int | Primary key |
| ContactName | string | Contact name |
| ContactType | string | Contact type (person, organization) |
| Phone | string | Phone |
| Email | string | Email |
| Address | string | Address |
| SMCRMRef | string | Reference to SMCRM |
| CreateDate | datetime | UTC+0 |
### contactdetail
| Column | Type | Description |
|--------|------|-------------|
| DetailID | int | Primary key |
| ContactID | int | Foreign key to contact |
| DetailType | string | Detail type |
| DetailValue | string | Detail value |
| CreateDate | datetime | UTC+0 |
---
## Table 18: Coding System
### codingsystem
| Column | Type | Description |
|--------|------|-------------|
| SystemID | int | Primary key |
| SystemName | string | System name |
| SystemCode | string | System code |
| Description | string | Description |
| URL | string | System URL |
| CreateDate | datetime | UTC+0 |
### codemapping
| Column | Type | Description |
|--------|------|-------------|
| MappingID | int | Primary key |
| SourceSystem | string | Source coding system |
| SourceCode | string | Source code |
| TargetSystem | string | Target coding system |
| TargetCode | string | Target code |
| EntityType | string | Entity type (test, specimen, etc.) |
| CreateDate | datetime | UTC+0 |
---
## Table 19: Audit
### auditlog
| Column | Type | Description |
|--------|------|-------------|
| AuditID | int | Primary key |
| UserID | int | User ID |
| Action | string | Action performed |
| EntityType | string | Entity type |
| EntityID | string | Entity ID |
| OldValue | string | Old value |
| NewValue | string | New value |
| IPAddress | string | IP address |
| Timestamp | datetime | UTC+0 |
| CreateDate | datetime | UTC+0 |
### auditarchive
| Column | Type | Description |
|--------|------|-------------|
| ArchiveID | int | Primary key |
| AuditID | int | Foreign key to auditlog |
| ArchiveDate | datetime | Archive date |
| ArchiveLocation | string | Archive location |
| CreateDate | datetime | UTC+0 |
---
## Table 20: User & Authentication
### user
| Column | Type | Description |
|--------|------|-------------|
| UserID | int | Primary key |
| Username | string | Username |
| PasswordHash | string | Password hash |
| PersonnelID | int | Foreign key to personnel |
| Role | string | User role |
| Status | string | User status |
| LastLogin | datetime | Last login datetime |
| CreateDate | datetime | UTC+0 |
### usersession
| Column | Type | Description |
|--------|------|-------------|
| SessionID | int | Primary key |
| UserID | int | Foreign key to user |
| SessionToken | string | Session token |
| ExpiryDate | datetime | Session expiry |
| IPAddress | string | IP address |
| CreateDate | datetime | UTC+0 |
---
## Table 21: Visualization & Reporting
### reporttemplate
| Column | Type | Description |
|--------|------|-------------|
| TemplateID | int | Primary key |
| TemplateName | string | Template name |
| TemplateType | string | Template type |
| DisciplineID | int | Foreign key to discipline |
| TemplateConfig | json | Template configuration |
| CreateDate | datetime | UTC+0 |
| EndDate | datetime | UTC+0 |
### reportoutput
| Column | Type | Description |
|--------|------|-------------|
| OutputID | int | Primary key |
| TemplateID | int | Foreign key to reporttemplate |
| OrderID | string | Foreign key to testorder |
| OutputFormat | string | Output format |
| OutputData | blob | Output data |
| GeneratedDate | datetime | Generation datetime |
| PersonnelID | int | Generating personnel |
| CreateDate | datetime | UTC+0 |
### visualizationconfig
| Column | Type | Description |
|--------|------|-------------|
| ConfigID | int | Primary key |
| ConfigName | string | Config name |
| VisualizationType | string | Type (Levey-Jennings, etc.) |
| ConfigData | json | Configuration data |
| CreateDate | datetime | UTC+0 |
---
## Table 22: Host System Integration
### hostsystem
| Column | Type | Description |
|--------|------|-------------|
| HostID | int | Primary key |
| HostName | string | Host system name |
| HostType | string | Host type (HIS, EMR, etc.) |
| ConnectionString | string | Database connection string |
| Protocol | string | Communication protocol |
| Status | string | Connection status |
| LastSync | datetime | Last synchronization |
| CreateDate | datetime | UTC+0 |
### hosttestmapping
| Column | Type | Description |
|--------|------|-------------|
| MappingID | int | Primary key |
| HostID | int | Foreign key to hostsystem |
| HostTestCode | string | Host test code |
| LocalTestID | int | Foreign key to testdef |
| CreateDate | datetime | UTC+0 |
### hostsynclog
| Column | Type | Description |
|--------|------|-------------|
| LogID | int | Primary key |
| HostID | int | Foreign key to hostsystem |
| SyncDate | datetime | Sync datetime |
| RecordsProcessed | int | Records processed |
| Errors | int | Error count |
| Status | string | Sync status |
| Details | string | Sync details |
| CreateDate | datetime | UTC+0 |
---
## Entity Relationships Summary
### Primary Relationships
1. **account → site** (one-to-many)
2. **site → location** (one-to-many)
3. **site → personnel** (one-to-many)
4. **site → equipment** (one-to-many)
5. **site → patient** (one-to-many)
6. **department → discipline** (many-to-many via junction table)
7. **workstation → site** (many-to-one)
8. **instrument → workstation** (many-to-one)
9. **instrument → site** (many-to-one)
10. **patient → patientvisit** (one-to-many)
11. **patientvisit → testorder** (one-to-many)
12. **testorder → specimen** (one-to-many)
13. **specimen → specimencollection** (one-to-many)
14. **specimen → patres** (one-to-many)
15. **testdef → patres** (one-to-many)
16. **testdef → calibration** (one-to-many)
17. **testdef → qcresult** (one-to-many)
18. **instrument → calibration** (one-to-many)
19. **instrument → qcresult** (one-to-many)
20. **valueset → valuesetmember** (one-to-many)
### Key Identifiers
- **OrderID**: LLYYMMDDXXXXX (13 characters, special format - remains string)
- **SID**: OrderID + SSS + C (17 characters, special format - remains string)
- **InternalPID**: Auto-increment internal patient identifier (int)
- **SiteID**: System-assigned site code (int)
- **AccountID**: System-assigned account identifier (int)
- **All other IDs**: Auto-increment integers (int)
---
## Notes for Figma Import
### Recommended Plugins
1. **Database Designer** - Direct import from structured format
2. **ERD (Entity Relationship Diagram)** - Visual ERD creation
3. **DrawSQL Import** - Import table definitions
### Import Format
Most Figma ERD plugins accept:
- SQL CREATE TABLE statements
- JSON format with tables and columns
- CSV format (table_name, column_name, data_type, description)
### Relationships to Define
1. Foreign key relationships
2. Cardinality (one-to-many, many-to-many)
3. Identifying vs non-identifying relationships
4. Optional vs mandatory participation
---
*Generated from prj_3c.md documentation*
*For CLQMS Backend - CodeIgniter 4 Application*