Hi,
Our org currently has a standard interface between GE Centricity and Allscripts Touchworks EHR. Outbound demographics and appointments from Centricity into Allscripts.
When an appointment is Rescheduled in Centricity, that 'Rescheduled' appointment status just shows up as a 'Cancelled' status in Allscripts. I know that 'reschedule' messages are a thing in HL7 (SIU - S13 - notification of appointment rescheduling) (I am going off the link below).
https://corepointhealth.com/resource-center/hl7-resources/hl7-siu-message/
Our vendor who manages our interfaces is saying that GE Centricity isn't capable of sending these HL7 messages and that reschedules in Centricity will always just show up as cancellations in Allscripts. Are they correct that this is just a limitation of Centricity?
Since LinkLogic does not export Schedule information, I assume that your interface is also something your Vendor built outside of Centricity. I recently used QIE (Qvera Interface Engine) to build an interface that sends Rescheduled Appointments to a Vendor we use for patient messaging. The way I track it, is that any change to the Appointment that is not a Cancellation or internal status like "In Room", then the Appointment is sent through as a Rescheduled Appointment. This catches if the date/time of the Appointment changes, but also catches if the Primary Care Provider or Resource or Location of Care Changes, which are important "Reschedules" for our patient messaging. It also catches other changes to the Appointment such as Appointment Type changes or Insurance Changes, but our vendor just dismisses these as duplicates. I could probably tweak our interface to exclude these "duplicates" but since our vendor dismisses them, I don't feel the need for us to modify our interface.
I would think your Vendor should be able to do something similar, since they are not using LinkLogic. Unless they are using the MIK Scheduling Export, which I'm afraid I don't know much about and it is not covered by the "Managing Interfaces" document, originally created by GE.
Our Vendor uses... another vendor, who used QIE to build our interface. The answer we are getting is that S13 reschedule messages out of Centricity is not possible which to me seems odd. However I don't know QIE (or HL7 for that matter) well enough to know for sure. It just seems like it would be weird for there to be some limitation of Centricity, if the 'Reschedule' status exists in Centricity, why can't it go as HL7.
Would you be able to provide a copy of that GE "Managing Interfaces" document?
Also, here is the SQL that I use in our QIE Interface, which runs every 5 minutes to make sure we do not miss anyone. As previously stated, it grabs any changes to the scheduled appointment and treats them as a possible reschedule and our receiving vendor just dismisses any duplicates that are not true changes.
select a.AppointmentsId, a.Duration, a.ApptStart, a.ApptStop, pp.PatientId, pp.Last, pp.First, pp.Middle, pp.Suffix, pp.Address1, pp.Phone1, pp.Phone1Type,
pp.Phone2, pp.Phone2Type, pp.Phone3, pp.Phone3Type, pp.Address2, pp.City, pp.State, pp.Zip, pp.Country, df.DotId, df.Last PLast, df.First PFirst,
df.Middle PMiddle, df.Phone1 PPhone1, pp.Birthdate, pp.Sex, l.ShortDescription, pp.SSN, pp.Country, ml.Code MaritalStatus, left(ml2.Code, 1) Race,
left(ml3.Code, 3) Ethnicity, pp.DeathDate, a.Notes, aty.Name ApptType, df2.ListName, df3.ListName Resource,
RTRIM(df4.Last+' '+ISNULL(df4.Suffix,'')) ProviderLast, df4.First ProviderFirst, df4.LoginUser ProviderID,
case
when pp.DeathDate is null
then null
else 'Y'
end as DeathInd
from Appointments a
join PatientProfile pp on CONVERT(char, a.OwnerId) = CONVERT(char, pp.PatientProfileId)
left join DoctorFacility df on a.LastModifiedBy = df.LoginUser
left join Language l on pp.LanguageId = l.LanguageId
left join MedLists ml on pp.MaritalStatusMId = ml.MedListsId
join (select a.ApptStart ApptStart, a.OwnerId
from Appointments a) q1 on a.OwnerId = q1.OwnerId and a.ApptStart = q1.ApptStart
left join (select min(pr.PatientRaceId) PRI, pr.PatientProfileId
from PatientRace pr
group by pr.PatientProfileID) q2 on pp.PatientProfileId = q2.PatientProfileId
left join (select min(pe.PatientEthnicityId) PEI, pe.PatientProfileId
from PatientEthnicity pe
group by pe.PatientProfileId) q3 on pp.PatientProfileId = q3.PatientProfileId
left join PatientRace pr on q2.PRI = pr.PatientRaceId
left join MedLists ml2 on pr.PatientRaceMid = ml2.MedListsId
left join PatientEthnicity pe on q3.PEI = pe.PatientEthnicityId
left join MedLists ml3 on pe.PatientEthnicityMid = ml3.MedListsId
left join ApptType aty on a.ApptTypeId = aty.ApptTypeId
left join DoctorFacility df2 on a.FacilityId = df2.DoctorFacilityId
left join DoctorFacility df3 on a.ResourceId = df3.DoctorFacilityId
left join DoctorFacility df4 on a.DoctorId = df4.DoctorFacilityId
where (ml.TableName = 'MaritalStatus' or ml.TableName is null)
and (ml2.TableName = 'Race' or ml2.TableName is null)
and (ml3.TableName = 'Ethnicity' or ml3.TableName is null)
and a.status not in ('Arrived','Absent','Completed','Deceased','In a Room','Insurance Issues-Cancelled','No show','MICARE PHONE F/U - no text/no reminder','LINKED APPT - no text/no reminder',
'PROVIDER OUT - no text/no reminder','NO REMINDER CALL, NO TEXTS','Rescheduled','Operator error','Patient left w/o being seen','Provider running behind','Patient hospitalized','Transported by cab/ taxi','Not Due','Not Eligible','Discharged')
and a.Status not like 'Cancel%'
and a.LastModified >= DATEADD(mi, -10, GETDATE())
and a.Created < a.LastModified
Thanks for this, this is very helpful. So in your SQL logic, in order to get any appointment that is in reschedule status, you said select all appointments where a.status not in 'cancel', 'pending', 'arrived', etc etc
Why can't you just do where a.status = 'reschedule'? The appointment records that your current query returns, what a.status are they in? Is that just so that you can also include changes in location of care etc, in your reschedules?
Could we potentially just do select all from appointments where a.status = 'reschedule', in order to generate S13s? All we want to do is have our reschedules in Centricity match in our EHR (they currently just show as cancelled).
Thanks so much.
I initially had it set up as just "Reschedule", but soon after we went live, I was asked to look into why we were missing a significant number of Rescheduled Appointments. When I started looking I found out that it appeared that a number of our Rescheduled Appointments weren't actually marked as "Reschedule". When I asked about this, I was told that a lot of them are simply dragged from one appointment timeslot to another appointment timeslot. When this happens Centricity does not automatically change the Appointment to a "Reschedule" status and if the user does not change the status then it remains the status that it had before it was dragged and dropped. I had asked about getting our users to start flagging these as "Reschedule", but as I'm sure you've guessed they did not want to enforce this since it would take the users a little of additional time on every appointment they drag and drop.
If your users always change the Appointments to "Reschedule" then I don't see why you couldn't just select those records then.
I see, so the issue was that the Reschedule status in Centricity doesn't always truly catch all reschedules.
But effectively, just querying for all appointments in a.status would make it so that if it's in Reschedule status in Centricity, it will be in Rescheduled status in Allscripts. Correct?
If you look at my criteria, I do exclude any new appointments (Created date vs. LastModified date). I also exclude any statuses that are obviously not Rescheduled appointments. The company that we are sending this data to, is perfectly willing to accept duplicate information when it comes to the Reschedules. For instance, if a user changes an Appointment to a new date/time and that information is sent to our vendor, and then a few minutes later the user makes another change to the Appointment, but it is not a date/time change, then this triggers another send of information to our vendor as a Reschedule, even if the date/time, site location, or provider resource has not changed.
You'll want to find out from Surescripts if they are agreeable to accept duplicate records like this.
I'm confused.. if all we want to do is write a SQL query in QIE that does select * from appointments where status = "Reschedule", and just generate S13s based off that, won't that work? It would be okay with us if we only get appointments that are in Reschedule status in Centricity (it doesn't matter to us that drag and drop doesn't put it in this status). Wouldn't this work? (Apologies if I'm being vague, I only have a general understanding of QIE and HL7 in general)
If you are not worried about the drag-and-drop appointments, then selecting the "Reschedule" should work. Just remember in a case where a patient calls in and says they cannot make their Wednesday appointment at 2p and you user drags that appointment to Friday at 10a, this appointment will not go through as a "Reschedule" unless someone changes the status.
Got it. And just to confirm my understanding, this is how it would work if we just used a.status = 'rescheduled' -
In Centricity, if they use the Reschedule function, it mark the appointment status in Centricity as "rescheduled". These will generate an S13 and show as 'rescheduled' in the EHR
If they drag and drop in Centricity, then the appointment status in Centricity won't show as "rescheduled", and also won't generate an S13 for 'rescheduled' status in the EHR.
Is that correct? Just double checking. Thanks!