Dental Lab Orders & Prosthetics
v0.1.0External and in-house laboratory tracking, 3D optical scans (STL/PLY), VITA shade matching, and custom prosthetic workflows.
Dental Lab Orders & Prosthetics
The Dental Lab Orders & Prosthetics bounded context coordinates the fabrication, digital modeling, shade matching, and logistics of custom dental restorations. It bridges chairside operatory impressions with external commercial laboratories and in-house CAD/CAM milling units.
Lab Order Aggregate & Lifecycle
Every laboratory work ticket is managed as an independent LabOrder aggregate:
stateDiagram-v2
[*] --> CREATED
CREATED --> IMPRESSION_TAKEN: Physical or 3D STL scan captured
IMPRESSION_TAKEN --> SENT_TO_LAB: Courier dispatched or CAD model sent
SENT_TO_LAB --> IN_FABRICATION: Lab technician milling or layering
IN_FABRICATION --> RECEIVED: Restorative package delivered to clinic
RECEIVED --> DELIVERED: Seated chairside in patient mouth
DELIVERED --> [*]
use Obelaw\Ium\Dental\Enums\LabOrderStatus;
enum LabOrderStatus: string
{
case CREATED = 'created';
case IMPRESSION_TAKEN = 'impression_taken';
case SENT_TO_LAB = 'sent_to_lab';
case IN_FABRICATION = 'in_fabrication';
case RECEIVED = 'received'; // Inspected and stored in clinic lab staging
case DELIVERED = 'delivered'; // Restorative crown seated and cemented
case CANCELLED = 'cancelled';
}
Prosthetic Restoration Types
Obelawium Dental categorizes prosthetics via RestorationType:
use Obelaw\Ium\Dental\Enums\RestorationType;
enum RestorationType: string
{
case CROWN = 'crown'; // Single unit (Zirconia, E.max, PFM, Gold)
case BRIDGE = 'bridge'; // Multi-unit fixed partial denture
case VENEER = 'veneer'; // Anterior esthetic ceramic laminate
case INLAY_ONLAY = 'inlay_onlay'; // Indirect cast or milled ceramic
case IMPLANT_ABUTMENT = 'implant_abutment';// Custom titanium or hybrid Ti-base
case DENTURE_COMPLETE = 'denture_complete';// Complete upper or lower prosthesis
case DENTURE_PARTIAL = 'denture_partial'; // Removable cast metal/acrylic framework
case NIGHTGUARD = 'nightguard'; // Hard/soft occlusal guard for bruxism
case ALIGNER = 'aligner'; // Clear orthodontic movement tray
}
Shade Matching: The ShadeMatch Value Object
Esthetic indirect restorations demand precise shade communication between the dentist and dental ceramist:
- Body / Main Shade: VITA Classical (e.g.,
A2,B1) or VITA 3D-Master (2M2,3M1). - Bleach Shades: For cosmetic smile makeovers (
OM1,OM2,OM3). - Preparation / Stump Shade (ND): The underlying prepared tooth core (e.g.,
ND2,ND4), critical for translucent lithium disilicate (IPS e.max) crowns. - Incisal Translucency: High, medium, low halo effect.
- Characterization: Mamelon anatomy, white hypocalcification spots, cervical gingival warm tones.
use Obelaw\Ium\Dental\ValueObjects\ShadeMatch;
$shade = new ShadeMatch(
shadeGuide: 'VITA Classical',
bodyShade: 'A2',
cervicalShade: 'A3',
incisalShade: 'Enamel Translucent Medium',
stumpShade: 'ND2',
notes: 'Warm cervical third with subtle incisal halo and moderate mamelon anatomy.'
);
Digital Impressions & 3D Scans
Rather than traditional polyvinyl siloxane (PVS) physical trays, modern operatories capture 3D intraoral scans. Obelawium Dental attaches raw digital impression files directly to the lab ticket:
file_path: Path to stereolithography (.stl) or color polygonal mesh (.ply) files.lab_identifier: External laboratory account and routing number.due_date: Promised return date, used by the scheduling engine to prevent booking crown insertion visits before the case arrives.
Fluent Service Operations
All laboratory workflows are invoked through ium()->dental()->labOrders():
1. Creating a Lab Order
use Obelaw\Ium\Dental\Data\CreateLabOrderDto;
use Obelaw\Ium\Dental\ValueObjects\ToothNumber;
use Obelaw\Ium\Dental\Enums\RestorationType;
use DateTimeImmutable;
$order = ium()->dental()->labOrders()->createOrder(CreateLabOrderDto::from([
'patient_id' => $patient->id,
'procedure_id' => $plannedProcedure->id,
'lab_name' => 'Apex Dental Ceramics Lab',
'restoration_type' => RestorationType::CROWN,
'tooth_number' => ToothNumber::fromUniversal(8), // Upper Right Central Incisor
'material' => 'Layered Zirconia (Katana UTML)',
'shade' => 'A1 Body / Translucent Halo',
'due_date' => new DateTimeImmutable('2026-10-24 12:00:00'),
'scan_file_path' => 'scans/patients/482/tooth-8-prep.stl',
'notes' => 'Please match surface micro-texture of adjacent natural tooth 9.',
'actor_id' => 'DR-MARTINEZ',
]));
2. Submitting Case to the Laboratory
$submitted = ium()->dental()->labOrders()->submit($order->id);
echo $submitted->status->value; // 'sent_to_lab'
3. Receiving and Checking In Restorations
When the courier delivers the finished crown to the clinic, the assistant logs receipt and inspects margins:
$received = ium()->dental()->labOrders()->receive($order->id);
echo $received->status->value; // 'received'
4. Chairside Cementation & Delivery
Once seated and permanently cemented in the patient’s mouth:
$completed = ium()->dental()->labOrders()->complete($order->id);
echo $completed->status->value; // 'delivered'