Forum Replies Created
-
AuthorReplies
-
I’m super curious about this now, as it seems they’re mixing terminology a bit. Things like ‘frames’ are a TCP term and are transport layer items that we don’t particularly care about. I’m also curious about the client/host configuration, a lot of things just seem ‘off’ with the way they’re being described. I can’t immediately pull specs since we don’t use the system.
What data type is this (HL7, FHIR, etc)? What is ENQ, STX (I’m assuming start transmission), ETB (end block?). Are they trying to run on the transport level with TCP/IP or in the application level, in which case they shouldn’t be worrying about the TCP/IP.
Secondly, unless you have data waiting, ImmuLink can’t be the initiator to ‘get data’. If there is a result, they should just send the result, you send an acknowledgement (standard) and send the result to the LIS. If they are expecting data (getting orders, etc) they need to be the server to be available to get a message when it gets sent.
I may be missing specific experience here, but the request isn’t making a lot of sense.
What is the high level data flow? Is there an order or a message TO them to get some sort of message back (Order and Result), or are they sending a message and expecting a status (Message and ACK)?
The CLV > ACK sounds suspiciously like TCP/IP work that should already be standardized and in this day and age shouldn’t be modified. This is why I’m a bit confused as to what they’re actual request is.
The xlateInVals is going to be a list of the inputs. Each line is a separate list item. Since it’s one line, you’ll need to split it. If you’re confident it will always be two sets of strings with no additional spaces you can make that assumption, however, if they don’t do that (for whatever reason) it could cause problems. The simplest pre-proc is the following:
set xlateOutVals [split [lindex $xlateInVals 0] { }]
Then set your destination as you have above. lindex will remove the {}’s around your input. Split will split it into a list, on spaces. setting it to xlateOutVals will send it out.
This is because it is putting the input in a set of braces {} as there is a space to show it’s together. This creates a lot of potential issues, and this is not assuming any characters (braces, quotes, protected items \$, etc). There are ways to get around this, but if you trust your data that one line will do what you need. Adding additional spaces will throw this off.
For the other data, you should really have a descriptor in OBX-3 you can use to only do this to the specific data you want. OBX-3 should have something like GESTATIONAL_AGE, BIRTH_WEIGHT or some other moniker that you can use to make sure you’re only doing this to the birth weight. If they don’t that really complicates things and makes it a lot harder to do what you need to do (but it can be done).
I’m seeing your reply, and quite frankly, that’s not how HL7 works as a whole. You don’t ‘exchange’ orders and results. From a very high level standpoint, the ordering system sends an order. This is a Dr, Tech, someone saying “I have this specimen, and I need someone to look at it and give me their findings”. This is sent to the lab system. This populates their system with basic patient data and specimen data. The specimen is then looked at by someone, and they record their findings. At this point, the lab system then sends a result. What they are saying sounds like a ‘synchronous’ feed where you send a message then wait for them to send a reply. This isn’t how Orders and Results work. This works in other situations (Pumps, certain queries, etc), but not here. You send them a message, then they send you a message.
From a more technical standpoint, HL7 has an “acknowledgement” system, much like TCP/IP but on a higher layer in the OSI model. System A sends System B a message. System B then responds with an ACK (acknowledgement) or NACK (non-acknowledgement) that says they got the message. In most situations (probably 90%+) the sending system will not send another message until they get some form of ACK (whether ACK or NACK). Some systems will send over and over. Some will error (Cloverleaf default), some will shut down. this prevents messages from going out of order.
The rare situations where you get a ‘response’ they’re not results. They’re different types of ACKS where you’re forwarding an immediate response back to the sending system. This is a messy rabbit hole I had to dive in to get some infusion pumps working correctly.
I would say if they were sending an immediate response to your order it could possibly work, however what they’re suggesting isn’t feasible. I just came off of eGate — It would be a hard “no” simply because the engine couldn’t do it.
I’m curious as to who this lab system is, and if they’re new to the game. None of the lab systems I’ve worked with would ever request this (Mako, LabCorp, Arup, there’s a few others).
I have to agree with David. HL7 in and of itself is not a bidirectional data type. You’re not routing acknowledgements, you’re routing actual messages. This creates a mess when you’re trying to acknowledge the incoming messages and not acknowledge the acknowledgements. It could probably be done the way you want, but you’re talking a complex setup where you have to investigate each message to see if it’s an acknowledgement or an actual message, and then send (or not send) an ACK back for the non-ACK messages. It makes things incredibly overly complex and difficult to troubleshoot.
You should (as David said) have two sets of interface groups. Orders and results. You send the orders to them, then when they’re done, they send results to wherever it needs to go on a different set of interfaces.
To be fair, their documentation matches TCL’s documentation which is not very good either. A good technical writer would help tremendously.
Documentation is under Services User > Reference Guide > Engine NetConfig interface extension or you can search for NCI. There is another recent thread about this as well. This is the only documentation available, and I think it became available in 19 or 2022. It is still pretty barebones.
This is definitely a work in progress; it functions as it sits (for us at least). I didn’t use the keylget pairs at the time, not sure if I will or not considering how oddly some of the setup is. This distinguishes from TCP/IP, File based (ftp, fileset local, etc). I’m working on adding a switch that adds a ‘connected’ column where it will parse netstat data to show if a thread is connected.
A lot of the script relies on our naming schemes to function properly, and I haven’t pushed some of script into procs yet. As I said, work in progress.
Attachments:
You must be logged in to view attached files.Documentation is under Services User > Reference Guide > Engine NetConfig interface extension or you can search for NCI. I’ve been working on a listing script since it only parses partial data, with searching functionality so I can narrow down to specific threads within a site. It’s a bit more tailored to us specifically, but it is useful. However, the netconfig script doesn’t get super granular. I was actually writing my own script at one point that did what this does in a similar fashion when I stumbled across this.
I’ll drop my script, but there’s some stuff specific to how we operate and how our environment was set up that wouldn’t be applicable to others. Let me grab the file and upload it.
Yeah that error is pretty bad. It took us a LONG time to figure out what was going on when I first ran into it.
We are a rural hospital system with 4 hospitals, hundreds of clinics, etc. We have a prefix on our sites to determine if they’re ‘development’, ‘test’, or ‘production’. Beyond that standard shorthand with a number (if the sites need to be split later):
apps1 (ungrouped apps) , cardio1, coding1, CSN1 – CSN is ADT, some have evolved into other functionalitly. 1 has additional HAR/second ADT, 3 has general orders (lots of combined feeds), 4 and 5 are both general ADT, devpat (devices), devres (mainly capsule items, high volume feeds), doc1 (MDMs, document ORUs), ems1 (Dealing with a complex set up for our ambulance charging interfaces), epicadt (the main ADT in, supplies all the other sites with general ADT), lab1 (about to split), rad1, rx1, sched1, sftp (SFTPs that picks up or feeds other interfaces), toepic (general results back into epic), split1 (site dedicated to splitting identical feeds, this was a legacy thing our former lead made us do), too1 (another site that deals primarily with our DMS).
When I look and think about that list and there’s some changes that I want to make, as we’ve just 100% gotten onto cloverleaf (just finished a 3 year migration from eGate — Don’t ask).
You likely have duplicate lines. Make sure you don’t have duplicates on the first column of your spreadsheet.
Also check there are no encoded ‘invisible’ characters (tabs, nonbreaking spaces, etc). Use Notepad++ or vi -b (on Linux) to check for them.
-
This reply was modified 2 weeks, 1 day ago by
Jason Russell.
I would say SiteDoc could be the topic if they incorporated other things (like the GUI visual links, having different files associated to threads, etc) instead of the barebones “Here are the files in the site” listing it currently is. I did fill out the survey, but we’re likely talking years before that is put into effect.
There’s a few ways to do this, but the simplest in your case is set a variable to a phrase that shows there is a PDF. So in your if statement, put “YES” (or True or whatever) in @hasPDF, and at the end, check that variable and suppress if it isn’t true. So if @hasPDF ne =YES, then suppress.
February 26, 2026 at 9:08 am in reply to: Best practices for Cloverleaf interface support tools #122313I haven’t seen any. The spreadsheet is hard to read. You can filter out bug reports, and you filter on specific parts. I haven’t read through them fully yet.
Keith, i tried that with powershell or just cmd.exe as well as cygwin and none launched. There may be something I’m missing with them. It doesn’t complain — Jut doesn’t launch. It will complain if it can’t find the file (IE: I type the wrong location).
-
This reply was modified 2 weeks, 1 day ago by
-
AuthorReplies