| 1 | RGMTHL2 ;BIR/CML-COMPILE MPI/PD HL7 DATA FOR BI-DIRECTIONAL TCP ;11/15/01
 | 
|---|
| 2 |  ;;1.0;CLINICAL INFO RESOURCE NETWORK;**21,23,28,20**;30 Apr 99
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;Reference to ^ORD(101 supported by IA #2596
 | 
|---|
| 5 |  ;Reference to ^HL(772 supported by IA #3464
 | 
|---|
| 6 |  ;Reference to ^HL(771.6 supported by IA #2507
 | 
|---|
| 7 |  ;Reference to ^HLMA( supported by IA #3273
 | 
|---|
| 8 |  ;Reference to ^DPT("AICN" supported by IA #2070
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ;Check to see if the ^XTMP global is present and/or complete
 | 
|---|
| 11 |  W @IOF
 | 
|---|
| 12 |  W !,"This utility searches the HL7 MESSAGE TEXT (#772) file for a selected"
 | 
|---|
| 13 |  W !,"date range.  Each HL7 message in the date range is examined.  If the"
 | 
|---|
| 14 |  W !,"RELATED EVENT PROTOCOL field contains the MPI/PD protocols (e.g., ""VAF"","
 | 
|---|
| 15 |  W !,"""RG"", or ""MPI"") data is compiled into the ^XTMP(""RGMT"",""HL"" array."
 | 
|---|
| 16 |  W !!,"A cross-reference is built on patient ICN and DFN for faster data retrieval"
 | 
|---|
| 17 |  W !,"for the associated reports."
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  G:'$D(^XTMP("RGMT","HL")) BEGIN
 | 
|---|
| 20 |  I '$D(^XTMP("RGMT","HL","@@@@","STOPPED")) D
 | 
|---|
| 21 |  .W !!,$C(7),"The Compile MPI/PD HL7 Data compilation is already running!" G QUIT
 | 
|---|
| 22 |  S CDT=$$FMTE^XLFDT($E(+^XTMP("RGMT","HL","@@@@","STOPPED"),1,12))
 | 
|---|
| 23 |  W !!,"=> ""Compile MPI/PD HL7 Data"" last ran to completion on "_CDT_".",!
 | 
|---|
| 24 |  I $D(^XTMP("RGMT","HL","@@@@","RANGE")) D
 | 
|---|
| 25 |  .W !,"=> Data has been compiled for ",^XTMP("RGMT","HL","@@@@","RANGE"),"."
 | 
|---|
| 26 |  W ! K DIR S DIR(0)="SMB^D:DELETE;A:APPEND"
 | 
|---|
| 27 |  S DIR("A",1)="Do you want to:"
 | 
|---|
| 28 |  S DIR("A",2)="(D)elete existing data and recompile."
 | 
|---|
| 29 |  S DIR("A")="(A)ppend new data after last date of existing data"
 | 
|---|
| 30 |  S DIR("B")="A"
 | 
|---|
| 31 |  S DIR("?",1)="Enter:",DIR("?",2)="D if you want to delete exiting data and recompile."
 | 
|---|
| 32 |  S DIR("?",3)="A or <RET> to append new data after last date of existing data."
 | 
|---|
| 33 |  S DIR("?")="""^"" to HALT."
 | 
|---|
| 34 |  D ^DIR K DIR G:$D(DIRUT) QUIT S ACT=Y
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 | BEGIN ;
 | 
|---|
| 37 |  S RGNOW=$$NOW^XLFDT()
 | 
|---|
| 38 |  S:'$D(ACT) ACT="D"
 | 
|---|
| 39 |  W !!,"Enter date range for data to be compiled."
 | 
|---|
| 40 |  I ACT="A" D
 | 
|---|
| 41 |  .S X1=^XTMP("RGMT","HL","@@@@","COMPENDDATE"),X2=1 D C^%DTC
 | 
|---|
| 42 |  .S RGBDT=X W !,"Beginning Date for Report: ",$$FMTE^XLFDT(X)
 | 
|---|
| 43 |  I ACT="D" D  G:$D(DIRUT) QUIT
 | 
|---|
| 44 |  .K DIR,DIRUT,DTOUT,DUOUT
 | 
|---|
| 45 |  .S DIR(0)="DAO^:"_$$NOW^XLFDT()_":EPXT",DIR("A")="Beginning Date for Report:  "
 | 
|---|
| 46 |  .D ^DIR K DIR Q:$D(DIRUT)  S RGBDT=Y
 | 
|---|
| 47 |  K DIR,DIRUT,DTOUT,DUOUT
 | 
|---|
| 48 |  S DIR(0)="DAO^"_RGBDT_":"_$$NOW^XLFDT()_":EPXT",DIR("A")="Ending Date for Report:  "
 | 
|---|
| 49 |  D ^DIR K DIR G:$D(DIRUT) QUIT S RGEDT=Y
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 | QUE ;Queue the task.
 | 
|---|
| 52 |  S ZTSAVE("RGBDT")="",ZTSAVE("RGEDT")="",ZTSAVE("ACT")=""
 | 
|---|
| 53 |  S ZTIO="",ZTRTN="START^RGMTHL2",ZTDESC="Compile MPI/PD HL7 Data (bi-directional)" D ^%ZTLOAD
 | 
|---|
| 54 |  G QUIT
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 | START ;
 | 
|---|
| 57 |  S QFLG=0
 | 
|---|
| 58 |  K ^XTMP("RGMT","HL","@@@@","STOPPED")
 | 
|---|
| 59 |  I ACT="D" K ^XTMP("RGMT","HL"),^XTMP("RGMT","HLICN"),^XTMP("RGMT","HLDFN")
 | 
|---|
| 60 |  S U="^" D NOW^%DTC
 | 
|---|
| 61 |  S ^XTMP("RGMT","HL","@@@@","STARTED")=%
 | 
|---|
| 62 |  S ^XTMP("RGMT",0)=$$FMADD^XLFDT(DT,30)_"^"_%_"^MPI/PD Maintenance Data"
 | 
|---|
| 63 |  S STOPDT=$S($L(RGEDT)=7:RGEDT_.24,1:RGEDT)
 | 
|---|
| 64 |  S RGDT=$S($L(RGBDT)=7:$$FMADD^XLFDT(RGBDT,-1)_.24,1:RGBDT-.0001)
 | 
|---|
| 65 |  I ACT="D" S ^XTMP("RGMT","HL","@@@@","COMPBEGINDATE")=RGDT
 | 
|---|
| 66 |  S ^XTMP("RGMT","HL","@@@@","COMPENDDATE")=STOPDT
 | 
|---|
| 67 |  S PRGBDT=$$FMTE^XLFDT(RGDT)
 | 
|---|
| 68 |  S PRGEDT=$$FMTE^XLFDT(STOPDT)
 | 
|---|
| 69 |  S ^XTMP("RGMT","HL","@@@@","RANGE")=PRGBDT_" to "_PRGEDT
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 | LOOP ;Loop on ^HL(772 date xref
 | 
|---|
| 72 |  F  S RGDT=$O(^HL(772,"B",RGDT)) Q:'RGDT  Q:RGDT>STOPDT  Q:QFLG  D
 | 
|---|
| 73 |  .I $D(^XTMP("RGMT","HL","@@@@","FORCE STOP")) S QFLG=1 Q
 | 
|---|
| 74 |  .S ^XTMP("RGMT","HL","@@@@","NOW PROCESSING DATE")=RGDT
 | 
|---|
| 75 |  .S IEN=0
 | 
|---|
| 76 |  .F  S IEN=$O(^HL(772,"B",RGDT,IEN)) Q:'IEN  S IEN0=$G(^HL(772,IEN,0)) Q:'IEN0  D
 | 
|---|
| 77 |  ..S REP=$P(IEN0,U,10)
 | 
|---|
| 78 |  ..I REP D
 | 
|---|
| 79 |  ...I '$D(^ORD(101,REP,0)) Q
 | 
|---|
| 80 |  ...S REPNM=$P(^ORD(101,REP,0),U),RPNM=$E(REPNM,1,4)
 | 
|---|
| 81 |  ...I RPNM["VAF"!(RPNM["RG")!(RPNM["MPI") D
 | 
|---|
| 82 |  ....S TYPE=$P(IEN0,U,4),STAT=$P($G(^HL(772,IEN,"P")),U)
 | 
|---|
| 83 |  ....I STAT="" D
 | 
|---|
| 84 |  .....S HL773=$O(^HLMA("B",IEN,0))
 | 
|---|
| 85 |  .....S STAT=$P($G(^HLMA(HL773,"P")),"^")
 | 
|---|
| 86 |  ....I STAT S STATNM=$P(^HL(771.6,STAT,0),U)
 | 
|---|
| 87 |  ....I STAT="" S STATNM="NO STATUS"
 | 
|---|
| 88 |  ....S ^XTMP("RGMT","HL",REPNM,$P(RGDT,"."),TYPE,STATNM,IEN)=""
 | 
|---|
| 89 | PAT ....S TXT=0 F  S TXT=$O(^HL(772,IEN,"IN",TXT)) Q:'TXT  D
 | 
|---|
| 90 |  .....I $P(^HL(772,IEN,"IN",TXT,0),U)="PID" S GOT=0 D  Q:GOT
 | 
|---|
| 91 |  ......I $P(^HL(772,IEN,"IN",TXT,0),"^",4)["V" S ICN=+$P(^(0),"^",4) D SET
 | 
|---|
| 92 |  ......I $P(^HL(772,IEN,"IN",TXT,0),"^",3)["V" S ICN=+$P(^(0),"^",3) D SET
 | 
|---|
| 93 |  .....I $P(^HL(772,IEN,"IN",TXT,0),U)="QAK" S GOT=0 D  Q:GOT
 | 
|---|
| 94 |  ......I +$P(^(0),U,2) S DFN=+$P(^(0),U,2) S ^XTMP("RGMT","HLDFN",DFN,RGDT,REPNM,TYPE,STATNM,IEN)="",GOT=1
 | 
|---|
| 95 |  .....I $P(^HL(772,IEN,"IN",TXT,0),U)="RDT" S ICN=+$P($P(^(0),U,6),"V") I ICN D  Q
 | 
|---|
| 96 |  ......S ^XTMP("RGMT","HLICN",ICN,RGDT,REPNM,TYPE,STATNM,IEN)="(Look at ^HL(772,"_IEN_",""IN"","_TXT_",0)",GOT=1
 | 
|---|
| 97 |  .....I $P(^HL(772,IEN,"IN",TXT,0),U)="VTQ" S GOT=0 D  Q:GOT
 | 
|---|
| 98 |  ......S SSN=$P($P(^HL(772,IEN,"IN",TXT,0),"@00122",2),"~",3) I SSN D
 | 
|---|
| 99 |  .......S DFN=$O(^DPT("SSN",SSN,0)) I DFN D
 | 
|---|
| 100 |  ........S ^XTMP("RGMT","HLDFN",DFN,RGDT,REPNM,TYPE,STATNM,IEN)="(Look at ^HL(772,"_IEN_",""IN"","_TXT_",0)",GOT=1
 | 
|---|
| 101 |  .....I $P(^HL(772,IEN,"IN",TXT,0),U)="MFE",$P(^(0),U,2)="MAD" S ICN=+$P($P(^(0),U,5),"~",4) D SET Q
 | 
|---|
| 102 |  .....I $P(^HL(772,IEN,"IN",TXT,0),U)="MFE",$P(^(0),U,2)="MUP" D  Q
 | 
|---|
| 103 |  ......S ICN=+$P(^HL(772,IEN,"IN",TXT,0),U,5) I $L(ICN)=3 S ICN=+$P($P(^HL(772,IEN,"IN",TXT,0),U,5),"~",4)
 | 
|---|
| 104 |  ......D SET
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  D NOW^%DTC S ^XTMP("RGMT","HL","@@@@","STOPPED")=%
 | 
|---|
| 107 |  K ^XTMP("RGMT","HL","@@@@","NOW PROCESSING DATE"),^XTMP("RGMT","HL","@@@@","FORCE STOP")
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 | QUIT ;
 | 
|---|
| 110 |  K %,ACT,CDT,DFN,GOT,HL773,ICN,IEN,IEN0,PRGBDT,PRGEDT,REP,REPNM,RGBDT,RGDT
 | 
|---|
| 111 |  K RGEDT,RGNOW,RPNM,SSN,STAT,STATNM,STOPDT,TYPE,TXT,X,X1,X2,Y,ZTSK,STOP,FROM,QFLG,RANGE
 | 
|---|
| 112 |  S:$D(ZTQUEUED) ZTREQ="@"
 | 
|---|
| 113 |  Q
 | 
|---|
| 114 |  ;
 | 
|---|
| 115 | SET ;
 | 
|---|
| 116 |  S GOT=1
 | 
|---|
| 117 |  S ^XTMP("RGMT","HLICN",ICN,RGDT,REPNM,TYPE,STATNM,IEN)=""
 | 
|---|
| 118 |  S DFN=$O(^DPT("AICN",ICN,0)) I +DFN S ^XTMP("RGMT","HLDFN",DFN,RGDT,REPNM,TYPE,STATNM,IEN)=""
 | 
|---|
| 119 |  Q
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 | STOP ;stop the compile
 | 
|---|
| 122 |  W !!,"Stop HL7 Message Compile."
 | 
|---|
| 123 |  I '$D(^XTMP("RGMT","HL","@@@@","STARTED")) W !?3,"<< No compile is currently running >>" G QUIT
 | 
|---|
| 124 |  I $D(^XTMP("RGMT","HL","@@@@","STARTED"))&($D(^XTMP("RGMT","HL","@@@@","STOPPED"))) W !?3,"<< No compile is currently running >>" G QUIT
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  W !!,"A compile is currently running for ",?35,": ",^XTMP("RGMT","HL","@@@@","RANGE"),"."
 | 
|---|
| 127 |  W ! S DIR(0)="Y",DIR("B")="Yes",DIR("A")="Do you want to stop this compile" D ^DIR K DIR
 | 
|---|
| 128 |  I +Y D
 | 
|---|
| 129 |  .S ^XTMP("RGMT","HL","@@@@","FORCE STOP")=""
 | 
|---|
| 130 |  .S STOP=$$NOW^XLFDT
 | 
|---|
| 131 |  .S RANGE=^XTMP("RGMT","HL","@@@@","RANGE"),FROM=$P(RANGE," to ",1)
 | 
|---|
| 132 |  .S ^XTMP("RGMT","HL","@@@@","RANGE")=FROM_" to "_$$FMTE^XLFDT(STOP)
 | 
|---|
| 133 |  G QUIT
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 | SHOW ;show status of compile
 | 
|---|
| 136 |  W !!,"Show status of HL7 Message Compile."
 | 
|---|
| 137 |  I '$D(^XTMP("RGMT","HL","@@@@","STARTED")) W !?3,"<< No compile is currently running >>" G QUIT
 | 
|---|
| 138 |  W !!,"Compile range ",?31,": ",^XTMP("RGMT","HL","@@@@","RANGE")
 | 
|---|
| 139 |  W !,"The compile was started ",?31,": ",$$FMTE^XLFDT(^XTMP("RGMT","HL","@@@@","STARTED"))
 | 
|---|
| 140 |  I $D(^XTMP("RGMT","HL","@@@@","NOW PROCESSING DATE")) D
 | 
|---|
| 141 |  .W !,"The compile is now processing ",?31,": ",$$FMTE^XLFDT(^XTMP("RGMT","HL","@@@@","NOW PROCESSING DATE"))
 | 
|---|
| 142 |  I $D(^XTMP("RGMT","HL","@@@@","STOPPED")) D
 | 
|---|
| 143 |  .W !,"The compile was stopped ",?31,": ",$$FMTE^XLFDT(^XTMP("RGMT","HL","@@@@","STOPPED"))
 | 
|---|
| 144 |  G QUIT
 | 
|---|