diff --git a/docs/clqms_database.dbml b/docs/clqms_database.dbml new file mode 100644 index 0000000..edd357c --- /dev/null +++ b/docs/clqms_database.dbml @@ -0,0 +1,640 @@ +// 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 +} diff --git a/docs/test-types-reference.md b/docs/test-types-reference.md deleted file mode 100644 index 899acb5..0000000 --- a/docs/test-types-reference.md +++ /dev/null @@ -1,417 +0,0 @@ -# ๐ Test Types & Reference Types Guide - -> **Quick Overview**: This guide helps you understand the different types of tests and how to display them in the frontend. - ---- - -## ๐ฏ What Are Test Types? - -Think of test types as "categories" that determine how a test behaves and what information it needs. - -### Quick Reference Card - -``` -โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโ -โ Type โ Use This For... โ Example โ -โโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโค -โ TEST โ Standard lab tests โ Blood Glucose, CBC โ -โ PARAM โ Components of a test โ WBC count (in CBC) โ -โ CALC โ Formula-based results โ BMI, eGFR โ -โ GROUP โ Panels/batteries โ Lipid Panel, CMP โ -โโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโ -``` - ---- - -## ๐งช Detailed Test Types - -### 1. TEST - Standard Laboratory Test -**Icon**: ๐งซ **Color**: Blue - -Use this for regular tests that have: -- Reference ranges (normal values) -- Units (mg/dL, mmol/L, etc.) -- Collection requirements - -**Example**: Blood Glucose, Hemoglobin, Cholesterol - -**What to Display**: -- Test code and name -- Reference range -- Units -- Collection instructions -- Expected turnaround time - ---- - -### 2. PARAM - Parameter -**Icon**: ๐ **Color**: Light Blue - -Use this for individual components within a larger test. - -**Example**: -- Complete Blood Count (GROUP) contains: - - WBC (PARAM) - - RBC (PARAM) - - Hemoglobin (PARAM) - -**What to Display**: -- Same as TEST, but shown indented under parent -- Often part of a GROUP - ---- - -### 3. CALC - Calculated Test -**Icon**: ๐งฎ **Color**: Purple - -Use this for tests computed from other test results using formulas. - -**Example**: -- BMI (calculated from height & weight) -- eGFR (calculated from creatinine, age, etc.) - -**What to Display**: -- Formula description -- Input parameters (which tests feed into this) -- Result value -- Reference range (if applicable) - -**Special Fields**: -- `FormulaInput` - What values go in? -- `FormulaCode` - How is it calculated? - ---- - -### 4. GROUP - Group Test (Panel/Battery) -**Icon**: ๐ฆ **Color**: Green - -Use this to bundle multiple related tests together. - -**Example**: -- Lipid Panel (GROUP) contains: - - Total Cholesterol (PARAM) - - HDL (PARAM) - - LDL (PARAM) - - Triglycerides (PARAM) - -**What to Display**: -- Group name -- List of member tests -- Individual results for each member - -**Structure**: -``` -๐ฆ Lipid Panel (GROUP) - โโโ Total Cholesterol (PARAM): 180 mg/dL - โโโ HDL (PARAM): 55 mg/dL - โโโ LDL (PARAM): 110 mg/dL - โโโ Triglycerides (PARAM): 150 mg/dL -``` - ---- - -## ๐ Reference Types Explained - -Reference types tell you **how to interpret the results** - what "normal" looks like. - -### Choose Your Reference Type: - -``` - โโโโโโโโโโโโโโโโโโโโโโโโ - โ Reference Type? โ - โโโโโโโโโโโโฌโโโโโโโโโโโโ - โ - โโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโ - โ โ โ - Numbers? Text values? Threshold? - โ โ โ - โโโโโโโโผโโโโโโโ โโโโโโโโผโโโโโโโ โโโโโโโโผโโโโโโโ - โ NMRC โ โ TEXT โ โ THOLD โ - โ (Numeric) โ โ (Text) โ โ (Threshold) โ - โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ - โ โ โ - โโโโโโโโผโโโโโโโ โโโโโโโโผโโโโโโโ โโโโโโโโผโโโโโโโ - โ RANGE โ โ Free โ โ Positive/ โ - โ (Min-Max) โ โ Text โ โ Negative โ - โ OR โ โ OR โ โ OR โ - โ THOLD โ โ VSET โ โ < > = โ - โ (Threshold) โ โ (Dropdown) โ โ cutoff โ - โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ -``` - -### Reference Type Details - -| Type | Visual | Example | -|------|--------|---------| -| **NMRC** - Numeric Range | `70 - 100 mg/dL` | Blood glucose: 70-100 mg/dL | -| **TEXT** - Text Value | `"Normal"` or `"Positive"` | Urinalysis: "Clear", "Cloudy" | -| **THOLD** - Threshold | `> 60` or `< 5.5` | eGFR: > 60 (normal) | -| **VSET** - Value Set | Dropdown options | Organism: [E.coli, Staph, etc.] | - ---- - -## ๐จ Frontend Display Patterns - -### Pattern 1: Test List View - -```javascript -// When showing a list of tests -function renderTestCard(test) { - const typeIcon = getIcon(test.TestType); - const typeColor = getColor(test.TestType); - - return ` -
${test.TestSiteCode}
-