Schedule a demo
Segment

Specimen container detail

Describes the physical container holding a specimen, including container identifier, container type, carrier and tray position identifiers, container status, volume, and additives. It is used extensively in laboratory automation and instrument interfacing, enabling communication between LIS, laboratory automation systems, and analyzers about where specimens are physically located. SAC often accompanies the SPM segment in result messages for specimen-container-oriented reporting.

48fields
0required
v2.9HL7 version
sac.py
from zato.hl7v2 import SAC, EI

sac = SAC()
sac.container_identifier = EI(entity_identifier='CTR01')

Build SAC segments in Python

How to construct and work with real-world SAC segments.

1

Wellness SST tube

Serum separator tube with volume and gel barrier metadata

from zato.hl7v2.v2_9 import SAC
from zato.hl7v2.v2_9 import CWE, EI

sac = SAC()
sac.external_accession_identifier = EI(
    entity_identifier='EXT88',
    universal_id_type='GV',
)
sac.accession_identifier = EI(
    entity_identifier='ACC2401',
    universal_id_type='LAB',
)
sac.container_identifier = EI(
    entity_identifier='CTR-SST01',
    universal_id_type='LAB',
)
sac.primary_parent_container_identifier = EI(
    entity_identifier='PARENT00',
    universal_id_type='LAB',
)
sac.equipment_container_identifier = EI(
    entity_identifier='EQ01',
    universal_id_type='LAB',
)
sac.registration_date_time = '20240415103000'
sac.container_status = CWE(
    identifier='USE',
    text='In use',
)
sac.container_volume = '8.5'
sac.available_specimen_volume = '8.5'
sac.initial_specimen_volume = '8.5'
sac.volume_units = CWE(
    identifier='mL',
    name_of_coding_system='UCUM',
)
sac.separator_type = CWE(
    identifier='GEL',
    text='Gel barrier',
)
sac.cap_type = CWE(
    identifier='SKR',
    text='Skirt cap',
)
2

Nutrition kit rack position

Carrier, tray, and freezer location for screening reagents

from zato.hl7v2.v2_9 import SAC
from zato.hl7v2.v2_9 import CWE, EI

sac = SAC()
sac.registration_date_time = '20240415120000'
sac.carrier_identifier = EI(
    entity_identifier='CART01',
    universal_id_type='LAB',
)
sac.position_in_carrier = '1^1^1^1^1'
sac.tray_type_sac = CWE(
    identifier='TRAY-A',
    name_of_coding_system='LAB',
)
sac.tray_identifier = EI(
    entity_identifier='TR01',
    universal_id_type='LAB',
)
sac.position_in_tray = '2^2^2^2^2'
sac.location = CWE(
    identifier='FRZ',
    text='Ultra freezer'
)
3

Fitness marker container form

Length, width, and material for a benchtop collection cup

from zato.hl7v2.v2_9 import SAC
from zato.hl7v2.v2_9 import CQ, CWE

sac = SAC()
sac.registration_date_time = '20240415121500'
sac.container_length = CQ(
    quantity='12',
    units=CWE(
        identifier='mm',
        name_of_coding_system='UCUM',
    ),
)
sac.container_width = CQ(
    quantity='8',
    units=CWE(
        identifier='mm',
        name_of_coding_system='UCUM',
    ),
)
sac.container_form = CWE(
    identifier='CUP',
    text='Cup',
)
sac.container_material = CWE(
    identifier='PP',
    text='Polypropylene',
)
sac.container_common_name = CWE(
    identifier='RUN',
    text='Runner cup',
)

Learn by building

Step-by-step guides for working with HL7 v2 in Zato.

Frequently asked questions

HL7v2 reserves position 6 in SAC for historical compatibility. Serializers emit an extra delimiter pair so position 7 lines up with registration date/time across versions and vendor profiles.

Use the SAC segment on the parsed HL7 message object:

from zato.hl7v2.v2_9 import SAC, EI

