| 1 | PRCHAAC2 ;WIFO/CR-CONT. OF IFCAP HL7 MESSAGE TO AUSTIN ;3/4/05 11:43 AM | 
|---|
| 2 | ;;5.1;IFCAP;**79**;Oct 20, 2000 | 
|---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ;This routine is a continuation of the routine PRCHAAC1. | 
|---|
| 6 | ; | 
|---|
| 7 | CLEAN K %,PRCACMSG,PRCACK,PRCBATCH,PRCDATE,PRCMESG,PRCMID,PRCSUB,HL,HLFS,HLRS,HLRS,HLNODE,HLNEXT,HLQUIT,PRCTAAC,PRCFAAC,PRCDIF,X,X1,Y | 
|---|
| 8 | Q | 
|---|
| 9 | ; | 
|---|
| 10 | END ;Log the date/time ($H format) of the AAC response and the creation date | 
|---|
| 11 | ;(FileMan format) in ^XTMP | 
|---|
| 12 | S X=DT D NOW^%DTC S X1=$$FMTH^XLFDT(%) | 
|---|
| 13 | S $P(^XTMP(PRCSUB,"TIME"),U,2)=X1 | 
|---|
| 14 | S $P(^XTMP(PRCSUB,0),U,2)=X | 
|---|
| 15 | S X=DT D NOW^%DTC,YX^%DTC S PRCDATE=Y | 
|---|
| 16 | S $P(^XTMP(PRCSUB,0),U,3)="Processing done "_PRCDATE_" for IFCAP HL7 MSG to the AAC" | 
|---|
| 17 | ; | 
|---|
| 18 | ;Get an approximated calculation of how long it takes to get a response | 
|---|
| 19 | ;from the AAC, to help in troubleshooting problems. | 
|---|
| 20 | I $P(^XTMP(PRCSUB,"TIME"),U,1)]""&$P(^XTMP(PRCSUB,"TIME"),U,2)]"" D | 
|---|
| 21 | . S PRCTAAC=$P(^XTMP(PRCSUB,"TIME"),U,1)    ;date/time msg to the AAC | 
|---|
| 22 | . S PRCFAAC=$P(^XTMP(PRCSUB,"TIME"),U,2)    ;date/time msg from the AAC | 
|---|
| 23 | . S PRCDIF=$$HDIFF^XLFDT(PRCFAAC,PRCTAAC,3) ;time difference | 
|---|
| 24 | . S $P(^XTMP(PRCSUB,"TIME"),U,3)=PRCDIF     ;time elapsed | 
|---|
| 25 | D CLEAN | 
|---|
| 26 | Q | 
|---|
| 27 | ; | 
|---|
| 28 | ERR ;Errors from incoming messages are logged here | 
|---|
| 29 | I $D(PRCERR) D | 
|---|
| 30 | . S PRCMSG=PRCMSG_";"_"HL7 Message ID: "_$S(PRCMID>0:PRCMID,1:"No MID") | 
|---|
| 31 | . S ^XTMP(PRCSUB,"ERR",$H)=PRCMSG | 
|---|
| 32 | Q | 
|---|
| 33 | ; | 
|---|
| 34 | LOG ;Set purge date to keep ^XTMP clean; first piece is purge date, FM form | 
|---|
| 35 | S X=$$FMADD^XLFDT(DT,7)   ;keep for seven days | 
|---|
| 36 | S $P(^XTMP(PRCSUB,0),U,1)=X | 
|---|
| 37 | ;Record date of message to the AAC | 
|---|
| 38 | S X=DT D NOW^%DTC S X1=$$FMTH^XLFDT(%) | 
|---|
| 39 | S $P(^XTMP(PRCSUB,"TIME"),U,1)=X1 | 
|---|
| 40 | ;Keep track of who created the message | 
|---|
| 41 | S $P(^XTMP(PRCSUB,"TIME"),U,4)=PRCDUZ | 
|---|
| 42 | Q | 
|---|
| 43 | ; | 
|---|
| 44 | SUB ;Subscriber to handle the ACKs coming from the AAC | 
|---|
| 45 | ;Error message 'No MID' = no message id | 
|---|
| 46 | S HLFS=$G(HL("FS")) | 
|---|
| 47 | S HLCS=$E(HL("ECH"),1),HLRS=$E(HL("ECH"),2) | 
|---|
| 48 | I HL("MTN")'="MFK" S PRCERR=1,PRCMSG="1A"_"^Wrong message name." D REC Q | 
|---|
| 49 | X HLNEXT I HLQUIT'>0 S PRCERR=1,PRCMSG="2A"_"^Missing MSH segment." D REC Q | 
|---|
| 50 | S PRCACMSG=$P(HLNODE,HLFS,10) | 
|---|
| 51 | X HLNEXT I HLQUIT'>0 S PRCERR=1,PRCMSG="3A"_"^Missing segments." D REC Q | 
|---|
| 52 | S PRCMID=$$FLD^HLCSUTL(.HLNODE,3) I '$D(PRCMID) S PRCMID="No MID",PRCERR=1,PRCMSG="4A"_"^No MID" D REC Q | 
|---|
| 53 | S PRCSUB="PRCHAAC1;"_PRCMID | 
|---|
| 54 | I $P(HLNODE,HLFS)'="MSA" S PRCERR=1,PRCMSG="5A"_"^No MSA segment." D REC Q | 
|---|
| 55 | S PRCACK=$P(HLNODE,HLFS,2) | 
|---|
| 56 | S PRCBATCH=$G(HLNODE) | 
|---|
| 57 | I $P(HLNODE,HLFS)="MSA"&(PRCACK="AA") D  Q | 
|---|
| 58 | . S ^XTMP(PRCSUB,"AAC_MSG_ID")=PRCACMSG | 
|---|
| 59 | . S ^XTMP(PRCSUB,"IFCAP_MSG_ID")=$P(PRCBATCH,HLFS,3) | 
|---|
| 60 | . D END | 
|---|
| 61 | ; | 
|---|
| 62 | ;If there is an error, store the entire string. | 
|---|
| 63 | I PRCACK'="AA" S PRCERR=1,PRCMSG=PRCACK_";"_PRCBATCH D REC | 
|---|
| 64 | Q | 
|---|
| 65 | ; | 
|---|
| 66 | REC ;For errors, log as much as possible in ^XTMP | 
|---|
| 67 | I '$D(PRCMID) S PRCMID=$$FLD^HLCSUTL(.HLNODE,3) | 
|---|
| 68 | I '$D(PRCSUB) S PRCSUB=$S(PRCMID>0:"PRCHAAC1;"_PRCMID,1:"PRCHAAC1;"_"No MID") | 
|---|
| 69 | D ERR,END | 
|---|
| 70 | Q | 
|---|