tag = 'DTM' Eancom.register_segment(tag: tag, klass: Eancom::Edifact::DTM) structure = Eancom::Edifact::Structure.new(tag: tag) composite = Eancom::Edifact::Composite.new() data = Eancom::Edifact::Data.new( type: String, length: 3, description: "DATE/TIME/PERIOD", required: true ) composite.add(:tag, data) structure << composite composite = Eancom::Edifact::Composite.new() type_dictionary = { '1' => { description: 'Service completion date/time, actual', identifier: 'service_completion_date_time_actual' }, '2' => { description: 'Delivery date/time, requested', identifier: 'delivery_date_time' }, '3' => { description: 'Invoice date/time, requested', identifier: 'invoice_date_time' }, '7' => { description: 'Effectiv date/time', identifier: 'effectiv_date_time' }, '11' => { description: 'Despatch date and/or time', identifier: 'despatch_date_and_or_time' }, '12' => { description: 'Terms discount due date/time', identifier: 'terms_discount_due_date_time' }, '13' => { description: 'Terms net due date', identifier: 'terms_net_due_date' }, '17' => { description: 'Delivery date/time, estimated', identifier: 'delivery_date_time_estimated' }, '35' => { description: 'Delivery date and/or time', identifier: 'delivery_date_and_or_time' }, '36' => { description: 'Expiry Date', identifier: 'expiry_date' }, '44' => { description: 'Availability', identifier: 'availability' }, '50' => { description: 'Goods receipt date/time', identifier: 'goods_receipt_date_time' }, '63' => { description: 'Delivery date/time, latest', identifier: 'delivery_date_time_latest' }, '90' => { description: 'Report start date', identifier: 'report_start_date' }, '91' => { description: 'Report end date', identifier: 'report_end_date' }, '64' => { description: 'Delivery date/time, earliest', identifier: 'delivery_date_time_earliest' }, '100' => { description: 'Product ageing period before delivery', identifier: 'product_ageing_period_before_delivery' }, '110' => { description: 'ship date/time', identifier: 'ship_date_time' }, '132' => { description: 'Arrival date/time, estimated', identifier: 'arrival_date_time_estimated' }, '133' => { description: 'Departure date/time, estimated', identifier: 'departure_date_time_estimated' }, '134' => { description: 'Rate of exchange date/time', identifier: 'rate_of_exchange_date_time' }, '137' => { description: 'Document/message date/time', identifier: 'document_message_date_time' }, '140' => { description: 'Payment due date', identifier: 'payment_due_date' }, '157' => { description: 'Validity start date', identifier: 'valitity_start_date' }, '171' => { description: 'Reference date/time', identifier: 'reference_date_time' }, '186' => { description: 'Departure date/time, actual', identifier: 'departure_date_time_actual' }, '194' => { description: 'Start date/time', identifier: 'start_date_time' }, '200' => { description: 'Pick-up/collection date/time of cargo', identifier: 'pick_up_collection_date_time_of_cargo' }, '206' => { description: 'End date/time', identifier: 'end_date_time' }, '209' => { description: 'Value date', identifier: 'value_date' }, '235' => { description: 'Collection date/time', identifier: 'collection_date_time' }, '263' => { description: 'Invoicing period', identifier: 'invoicing_period' }, '267' => { description: 'Rate/price date/time', identifier: 'rate_price_date_time' }, '273' => { description: 'Validity period', identifier: 'validity_period' }, '325' => { description: 'Tax period', identifier: 'tax_period' }, '326' => { description: 'Charge period', identifier: 'charge_period' }, '356' => { description: 'Sales date, and or time, and or period', identifier: 'sales_date_and_or_time_and_or_period' }, '366' => { description: 'Inventory report date', identifier: 'inventory_report_date' }, '454' => { description: 'Accounting value date', identifier: 'accounting_value_date' }, '44E' => { description: 'Connection date/time', identifier: 'connection_date_time' }, } data = Eancom::Edifact::Data.new( type: String, length: 1..3, dictionary: type_dictionary, description: 'Date or time or period function code qualifier', required: true ) composite.add(:type, data) data = Eancom::Edifact::Data.new( type: String, length: 1..35, description: 'Date or time or period value', required: true ) composite.add(:date_time, data) format_dictionary = { '102' => { description: 'Date', value: 'CCYYMMDD', identifier: 'date' }, '203' => { description: 'Date and Time', value: 'CCYYMMDDHHMM', identifier: 'date_time' }, '204' => { description: 'Date and Time', value: 'CCYYMMDDHHMMSS', identifier: 'date_time_second' }, '718' => { description: 'Period', value: 'CCYYMMDD-CCZZMMDD', identifier: 'period' }, '802' => { description: 'Month', identifier: 'month' }, '803' => { description: 'Week', identifier: 'week' }, '804' => { description: 'Day', identifier: 'day' } } data = Eancom::Edifact::Data.new( type: String, length: 1..35, dictionary: format_dictionary, description: 'Date or time or period value', required: true ) composite.add(:format, data) structure << composite Eancom.register_structure(tag: 'DTM', structure: structure)