Skip to content

Instantly share code, notes, and snippets.

@pmsteil
Forked from lk321/x12.js
Created April 29, 2022 15:47
Show Gist options
  • Save pmsteil/259068e3dadb920f83b9706897965471 to your computer and use it in GitHub Desktop.
Save pmsteil/259068e3dadb920f83b9706897965471 to your computer and use it in GitHub Desktop.
EDI X12 Parse to JSON - NodeJS
import fs from 'fs';
export default class X12 {
constructor(file) {
if (file.includes('/')) {
fs.readFile(file, 'utf8', (err, contents) => {
return this.parseTextToJSON(contents);
});
} else {
return this.parseTextToJSON(file);
}
}
parseTextToJSON(text) {
let data = text.split('\n'),
parsed = {
"header": {
"names": {},
"dates": {
"requestedShipDate": [],
"purchaseOrderDate": []
}
},
"body": [],
"summary": {}
},
lx = 0,
typeOf = null;
data.forEach(segment => {
let seg = segment.split('*');
let seg_id = seg[0];
seg.shift(); // Remove firsts
if (['ISA', 'GS', 'ST', 'NTE', 'W66', 'W05'].indexOf(seg_id) != -1) {
parsed['header'][seg_id] = seg
} else if (['N1', 'N2', 'N3', 'N4'].indexOf(seg_id) != -1) {
if (seg_id == 'N1') {
typeOf = seg[0]
parsed['header']['names'][typeOf] = {}
}
parsed['header']['names'][typeOf][seg_id] = seg
} else if (seg_id == 'G62') {
if (parsed['header']['dates']['requestedShipDate'].length == 0)
parsed['header']['dates']['requestedShipDate'] = seg
else
parsed['header']['dates']['purchaseOrderDate'] = seg
} else if (['W76', 'SE', 'GE', 'IEA'].indexOf(seg_id) != -1) {
parsed['summary'][seg_id] = seg;
} else {
if (seg_id == 'N9' && !parsed['header']['N9'])
parsed['header'][seg_id] = seg
else {
if (seg_id == 'LX')
lx = (parseInt(seg[0]) - 1);
else {
if (parsed['body'][lx])
parsed['body'][lx][seg_id] = seg;
else
parsed['body'].push({ [seg_id]: seg });
}
}
}
});
return parsed;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment