| 1 | GMRCIAC2 ;SLC/JFR - FILE IFC ACTIVITIES CONT'D ;07/08/03 11:30 | 
|---|
| 2 | ;;3.0;CONSULT/REQUEST TRACKING;**22,28,35**;DEC 27, 1997 | 
|---|
| 3 | Q  ;can't start here | 
|---|
| 4 | FILRES(GMRCO,GMRCOBX) ;file or delete results | 
|---|
| 5 | N GMRCRES,GMRCFIL,GMRCSITE,GMRCROOT,RESIEN,GMRCERR | 
|---|
| 6 | S GMRCRES=+$P(GMRCOBX,"|",5) | 
|---|
| 7 | S GMRCFIL=$P($P(GMRCOBX,"|",3),U,3) | 
|---|
| 8 | S GMRCROOT=$S($P($P(GMRCOBX,"|",3),U,2)["TIU":"TIU(",1:"MCAR(") | 
|---|
| 9 | S GMRCFIL=$P(GMRCFIL,"VA",2) | 
|---|
| 10 | S GMRCRES=GMRCRES_";"_GMRCROOT_GMRCFIL | 
|---|
| 11 | S GMRCSITE=$$IEN^XUAF4($P($P(GMRCOBX,"|",5),U,3)) | 
|---|
| 12 | I $P(GMRCOBX,"|",11)'="D" D  ;add new result | 
|---|
| 13 | . S FDA(1,123.051,"+1,"_GMRCO_",",.01)=$$NOW^XLFDT | 
|---|
| 14 | . S FDA(1,123.051,"+1,"_GMRCO_",",.02)=GMRCRES | 
|---|
| 15 | . S FDA(1,123.051,"+1,"_GMRCO_",",.03)=GMRCSITE | 
|---|
| 16 | I $P(GMRCOBX,"|",11)="D" D  ; find and delete result | 
|---|
| 17 | . N RESIEN | 
|---|
| 18 | . S RESIEN=$O(^GMR(123,GMRCO,51,"AR",GMRCRES,GMRCSITE,0)) | 
|---|
| 19 | . I 'RESIEN Q | 
|---|
| 20 | . S FDA(1,123.051,RESIEN_","_GMRCO_",",.01)="@" | 
|---|
| 21 | I '$D(FDA) Q | 
|---|
| 22 | D UPDATE^DIE("","FDA(1)",,"GMRCERR") | 
|---|
| 23 | Q | 
|---|
| 24 | ; | 
|---|
| 25 | UPDORD(GMRCDA,GMRC40) ; update CPRS order if action on placer order. | 
|---|
| 26 | ; Input: | 
|---|
| 27 | ;  GMRCDA   = ien from file 123 | 
|---|
| 28 | ;  GMRC40 = ien of activity in 40 multiple | 
|---|
| 29 | ; | 
|---|
| 30 | N GMRCDFN,GMRCAD,AC,GMRCOC,GMRCMT | 
|---|
| 31 | S GMRCDFN=$P(^GMR(123,GMRCDA,0),U,2) | 
|---|
| 32 | I $O(^GMR(123,GMRCDA,40,GMRC40,1,0)) D | 
|---|
| 33 | . S GMRCMT=1,GMRCMT(0)=GMRC40 | 
|---|
| 34 | S GMRCAD=$P(^GMR(123,GMRCDA,40,GMRC40,0),U,3) | 
|---|
| 35 | S AC=$P(^GMR(123,GMRCDA,40,GMRC40,0),U,2) | 
|---|
| 36 | S GMRCOC=$S(AC=6:"OD",AC=19:"OC",AC=10:"RE",AC=9:"RE",AC=8:"ZC",1:"SC") | 
|---|
| 37 | D EN^GMRCHL7(GMRCDFN,GMRCDA,"","",GMRCOC,"","",.GMRCMT,,GMRCAD) | 
|---|
| 38 | Q | 
|---|
| 39 | FILEACT(GMRCO,GMRCLAST,GMRCFR,GMRCAR) ;file REQUEST PROCESSING ACTIVITY | 
|---|
| 40 | ; Input: | 
|---|
| 41 | ;  GMRCO     = ien from file 123 | 
|---|
| 42 | ;  GMRCLAST  = last action taken on request | 
|---|
| 43 | ;  GMRCFR    = service that consult was forwarded from | 
|---|
| 44 | ;  GMRCAR    = name of the array containing the message | 
|---|
| 45 | ; | 
|---|
| 46 | N GMRCORC,GMRCFDA,GMRCRP,GMRCEP,GMRCACT,GMRCERR,FDA | 
|---|
| 47 | M ^TMP("GMRCFIL",$J)=@GMRCAR | 
|---|
| 48 | S GMRCORC=^TMP("GMRCFIL",$J,"ORC") | 
|---|
| 49 | S GMRCFDA(.01)=$$NOW^XLFDT | 
|---|
| 50 | S GMRCFDA(.25)=$$HL7TFM^XLFDT($P(GMRCORC,"|",9)) | 
|---|
| 51 | S GMRCFDA(1)=GMRCLAST | 
|---|
| 52 | S GMRCFDA(2)=$$HL7TFM^XLFDT($P(GMRCORC,"|",15)) | 
|---|
| 53 | D  ;get entering and responsible persons | 
|---|
| 54 | . D UNHLNAME^GMRCIUTL($P(GMRCORC,"|",10),.GMRCEP,0,U) | 
|---|
| 55 | . D UNHLNAME^GMRCIUTL($P(GMRCORC,"|",12),.GMRCRP,0,U) | 
|---|
| 56 | S GMRCFDA(.21)=GMRCEP | 
|---|
| 57 | S GMRCFDA(.22)=GMRCRP | 
|---|
| 58 | S GMRCFDA(.23)=$P($G(^TMP("GMRCFIL",$J,"OBX",5,1)),"|",5) | 
|---|
| 59 | I $D(GMRCFR) S GMRCFDA(.31)=GMRCFR | 
|---|
| 60 | I $D(^TMP("GMRCFIL",$J,"OBX",4)) D | 
|---|
| 61 | . N RFIL,RSLT,DESC,GMRCOBX,ROOT,RSITE | 
|---|
| 62 | . S GMRCOBX=^TMP("GMRCFIL",$J,"OBX",4,1) | 
|---|
| 63 | . S RFIL=$P($P(GMRCOBX,"|",3),U,3),RFIL=$P(RFIL,"VA",2) | 
|---|
| 64 | . S RSLT=+$P(GMRCOBX,"|",5) | 
|---|
| 65 | . S RSITE=$$IEN^XUAF4($P($P(GMRCOBX,"|",5),U,3)) | 
|---|
| 66 | . S ROOT=$S($P($P(GMRCOBX,"|",3),U,2)["TIU":"TIU(",1:"MCAR(") | 
|---|
| 67 | . S DESC=$P($P(GMRCOBX,"|",5),U,2) | 
|---|
| 68 | . S GMRCFDA(.24)=RSLT_";"_ROOT_RFIL_";"_DESC_";"_RSITE | 
|---|
| 69 | I GMRCLAST=10 D  ; overwite inc. report in last action? | 
|---|
| 70 | . N GMRCLACT | 
|---|
| 71 | . S GMRCLACT=$O(^GMR(123,GMRCO,40," "),-1) | 
|---|
| 72 | . I '$G(GMRCLACT) Q | 
|---|
| 73 | . I $P($G(^GMR(123,GMRCO,40,GMRCLACT,0)),U,2)'=9 Q | 
|---|
| 74 | . I $$FMDIFF^XLFDT($$NOW^XLFDT,+^GMR(123,GMRCO,40,GMRCLACT,0),2)>900 Q | 
|---|
| 75 | . I $P($G(^GMR(123,GMRCO,40,GMRCLACT,2)),U,4)=GMRCFDA(.24) D | 
|---|
| 76 | .. S GMRCACT(1)=GMRCLACT | 
|---|
| 77 | .. M FDA(1,123.02,GMRCACT(1)_","_GMRCO_",")=GMRCFDA | 
|---|
| 78 | .. D UPDATE^DIE("","FDA(1)",,"GMRCERR") | 
|---|
| 79 | . Q | 
|---|
| 80 | I '$D(GMRCACT(1)) D  ; need to create new activity | 
|---|
| 81 | . M FDA(1,123.02,"+1,"_GMRCO_",")=GMRCFDA | 
|---|
| 82 | . D UPDATE^DIE("","FDA(1)","GMRCACT","GMRCERR") | 
|---|
| 83 | K GMRCFDA,FDA | 
|---|
| 84 | D  ; file comments if present | 
|---|
| 85 | . I $D(^TMP("GMRCFIL",$J,"OBX",3)) D  ; general comments | 
|---|
| 86 | .. N TMPARR | 
|---|
| 87 | .. S TMPARR=$NA(^TMP("GMRCFIL",$J,"OBX",3)) | 
|---|
| 88 | .. D TRIMWP^GMRCIUTL(TMPARR,5) | 
|---|
| 89 | .. D WP^DIE(123.02,GMRCACT(1)_","_GMRCO_",",5,"K",TMPARR) | 
|---|
| 90 | . I $D(^TMP("GMRCFIL",$J,"NTE")) D  ; DC or cancel comments | 
|---|
| 91 | .. N TMPARR | 
|---|
| 92 | .. S TMPARR=$NA(^TMP("GMRCFIL",$J,"NTE")) | 
|---|
| 93 | .. D TRIMWP^GMRCIUTL(TMPARR,3) | 
|---|
| 94 | .. D WP^DIE(123.02,GMRCACT(1)_","_GMRCO_",",5,"K",TMPARR) | 
|---|
| 95 | .. Q | 
|---|
| 96 | D  ; update order if necessary | 
|---|
| 97 | . I $P($G(^GMR(123,GMRCO,12)),U,5)="F" Q  ; fillers have no order | 
|---|
| 98 | . I GMRCLAST=11!(GMRCLAST=13)!(GMRCLAST=14) Q  ;no status chg | 
|---|
| 99 | . I GMRCLAST=4!(GMRCLAST=20) Q  ;no status chg | 
|---|
| 100 | . D UPDORD(GMRCO,GMRCACT(1)) | 
|---|
| 101 | K ^TMP("GMRCFIL",$J) | 
|---|
| 102 | Q | 
|---|
| 103 | ; | 
|---|
| 104 | TST(ARRAY) ;process test message and check item ordered | 
|---|
| 105 | ;Input: | 
|---|
| 106 | ; ARRAY  = name of array containing message parts | 
|---|
| 107 | ; | 
|---|
| 108 | N GMRCFDA,GMRCORC,GMRCDA,GMRCITM,GMRCITER | 
|---|
| 109 | K ^TMP("GMRCIN",$J) | 
|---|
| 110 | M ^TMP("GMRCIN",$J)=@ARRAY | 
|---|
| 111 | D  ;get ordered item and service | 
|---|
| 112 | . S GMRCITM=$P(^TMP("GMRCIN",$J,"OBR"),"|",4) | 
|---|
| 113 | . I GMRCITM["VA1233" D  ; proc | 
|---|
| 114 | .. N PROC | 
|---|
| 115 | .. S PROC=$$GETPROC^GMRCIUTL(GMRCITM) | 
|---|
| 116 | .. I +PROC'>0!('$P(PROC,U,2)) S GMRCITER=$P(PROC,U,3) Q | 
|---|
| 117 | . I GMRCITM["VA1235" D | 
|---|
| 118 | .. N SERV | 
|---|
| 119 | .. S SERV=$$GETSERV^GMRCIUTL(GMRCITM) ;consult | 
|---|
| 120 | .. I +SERV'>0 S GMRCITER=$P(SERV,U,3) | 
|---|
| 121 | I $D(GMRCITER) D  ;error in procedure or service, reject new order | 
|---|
| 122 | . N GMRCRSLT | 
|---|
| 123 | . D RESP^GMRCIUTL("AR",HL("MID"),,,GMRCITER) ;build HLA( | 
|---|
| 124 | . D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"LM",1,.GMRCRSLT) | 
|---|
| 125 | I '$D(GMRCITER) D | 
|---|
| 126 | . N GMRCRSLT | 
|---|
| 127 | . D RESP^GMRCIUTL("AA",HL("MID")) ;build HLA( | 
|---|
| 128 | . D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"LM",1,.GMRCRSLT) | 
|---|
| 129 | K ^TMP("GMRCIN",$J) | 
|---|
| 130 | Q | 
|---|
| 131 | ; | 
|---|
| 132 | GETDA(GMRCORC) ; determine what local Consult ien to work on | 
|---|
| 133 | ; Input: | 
|---|
| 134 | ;  GMRCORC = ORC seg from incoming message | 
|---|
| 135 | ; Output: | 
|---|
| 136 | ;  ien from file 123 | 
|---|
| 137 | ; | 
|---|
| 138 | N GMRCORC2,GMRCORC3 | 
|---|
| 139 | S GMRCORC2=$P(GMRCORC,"|",2),GMRCORC3=$P(GMRCORC,"|",3) | 
|---|
| 140 | I $$IEN^XUAF4($P(GMRCORC2,U,2))=$$KSP^XUPARAM("INST") Q +GMRCORC2 | 
|---|
| 141 | Q +GMRCORC3 | 
|---|
| 142 | ; | 
|---|
| 143 | DUPACT(GMRCO,ACTVT,ORC,OBX) ;check to see if activity is a dup transmission | 
|---|
| 144 | ;Input: | 
|---|
| 145 | ;  GMRCO = ien of consult | 
|---|
| 146 | ;  ACTVT = ien of activity from file 123.1 | 
|---|
| 147 | ;  ORC   = ORC segment from message | 
|---|
| 148 | ;  OBX   = OBX segment containing result | 
|---|
| 149 | ; | 
|---|
| 150 | ;Output: | 
|---|
| 151 | ;  0  = activity is not a duplicate of one on file already | 
|---|
| 152 | ;  1  = duplicate, activity already on file | 
|---|
| 153 | ; | 
|---|
| 154 | N GMRCIADT,GMRCIFDT,DUP | 
|---|
| 155 | S GMRCIFDT=+$$HL7TFM^XLFDT($P(ORC,"|",9)) | 
|---|
| 156 | S GMRCIADT=+$$HL7TFM^XLFDT($P(ORC,"|",15)) | 
|---|
| 157 | S DUP=0 | 
|---|
| 158 | I $D(^GMR(123,GMRCO,40,"AC",ACTVT,GMRCIFDT,GMRCIADT)) D  Q DUP ;dupl. | 
|---|
| 159 | . N RSLT,RFIL,RSITE,ROOT | 
|---|
| 160 | . I $L($G(OBX)) D  Q:'$G(DUP) | 
|---|
| 161 | .. S RFIL=$P($P(OBX,"|",3),U,3),RFIL=$P(RFIL,"VA",2) | 
|---|
| 162 | .. S RSLT=+$P(OBX,"|",5) | 
|---|
| 163 | .. S RSITE=$$IEN^XUAF4($P($P(OBX,"|",5),U,3)) | 
|---|
| 164 | .. S ROOT=$S($P($P(OBX,"|",3),U,2)["TIU":"TIU(",1:"MCAR(") | 
|---|
| 165 | .. S RSLT=RSLT_";"_ROOT_RFIL | 
|---|
| 166 | .. I ACTVT=12,$D(^GMR(123,GMRCO,51,"AR",RSLT,RSITE)) Q  ;no dup | 
|---|
| 167 | .. I ACTVT'=12,'$D(^GMR(123,GMRCO,51,"AR",RSLT,RSITE)) Q  ;no dup | 
|---|
| 168 | .. S DUP=1 | 
|---|
| 169 | . S DUP=1 | 
|---|
| 170 | . D APPACK(GMRCO,"AR",802) ;send app. ACK and unlock record | 
|---|
| 171 | Q 0 | 
|---|
| 172 | ; | 
|---|
| 173 | APPACK(GMRCO,ACK,ERR) ;send application acknowledgement for all cases | 
|---|
| 174 | ;Input: | 
|---|
| 175 | ;  GMRCO = ien from file 123 | 
|---|
| 176 | ;  ACK   = ACK code to include  ("AA"=accept or "AR"=reject) | 
|---|
| 177 | ;  ERR   = error code to return if there is one (optional) | 
|---|
| 178 | ; | 
|---|
| 179 | ; Output: none | 
|---|
| 180 | ; | 
|---|
| 181 | ;send appl ACK | 
|---|
| 182 | N GMRCRSLT | 
|---|
| 183 | I '$G(ERR) S ERR="" | 
|---|
| 184 | D RESP^GMRCIUTL(ACK,HL("MID"),,,ERR) ;build HLA("HLA", array | 
|---|
| 185 | D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"LM",1,.GMRCRSLT) | 
|---|
| 186 | ; | 
|---|
| 187 | D UNLKREC^GMRCUTL1(GMRCO) ;unlock record | 
|---|
| 188 | Q | 
|---|