UNPKG

edifact_orders_iso_16033

Version:

parser for EDIFACT ORDERS ISO 16033 Ophthalmic optics and instruments

893 lines (865 loc) 29 kB
const chai = require('chai'); const expect = chai.expect; chai.use(require('chai-things')); const util = require('util'); const Orders16033 = require('../order16033.js'); const compact = require('../edi').compact; describe('test Orders for contacto', function () { it('should be able to interpret UNB segment', () => { let order = new Orders16033(); order.interpret(`UNA:+.? 'UNB+UNOC:1+WS-ESTORE+NOV+20181001:1255+253006++ESTORE'`); expect(order.data.senderIdentification).to.be.eq('WS-ESTORE'); expect(order.data.recipientIdentification).to.be.eq('NOV'); expect(order.data.dateOfPreparation).to.be.eq('2018-10-01 12:55:00'); }); it('should reject segment that do not respect the norm', () => { let order = new Orders16033(); expect(() => order.interpret(`UNA:+.? 'UNB+UNOC:1+ABCDEFGHIJKLMNOPQRUSTVWXYZ_ABCDEFGHIJKLMNOPQRUSTVWXYZ_+NOV+20181001:1255+253006++ESTORE'`)) .to.throw('Could not accept ABCDEFGHIJKLMNOPQRUSTVWXYZ_ABCDEFGHIJKLMNOPQRUSTVWXYZ_'); expect(() => order.interpret(`UNA:+.? 'UNB+UNOC:AAAA+WS-ESTORE+NOV+20181001:1255+253006++ESTORE'`)) .to.throw('Edifact Parser Error: section=Interchange, segment=UNB (segment #2) > Error: Invalid character A (65) at position 18'); expect(() => order.interpret(`UNA:+.? 'UNB+UNOD:1+WS-ESTORE+NOV+20181001:1255+253006++ESTORE'`)) .to.throw('Unexpected value: section=Interchange, segment=UNB (segment #2) > S001 [0]a4 found UNOD but should be UNOC'); expect(() => order.interpret(`UNA:+.? 'UNB+UNOC:1+WS-ESTORE==>Đ<==+NOV+20181001:1255+253006++ESTORE'`)) .to.throw('Invalid character Đ (272) at position 32'); }) it('should be able to escape chars', () => { let order = new Orders16033(); order.interpret(`UNA:+.? 'UNB+UNOC:1+OPTIC D?'OR?+argent?:bronze??+NOV+20181001:1255+253006++ESTORE'`); expect(order.data.senderIdentification).to.be.eq("OPTIC D'OR+argent:bronze?"); expect(order.data.recipientIdentification).to.be.eq('NOV'); expect(order.data.dateOfPreparation).to.be.eq('2018-10-01 12:55:00'); }); it('should interpret NAD segments', () => { const order = new Orders16033(); order.interpret(compact(` UNA:+.? ' UNB+UNOC:1+WS-ESTORE+NOV+20181001:1255+253006++ESTORE' UNH+140+ORDERS:D:96B:UN:INFO32' NAD+BY+26336:100+++WIN OPTIC:31 RUE LOUISE MICHEL+LEVALLOIS-PERRET++92300+FR' `)); const by = order.data.messages[0].party.BY; expect(by.partyId).eq('26336'); expect(by.codeListQualifier).eq('100'); expect(by.street).deep.eq(['WIN OPTIC', '31 RUE LOUISE MICHEL']); //TODO vérifier avec Jérôme que c'est bien juste d'avoir le nom du magasin dans street expect(by.countryNameCode).eq('FR'); }) it('should be able to read order lines', () => { let edifact = compact(` UNA:+.? ' UNB+UNOC:1+WS-ESTORE+NOV+20181001:1255+253006++ESTORE' UNH+140+ORDERS:D:96B:UN:INFO32' BGM+105+1231614' LIN+1++1231614+0' PIA+1+0+0+0' LIN+1' PIA+5+MEL013:SA' IMD+F+8+:::MENICON PREMIO TORIC' QTY+21:1:CU' CCI+++ABO:::ABG' MEA+AAE++MM:14.00' CCI+++ABO:::RAY' MEA+AAE++MM:08.60' CCI+++ABO:::SPH' MEA+AAE++DP:-0.75' CCI+++ABO:::CYL' MEA+AAE++DP:-0.75' CCI+++ABO:::CLX' MEA+AAE++°:090' RFF+FI:3' RFF+AEG:1231614' NAD+UD+++HERRERO'`); let order = new Orders16033(); order.interpret(edifact); const m = order.data.messages[0]; expect(m.documentNumber).to.eq('1231614'); expect(m.lines.length).to.eq(1); expect(m.lines[0]).to.have.property('ABG', '14.00'); expect(m.lines[0]).to.have.property('RAY', '08.60'); expect(m.lines[0]).to.have.property('SPH', '-0.75'); expect(m.lines[0]).to.have.property('CYL', '-0.75'); expect(m.lines[0]).to.have.property('CLX', '090'); expect(m.lines[0]).to.have.property('quantity', '1'); expect(m.lines[0]).to.have.property('ItemNumberType', 'SA'); expect(m.lines[0]).to.have.property('ItemNumber', 'MEL013'); expect(m.lines[0]).to.have.property('itemDescription1', 'MENICON PREMIO TORIC'); expect(m.lines[0]).to.have.property('itemDescription2', undefined); expect(m.lines[0]).to.have.property('opticianReferenceNumber', '1231614'); }); it('should read an example where the products must be delivered directly to the end user', () => { const edifact = compact(` UNA:+.? ' UNB+UNOC:1+WS-ESTORE+NOV+20181001:1255+253006++ESTORE' UNH+137+ORDERS:D:96B:UN:INFO32' BGM+105+1231614' DTM+4:201810011221:203' NAD+BY+26336:100++WIN OPTIC+31 RUE LOUISE MICHEL+LEVALLOIS-PERRET++92300+FR' CTA+OC+:LEVY MICHAEL' COM+0147574678:TE' NAD+SU+NOV:100' NAD+ST+00000:174++HERRERO UMBERTO+2024 AVENUE DE SOISSONS+CHATEAU-THIERRY++02400+FR' CTA+GR' COM+0660066099:TE' NAD+AA+26336:100' LIN+2++1231614+0' PIA+1+0+0+0' LIN+1' PIA+5+MEL013:SA' IMD+F+8+:::MENICON PREMIO TORIC' QTY+21:1:CU' CCI+++ABO:::ABG' MEA+AAE++MM:14.00' CCI+++ABO:::RAY' MEA+AAE++MM:08.60' CCI+++ABO:::SPH' MEA+AAE++DP:-0.75' CCI+++ABO:::CYL' MEA+AAE++DP:-0.75' CCI+++ABO:::CLX' MEA+AAE++°:090' RFF+FI:3' RFF+AEG:1231614' NAD+UD+++HERRERO' LIN+2' PIA+5+MEL013:SA' IMD+F+8+:::MENICON PREMIO TORIC' QTY+21:1:CU' CCI+++ABO:::ABG' MEA+AAE++MM:14.00' CCI+++ABO:::RAY' MEA+AAE++MM:08.60' CCI+++ABO:::SPH' MEA+AAE++DP:-0.75' CCI+++ABO:::CYL' MEA+AAE++DP:-0.75' CCI+++ABO:::CLX' MEA+AAE++°:090' RFF+FI:3' RFF+AEG:1231614' NAD+UD+++HERRERO' UNS+S' UNT+49+137' UNZ+1+253006'`); let order = new Orders16033(); order.interpret(edifact); const m = order.data.messages[0]; expect(m.documentNumber).to.eq('1231614'); expect(m.lines.length).to.eq(2); expect(m.lines[0]).to.have.property('ABG', '14.00'); expect(m.lines[0]).to.have.property('RAY', '08.60'); expect(m.lines[0]).to.have.property('SPH', '-0.75'); expect(m.lines[0]).to.have.property('CYL', '-0.75'); expect(m.lines[0]).to.have.property('CLX', '090'); expect(m.lines[0]).to.have.property('quantity', '1'); expect(m.lines[0]).to.have.property('itemDescription1', 'MENICON PREMIO TORIC'); expect(m.lines[0]).to.have.property('itemDescription2', undefined); expect(m.lines[0]).to.have.property('opticianReferenceNumber', '1231614'); expect(m.lines[0].party.UD.partyName).to.deep.eq(['HERRERO']); expect(m.party.ST).to.deep.eq({ cityName: "CHATEAU-THIERRY", codeListQualifier: "174", countryNameCode: "FR", countrySubEntityDetails: [""], nameAndAddress: [""], partyId: "00000", partyName: ["HERRERO UMBERTO"], postalIdentificationCode: "02400", street: ["2024 AVENUE DE SOISSONS"], CTA: { GR: { COM: { TE: "0660066099" } } } }); expect(m.party.BY).to.deep.eq({ partyId: '26336', codeListQualifier: '100', nameAndAddress: [''], partyName: ['WIN OPTIC'], street: ['31 RUE LOUISE MICHEL'], cityName: 'LEVALLOIS-PERRET', countrySubEntityDetails: [''], postalIdentificationCode: '92300', countryNameCode: 'FR', CTA: { OC: { COM: { TE: '0147574678' }, departmentOrEmployee: 'LEVY MICHAEL' } } }) }); it('should be able to read an example where the delivery is done to the shop and not directly to the end user', () => { const edifact = compact(` UNA:+.? ' UNB+UNOC:1+WS-ESTORE+NOV+20200812:1211+253009++ESTORE' UNH+140+ORDERS:D:96B:UN:INFO32' BGM+105+1231615' DTM+4:202008121211:203' NAD+BY+26336:100+++WIN OPTIC:31 RUE LOUISE MICHEL+LEVALLOIS-PERRET++92300+FR' CTA+OC+LEVY MICHAEL' COM+0147574678:TE' NAD+SU+NOV:100' NAD+ST+26336:100' NAD+AA+26336:100' LIN+2++1231615+0' PIA+1+0+0+0' LIN+1' PIA+5+MEL013:SA' IMD+F+8+:::MENICON PREMIO TORIC' QTY+21:1:CU' CCI+++ABO:::ABG' MEA+AAE++MM:14.00' CCI+++ABO:::RAY' MEA+AAE++MM:08.60' CCI+++ABO:::SPH' MEA+AAE++DP:-0.75' CCI+++ABO:::CYL' MEA+AAE++DP:-0.75' CCI+++ABO:::CLX' MEA+AAE++°:090' RFF+FI:3' RFF+AEG:1231615' NAD+UD+++HERRERO' LIN+2' PIA+5+MEL013:SA' IMD+F+8+:::MENICON PREMIO TORIC' QTY+21:1:CU' CCI+++ABO:::ABG' MEA+AAE++MM:14.00' CCI+++ABO:::RAY' MEA+AAE++MM:08.60' CCI+++ABO:::SPH' MEA+AAE++DP:-0.75' CCI+++ABO:::CYL' MEA+AAE++DP:-0.75' CCI+++ABO:::CLX' MEA+AAE++°:090' RFF+FI:3' RFF+AEG:1231615' NAD+UD+++HERRERO' UNS+S' UNT+47+140' UNZ+1+253009' `) let order = new Orders16033(); order.interpret(edifact); const m = order.data.messages[0]; expect(m.documentNumber).to.eq('1231615'); expect(m.lines.length).to.eq(2); expect(m.lines[0]).to.have.property('ABG', '14.00'); expect(m.lines[0]).to.have.property('RAY', '08.60'); expect(m.lines[0]).to.have.property('SPH', '-0.75'); expect(m.lines[0]).to.have.property('CYL', '-0.75'); expect(m.lines[0]).to.have.property('CLX', '090'); expect(m.lines[0]).to.have.property('quantity', '1'); expect(m.lines[0]).to.have.property('itemDescription1', 'MENICON PREMIO TORIC'); expect(m.lines[0]).to.have.property('itemDescription2', undefined); expect(m.lines[0]).to.have.property('opticianReferenceNumber', '1231615'); expect(m.lines[0].party.UD.partyName).to.deep.eq(['HERRERO']); }) it('should handle properly multiple COM segment by attaching communication contact to the current CTA of the current NAD', () => { const edifact = compact(` UNA:+.? ' UNB+UNOC:1+WS-ESTORE+NOV+20181001:1255+253006++ESTORE' UNH+137+ORDERS:D:96B:UN:INFO32' BGM+105+1231614' DTM+4:201810011221:203' NAD+BY+26336:100++WIN OPTIC+31 RUE LOUISE MICHEL+LEVALLOIS-PERRET++92300+FR' CTA+OC+LEVY MICHAEL' COM+0147574678:TE' NAD+SU+NOV:100' NAD+ST+00000:174++HERRERO UMBERTO+2024 AVENUE DE SOISSONS:+CHATEAU-THIERRY++02400+FR' CTA+GR' COM+0660066099:TE' COM+umberto.herrero@gmail.com:EM' NAD+AA+26336:100' LIN+2++1231614+0' PIA+1+0+0+0' LIN+1' PIA+5+MEL013:SA' IMD+F+8+:::MENICON PREMIO TORIC' QTY+21:1:CU' CCI+++ABO:::ABG' MEA+AAE++MM:14.00' CCI+++ABO:::RAY' MEA+AAE++MM:08.60' CCI+++ABO:::SPH' MEA+AAE++DP:-0.75' CCI+++ABO:::CYL' MEA+AAE++DP:-0.75' CCI+++ABO:::CLX' MEA+AAE++°:090' RFF+FI:3' RFF+AEG:1231614' NAD+UD+++HERRERO' LIN+2' PIA+5+MEL013:SA' IMD+F+8+:::MENICON PREMIO TORIC' QTY+21:1:CU' CCI+++ABO:::ABG' MEA+AAE++MM:14.00' CCI+++ABO:::RAY' MEA+AAE++MM:08.60' CCI+++ABO:::SPH' MEA+AAE++DP:-0.75' CCI+++ABO:::CYL' MEA+AAE++DP:-0.75' CCI+++ABO:::CLX' MEA+AAE++°:090' RFF+FI:3' RFF+AEG:1231614' NAD+UD+++HERRERO' UNS+S' UNT+50+137' UNZ+1+253006' `) let order = new Orders16033(); order.interpret(edifact); //console.dir(order.data,{depth:null}) expect(order.data.messages[0].party.BY.CTA.OC.COM.TE).eq('0147574678'); expect(order.data.messages[0].party.ST.CTA.GR.COM.TE).eq('0660066099'); expect(order.data.messages[0].party.ST.CTA.GR.COM.EM).eq('umberto.herrero@gmail.com'); expect(order.data).to.deep.eq( { messages: [ { lines: [ { ItemNumber: 'MEL013', ItemNumberType: "SA", itemDescription1: 'MENICON PREMIO TORIC', itemDescription2: undefined, lineItemNumber: 1, quantity: '1', ABG: '14.00', RAY: '08.60', SPH: '-0.75', CYL: '-0.75', CLX: '090', typeOfLine: '3', opticianReferenceNumber: '1231614', party: { UD: { nameAndAddress: [''], partyName: ['HERRERO'] } } }, { ItemNumber: 'MEL013', ItemNumberType: "SA", itemDescription1: 'MENICON PREMIO TORIC', itemDescription2: undefined, lineItemNumber: 2, quantity: '1', ABG: '14.00', RAY: '08.60', SPH: '-0.75', CYL: '-0.75', CLX: '090', typeOfLine: '3', opticianReferenceNumber: '1231614', party: { UD: { nameAndAddress: [''], partyName: ['HERRERO'] } } } ], party: { BY: { partyId: '26336', codeListQualifier: '100', nameAndAddress: [''], partyName: ['WIN OPTIC'], street: ['31 RUE LOUISE MICHEL'], cityName: 'LEVALLOIS-PERRET', countrySubEntityDetails: [''], postalIdentificationCode: '92300', countryNameCode: 'FR', CTA: { OC: { departmentOrEmployeeIdentification: 'LEVY MICHAEL', COM: { TE: '0147574678' } } } }, SU: { partyId: 'NOV', codeListQualifier: '100' }, ST: { partyId: '00000', codeListQualifier: '174', nameAndAddress: [''], partyName: ['HERRERO UMBERTO'], street: ['2024 AVENUE DE SOISSONS', ''], cityName: 'CHATEAU-THIERRY', countrySubEntityDetails: [''], postalIdentificationCode: '02400', countryNameCode: 'FR', CTA: { GR: { COM: { TE: '0660066099', EM: 'umberto.herrero@gmail.com' } } } }, AA: { partyId: '26336', codeListQualifier: '100' } }, messageReferenceNumber: '137', documentNumber: '1231614', dateOfOrder: '2018-10-01 12:21:00' } ], senderIdentification: 'WS-ESTORE', recipientIdentification: 'NOV', dateOfPreparation: '2018-10-01 12:55:00', interchangeReference: '253006', applicationReference: 'ESTORE', testIndicator: '0' } ) }) it('should handle properly multiple ORDERS messages', () => { const edifact = compact(` UNA:+.? ' UNB+UNOC:1+WS-ESTORE+NOV+20181001:1255+253006++ESTORE' UNH+137+ORDERS:D:96B:UN:INFO32' BGM+105+1231614' DTM+4:201810011221:203' NAD+BY+26336:100++WIN OPTIC+31 RUE LOUISE MICHEL+LEVALLOIS-PERRET++92300+FR' CTA+OC+LEVY MICHAEL' COM+0147574678:TE' NAD+SU+NOV:100' NAD+ST+00000:174++HERRERO UMBERTO+2024 AVENUE DE SOISSONS:+CHATEAU-THIERRY++02400+FR' CTA+GR' COM+0660066099:TE' COM+umberto.herrero@gmail.com:EM' NAD+AA+26336:100' LIN+2++1231614+0' PIA+1+0+0+0' LIN+1' PIA+5+MEL013:SA' IMD+F+8+:::MENICON PREMIO TORIC' QTY+21:1:CU' CCI+++ABO:::ABG' MEA+AAE++MM:14.00' CCI+++ABO:::RAY' MEA+AAE++MM:08.60' CCI+++ABO:::SPH' MEA+AAE++DP:-0.75' CCI+++ABO:::CYL' MEA+AAE++DP:-0.75' CCI+++ABO:::CLX' MEA+AAE++°:090' RFF+FI:3' RFF+AEG:1231614' NAD+UD+++HERRERO' LIN+2' PIA+5+MEL013:SA' IMD+F+8+:::MENICON PREMIO TORIC' QTY+21:1:CU' CCI+++ABO:::ABG' MEA+AAE++MM:14.00' CCI+++ABO:::RAY' MEA+AAE++MM:08.60' CCI+++ABO:::SPH' MEA+AAE++DP:-0.75' CCI+++ABO:::CYL' MEA+AAE++DP:-0.75' CCI+++ABO:::CLX' MEA+AAE++°:090' RFF+FI:3' RFF+AEG:1231614' NAD+UD+++HERRERO' UNS+S' UNT+50+137' UNH+138+ORDERS:D:96B:UN:INFO32' BGM+105+1231615' DTM+4:201810011221:203' NAD+BY+26336:100++WIN OPTIC+31 RUE LOUISE MICHEL+LEVALLOIS-PERRET++92300+FR' CTA+OC+LEVY MICHAEL' COM+0147574678:TE' NAD+SU+NOV:100' NAD+ST+00000:174++HERRERO UMBERTO+2024 AVENUE DE SOISSONS:+CHATEAU-THIERRY++02400+FR' CTA+GR' COM+0660066099:TE' COM+umberto.herrero@gmail.com:EM' NAD+AA+26336:100' LIN+2++1231615+0' PIA+1+0+0+0' LIN+1' PIA+5+MEL013:SA' IMD+F+8+:::MENICON PREMIO TORIC' QTY+21:1:CU' CCI+++ABO:::ABG' MEA+AAE++MM:14.00' CCI+++ABO:::RAY' MEA+AAE++MM:08.60' CCI+++ABO:::SPH' MEA+AAE++DP:-0.75' CCI+++ABO:::CYL' MEA+AAE++DP:-0.75' CCI+++ABO:::CLX' MEA+AAE++°:090' RFF+FI:3' RFF+AEG:1231615' NAD+UD+++HERRERO' LIN+2' PIA+5+MEL013:SA' IMD+F+8+:::MENICON PREMIO TORIC' QTY+21:1:CU' CCI+++ABO:::ABG' MEA+AAE++MM:14.00' CCI+++ABO:::RAY' MEA+AAE++MM:08.60' CCI+++ABO:::SPH' MEA+AAE++DP:-0.75' CCI+++ABO:::CYL' MEA+AAE++DP:-0.75' CCI+++ABO:::CLX' MEA+AAE++°:090' RFF+FI:3' RFF+AEG:1231615' NAD+UD+++HERRERO' UNS+S' UNT+50+138' UNZ+2+253006' `) let order = new Orders16033(); order.interpret(edifact); //console.dir(order.data,{depth:null}) expect(order.data.messages[0].party.BY.CTA.OC.COM.TE).eq('0147574678'); expect(order.data.messages[0].party.ST.CTA.GR.COM.TE).eq('0660066099'); expect(order.data.messages[0].party.ST.CTA.GR.COM.EM).eq('umberto.herrero@gmail.com'); expect(order.data).to.deep.eq( { messages: [ { lines: [ { ItemNumber: 'MEL013', ItemNumberType: "SA", itemDescription1: 'MENICON PREMIO TORIC', itemDescription2: undefined, lineItemNumber: 1, quantity: '1', ABG: '14.00', RAY: '08.60', SPH: '-0.75', CYL: '-0.75', CLX: '090', typeOfLine: '3', opticianReferenceNumber: '1231614', party: { UD: { nameAndAddress: [''], partyName: ['HERRERO'] } } }, { ItemNumber: 'MEL013', ItemNumberType: "SA", itemDescription1: 'MENICON PREMIO TORIC', itemDescription2: undefined, lineItemNumber: 2, quantity: '1', ABG: '14.00', RAY: '08.60', SPH: '-0.75', CYL: '-0.75', CLX: '090', typeOfLine: '3', opticianReferenceNumber: '1231614', party: { UD: { nameAndAddress: [''], partyName: ['HERRERO'] } } } ], party: { BY: { partyId: '26336', codeListQualifier: '100', nameAndAddress: [''], partyName: ['WIN OPTIC'], street: ['31 RUE LOUISE MICHEL'], cityName: 'LEVALLOIS-PERRET', countrySubEntityDetails: [''], postalIdentificationCode: '92300', countryNameCode: 'FR', CTA: { OC: { departmentOrEmployeeIdentification: 'LEVY MICHAEL', COM: { TE: '0147574678' } } } }, SU: { partyId: 'NOV', codeListQualifier: '100' }, ST: { partyId: '00000', codeListQualifier: '174', nameAndAddress: [''], partyName: ['HERRERO UMBERTO'], street: ['2024 AVENUE DE SOISSONS', ''], cityName: 'CHATEAU-THIERRY', countrySubEntityDetails: [''], postalIdentificationCode: '02400', countryNameCode: 'FR', CTA: { GR: { COM: { TE: '0660066099', EM: 'umberto.herrero@gmail.com' } } } }, AA: { partyId: '26336', codeListQualifier: '100' } }, messageReferenceNumber: '137', documentNumber: '1231614', dateOfOrder: '2018-10-01 12:21:00' }, { lines: [ { ItemNumber: 'MEL013', ItemNumberType: "SA", itemDescription1: 'MENICON PREMIO TORIC', itemDescription2: undefined, lineItemNumber: 1, quantity: '1', ABG: '14.00', RAY: '08.60', SPH: '-0.75', CYL: '-0.75', CLX: '090', typeOfLine: '3', opticianReferenceNumber: '1231615', party: { UD: { nameAndAddress: [''], partyName: ['HERRERO'] } } }, { ItemNumber: 'MEL013', ItemNumberType: "SA", itemDescription1: 'MENICON PREMIO TORIC', itemDescription2: undefined, lineItemNumber: 2, quantity: '1', ABG: '14.00', RAY: '08.60', SPH: '-0.75', CYL: '-0.75', CLX: '090', typeOfLine: '3', opticianReferenceNumber: '1231615', party: { UD: { nameAndAddress: [''], partyName: ['HERRERO'] } } } ], party: { BY: { partyId: '26336', codeListQualifier: '100', nameAndAddress: [''], partyName: ['WIN OPTIC'], street: ['31 RUE LOUISE MICHEL'], cityName: 'LEVALLOIS-PERRET', countrySubEntityDetails: [''], postalIdentificationCode: '92300', countryNameCode: 'FR', CTA: { OC: { departmentOrEmployeeIdentification: 'LEVY MICHAEL', COM: { TE: '0147574678' } } } }, SU: { partyId: 'NOV', codeListQualifier: '100' }, ST: { partyId: '00000', codeListQualifier: '174', nameAndAddress: [''], partyName: ['HERRERO UMBERTO'], street: ['2024 AVENUE DE SOISSONS', ''], cityName: 'CHATEAU-THIERRY', countrySubEntityDetails: [''], postalIdentificationCode: '02400', countryNameCode: 'FR', CTA: { GR: { COM: { TE: '0660066099', EM: 'umberto.herrero@gmail.com' } } } }, AA: { partyId: '26336', codeListQualifier: '100' } }, messageReferenceNumber: '138', documentNumber: '1231615', dateOfOrder: '2018-10-01 12:21:00' }, ], senderIdentification: 'WS-ESTORE', recipientIdentification: 'NOV', dateOfPreparation: '2018-10-01 12:55:00', interchangeReference: '253006', applicationReference: 'ESTORE', testIndicator: '0' } ) }); it('should be able to detect test messages', () => { const edifact = compact(` UNA:+.? ' UNB+UNOC:1+61920085000060+33450670400060+19960105:1054+0000880++ISS++1+1' `); let order = new Orders16033(); order.interpret(edifact); expect(order.data.testIndicator).eq('1'); }) it('should not crash, but report that UNA is badly written',() => { const edifact = compact(` UNA:+.?' UNB+UNOC:1+NOVA2+NOV+201101:113+15077_0000552++NOVASOF2++1' UNH+0578332+ORDERS:D:96B:UN:INFO32' BGM+105+0000578332' DTM+4:202011011134:203' NAD+BY+15077:100' NAD+SU+NOV:100' LIN+1++0000578332+0' PIA+1+0+0+0' RFF+AEG:3151' RFF+FI:3' NAD+BV+15077:100' NAD+UD+++3151' LIN+1+1++1+10+A' PIA+5+CIL096:SA' IMD+F+8+:::DailiesTotal1' QTY+21:1:CU' CCI+++ABO:::ABG:SDI' MEA+AAE++mm:14.10' CCI+++ABO:::RAY' MEA+AAE++mm:8.50' CCI+++ABO:::SPH' MEA+AAE++DP:-5.00' UNS+S' MOA+116' CNT+23:1' UNT+25+0578332' UNZ+1+15077_0000552' `); let order = new Orders16033(); expect(()=>order.interpret(edifact)) .to.throw('Edifact Parser Error: section=Interchange, segment=undefined (segment #1) > Error: Invalid character : (58) after reading segment name UNA'); }) it('should expose every detail of LIN and correct #4',()=>{ const edifact = compact(` UNA:+.? ' UNB+UNOC:1+NOVA2+NOV+20201101:1134+15077_0000552++NOVASOF2++1' UNH+0578332+ORDERS:D:96B:UN:INFO32' BGM+105+0000578332' DTM+4:202011011134:203' NAD+BY+15077:100' NAD+SU+NOV:100' LIN+1++0000578332+0' PIA+1+0+0+0' RFF+AEG:3151' RFF+FI:3' NAD+BV+15077:100' NAD+UD+++3151' LIN+1+1++1+10+A' PIA+5+CIL096:SA' IMD+F+8+:::Dailies Total 1' QTY+21:1:CU' CCI+++ABO:::ABG:SDI' MEA+AAE++mm:14.10' CCI+++ABO:::RAY' MEA+AAE++mm:8.50' CCI+++ABO:::SPH' MEA+AAE++DP:-5.00' UNS+S' MOA+116' CNT+23:1' UNT+25+0578332' UNZ+1+15077_0000552' `); let order = new Orders16033(); order.interpret(edifact); expect(order.data).to.deep.eq( { messages: [ { lines: [ { lineItemNumber: 1, actionCoded: '1', subLineIndicator: '1', configurationLevel: '10', configuration: 'A', ItemNumber: 'CIL096', ItemNumberType: 'SA', itemDescription1: 'Dailies Total 1', itemDescription2: undefined, quantity: '1', ABG: '14.10', RAY: '8.50', SPH: '-5.00' } ], party: { BY: { partyId: '15077', codeListQualifier: '100' }, SU: { partyId: 'NOV', codeListQualifier: '100' }, BV: { partyId: '15077', codeListQualifier: '100' }, UD: { nameAndAddress: [ '' ], partyName: [ '3151' ] } }, messageReferenceNumber: '0578332', documentNumber: '0000578332', dateOfOrder: '2020-11-01 11:34:00', opticianReferenceNumber: '3151', typeOfLine: '3' } ], senderIdentification: 'NOVA2', recipientIdentification: 'NOV', dateOfPreparation: '2020-11-01 11:34:00', interchangeReference: '15077_0000552', applicationReference: 'NOVASOF2', testIndicator: '0' } ); }) it('should correct #4',()=>{ const edifact = compact(` UNA:+.? ' UNB+UNOC:1+NOVA2+NOV+20201101:1134+15077_0000552++NOVASOF2++1' UNH+0578332+ORDERS:D:96B:UN:INFO32' BGM+105+0000578332' DTM+4:202011011134:203' NAD+BY+15077:100' NAD+SU+NOV:100' LIN+1++0000578332+0' LIN+1+1+a:b:c:d+1:x+10+A' UNT+8+0578332' UNZ+1+15077_0000552' `); let order = new Orders16033(); order.interpret(edifact); expect(order.data).to.deep.eq( { messages: [ { lines: [ { lineItemNumber: 1, actionCoded: '1', itemNumber: 'a', itemNumberType: 'b', codeListQualifier:'c', codeListResponsibleAgency:'d', subLineIndicator: '1', subLineItemNumber: 'x', configurationLevel: '10', configuration: 'A', } ], party: { BY: { partyId: '15077', codeListQualifier: '100' }, SU: { partyId: 'NOV', codeListQualifier: '100' }, }, messageReferenceNumber: '0578332', documentNumber: '0000578332', dateOfOrder: '2020-11-01 11:34:00', } ], senderIdentification: 'NOVA2', recipientIdentification: 'NOV', dateOfPreparation: '2020-11-01 11:34:00', interchangeReference: '15077_0000552', applicationReference: 'NOVASOF2', testIndicator: '0' } ); }) })