| 1 | SCDXACK ;ALB/JRP - HL7 BATCH ACKNOWLEDGEMENT HANDLER;26-APR-1996 ; 21 Apr 2000  1:01 PM | 
|---|
| 2 | ;;5.3;Scheduling;**44,121,128,215**;AUG 13, 1993 | 
|---|
| 3 | ; | 
|---|
| 4 | ACKZ00 ;Process batch acknowledgements from National Patient Care Database | 
|---|
| 5 | ; | 
|---|
| 6 | ;Input  : All variables set by the HL7 package | 
|---|
| 7 | ;Output : None | 
|---|
| 8 | ;Notes  : The batch acknowledgement received is an exception based | 
|---|
| 9 | ;         acknowledgement - this allows for a complete acceptance or | 
|---|
| 10 | ;         rejection of an entire batch message. | 
|---|
| 11 | ; | 
|---|
| 12 | ;         If the batch acknowledgement is a batch acceptance, than | 
|---|
| 13 | ;         the batch message will only contain acknowledgements for | 
|---|
| 14 | ;         messages that were rejected.  All other messages contained | 
|---|
| 15 | ;         in the sent batch message are assumed to be accepted. | 
|---|
| 16 | ; | 
|---|
| 17 | ;         If the batch acknowledgement is a batch rejection, than | 
|---|
| 18 | ;         the batch message will only contain acknowledgements for | 
|---|
| 19 | ;         messages that were accepted.  All other messages contained | 
|---|
| 20 | ;         in the sent batch message are assumed to be rejected. | 
|---|
| 21 | ; | 
|---|
| 22 | ;Declare variables | 
|---|
| 23 | N %,%H,%I,X,ACKDATE,BATCHID,MSGID,XMITPTR,XMITARRY,ACKCODE,SDCT | 
|---|
| 24 | N MSGTYPE,EVNTTYPE,FLDSEP,CMPNTSEP,REPTNSEP,ERRCODES,ERROR,ERRNUM,ERRCNT | 
|---|
| 25 | S XMITARRY="^TMP(""AMB-CARE"","_$J_",""BID"")" | 
|---|
| 26 | K @XMITARRY | 
|---|
| 27 | ;Remember date/time acknowledgement was received | 
|---|
| 28 | S ACKDATE=$$NOW^XLFDT() | 
|---|
| 29 | ;Get field & component seperators | 
|---|
| 30 | S FLDSEP=HL("FS") | 
|---|
| 31 | S CMPNTSEP=$E(HL("ECH"),1) | 
|---|
| 32 | S REPTNSEP=$E(HL("ECH"),2) | 
|---|
| 33 | ;Get acknowledgement code | 
|---|
| 34 | S ACKCODE=$P(HLMSA,FLDSEP,2) | 
|---|
| 35 | ;Get rejection reason | 
|---|
| 36 | S ERROR=$P(HLMSA,FLDSEP,4) | 
|---|
| 37 | ;Default to acceptance | 
|---|
| 38 | S:(ACKCODE="") ACKCODE="AA" | 
|---|
| 39 | ;Only file APPLICATION ACKNOWLEDGEMENT | 
|---|
| 40 | Q:($E(ACKCODE,1)'="A") | 
|---|
| 41 | ;Translate acknowledgement code to Accept, Reject, Error | 
|---|
| 42 | S ACKCODE=$E(ACKCODE,2) | 
|---|
| 43 | ;Get batch control ID | 
|---|
| 44 | S BATCHID=$P(HLMSA,FLDSEP,3) | 
|---|
| 45 | ;Do implied acceptance/rejection for entries in ACRP Transmission | 
|---|
| 46 | ; History file (#409.77) | 
|---|
| 47 | D ACKBID^SCDXFU12(BATCHID,ACKDATE,ACKCODE) | 
|---|
| 48 | ;Get list of all entries in Transmitted Outpatient Encounter file | 
|---|
| 49 | ; (#409.73) that were contained in batch being acknowledged | 
|---|
| 50 | D PTRS4BID^SCDXFU02(BATCHID,XMITARRY) | 
|---|
| 51 | ;Loop through list of entries - do implied acceptance/rejection | 
|---|
| 52 | S XMITPTR="" | 
|---|
| 53 | F  S XMITPTR=+$O(@XMITARRY@(XMITPTR)) Q:('XMITPTR)  D | 
|---|
| 54 | .;Mark entry as accepted/rejected by National Patient Care Database | 
|---|
| 55 | .D ACKDATA^SCDXFU03(XMITPTR,ACKDATE,ACKCODE) | 
|---|
| 56 | .;Store error code if rejected by National Patient Care Database | 
|---|
| 57 | .I (ACKCODE'="A") S X=$$CRTERR^SCDXFU02(XMITPTR,ERROR,1) | 
|---|
| 58 | ;Loop through batch acknowledgement - do explicite acceptance/rejection | 
|---|
| 59 | F  X HLNEXT D  Q:(HLQUIT'>0) | 
|---|
| 60 | .;Skip to next message header (MSH) | 
|---|
| 61 | .Q:($E(HLNODE,1,3)'="MSH") | 
|---|
| 62 | .;Get field & component seperators | 
|---|
| 63 | .S FLDSEP=$E(HLNODE,4) | 
|---|
| 64 | .S CMPNTSEP=$E(HLNODE,5) | 
|---|
| 65 | .;Get message and event types | 
|---|
| 66 | .S X=$P(HLNODE,FLDSEP,9) | 
|---|
| 67 | .S MSGTYPE=$P(X,CMPNTSEP,1) | 
|---|
| 68 | .S EVNTTYPE=$P(X,CMPNTSEP,2) | 
|---|
| 69 | .;Only process message types ACK-A08 and ACK-A23 | 
|---|
| 70 | .Q:(MSGTYPE'="ACK") | 
|---|
| 71 | .Q:((EVNTTYPE'="A08")&(EVNTTYPE'="A23")) | 
|---|
| 72 | .;Skip to message acknowledgement (MSA) | 
|---|
| 73 | .F  X HLNEXT Q:((HLQUIT'>0)!($E(HLNODE,1,3)="MSA")) | 
|---|
| 74 | .;Didn't find MSA - quit | 
|---|
| 75 | .Q:($E(HLNODE,1,3)'="MSA") | 
|---|
| 76 | .;Get acknowledgement code | 
|---|
| 77 | .S ACKCODE=$P(HLNODE,FLDSEP,2) | 
|---|
| 78 | .;Only file APPLICATION ACKNOWLEDGEMENT codes | 
|---|
| 79 | .Q:($E(ACKCODE,1)'="A") | 
|---|
| 80 | .;Translate acknowledgement code to Accept, Reject, Error | 
|---|
| 81 | .S ACKCODE=$E(ACKCODE,2) | 
|---|
| 82 | .;Get message ID being acknowledged | 
|---|
| 83 | .S MSGID=$P(HLNODE,FLDSEP,3) | 
|---|
| 84 | .;Get error codes | 
|---|
| 85 | .S ERRCODES=$P(HLNODE,FLDSEP,4) | 
|---|
| 86 | .;Do explicite acceptance/rejection for entry in ACRP Transmission | 
|---|
| 87 | .; History file (#409.77) | 
|---|
| 88 | .D ACKMID^SCDXFU12(MSGID,ACKDATE,ACKCODE) | 
|---|
| 89 | .;Find entry in Transmitted Outpatient Encounter file | 
|---|
| 90 | .S XMITPTR=$$PTR4MID^SCDXFU02(MSGID) | 
|---|
| 91 | .;Didn't find message control ID | 
|---|
| 92 | .Q:('XMITPTR) | 
|---|
| 93 | .;Store acknowledgement code | 
|---|
| 94 | .D ACKDATA^SCDXFU03(XMITPTR,ACKDATE,ACKCODE) | 
|---|
| 95 | .;Parse list of reported error codes | 
|---|
| 96 | .S ERRCNT=$L(ERRCODES,REPTNSEP),SDCT=0 | 
|---|
| 97 | .F ERRNUM=1:1:ERRCNT D | 
|---|
| 98 | ..;Get error code | 
|---|
| 99 | ..S ERROR=$P(ERRCODES,REPTNSEP,ERRNUM) | 
|---|
| 100 | ..;Store error code | 
|---|
| 101 | ..Q:(ERROR="") | 
|---|
| 102 | ..S X=$$CRTERR^SCDXFU02(XMITPTR,ERROR,1),SDCT=SDCT+1 | 
|---|
| 103 | .;If rejected, insure that at least one error code gets filed | 
|---|
| 104 | .I ACKCODE'="A",'SDCT S ERROR=999,X=$$CRTERR^SCDXFU02(XMITPTR,ERROR,1) | 
|---|
| 105 | ;Clean up | 
|---|
| 106 | K @XMITARRY | 
|---|
| 107 | ;Done | 
|---|
| 108 | Q | 
|---|