/** * DELFOR to VDA 4905 Mapping Logic */ window.EDIBridge = window.EDIBridge || {}; class DELFORToVDA4905 { static convert(ediContent) { const EDIFACTLogic = window.EDIBridge.EDIFACTLogic; const segments = EDIFACTLogic.parseSegments(ediContent); const records = []; // Header Record 511 records.push(this.format511({ senderId: this.getNAD(segments, 'SE'), receiverId: this.getNAD(segments, 'BY'), date: this.getDTM(segments, '137') })); let currentMaterial = null; for (const seg of segments) { if (seg.tag === 'LIN') { currentMaterial = seg.elements[2][0]; } if (seg.tag === 'QTY' && currentMaterial) { records.push(this.format512({ material: currentMaterial })); records.push(this.format513({ quantity: seg.elements[0][1], date: '240520' })); } } records.push(this.format519(records.length + 1)); return records.join('\n'); } static getNAD(segments, qualifier) { const seg = segments.find(s => s.tag === 'NAD' && s.elements[0][0] === qualifier); return seg ? seg.elements[1][0] : 'UNKNOWN'; } static getDTM(segments, qualifier) { const seg = segments.find(s => s.tag === 'DTM' && s.elements[0][0] === qualifier); return seg ? seg.elements[0][1] : '240101'; } static format511(data) { let s = '511'; s += '01'; s += String(data.senderId).padEnd(9, ' '); s += String(data.receiverId).padEnd(9, ' '); s += '00001'; s += String(data.date).substring(2, 8); return s.padEnd(128, ' '); } static format512(data) { let s = '512'; s += '01'; s += String(data.material).padEnd(22, ' '); return s.padEnd(128, ' '); } static format513(data) { let s = '513'; s += '01'; s += String(data.date).padEnd(6, ' '); s += String(Math.round(parseFloat(data.quantity))).padStart(12, '0'); return s.padEnd(128, ' '); } static format519(count) { return ('519' + '01' + String(count).padStart(7, '0')).padEnd(128, ' '); } } window.EDIBridge.DELFORToVDA4905 = DELFORToVDA4905;