sac = SAC()
sac.container_identifier = EI(entity_identifier='CTR-001',)
sac.container_volume = '5'

Container and accession fields often use EI with an entity id and namespace type:

from zato.hl7v2.v2_9 import SAC, EI

sac = SAC()
sac.container_identifier = EI(
    entity_identifier='CTR-SST01',
    universal_id_type='LAB',
)

Populate initial, available, and total container volume when tracking draw volume for wellness chemistry panels or when aliquoting for nutrition assays. Units should follow the coded volume_units field for consistent unit conversion.

SPM describes the participant specimen; SAC describes the vessel and rack context. Link them in the same message so automation can verify the right tube type, additive, and storage path for each screening order.

Zato connects to any system that speaks HL7v2 over MLLP or FHIR over REST. This includes Epic, Cerner, Meditech, Allscripts, and other EHR platforms.

Yes, Zato has built-in MLLP support for sending and receiving HL7v2 messages. MLLP channels handle the framing protocol automatically.

Zato supports HL7 v2.9, which is backward compatible with earlier versions including v2.3, v2.5, and v2.7. Standard segments and datatypes are available as typed Python classes.

Yes. Zato handles both HL7v2 and FHIR natively, so you can parse v2 messages and build FHIR resources with IG-specific extensions in the same service. Typed Python classes are available for both protocols, including extensions from US Core, UK Core, Da Vinci, and other Implementation Guides.

SAC field reference

Complete list of fields in the SAC segment, HL7 v2.9.

#Python nameDatatypeUsageRepeatableTable
1external_accession_identifierEIOptionalNo-
2accession_identifierEIOptionalNo-
3container_identifierEIOptionalNo-
4primary_parent_container_identifierEIOptionalNo-
5equipment_container_identifierEIOptionalNo-
7registration_date_timeDTMOptionalNo-
8container_statusCWEOptionalNoHL70370
9carrier_typeCWEOptionalNoHL70378
10carrier_identifierEIOptionalNo-
11position_in_carrierNAOptionalNo-
12tray_type_sacCWEOptionalNoHL70379
13tray_identifierEIOptionalNo-
14position_in_trayNAOptionalNo-
15locationCWEOptionalYesHL70774
16container_heightNMOptionalNo-
17container_diameterNMOptionalNo-
18barrier_deltaNMOptionalNo-
19bottom_deltaNMOptionalNo-
20container_height_diameter_delta_unitsCWEOptionalNoHL70775
21container_volumeNMOptionalNo-
22available_specimen_volumeNMOptionalNo-
23initial_specimen_volumeNMOptionalNo-
24volume_unitsCWEOptionalNoHL70777
25separator_typeCWEOptionalNoHL70380
26cap_typeCWEOptionalNoHL70381
27additiveCWEOptionalYesHL70371
28specimen_componentCWEOptionalNoHL70372
29dilution_factorSNOptionalNo-
30treatmentCWEOptionalNoHL70373
31temperatureSNOptionalNo-
32hemolysis_indexNMOptionalNo-
33hemolysis_index_unitsCWEOptionalNoHL70779
34lipemia_indexNMOptionalNo-
35lipemia_index_unitsCWEOptionalNoHL70780
36icterus_indexNMOptionalNo-
37icterus_index_unitsCWEOptionalNoHL70781
38fibrin_indexNMOptionalNo-
39fibrin_index_unitsCWEOptionalNoHL70782
40system_induced_contaminantsCWEOptionalYesHL70374
41drug_interferenceCWEOptionalYesHL70382
42artificial_bloodCWEOptionalNoHL70375
43special_handling_codeCWEOptionalYesHL70376
44other_environmental_factorsCWEOptionalYesHL70377
45container_lengthCQOptionalNo-
46container_widthCQOptionalNo-
47container_formCWEOptionalNoHL70967
48container_materialCWEOptionalNoHL70968
49container_common_nameCWEOptionalNoHL70969

Ready to build integrations?

Get started with Zato and connect your systems in minutes.

Open source In Python