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
|
---|