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
JavaScript
/// <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 + "]");
}
}
}