Infection Control & Sterilization
v0.1.0Autoclave cassette batch barcode validation, biological/chemical indicator verification, and chairside safety invariants.
Infection Control & Sterilization Governance
The Infection Control & Sterilization bounded context tracks autoclave processing cycles, monitors biological and chemical spore indicators, and enforces chairside sterility verification before any instruments can contact patient mucosal tissues.
Sterilization Cycle Tracking & Cassette Barcodes
Every dental surgical cassette and instrument pouch is labeled with a unique, machine-scannable barcode (AutoclaveBarcode):
use Obelaw\Ium\Dental\ValueObjects\AutoclaveBarcode;
$barcode = AutoclaveBarcode::from('CAS-2026-0941');
+--------------------------------------------------------------+
| AutoclaveCycle |
+--------------------------------------------------------------+
| id: int |
| barcode: string (unique index) |
| autoclave_unit_id: string (e.g. 'AUTOCLAVE-01-STATIM') |
| cycle_number: string |
| sterilized_at: datetime |
| expires_at: datetime (default: +30 days) |
| passed: boolean |
| indicator_verified: boolean (Class 5/6 chemical strip) |
| notes: text |
+--------------------------------------------------------------+
The Chairside Sterility Safety Gate
To eliminate patient cross-contamination and instrument processing errors, Obelawium Dental enforces a strict chairside safety invariant via validateCassette():
flowchart TD
SCAN["Chairside Barcode Scan (AutoclaveBarcode)"] --> LOOKUP["Lookup Cycle in Database"]
LOOKUP --> CHECK_EXISTS{"Cycle Exists?"}
CHECK_EXISTS -->|No| FAIL_MISSING["THROW AutoclaveSterilizationFailedException<br/>(Expired or Missing Barcode)"]
CHECK_EXISTS -->|Yes| CHECK_PASS{"passed and indicator verified?"}
CHECK_PASS -->|No| FAIL_FAILED["THROW AutoclaveSterilizationFailedException<br/>(Cycle Failed or Spore Indicator Unverified)"]
CHECK_PASS -->|Yes| CHECK_EXPIRY{"expires_at is in the past?"}
CHECK_EXPIRY -->|Yes| FAIL_EXP["THROW AutoclaveSterilizationFailedException<br/>(Sterility Window Expired)"]
CHECK_EXPIRY -->|No| SUCCESS["Record Audit Log and<br/>Dispatch AutoclaveValidated"]
use Obelaw\Ium\Dental\Exceptions\AutoclaveSterilizationFailedException;
// If a clinician attempts to deploy an unsterilized or expired cassette:
// throws AutoclaveSterilizationFailedException:
// "Autoclave cassette CAS-2026-0941 failed sterilization cycle or indicator was unverified."
Sterility Expiration Rules
Even when packaged in medical-grade sterilization pouches or sealed metal cassettes with bacterial filters, sterility is time-limited.
- By default, cycles expire 30 days after sterilization (
expires_at). - If a package is torn, wet, or stored past its expiration date, it must be repackaged and re-sterilized before chairside deployment.
Fluent Service Operations
All infection control workflows are handled via ium()->dental()->infectionControl():
1. Logging an Autoclave Sterilization Cycle
When an autoclave batch finishes, central sterilization staff record the cycle and inspect the chemical and biological indicators:
use Obelaw\Ium\Dental\ValueObjects\AutoclaveBarcode;
use DateTimeImmutable;
$cycle = ium()->dental()->infectionControl()->logCycle(
barcode: AutoclaveBarcode::from('CAS-2026-0941'),
completedAt: new DateTimeImmutable('2026-10-14 16:30:00'),
passed: true,
unitId: 'AUTOCLAVE-ROOM-UNIT-2',
indicatorVerified: true, // Class 5 integrator turned dark black
expiresAt: new DateTimeImmutable('2026-11-13 16:30:00'),
notes: 'Standard 134°C wrapped cycle. Geobacillus stearothermophilus negative.'
);
2. Validating Cassette at Chairside
Chairside dental assistants scan the cassette before opening it onto the sterile surgical bracket table:
use Obelaw\Ium\Dental\Data\ValidateAutoclaveCassetteDto;
use Obelaw\Ium\Dental\ValueObjects\AutoclaveBarcode;
$validatedCycle = ium()->dental()->infectionControl()->validateCassette(
ValidateAutoclaveCassetteDto::from([
'barcode' => AutoclaveBarcode::from('CAS-2026-0941'),
'operatory_id' => '1',
'chairside_verified_by' => 'ASST-JONES',
])
);
// Returns verified AutoclaveCycle instance
3. Raising Immediate Infection Control Alerts
If an autoclave unit aborts mid-cycle or a weekly biological spore test returns positive:
use Obelaw\Ium\Dental\Enums\AlertSeverity;
use Obelaw\Ium\Dental\ValueObjects\AutoclaveBarcode;
ium()->dental()->infectionControl()->raiseAlert(
severity: AlertSeverity::CRITICAL,
message: 'Biological spore test positive on Autoclave Unit 2. Quarantine all batches.',
barcode: AutoclaveBarcode::from('CAS-2026-0941')
);
4. Regulatory Sterility Compliance Auditing
Generate regulatory compliance reports (e.g. for Joint Commission, OSHA, or State Dental Board inspections):
use DateTimeImmutable;
$report = ium()->dental()->infectionControl()->compliantSince(
since: new DateTimeImmutable('2026-10-01 00:00:00')
);
// Returns array of total cycles, pass percentage, and quarantine logs
Emitted Domain Events
| Event Class | Trigger | Payload |
|---|---|---|
AutoclaveValidated | Dispatched when a cassette barcode passes chairside validation. | AutoclaveCycle $cycle |