hitgeek / simple-hl7

A simple library for creating HL7 middleware, based on connect & express.
MIT License
119 stars 59 forks source link

send hl7 message problem #98

Open nativecode2020 opened 1 day ago

nativecode2020 commented 1 day ago

This code sets up a server that listens for incoming HL7 messages, specifically for QRY^Q02 requests. When a device scans a barcode and sends this query, the server constructs a response message containing patient information the problem here the device not affect or not receive my message the server code is below how can solove this problem.

var hl7 = require('simple-hl7');

/////////////////// SERVER ///////////////////// var app = hl7.tcp();

app.use(function(req, res, next) { console.log('** Message Received *'); console.log(req.msg.log()); // Log the received HL7 message console.log('** QRY^Q02 Message Detected *');

  // Construct the DSR^Q03 Response Message with the exact content you provided
  var dsr = new hl7.Message(
    "MSH", "|", "^~\\&", "", "", "", "", "20120508110131", "", "DSR^Q03", "4", "P", "2.3.1"
  );

  // Add MSA (Message Acknowledgment) Segment
  dsr.addSegment(
    "MSA",
    "AA",  // Application Accept
    "4",   // Message Control ID
    "Message accepted", // MSA-3 message text
    "",    // Optional fields
    "",    // Optional fields
    "0"    // Optional fields
  );

  // Add ERR Segment
  dsr.addSegment("ERR", "0");

  // Add QAK (Query Acknowledgment) Segment
  dsr.addSegment("QAK", "SR", "OK");

  // Add QRD (Query Definition) Segment
  dsr.addSegment("QRD", "20120508110131", "R", "D", "2", "", "", "RD", "8191299", "OTH", "", "", "T");

  // Add QRF (Query Filter) Segment
  dsr.addSegment("QRF", "", "", "", "", "", "RCT", "COR", "ALL", "");

  // Add DSP (Display Data) Segments (with 31 DSP segments)
  dsr.addSegment("DSP", "1", "", "1212", "", "", "");
  dsr.addSegment("DSP", "2", "", "27", "", "", "");
  dsr.addSegment("DSP", "3", "", "Tommy", "", "", "");
  dsr.addSegment("DSP", "4", "", "19620824000000", "", "", "");
  dsr.addSegment("DSP", "5", "", "M", "", "", "");
  dsr.addSegment("DSP", "6", "", "O", "", "", "");
  dsr.addSegment("DSP", "7", "", "", "", "", "");
  dsr.addSegment("DSP", "8", "", "", "", "", "");
  dsr.addSegment("DSP", "9", "", "", "", "", "");
  dsr.addSegment("DSP", "10", "", "", "", "", "");
  dsr.addSegment("DSP", "11", "", "", "", "", "");
  dsr.addSegment("DSP", "12", "", "", "", "", "");
  dsr.addSegment("DSP", "13", "", "", "", "", "");
  dsr.addSegment("DSP", "14", "", "", "", "", "");
  dsr.addSegment("DSP", "15", "", "outpatient", "", "", "");
  dsr.addSegment("DSP", "16", "", "", "", "", "");
  dsr.addSegment("DSP", "17", "", "own", "", "", "");
  dsr.addSegment("DSP", "18", "", "", "", "", "");
  dsr.addSegment("DSP", "19", "", "", "", "", "");
  dsr.addSegment("DSP", "20", "", "", "", "", "");
  dsr.addSegment("DSP", "21", "", "0019", "", "", "");
  dsr.addSegment("DSP", "22", "", "3", "", "", "");
  dsr.addSegment("DSP", "23", "", "20070301183500", "", "", "");
  dsr.addSegment("DSP", "24", "", "N", "", "", "");
  dsr.addSegment("DSP", "25", "", "1", "", "", "");
  dsr.addSegment("DSP", "26", "", "serum", "", "", "");
  dsr.addSegment("DSP", "27", "", "", "", "", "");
  dsr.addSegment("DSP", "28", "", "", "", "", "");
  dsr.addSegment("DSP", "29", "", "1^^^", "", "", "");
  dsr.addSegment("DSP", "30", "", "2^^^", "", "", "");
  dsr.addSegment("DSP", "31", "", "5^^^", "", "", "");

  // Add DSC (Continuation Pointer) Segment
  dsr.addSegment("DSC", "");

  // Log the custom DSR^Q03 Response before sending
  console.log('****** Sending Custom DSR^Q03 Response *****');
  console.log(dsr.log());

  // Send the DSR^Q03 Response to the client
  res.end(dsr);

});

