HL7 relation to clinical flows - hl7

Does anyone know of any articles our tutorials that describe the clinical flows
as it relates to the hl7 message that is generated?
I have read the hl7 spec i am just looking to connect the dots on for example.
A patient is admitted to a hosptial and all the events that happen and theh hl7 triggers that are created.
A lab test is ordered how are all does it route to the respective systems etc...

Its actually pretty simple to understand clinical workflows. Here is a comprehensive list of all trigger events, and core HL7 components, that you can go through. If you google you will get many resources like interfaceware, that give more glorified examples.
In short,this is how it works.
There are 2 broad categories of application in healthcare
PMS - Practice Management System (in simple words the front desk). This acts as a repository of all the patient demographics, Appointment schedule of the doctors, Billing information etc. Most of the critical healthcare transactions are done at the PMS. Eg. GE Centricity, Allscripts ProPM etc
EHR - Electronic Health Record (in simple words the doctors application). This acts as a repository of all the patient medications, diagnosis, allergy, history and physical etc. Every medical information is recorded in the EHR. Eg. Cerner EHR, Allscripts ProEHR etc.
ADT -Admission, Discharge and Transfer is a broad category of trigger, and covers almost all the major events, Starting from ADT^A01 to ADT^A40.
When a patient is registered at the practice PMS, an A28 or add patient demographics is triggered. If any of the details of that patient is updated (eg his address), that's an A31. After you have demo of the patient you schedule an appointment.
Specifically you have a scheduling message(SIU) to do the job, or you can also use encounter demographics(ADT). The key difference is that SIU doesn't have complete demographics details(insurance,guarantor etc) of the patient in the message, and encounter demographics are more useful than SIUs for they contain demographic+appointment details.
So, if the patient does a walk-in without previously being registered at the practice, an encounter demographics is sufficient.
Let us assume for sake of understanding, we go with schedule.So, an SIU^S12,^S14,^S15 is for appointment add, update and cancellation respectively.Now, this appointment shows on the respective Doctors application (EHR) if the PMS and EHR are connected via an interface.
Every procedure has a code associated to it. The billing happens on this procedure code and is done through a charge message(DFT^P03).A charge is placed in the EHR and it always travel from the EHR to the PMS.
There is also another set of applications called as Billing applications - Whiteplume is an example that specifically process charges and handles billing. Also, there is something known as Clearing Houses that handles billing and Claim processing for insurances.
If we talk about Labs, the Lab connects to both the PMS and the EHR.
It connects to the PMS through a Query interface (QRY^Q01,^Q04 trigger events) to request for patient demographics, for the lab should know whether the corresponding patient is registered or not.
It connects to the EHR application through OM interface (orders management interface) or a Results only interface. ORM^O01 is for orders, ORU^R01 is for Results. OM interfaces are bi-directional.
Results only interface is a unidirectional interface running from the Lab to the EHR and consists of results. The request is either placed manually through phone or fax.
The order or basically the tests that need to be performed on the patient are placed from the EHR, the order message (ORM^O01) is triggered containing the required procedure code of the test/battery that needs to be performed on the patient. The lab then queries for the respective patient through a QRY^Q01 message, and recieves a response containing the patient demographics(basically just a PID information), and after the tests are conducted sends the results using ORU^R01 message. However, you won't find Query interface that mandatory.
The more you go deeper into it, there is Transcription(TRN), Radiology, document(MDM) message` for different content and purpose of Results.
Hope this helps!

If you are looking for a description of transactions occurring in healthcare processes and how they are mapped to HL7 messages, then the best and most standard way is to go for IHE:
http://www.ihe.net/Technical_Frameworks/
Regards
Davide

Related

Which Archimate element should I use to model a shop

I'm in the process of creating various archimate models for my organization. We offer financial services. Customers can do most of the things they require using the online portal and the mobile app.
But we also have branch offices where customers can go to get personal attention. They can get personal advice, they can ask representatives for operational tasks, or they can go to a public workstation there and do it themselves using the online portal, potentially with some assistance.
How should I model such a branch office in Archimate? Is it an Actor? Or a Business Service? Or a Business Interface? Or maybe a Product? Or just a Location? It's also a thing that's designed around a specific concept, and we have different concepts, each with a unique setup and capabilities.
You can compare such a branch office with a retail shop, or a post office. It's more than an internal element, because this is a point of contact with your customer. But what kind of element best describes it?
You can use different type of elements to model a branch office:
If you use physical elements, the branch can be a "Facility".
But probably it fits more with a "Location" that can aggregate "Resources" (Strategy Elements) o "Business Roles" that can realize "Business Services".
Consider this image, the customer is served various services (like personal advice) at (or aggregated in) a location assigned to the physical facility. Hope this answers your doubt.

How to get a healthcare organization from a Clinical Health Record instance?

I'm developing an app that works with Clinical Health Records. The idea is to fetch FHIR resources and process them in a certain way. Although getting the FHIR data is easy, I cannot find out what account or organization the record belongs to.
Neither HKClinicalRecord nor HKFHIRResource classes have methods or fields that might lead to account or healthcare organization.
At the same time, the standard Apple Health application does know the account for each record. It even allows to open it and see the patient's data (see screenshots). Apple's app can filter records by their organizations. That exactly what I'm looking for in my app. Can anybody give me a clue about how to get that information in my code?
The screenshots:
a single health record
account info
Look at HKClinicalRecord.sourceRevision.source, it tells you where the FHIR data is from. It is an HKSource instance that has a name.

D2L Get enrollments

I'm working on a D2L add-on right now and trying to retrieve all the courses the current user is enrolled in. The only way I found so far is using the
GET /d2l/api/lp/(version)/enrollments/myenrollments/ call. This works perfectly for a small amount of courses and is extremely slow for more than approximately 50 courses. Is there any better way to retrieve all the enrollments?
Thanks in advance
For end-users, this call is indeed the one intended to address this need. Since a portion of the performance drop may come from having to process a series of data pages (requiring several calls), you can try several techniques to add a bit of performance here:
You can pre-filter the call based on org unit type: this likely requires you as the app developer to know the org unit type IDs for the org units of interest to your end users. For example, if your main use case here is "student wants to see all the course offerings she's enrolled in", then you can provide the appropriate org unit type ID for course offering org units to your API call. This becomes more difficult if your app must address several different back-end services, or you don't know the org unit type ID used by the back-end service for the relevant org unit types.
You can try using an HTTP library that can pool connections, and batch together the calls that fetch all the data pages you need to get the complete list of enrollments needed. This will provide you with some benefit to overhead on each call, but the performance benefit will likely only be marginal.
Currently, this API route does not allow the caller to request a particular data page size, and allowing that would improve the overall latency involved in this use case: for example, requesting a page size of 500 records could conceivably fetch back all the enrollments in a single call. I would judge page-size requesting to be a completely reasonable feature enhancement to request, and I would encourage you to request it on D2L's Product Idea Exchange; in fact, I'd be rather surprised if someone hasn't already done so.

Access Transactions in Quickbooks Online

I'm using trying to interface with Quickbooks Online for an internal application that will push and pull transactions using qbXML. My problem is that I can't figure out which message I need to send in order to list and add the items listed under the "Banking" > "Registers" page. I've gone through the messages listed in the Onscreen Reference for Intuit Software Development Kits and none of them seem to give me this information.
Also, does anyone know of a list that explains what each message does?
If you're in a bank account register, you're writing checks. There are 3 kinds of checks in QuickBooks:
Expense checks - if you added a check directly in the register window, you would be adding an expense check.
Bill payment checks - these appear in a check register, but you can only add them with a bill payment operation.
Payroll checks - these appear in the check register, but they can only be added using the Intuit Payroll Service or by enabling manual payroll (almost no one does manual payroll in actual practice, but it is good to know about for testing purposes).
The first 2 types of checks have their own message type: the Add/Mod Check and Add/Mod BillPayment messages respectively. Payroll checks can't be added by the SDK. You can query all 3 types using a Transaction query message. I should also mention that it's possible to add an entry in any register using a journal entry, but that's not a good idea unless you are certain you know what you're doing.
I hate to tell you this, but the best reference for QuickBooks messages is the one you're already using. There are also XML files in the <sdk root>\docs directory that describe SDK operations. But there is really no substitute for understanding how QuickBooks operates from a user's perspective.
If you're going to be working with QuickBooks integration, it's a good idea to make friends with one or more QuickBooks Pro Advisors so you can run these kinds of issue by them. The relationship is generally mutually beneficial, since QuickBooks Pro Advisors often find it handy to have access to an SDK programmer.

How do social networking websites compute friend updates?

Social networking website probably maintain tables for users, friends and events...
How do they use these tables to compute friends events in an efficient and scalable manner?
Many of the social networking sites like Twitter don't use an RDBMS at all but a Message Queue application. A lot of them start out with a already present application like RabbitMQ. Some of them get big enough they have to heavily customize or build their own. Twitter is in the process of doing this for the second time.
A message queue application works by holding messages from one service for one or more other services. For instance say service Frank is publishing messages to a queue foo. Joe and Jill are subscribed to Franks foo queue. the application will keep track of whether or not Joe or Jill have recieved the messages and once every subscriber to the queue has recieved the message it discards it. Frank fires messages and forgets about it. Joe and Jill ask for messages from foo and get whatever messages they haven't gotten yet. Joe and Jill do whatever they need to do with the message. Perhaps keeping it around perhaps not.
The message queue application guarantees that everyone who is supposed to get the message can and will get the message when they request them. The publisher can send the messages confident that subscriber can get them eventually. This has the benefit of being completely asynchronous and not requiring costly joins.
EDIT: I should mention also that usually the storage for these kind of things at high scale are heavily denormalized. So Joe and Jill may be storing a copy of the exact same message. This is considered ok because it helps the application scale to billions of users.
Other reading:
http://www.rabbitmq.com/
http://qpid.apache.org/
The mainstay data structure of social networking sites is the graph. On facebook the graph is undirected (When you're someone's friend, they're you're friend). On twitter the graph is directed (You follow someone, but they don't necessarily follow you).
The two popular ways to represent graphs are adjacency lists and adjacency matrices.
An adjacency list is simply a list of edges on the graph. Consider a user with an integer userid.
User1, User2
1 2
1 3
2 3
The undirected interpretation of these records is that user 1 is friends with users 2 and 3 and user 2 is also friends with user 3.
Representing this in a database table is trivial. It is the many to many relationship join table that we are familiar with. SQL queries to find friends of a particular user are quite easy to write.
Now that you know a particular user's friends, you just need to join those results to the updates table. This table contains all the user's updates indexed by user id.
As long as all these tables are properly indexed, you'd have a pretty easy time designing efficient queries to answer the questions you're interested in.
Travis wrote a great post on this ,
Activity Logs and Friend Feeds on Rails & pfeed
For the small scale doing a join on users.friends and users.events and query caching is probably fine but does slow down pretty quickly as friends and events grow. You could also try an event based model in which every time a user creates an event an entry is created in a join table (perhaps called "friends_events"). Thus whenever a user wants to see what events their friends have created they can simply do a join between their own id and the friends_events table and find out. In this way you avoid grabbing all a users with friends and then joining their friends with the events table.

Resources