| 1 | PRCVEE1 ;WOIFO/VAC-EDIT/CANCELLATION FOR RIL/2237 FROM IFCAP TO DYNAMED ; 5/4/05 10:41am | 
|---|
| 2 | ;;5.1;IFCAP;**81**;Oct 20, 2000 | 
|---|
| 3 | ;PER VHA Directive 10-93-142, this routine should not be modified | 
|---|
| 4 | ; | 
|---|
| 5 | ;This routine will pass changes, cancellations and approvals from | 
|---|
| 6 | ;IFCAP to DynaMed because of changes in RIL's or 2237's | 
|---|
| 7 | BEGIN(REF,PRCVDT) ; | 
|---|
| 8 | ; REF is passed in as node for ^XTMP(REF) | 
|---|
| 9 | ; PRCVDT is passed in as node for ^XTMP(REF,PRCVDT) | 
|---|
| 10 | ;  Note: PRCVDT is really two data elements $H and comma delimited | 
|---|
| 11 | ; There are two XTMP structures for this process.  The first is | 
|---|
| 12 | ;  for the original message sent from IFCAP. The first node is | 
|---|
| 13 | ;  "PRCVUP*"+the RIL or 2237 number. The second node is $H. The third | 
|---|
| 14 | ;  node is either 0,1 or 2.  Zero is the standard ^XTMP structure | 
|---|
| 15 | ;  plus $H. The 1 node contains header information common to all | 
|---|
| 16 | ;  items.  The 2 node contains detail information to be sent. | 
|---|
| 17 | ;  Subordinate to the 2 node is a counter node unique for each item. | 
|---|
| 18 | ;  Under the 1 and 2 nodes, will reside an "ERR" node with | 
|---|
| 19 | ;  subordinate counters for multiple errors per item.  The second | 
|---|
| 20 | ;  ^XTMP is a pointer to the PRCVUP*xxx node.  The first node is | 
|---|
| 21 | ;  "PRCVMID*"+the Message Control ID for the original message. | 
|---|
| 22 | ;  The 1 node contains the PRCVUP*+xxx and $H to point back to the | 
|---|
| 23 | ;  original XTMP("PRCVUP*"+RIL/2237) | 
|---|
| 24 | ; PRCPRO - Procedure call ID | 
|---|
| 25 | ; PRCERR - Error array for processing message errors | 
|---|
| 26 | ; PRCFS - Field separator | 
|---|
| 27 | ; PRCCS - Component separator | 
|---|
| 28 | ; PRCRS - Repetition separator | 
|---|
| 29 | ; PRCEE - Escape separator | 
|---|
| 30 | ; PRCSC - Sub-component separator | 
|---|
| 31 | ; PRCMID - Message Control ID for sent message | 
|---|
| 32 | ; ORCDAT - a single field that holds an ORC Segment | 
|---|
| 33 | ; RQD - an array of fields for the RQD segment | 
|---|
| 34 | ; RQ1 - an array of fields for the RQ1 segment | 
|---|
| 35 | ; ORC - an array of fields for the ORC segment | 
|---|
| 36 | ; PRCCNT - a record counter | 
|---|
| 37 | ; PRCVY - Loop counter | 
|---|
| 38 | N PRCPRO,PRCERR,PRCFS,PRCCS,PRCRS,PRCEE,PRCSC,PRCDP | 
|---|
| 39 | N ORCDAT,I,J,K,Y,X,X1,X2,XX,RQD,ORC,PRCCNT,RQ1 | 
|---|
| 40 | N ODATE,PRCDTS,PRCDT,PRCMID,PRCVMID,DETAIL,HLA,HL,ERRCNT | 
|---|
| 41 | N PRCVERR,PRCVY,PRCDATA,PRCSITE,PRCFCP | 
|---|
| 42 | S PRCDATA=$P(REF,"*",2) | 
|---|
| 43 | S PRCSITE=$P(PRCDATA,"-",1),PRCFCP=$P(PRCDATA,"-",4) | 
|---|
| 44 | S PRCERR="OK" | 
|---|
| 45 | I REF="" Q | 
|---|
| 46 | S PRCDTS=$$NOW^XLFDT | 
|---|
| 47 | S PRCDT=$$FMTHL7^XLFDT(PRCDTS),ERRCNT=1 | 
|---|
| 48 | D BUILD | 
|---|
| 49 | D SEND | 
|---|
| 50 | D CLEAN | 
|---|
| 51 | Q | 
|---|
| 52 | BUILD ;Create the ORC record for the message | 
|---|
| 53 | S PRCCNT=1 | 
|---|
| 54 | S PRCPRO="PRCV_IFCAP_01_EV_DYNAMED_UPDATE" | 
|---|
| 55 | K HL D INIT^HLFNC2(PRCPRO,.HL) | 
|---|
| 56 | I $G(HL) S PRCVERR(ERRCNT)="Error Generating Message to DynaMed" D MSGRTN Q | 
|---|
| 57 | S PRCFS=HL("FS"),PRCCS=$E(HL("ECH"),1),PRCRS=$E(HL("ECH"),2),PRCEE=$E(HL("ECH"),3),PRCSC=$E(HL("ECH"),4) | 
|---|
| 58 | ; | 
|---|
| 59 | ORC ;Build ORC Segment | 
|---|
| 60 | S ORCDAT=$G(^XTMP(REF,PRCVDT,1)) | 
|---|
| 61 | Q:ORCDAT="" | 
|---|
| 62 | F I=1:1:21 S ORC(I)="" | 
|---|
| 63 | ;Convert a $H node value to a HL7 date format | 
|---|
| 64 | S ODATE=$$HTFM^XLFDT(PRCVDT) S ORC(9)=$$FMTHL7^XLFDT(ODATE) | 
|---|
| 65 | S ORC(21)=$P(ORCDAT,U,2) | 
|---|
| 66 | S ORC(10)=$P(ORCDAT,U,3)_PRCCS_$P(ORCDAT,U,4)_PRCCS_$P(ORCDAT,U,5) | 
|---|
| 67 | S $P(ORC(10),PRCCS,9)=ORC(21) | 
|---|
| 68 | ;S HLA("HLS",PRCCNT)="ORC"_PRCFS | 
|---|
| 69 | ; | 
|---|
| 70 | RQD ;Build RQD segment | 
|---|
| 71 | S PRCVY=0 F K=1:1 S PRCVY=$O(^XTMP(REF,PRCVDT,2,PRCVY)) Q:PRCVY=""  D | 
|---|
| 72 | .S DETAIL=$G(^XTMP(REF,PRCVDT,2,PRCVY)) | 
|---|
| 73 | .Q:DETAIL="" | 
|---|
| 74 | .S ORC(1)=$P(DETAIL,PRCCS,1) | 
|---|
| 75 | .S HLA("HLS",PRCCNT)="ORC"_PRCFS | 
|---|
| 76 | .F I=1:1:10 S RQD(I)="" | 
|---|
| 77 | .F I=1:1:20 S HLA("HLS",PRCCNT)=HLA("HLS",PRCCNT)_ORC(I)_PRCFS | 
|---|
| 78 | .S HLA("HLS",PRCCNT)=HLA("HLS",PRCCNT)_ORC(21) | 
|---|
| 79 | .S PRCCNT=PRCCNT+1 | 
|---|
| 80 | .S HLA("HLS",PRCCNT)="RQD"_PRCFS | 
|---|
| 81 | .S RQD(1)=PRCVY | 
|---|
| 82 | .S RQD(2)=$P(DETAIL,U,7) | 
|---|
| 83 | .S RQD(3)=$P(DETAIL,U,2) | 
|---|
| 84 | .S RQD(4)=$P(DETAIL,U,11) | 
|---|
| 85 | .S RQD(5)=$P(DETAIL,U,3) | 
|---|
| 86 | .S RQD(6)=$P(DETAIL,U,9) | 
|---|
| 87 | .S RQD(9)=$P(REF,"*",2) | 
|---|
| 88 | .S RQD(10)=$P(DETAIL,U,8) | 
|---|
| 89 | .S RQD(10)=$$FMTHL7^XLFDT(RQD(10)) | 
|---|
| 90 | .F J=1:1:9 S HLA("HLS",PRCCNT)=HLA("HLS",PRCCNT)_RQD(J)_PRCFS | 
|---|
| 91 | .S HLA("HLS",PRCCNT)=HLA("HLS",PRCCNT)_RQD(10) | 
|---|
| 92 | .S PRCCNT=PRCCNT+1 | 
|---|
| 93 | .;Build RQ1 segment | 
|---|
| 94 | .F I=1:1:5 S RQ1(I)="" | 
|---|
| 95 | .S HLA("HLS",PRCCNT)="RQ1"_PRCFS | 
|---|
| 96 | .S RQ1(1)=$P(DETAIL,U,6) | 
|---|
| 97 | .S RQ1(2)=$P(DETAIL,U,10) | 
|---|
| 98 | .S RQ1(3)=$P(DETAIL,U,12) | 
|---|
| 99 | .S RQ1(4)=$P(DETAIL,U,4)_PRCCS_PRCCS_PRCCS_$P(DETAIL,U,5) | 
|---|
| 100 | .S RQ1(5)=$P(DETAIL,U,15) | 
|---|
| 101 | .F J=1:1:4 S HLA("HLS",PRCCNT)=HLA("HLS",PRCCNT)_RQ1(J)_PRCFS | 
|---|
| 102 | .S HLA("HLS",PRCCNT)=HLA("HLS",PRCCNT)_RQ1(5) | 
|---|
| 103 | .S PRCCNT=PRCCNT+1 | 
|---|
| 104 | Q | 
|---|
| 105 | SEND ;Send record to HL7 interface to DynaMed | 
|---|
| 106 | S PRCDP="" D GENERATE^HLMA(PRCPRO,"LM",1,.PRCDP) | 
|---|
| 107 | I $P(PRCDP,PRCCS,2)'="" S PRCVERR(ERRCNT)="Generated "_$P(PRCDP,U,3)  D MSGRTN | 
|---|
| 108 | ; | 
|---|
| 109 | ;Get the Message Control ID | 
|---|
| 110 | S PRCMID=$P(PRCDP,U,1) | 
|---|
| 111 | S XX=$$HTFM^XLFDT($H,1) | 
|---|
| 112 | S X1=$$FMADD^XLFDT(XX,5) | 
|---|
| 113 | S PRCVMID="PRCVMID*"_PRCMID | 
|---|
| 114 | S ^XTMP(PRCVMID,0)=X1_U_XX_"^ACK 2237/RIL message from DynaMed" | 
|---|
| 115 | S ^XTMP(PRCVMID,1)=REF_U_PRCVDT | 
|---|
| 116 | Q | 
|---|
| 117 | MSGRTN ;Send message to Fund Control Point users for update | 
|---|
| 118 | N XMDUZ,XMMG,XMSUB,XMTEXT,XMY,XMZ | 
|---|
| 119 | S XMSUB="TRANSMISSION ERRORS FOR  "_$P(REF,"*",2) | 
|---|
| 120 | S XMDUZ="IFCAP OUTBOUND ERROR MESSAGE FOR RIL/2237" | 
|---|
| 121 | S XMTEXT="PRCVERR(" | 
|---|
| 122 | D GETFCPU^PRCVLIC(.XMY,PRCSITE,PRCFCP) | 
|---|
| 123 | D ^XMD | 
|---|
| 124 | K XMDUZ,XMMG,XMSUB,XMTEXT,XMY,XMZ | 
|---|
| 125 | Q | 
|---|
| 126 | CLEAN ;Clean up variables | 
|---|
| 127 | K ODATE,PRCPRO,PRCERR,PRCFS,PRCCS,PRCRS,PRCEE,PRCSC | 
|---|
| 128 | K DETAIL,HLA("HLS"),PRCDP,PRCERR,PRCMID,PRCVMID,PRCDT,PRCDTS | 
|---|
| 129 | K ORCDAT,I,J,K,Y,X,X1,X2,XX,HLA,RQD,RQ1,ORC,PRCCNT,PRCVY | 
|---|
| 130 | K XMDUZ,XMMG,XMSUB,XMTEXT,XMY,XMZ,ERRCNT,PRCVERR | 
|---|
| 131 | K PRCDATA,PRCSITE,PRCFCP | 
|---|
| 132 | Q | 
|---|
| 133 | ; | 
|---|