hitgeek commented 1 day ago

res.end does not take any arguments, https://github.com/hitgeek/simple-hl7/blob/master/lib/server/tcp-server.js#L48

to send back your own custom response you need to set it as the res.ack

res.ack = dsr;
res.end();
nativecode2020 commented 6 hours ago

is not work i have Mindray CL900 and the Analyzer sent QRY message:

MSH|^~\&|||||20241016231315||QRY^Q02|24|P|2.3.1||||||ASCII||| QRD|20241016231315|R|D|9|||RD|2742180|OTH|||T| QRF||||||RCT|COR|ALL|| and my code is

var hl7 = require('simple-hl7');

/////////////////// SERVER ///////////////////// var app = hl7.tcp();

app.use(function(req, res, next) { console.log('** Message Received *****'); console.log(req.msg.log()); // Log the received HL7 message

  var dsr = new hl7.Message(
    "MSH", "|", "^~\\&", "", "", "", "", "20120508110131", "", "DSR^Q03",

"4", "P", "2.3.1" );

  // Add MSA (Message Acknowledgment) Segment
  dsr.addSegment(
    "MSA",
    "AA",  // Application Accept
    "4",   // Message Control ID
    "Message accepted", // MSA-3 message text
    "",    // Optional fields
    "",    // Optional fields
    "0"    // Optional fields
  );

  // Add ERR Segment
  dsr.addSegment("ERR", "0");

  // Add QAK (Query Acknowledgment) Segment
  dsr.addSegment("QAK", "SR", "OK");

  // Add QRD (Query Definition) Segment
  dsr.addSegment("QRD", "20241016225812", "R", "D", "2", "", "", "RD",

"2742180", "OTH", "", "", "T");

  // Add QRF (Query Filter) Segment
  dsr.addSegment("QRF", "", "", "", "", "", "RCT", "COR", "ALL", "");

  // Add DSP (Display Data) Segments (with 31 DSP segments)
  dsr.addSegment("DSP", "1", "", "1212", "", "", "");
  dsr.addSegment("DSP", "2", "", "27", "", "", "");
  dsr.addSegment("DSP", "3", "", "REDHAAA aliiix", "", "", "");
  dsr.addSegment("DSP", "4", "", "19620824000000", "", "", "");
  dsr.addSegment("DSP", "5", "", "M", "", "", "");
  dsr.addSegment("DSP", "6", "", "O", "", "", "");
  dsr.addSegment("DSP", "7", "", "", "", "", "");
  dsr.addSegment("DSP", "8", "", "", "", "", "");
  dsr.addSegment("DSP", "9", "", "", "", "", "");
  dsr.addSegment("DSP", "10", "", "", "", "", "");
  dsr.addSegment("DSP", "11", "", "", "", "", "");
  dsr.addSegment("DSP", "12", "", "", "", "", "");
  dsr.addSegment("DSP", "13", "", "", "", "", "");
  dsr.addSegment("DSP", "14", "", "", "", "", "");
  dsr.addSegment("DSP", "15", "", "outpatient", "", "", "");
  dsr.addSegment("DSP", "16", "", "", "", "", "");
  dsr.addSegment("DSP", "17", "", "own", "", "", "");
  dsr.addSegment("DSP", "18", "", "", "", "", "");
  dsr.addSegment("DSP", "19", "", "", "", "", "");
  dsr.addSegment("DSP", "20", "", "", "", "", "");
  dsr.addSegment("DSP", "21", "", "2742180", "", "", "");
  dsr.addSegment("DSP", "22", "", "3", "", "", "");
  dsr.addSegment("DSP", "23", "", "20070301183500", "", "", "");
  dsr.addSegment("DSP", "24", "", "N", "", "", "");
  dsr.addSegment("DSP", "25", "", "1", "", "", "");
  dsr.addSegment("DSP", "26", "", "serum", "", "", "");
  dsr.addSegment("DSP", "27", "", "", "", "", "");
  dsr.addSegment("DSP", "28", "", "", "", "", "");
  dsr.addSegment("DSP", "29", "", "1^^^", "", "", "");
  dsr.addSegment("DSP", "30", "", "2^^^", "", "", "");
  dsr.addSegment("DSP", "31", "", "5^^^", "", "", "");

  // Add DSC (Continuation Pointer) Segment
  dsr.addSegment("DSC", "");

  // Log the custom DSR^Q03 Response before sending
  console.log('****** Sending Custom DSR^Q03 Response *****');
  console.log(dsr.log());

  res.ack = dsr;
  res.end();
 next();

});

