roy-harmon / universalis Goto Github PK
View Code? Open in Web Editor NEWUniversaLIS is a laboratory information system (LIS) for ASTM/CLSI-compliant clinical laboratory analyzers using serial and TCP connections.
License: MIT License
UniversaLIS is a laboratory information system (LIS) for ASTM/CLSI-compliant clinical laboratory analyzers using serial and TCP connections.
License: MIT License
Hi
I want to share you a message not often used.
I had this kind of frame with an instrument.
I mix some of those vocable. that what i come back in the official document.
A few of vocable from the document ASTM E1381-02 or LIS1-A and LIS2-A2
A session starts with ENQ and ends with EOT. the protocol explain the send and response : ACK generally
A session include 1message if the session doesn't terminate abnormally. the message contains informations like IDs, test, age etc...
A frame is a subdivision of a message. it starts with STX, ends with ETX, checksum and CR LF
A record is described in LIS2-A2 as a group a field. the different records are H,P,O,C,R,M,S,L
then generally a frame (ETX-STX) contains one record.
Here is a message not often used. I don't know if you already saw one.
I thought it was a wrong implementation but after reading the LIS1 and LIS2 It's correct.
I can't not simulated this kind of message because I don't have anymore this instrument. and my simulator doesn't handle like this. Then I can not say if UniversaLIS can handle those frames.
I saw that your way to test the checksum seems to be able to handle this but it seems to me that it's not the case with the records, I should test to know.
Usually a CR means the end of a line (frame) but a CR can be in the middle of a frame. CR LF close the frame.
Here is the session formated.
->
<-
-> 1H|^&|0||EasyCell6|||||||P|E 1394-97|20191210155707
P|1||A8010700109||name1^Name2^name3||19351124|F|||||TORMA||||||||||||GUIG
O|1|0112101193||^^^CBCD^200|||20191210070000||||||||||||||||||F
C|1|I|^Les neutrophiles bande sont combi7C
<-
-> 2n s avec les neutrophiles segment s dans ce diff rentiel de leucocytes.|G
C|2|I|^223 cells in the differential.|I
R|1|^^^SEG%|48|%||L||F||MP||20191210155707
R|2|^^^BAND%|0|%||N||F||MP||20191210155707
R|3|^^^LYMPH%|41|%||N||F||MP||20191210150A
<-
-> 35707R|4|^^^MONO%|7|%||N||F||MP||20191210155707
R|5|^^^EO%|2|%||N||F||MP||20191210155707
R|6|^^^BASO%|2|%||N||F||MP||20191210155707
R|7|^^^SMUDGES|15|/100 WBCs||A||F||MP||20191210155707
R|8|^^^RBC NORMAL||||N||F||MP||20191210155707
R|9|^^^P3F
<-
-> 4LT|NORMAL|||N||F||MP||20191210155707
M|1|PHOTO|//192.168.1.175/report/0112101193_121019_01.jpg
M|2|REPORT|//192.168.1.175/report/0112101193_121019_01_1.pdf
L|1|N71
<-
->
here is the raw session
[2019/12/10][15:57:13.392][instrument.exe(Instrument)P:3276][T=3752]->
[2019/12/10][15:57:13.560][instrument.exe(Instrument)P:3276][T=3296]<-
[2019/12/10][15:57:13.691][instrument.exe(Instrument)P:3276][T=3752]-> 1H|^&|0||Instrument6|||||||P|E 1394-97|20191210155707P|1||A8010700109||name1^Name2^name||19351124|F|||||TORMA||||||||||||GUIGO|1|0112101193||^^^CBCD^200|||20191210070000||||||||||||||||||FC|1|I|^Les neutrophiles bande sont combi7C
[2019/12/10][15:57:13.822][instrument.exe(Instrument)P:3276][T=3296]<-
[2019/12/10][15:57:14.036][instrument.exe(Instrument)P:3276][T=3752]-> 2n s avec les neutrophiles segment s dans ce diff rentiel de leucocytes.|GC|2|I|^223 cells in the differential.|IR|1|^^^SEG%|48|%||L||F||MP||20191210155707R|2|^^^BAND%|0|%||N||F||MP||20191210155707R|3|^^^LYMPH%|41|%||N||F||MP||20191210150A
[2019/12/10][15:57:14.198][instrument.exe(Instrument)P:3276][T=3296]<-
[2019/12/10][15:57:14.412][instrument.exe(Instrument)P:3276][T=3752]-> 35707R|4|^^^MONO%|7|%||N||F||MP||20191210155707R|5|^^^EO%|2|%||N||F||MP||20191210155707R|6|^^^BASO%|2|%||N||F||MP||20191210155707R|7|^^^SMUDGES|15|/100 WBCs||A||F||MP||20191210155707R|8|^^^RBC NORMAL||||N||F||MP||20191210155707R|9|^^^P3F
[2019/12/10][15:57:14.579][instrument.exe(Instrument)P:3276][T=3296]<-
[2019/12/10][15:57:14.793][instrument.exe(Instrument)P:3276][T=3752]-> 4LT|NORMAL|||N||F||MP||20191210155707M|1|PHOTO|//192.168.1.175/report/0112101193_121019_01.jpgM|2|REPORT|//192.168.1.175/report/0112101193_121019_01_1.pdfL|1|N71
[2019/12/10][15:57:14.990][instrument.exe(Instrument)P:3276][T=3296]<-
[2019/12/10][15:57:15.306][instrument.exe(Instrument)P:3276][T=3752]->
Maistouse
Given the compliance with ASTM standards, this software should be applicable to other analyzers besides the Siemens IMMULITE series. ASTM E1394 specifies all field definitions for each type of record (header, patient, order, result, query, etc.). However, some product lines may not require the same record fields, so all fields defined by the ASTM E1394 standard should be supported and ignored if not required for the instrument. This should make it possible to support multiple instrument manufacturers' products, as long as they comply with the same standards.
The application could consult a configuration file to determine which fields to implement; this configuration could simply be a setting that points to one of multiple pre-defined configurations included with the application, and each supported instrument could correspond to a configuration file. Each (read-only?) configuration file could consist of a binary array representing the fields of each record type, and the values (0 or 1) in each position of the array would indicate whether a field is supported for that instrument.
If more record field customization is desired, the bit array could be copied from one of these instrument configuration templates upon initial setup, stored independently of its source template, and optionally customized/reconfigured via a GUI or other method.
Alternatively, it may be helpful to encapsulate the methods that generate the content of a message's individual frames.
Also note that the [Universal Test ID] field is in fact a four-part field delimited by carats (^); the Siemens IMMULITE specification simply does not implement the first 3 parts, resulting in what resembles a "^^^" prefix before each test code.
i just clone and run
Severity Code Description Project File Line Suppression State
Error MSB3323 Unable to find manifest signing certificate in the certificate store. UniversaLIS C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets 3493
Bidirectional mode may cause the application to stop responding when both the LIS and the analyzer attempt to send an ENQ at the same time. This results in a state of contention that needs to be safely handled according to the ASTM E1381/CLSI LIS1-A standard.
Implementing this feature in compliance with these standards will likely require significant code refactoring to allow for the various phases defined for LIS communications.
Hi
I tried to use your project.
I did some modifications hereunder
[Update.md]
I'm working on project to connect several instrumenst in ASTM and HL7 then to make:
With the move from .NET Framework 4.8 to .NET 5.0, installing as a Windows service isn't as easy as it used to be (since .NET 5.0 is cross-platform). There are new ways of doing this, apparently, but I'm not sure yet how it all works.
Topics to explore include:
If we can take advantage of the cross-platform nature of .NET 5.0 to implement similar functionality on other platforms, so much the better.
Thanks for being generous ๐
please can you add the following functionalities;
If results for an order are received and then an order or patient frame is received, the results for the previous order (and all other data received before the current frame) should be permanently stored. See CLSI-LIS2-A2 page 30 (Figure 2) for more details.
At the moment, results are only stored once the message's terminator frame is received.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.