Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: AGMPHLU

AGMPHLU.m

Go to the documentation of this file.
  1. AGMPHLU ; IHS/SD/TPF - MPI HLO MSG UTILITIES ; 12/15/2007
  1. ;;7.2;IHS PATIENT REGISTRATION;**1,3,5,6**;MAY 20, 2010;Build 23
  1. Q
  1. ;
  1. DIRCON ;EP - SEND A DIRECT CONNECT VQQ-Q02
  1. ; 09/06/2017 - GCD - CR 7693 - Disabled VQQ messages because they are buggy and not needed.
  1. W !!,"THIS OPTION HAS BEEN DISABLED" Q
  1. W !!,"ENTER PATIENT YOU WISH TO QUERY THE MPI FOR:"
  1. W !
  1. D PTLK^AG
  1. Q:'$D(DFN)
  1. I $$DEMOPAT(DFN) W !!,"Demo patients may not be uploaded to the MPI." G DIRCON ; 9/13/2017 - GCD - CR 7713 - Don't upload demo patients.
  1. D CREATMSG^AGMPIHLO(DFN,"VTQ",,.SUCCESS)
  1. I SUCCESS D Q
  1. .W !!,"Query message "_$G(SUCCESS)_" has been sent to the MPI"
  1. W !,"Unable to query patient "_$P(^DPT(DFN,0),U)_" on MPI"
  1. Q
  1. ;
  1. A28 ;EP - SEND A A28 ADD A PATIENT
  1. W !!,"ENTER PATIENT YOU WISH TO ADD TO THE MPI:"
  1. D PTLK^AG
  1. Q:'$D(DFN)
  1. I $$DEMOPAT(DFN) W !!,"Demo patients may not be uploaded to the MPI." G A28 ; 9/13/2017 - GCD - CR 7713 - Don't upload demo patients.
  1. D CREATMSG^AGMPIHLO(DFN,"A28",,.SUCCESS)
  1. I SUCCESS D Q
  1. .W !!,"A28 Message "_SUCCESS_" has been sent to add patient "_$P(^DPT(DFN,0),U)_" to the MPI." H 2
  1. .;05/29/2013 - KJH - TFS8109 - This was causing an extra message to be sent to EDR.
  1. .;S X="AG REGISTER A PATIENT",DIC=101,INDA=DFN
  1. .;D EN^XQOR
  1. W !,"Unable to create A28 to add patient "_$P(^DPT(DFN,0),U)_" to MPI"
  1. Q
  1. ;
  1. A08 ;EP - SEND AN A08 UPDATE
  1. W !!,"EXAMPLE OF AN A08 UPDATE"
  1. D PTLK^AG
  1. Q:'$D(DFN)
  1. I $$DEMOPAT(DFN) W !!,"Demo patients may not be uploaded to the MPI." G A08 ; 9/13/2017 - GCD - CR 7713 - Don't upload demo patients.
  1. D CREATMSG^AGMPIHLO(DFN,"A08","",.SUCCESS)
  1. I SUCCESS D Q
  1. .W !!,"A08 Message "_SUCCESS_" has been sent to update patient "_$P(^DPT(DFN,0),U)_" on the MPI." H 2
  1. .;05/29/2013 - KJH - TFS8109 - This was causing an extra message to be sent to EDR.
  1. .;S X="AG UPDATE A PATIENT",DIC=101,INDA=DFN
  1. .;D EN^XQOR
  1. W !,"Unable to create A08 to update patient "_$P(^DPT(DFN,0),U)_" on MPI"
  1. Q
  1. ;
  1. VISITMSG ;EP - CREATE A NEW A01 OR A03
  1. W !!,"CREATE A VISIT HL7 MESSAGE"
  1. D PTLK^AG
  1. Q:'$D(DFN)
  1. I $$DEMOPAT(DFN) W !!,"Demo patients may not be uploaded to the MPI." G VISITMSG ; 9/13/2017 - GCD - CR 7713 - Don't upload demo patients.
  1. K DIR
  1. S DIR(0)="SO^A:ADMISSION;D:DISCHARGE;CIN:CHECK-IN;COUT:CHECK-OUT"
  1. D ^DIR
  1. Q:$D(DUOUT)!$D(DTOUT)!$D(DIROUT)!(Y="")
  1. ;CHECK IN - CHECK OUT
  1. I Y="CIN"!(Y="COUT") D Q Q:$D(DUOUT)!$D(DTOUT)!$D(DIROUT)!(Y="")
  1. .S EVENT=$S(Y="CIN":4,1:5)
  1. .K DIR
  1. .S DIR(0)="D^::RE"
  1. .S DIR("A")="ENTER CHECK-"_$S(Y="CIN":"IN",1:"OUT")_" DATE"
  1. .D ^DIR
  1. .D NOW^%DTC S NOW=%
  1. .Q:$D(DUOUT)!$D(DTOUT)!$D(DIROUT)!(Y="")
  1. .S DATE=Y
  1. .D CREATE^AGMPHL01(EVENT,DFN,DATE,.SUCCESS)
  1. .I SUCCESS D Q
  1. ..W !!,$S(EVENT=1:"A01",1:"A03")_" Message IEN "_SUCCESS_" has been sent to update patient"
  1. ..W !,$P(^DPT(DFN,0),U)_" last treated date on the MPI." H 2
  1. .W !,"Unable to create "_$S(EVENT=1:"A01",1:"A03")_" to update patient "_$P(^DPT(DFN,0),U)_" on MPI"
  1. ;
  1. ;ADMISSION - DISCHARGE
  1. S TYPE=$S(Y="A":1,1:3)
  1. K DIR
  1. S DIR(0)="D^::RE"
  1. S DIR("A")="ENTER MOVEMENT DATE"
  1. D ^DIR
  1. D NOW^%DTC S NOW=%
  1. Q:$D(DUOUT)!$D(DTOUT)!$D(DIROUT)!(Y="")
  1. S DATETIME="T"_Y
  1. D CREATE^AGMPHL03(DFN,TYPE,DATETIME,.SUCCESS)
  1. I SUCCESS D Q
  1. .W !!,$S(TYPE=1:"A01",1:"A03")_" Message IEN "_SUCCESS_" has been sent to update patient"
  1. .W !,$P(^DPT(DFN,0),U)_" last treated date on the MPI." H 2
  1. W !,"Unable to create "_$S(TYPE=1:"A01",1:"A03")_" to update patient "_$P(^DPT(DFN,0),U)_" on MPI"
  1. Q
  1. ;
  1. A40 ;EP - SEND A40 MERGE FROM/TO
  1. N DFN1,DFN2,MRGDIR,NAME1,NAME2
  1. PT1 ;ASK FOR FROM PATIENT
  1. ; AG*7.2*5/CR 7718 - Overhauled this entire section because normal patient lookups don't work on merged patients.
  1. W !,"ENTER PATIENT TO KEEP:"
  1. S DIC="^VA(15,",DIC(0)="AEMQ",DIC("A")="Select PATIENT NAME: " D ^DIC
  1. Q:Y=-1
  1. S IEN=$P(Y,"^")
  1. S MRGDIR=$$GET1^DIQ(15,IEN_",",.04,"I") ; 1=.01->.02, 2=.02->.01
  1. S DFN1=$P($$GET1^DIQ(15,IEN_",",$S(MRGDIR=1:.01,1:.02),"I"),";") ; From patient
  1. S DFN2=$P($$GET1^DIQ(15,IEN_",",$S(MRGDIR=1:.02,1:.01),"I"),";") ; To patient
  1. I $$DEMOPAT(DFN1)!$$DEMOPAT(DFN2) W !!,"Demo patients may not be uploaded to the MPI." G PT1 ; 9/13/2017 - GCD - CR 7713 - Don't upload demo patients.
  1. I $G(^DPT(DFN1,-9))'=DFN2 D G PT1 ; AG*7.2*5/CR 7718 - Corrected condition -- now checks that patient was merged into DFN2.
  1. .W !,"THIS PATIENT HAS NOT BEEN MERGED TO FIRST PATIENT SUCCESSFULLY!"
  1. .K DIR
  1. .S DIR(0)="E"
  1. .D ^DIR
  1. S NAME1=$P($G(^DPT(DFN1,0)),U) ; ^DIQ doesn't work on merged patients
  1. S NAME2=$$GET1^DIQ(2,DFN2_",",.01,"I")
  1. W !
  1. K DIR
  1. S DIR(0)="Y",DIR("A")="Send A40 for "_NAME1_" merged into "_NAME2,DIR("B")="Yes"
  1. D ^DIR
  1. I Y="^" Q
  1. I 'Y W ! G PT1
  1. D CREATMSG^AGMPIHLO(DFN2,"A40",DFN1,.SUCCESS)
  1. I SUCCESS D Q
  1. .W !!,"A40 Message "_SUCCESS_" has been sent to merge patient"
  1. .W !,$P(^DPT(DFN1,0),U)_" to patient "_$P(^DPT(DFN2,0),U) H 2
  1. W !,"Unable to merge "_$P(^DPT(DFN1,0),U)_" to patient "_$P(^DPT(DFN2,0),U)_" on MPI" H 2
  1. Q
  1. ;
  1. MFNMFK ;EP - PROCESS MFN MESSAGE AND CREATE A MFK RESPONSE
  1. K DIR,DIC,DA,DIE,DIR
  1. W !!
  1. S DIC(0)="AQEM"
  1. S DIC("S")="I $G(^HLB(Y,2))[""MFN"""
  1. S DIC="^HLB("
  1. D ^DIC
  1. Q:Y<0
  1. D PROC^AGMPHMFN(+Y,.SUCCESS)
  1. K DIR,DIC,DA,DIE,DIR
  1. I SUCCESS D Q
  1. .W !!,"MFK Message "_SUCCESS_" has been sent to the MPI" H 2
  1. W !,"Unable to create MFK message." H 2
  1. Q
  1. ;
  1. RESEND ;EP - RESEND MESSAGE(S)
  1. RSAGAIN ;EP
  1. N FRMSGIEN,TOMSGIEN,DIC,DT,NEWIEN,ERROR,Y
  1. N MPIDIREC,TOTEVENT,GRDTOTAL,ERRORS
  1. FROM ;EP - ASK FROM
  1. S (MPIDIREC,TOTEVENT,GRDTOTAL,ERRORS)=0
  1. W !!
  1. S DIC=778
  1. S DIC(0)="AEQM"
  1. S DIC("A")="SELECT FROM MESSAGE: "
  1. ;S DIC("W")="W $P(^(0),U,20)_""**""_$P($G(^HLA($P(^(0),U,2),0)),U,4)"
  1. S DIC("W")="W $P($G(^(0)),U,5)_""**""_$P($G(^HLA($P(^(0),U,2),0)),U,4)"
  1. S DIC("S")="I $P($G(^(0)),U,4)=""O"",($P($G(^(0)),U,20)'=""SU""),($P($G(^(0)),U,5)=""MPI"")"
  1. D ^DIC
  1. Q:Y<0
  1. S FRMSGIEN=+Y
  1. TO ;EP - ASK TO
  1. S DIC=778
  1. S DIC(0)="AEQM"
  1. S DIC("A")="SELECT TO MESSAGE: "
  1. S DIC("B")=FRMSGIEN
  1. ;S DIC("W")="W $P(^(0),U,20)_""**""_$P($G(^HLA($P(^(0),U,2),0)),U,4)"
  1. S DIC("W")="W $P($G(^(0)),U,5)_""**""_$P($G(^HLA($P(^(0),U,2),0)),U,4)"
  1. S DIC("S")="I $P($G(^(0)),U,4)=""O"",($P($G(^(0)),U,20)'=""SU""),$P($G(^(0)),U,5)=""MPI"""
  1. D ^DIC
  1. Q:Y<0
  1. S TOMSGIEN=+Y
  1. I FRMSGIEN>TOMSGIEN D G FROM
  1. .W !,"FROM MSG ID CAN NOT BE GREATER THAN THE TO MSG ID" H 2
  1. S MSGIEN=FRMSGIEN-.01
  1. F S MSGIEN=$O(^HLB(MSGIEN)) Q:MSGIEN>TOMSGIEN D
  1. .S LINK=$P($G(^HLB(MSGIEN,0)),U,5)
  1. .Q:LINK'="MPI"
  1. .S DIREC=$P($G(^HLB(MSGIEN,0)),U,4)
  1. .Q:DIREC'="O"
  1. .S COMSTAT=$P($G(^HLB(MSGIEN,0)),U,20)
  1. .Q:COMSTAT="SU"
  1. .;B "S+"
  1. .S EVENT=$P($P($G(^HLB(MSGIEN,2)),U,4),"~",2)
  1. .; 05/24/2013 - KJH - TFS8008 - Remove extraneous locks on the HLO globals.
  1. .S NEWIEN=$$RESEND^HLOAPI3(MSGIEN,.ERROR)
  1. .;B "S+"
  1. .D PARSE^AGMPIACK(.DATA,NEWIEN,.HLMSTATE)
  1. .S DFN=$G(DATA(2,4,3,1,1))
  1. .S GRDTOTAL=GRDTOTAL+1
  1. .I '$D(ERROR) D
  1. ..W !,"MESSAGE RESENT, NEW NUMBER: "_NEWIEN
  1. ..W !?17,"OLD NUMBER: ",MSGIEN
  1. ..D NOW^%DTC S Y=% X ^DD("DD") W !,"SENT AT ",Y
  1. ..S TOTEVENT(EVENT)=$G(TOTEVENT(EVENT))+1
  1. .E D Q
  1. ..S ERRORS(ERROR)=$G(ERRORS(ERROR))+1
  1. ;.05/29/2013 - KJH - TFS8109 - Since this is a 'resend', we do not need to kick off these protocols again.
  1. ;.IF NO ERROR KICK PROTOCOL OFF
  1. ;.I EVENT="A28" D Q
  1. ;..S X="AG REGISTER A PATIENT",DIC=101,INDA=DFN
  1. ;..D EN^XQOR
  1. ;.I EVENT="A08" D
  1. ;..S X="AG UPDATE A PATIENT",DIC=101,INDA=DFN
  1. ;..D EN^XQOR
  1. W !!,"TOTAL MESSAGES PROCESSED: ",GRDTOTAL
  1. S ERROR=""
  1. F S ERROR=$O(ERRORS(ERROR)) Q:ERROR="" D
  1. .W !,ERRORS(ERROR)," ",ERROR
  1. S EVENT=""
  1. F S EVENT=$O(TOTEVENT(EVENT)) Q:EVENT="" D
  1. .W !,TOTEVENT(EVENT)," ",EVENT
  1. G RSAGAIN
  1. Q
  1. ;
  1. CONDT(DATE) ;EP - CONVERT FM DATE INTO 2009-04-14 00:00:00
  1. N NEWDATE,TIME
  1. S TIME=$P(DATE,".",2)
  1. S DATE=$P(DATE,".")
  1. S TIME="."_$$FILLSTR^AGMPIHL1(TIME,6,"L",0)
  1. S DATE=DATE_TIME
  1. S NEWDATE=(1700+$E(DATE,1,3))
  1. S DATE=$TR(DATE,"."," ") S DATE=$E(DATE,4,14),NEWDATE=NEWDATE_DATE
  1. S NEWDATE=$E(NEWDATE,1,4)_"-"_$E(NEWDATE,5,6)_"-"_$E(NEWDATE,7,8)_" "_$E(NEWDATE,10,11)_":"_$E(NEWDATE,12,13)_":"_$E(NEWDATE,14,15)
  1. Q NEWDATE
  1. ;
  1. DEMOPAT(DFN) ;EP - Check whether a patient is a demo patient and we are in a production environment.
  1. ; This is a demo patient if any one of the following criteria is true:
  1. ; a) TEST PATIENT INDICATOR (file 2, field 0.6) is set
  1. ; b) First five digits of the SSN are 0
  1. ; c) Patient's name matches 1"DEMO,PAT".E
  1. ; d) Patient's name matches 1"DEMO,GIMC".E
  1. Q:$G(DFN)="" 0
  1. Q:'$$PROD^XUPROD() 0 ; We only care about demo patients in production environments.
  1. N NODE,NAME
  1. S NODE=$G(^DPT(DFN,0))
  1. I $P(NODE,U,21) Q 1
  1. I $E($P(NODE,U,9),1,5)="00000" Q 1
  1. S NAME=$P(NODE,U)
  1. I NAME?1"DEMO,PAT".E Q 1
  1. I NAME?1"DEMO,GIMC".E Q 1
  1. Q 0