app.use(function(err, req, res, next) { // Error handling middleware console.log('** ERROR *****'); console.log(err);

// Modify the ACK to indicate an error var msa = res.ack.getSegment('MSA'); msa.setField(1, 'AR'); // AR = Application Reject res.ack.addSegment('ERR', err.message); // Add an ERR segment with the error message

res.end(); // Send the error ACK back to the client });

// Listen on port 5800 app.start(5800);

On Tue, Oct 15, 2024 at 11:11 PM Bob Rupp @.***> wrote:

res.end does not take any arguments, https://github.com/hitgeek/simple-hl7/blob/master/lib/server/tcp-server.js#L48

to send back your own custom response you need to set it as the res.ack

res.ack = dsr; res.end();

— Reply to this email directly, view it on GitHub https://github.com/hitgeek/simple-hl7/issues/98#issuecomment-2414913542, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYH7PPL2UPSXKELKK4SC4BTZ3VZG7AVCNFSM6AAAAABP75IPYCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIMJUHEYTGNJUGI . You are receiving this because you authored the thread.Message ID: @.***>

nativecode2020 commented 5 hours ago

MSH|^~\&|||||20120508110131||DSR^Q03|4|P|2.3.1||||||ASCII||| MSA|AA|4|Message accepted|||0| ERR|0| QAK|SR|OK| QRD|20120508110131|R|D|2|||RD||OTH|||T| QRF||||||RCT|COR|ALL|| DSP|1||1212||| DSP|2||27||| DSP|3||Tommy||| DSP|4||19620824000000||| DSP|5||M||| DSP|6||O||| DSP|7||||| DSP|8||||| DSP|9||||| DSP|10||||| DSP|11||||| DSP|12||||| DSP|13||||| DSP|14||||| DSP|15||outpatient||| DSP|16||||| DSP|17||own||| DSP|18||||| DSP|19||||| DSP|20||||| DSP|21||0019||| DSP|22||3||| DSP|23||20070301183500||| DSP|24||N||| DSP|25||1||| DSP|26||serum||| DSP|27||||| DSP|28||||| DSP|29||1^^^||| DSP|30||2^^^||| DSP|31||5^^^||| DSC||

the message which i need send it to device like this how can send raw message not like dsr.addSegment("DSP", "31", "", "5^^^", "", "", "");

On Wed, Oct 16, 2024 at 11:25 PM Native Code @.***> wrote:

is not work i have Mindray CL900 and the Analyzer sent QRY message:

MSH|^~\&|||||20241016231315||QRY^Q02|24|P|2.3.1||||||ASCII||| QRD|20241016231315|R|D|9|||RD|2742180|OTH|||T| QRF||||||RCT|COR|ALL|| and my code is

var hl7 = require('simple-hl7');

/////////////////// SERVER ///////////////////// var app = hl7.tcp();

app.use(function(req, res, next) { console.log('** Message Received *****'); console.log(req.msg.log()); // Log the received HL7 message

  var dsr = new hl7.Message(
    "MSH", "|", "^~\\&", "", "", "", "", "20120508110131", "",

"DSR^Q03", "4", "P", "2.3.1" );

  // Add MSA (Message Acknowledgment) Segment
  dsr.addSegment(
    "MSA",
    "AA",  // Application Accept
    "4",   // Message Control ID
    "Message accepted", // MSA-3 message text
    "",    // Optional fields
    "",    // Optional fields
    "0"    // Optional fields
  );

  // Add ERR Segment
  dsr.addSegment("ERR", "0");

  // Add QAK (Query Acknowledgment) Segment
  dsr.addSegment("QAK", "SR", "OK");

  // Add QRD (Query Definition) Segment
  dsr.addSegment("QRD", "20241016225812", "R", "D", "2", "", "", "RD",

"2742180", "OTH", "", "", "T");

  // Add QRF (Query Filter) Segment
  dsr.addSegment("QRF", "", "", "", "", "", "RCT", "COR", "ALL", "");

  // Add DSP (Display Data) Segments (with 31 DSP segments)
  dsr.addSegment("DSP", "1", "", "1212", "", "", "");
  dsr.addSegment("DSP", "2", "", "27", "", "", "");
  dsr.addSegment("DSP", "3", "", "REDHAAA aliiix", "", "", "");
  dsr.addSegment("DSP", "4", "", "19620824000000", "", "", "");
  dsr.addSegment("DSP", "5", "", "M", "", "", "");
  dsr.addSegment("DSP", "6", "", "O", "", "", "");
  dsr.addSegment("DSP", "7", "", "", "", "", "");
  dsr.addSegment("DSP", "8", "", "", "", "", "");
  dsr.addSegment("DSP", "9", "", "", "", "", "");
  dsr.addSegment("DSP", "10", "", "", "", "", "");
  dsr.addSegment("DSP", "11", "", "", "", "", "");
  dsr.addSegment("DSP", "12", "", "", "", "", "");
  dsr.addSegment("DSP", "13", "", "", "", "", "");
  dsr.addSegment("DSP", "14", "", "", "", "", "");
  dsr.addSegment("DSP", "15", "", "outpatient", "", "", "");
  dsr.addSegment("DSP", "16", "", "", "", "", "");
  dsr.addSegment("DSP", "17", "", "own", "", "", "");
  dsr.addSegment("DSP", "18", "", "", "", "", "");
  dsr.addSegment("DSP", "19", "", "", "", "", "");
  dsr.addSegment("DSP", "20", "", "", "", "", "");
  dsr.addSegment("DSP", "21", "", "2742180", "", "", "");
  dsr.addSegment("DSP", "22", "", "3", "", "", "");
  dsr.addSegment("DSP", "23", "", "20070301183500", "", "", "");
  dsr.addSegment("DSP", "24", "", "N", "", "", "");
  dsr.addSegment("DSP", "25", "", "1", "", "", "");
  dsr.addSegment("DSP", "26", "", "serum", "", "", "");
  dsr.addSegment("DSP", "27", "", "", "", "", "");
  dsr.addSegment("DSP", "28", "", "", "", "", "");
  dsr.addSegment("DSP", "29", "", "1^^^", "", "", "");
  dsr.addSegment("DSP", "30", "", "2^^^", "", "", "");
  dsr.addSegment("DSP", "31", "", "5^^^", "", "", "");

  // Add DSC (Continuation Pointer) Segment
  dsr.addSegment("DSC", "");

  // Log the custom DSR^Q03 Response before sending
  console.log('****** Sending Custom DSR^Q03 Response *****');
  console.log(dsr.log());

  res.ack = dsr;
  res.end();
 next();

});

app.use(function(err, req, res, next) { // Error handling middleware console.log('** ERROR *****'); console.log(err);

// Modify the ACK to indicate an error var msa = res.ack.getSegment('MSA'); msa.setField(1, 'AR'); // AR = Application Reject res.ack.addSegment('ERR', err.message); // Add an ERR segment with the error message

res.end(); // Send the error ACK back to the client });

// Listen on port 5800 app.start(5800);

On Tue, Oct 15, 2024 at 11:11 PM Bob Rupp @.***> wrote:

res.end does not take any arguments, https://github.com/hitgeek/simple-hl7/blob/master/lib/server/tcp-server.js#L48

to send back your own custom response you need to set it as the res.ack

res.ack = dsr; res.end();

— Reply to this email directly, view it on GitHub https://github.com/hitgeek/simple-hl7/issues/98#issuecomment-2414913542, or unsubscribe https://github.com/notifications/unsubscribe-auth/AYH7PPL2UPSXKELKK4SC4BTZ3VZG7AVCNFSM6AAAAABP75IPYCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIMJUHEYTGNJUGI . You are receiving this because you authored the thread.Message ID: @.***>