UNPKG

rdpcrystal-edi-library

Version:

ASCII X12 EDI Library, Create, Parse, Load, Validate, View, Edit, Split, Join And Scrub EDI Data

118 lines (96 loc) 3.67 kB
/// <reference path="../../lib/RDPCrystalEDILibrary.d.ts" /> const edi = require('../../lib/RDPCrystalEDILibrary').RDPCrystalEDILibrary; const fs = require('fs'); const enumMap = require('./enummap'); let map = new enumMap(); //Create a new validator let validator = new edi.EDIValidator(); //Load a 5010 270 validation rules let validationRules = fs.readFileSync('../../validationrules/5010/Rules_5010_270_005010X279A1.Rules').toString(); validator.EDIRulesFileData = validationRules; //Set the EDI data to validate and load. This can also be read in from a file validator.EDIDataString = "ISA*00*..........*01*SECRET....*ZZ*SUBMITTERS.ID..*ZZ*RECEIVERS.ID...*030101*1253*^*00501*000000905*1*T*:~" + "GS*Hk*SENDER CODE*RECEIVERCODE*19991231*0802*1*X*005010X279A1~" + "ST*271*1234*005010X279A1~" + "BHT*0022*13*10001234*20060501*1319~" + "HL*1**20*1~" + "NM1*PR*2*ABC COMPANY*****PI*842610001~" + "HL*2*1*21*1~" + "NM1*1P*2*BONE AND JOINT CLINIC*****SV*2000035~" + "HL*3*2*22*0~" + "TRN*1*93175-012547*9877281234~" + "NM1*IL*1*SMITH*ROBERT****MI*11122333301~" + "DMG*D8*19430519~" + "DTP*291*D8*20060501~" + "EQ*30~" + "SE*13*1234~" + "GE*1*1~" + "IEA*1*000000905~"; console.log("Validating 5010 271 EDI Files"); validator.validate(); console.log("Errors Found"); //Get all errors from the EDI data for (let i = 0; i < validator.Errors.Count; i++) { let error = validator.Errors.getItem(i); console.log( { Type: "Error", Line: error.LineNumber, Transaction: "", SnipLevel: map.SnipLevelTypes[error.SnipLevel], //SnipTestLevel Enum Message: map.MessageTypes[error.Message], //EDIValidationMessage Enum Loop: error.Loop, Segment: error.Segment, Element: error.ElementOrdinal, Composite: error.CompositeElementOrdinal, Description: error.Description, Ordinal: error.SegmentOrdinal }); } let doc = validator.EDILightWeightDocument; //Write out a visual representation of the loaded EDI document writeDocumentTree(doc.Loops.getItem(0), 0); function writeDocumentTree(loop, indent) { if (loop != null) { for (let i = 0; i < indent; i++) { process.stdout.write(" "); } console.log(loop.Name); indent++; writeSegment(loop.Segments, indent); if (loop.Loops != null) { for (let i = 0; i < loop.Loops.Count; i++) { writeDocumentTree(loop.Loops.getItem(i), indent); } indent++; } } } function writeSegment(segments, indent) { for (let i = 0; i < segments.Count; i++) { let seg = segments.getItem(i); for (let i = 0; i < indent; i++) { process.stdout.write(" "); } console.log(seg.Name); writeElement(seg.Elements, indent); } } function writeElement(elements, indent) { for (let i = 0; i < elements.Count; i++) { let elem = elements.getItem(i); for (let i = 0; i < indent; i++) { process.stdout.write(" "); } if (elem.Composite) { console.log("Composite"); //Check for composite elements if (elem.Elements != null && elem.Elements.Count > 0) { writeElement(elem.Elements, ++indent); indent--; } } else { console.log("[" + elem.DataValue + "]"); } } }