1 | IVMCMC ;ALB/SEK,BRM,GN - CHECK INCOME TEST TRANSMISSION SEGMENTS ; 9/17/03 12:54pm
|
---|
2 | ;;2.0;INCOME VERIFICATION MATCH;**17,34,49,51,90**;21-OCT-94
|
---|
3 | ;
|
---|
4 | ;IVM*2*90 - stop upload of LTC type 4 test when staus code not valid
|
---|
5 | ;
|
---|
6 | EN ; Check segment structure of Income Test (Z10) transmission.
|
---|
7 | ; Variable input:
|
---|
8 | ; IVMDA -- pointer to an incoming message line in file #772
|
---|
9 | ; IVMORF -- [optional]: set to 1 if Z10 is an ORF message
|
---|
10 | ; IVMSEG -- the MSH segment string
|
---|
11 | ;
|
---|
12 | ; plus the usual HL7 variables: HLDA, HLFS, HLQ, HLECH
|
---|
13 | ;
|
---|
14 | ; Variable output:
|
---|
15 | ; DFN -- pointer to the patient in file #2
|
---|
16 | ; DGLY -- Income Year
|
---|
17 | ; IVMFLGC -- Number of Dependent Children
|
---|
18 | ; IVMMCI -- HL7 message control id of query sent to IVM Center
|
---|
19 | ;
|
---|
20 | ; and the global array ^TMP($J,"IVMCM" which holds the message.
|
---|
21 | ;
|
---|
22 | N ERRMSG,DOBP,SEXP,X,Y
|
---|
23 | ;
|
---|
24 | ; - message control id from MSH segment
|
---|
25 | S MSGID=$P(IVMSEG,HLFS,10)
|
---|
26 | ;
|
---|
27 | ; - if query response (ORF), do additional edit checks
|
---|
28 | I $G(IVMORF) D ADDL I $D(HLERR) G ENQ
|
---|
29 | ;
|
---|
30 | ; - check the PID segment and get a match on patient
|
---|
31 | D GET("PIDV") I IVMSEG1'="PID" D PROB("Missing PID segment") G ENQ
|
---|
32 | S DOBP=$P(IVMSEG,HLFS,8),SEXP=$P(IVMSEG,HLFS,9)
|
---|
33 | I SEXP'="F"&(SEXP'="M") D PROB("Incorrect value for Sex") G ENQ
|
---|
34 | S X=$$FMDATE^HLFNC(DOBP),%DT=X D ^%DT I Y<0 D PROB("Invalid Date of Birth") G ENQ
|
---|
35 | S DFN=$$LOOKUP^IVMUFNC($P(IVMSEG,HLFS,20),Y,SEXP,.ERRMSG)
|
---|
36 | I 'DFN D PROB(ERRMSG) G ENQ
|
---|
37 | ;
|
---|
38 | ; - check for veteran's ZIC and ZIR segments
|
---|
39 | D GET("ZICV") I IVMSEG1'="ZIC" D PROB("Missing veteran's ZIC segment") G ENQ
|
---|
40 | S DGLY=$$FMDATE^HLFNC($P(IVMSEG,"^",3)) ; income year
|
---|
41 | I 'DGLY D PROB("Missing veteran's Income Year") G ENQ
|
---|
42 | D GET("ZIRV") I IVMSEG1'="ZIR" D PROB("Missing veteran's ZIR segment") G ENQ
|
---|
43 | ;
|
---|
44 | ; - check for spouse's ZDP, ZIC, ZIR segments
|
---|
45 | D GET("ZDPS") I IVMSEG1'="ZDP" D PROB("Missing spouse's ZDP segment") G ENQ
|
---|
46 | D GET("ZICS") I IVMSEG1'="ZIC" D PROB("Missing spouse's ZIC segment") G ENQ
|
---|
47 | D GET("ZIRS") I IVMSEG1'="ZIR" D PROB("Missing spouse's ZIR segment") G ENQ
|
---|
48 | ;
|
---|
49 | ; - check for dependent children's ZDP, ZIC, ZIR segments and ZMT segment
|
---|
50 | S IVMFLGC=0
|
---|
51 | F IVMNBR=1:1 D I $D(HLERR)!(IVMSEG1="ZMT") Q
|
---|
52 | .D GET("ZDPC",IVMNBR) I IVMSEG1'="ZDP",IVMSEG1'="ZMT" D PROB("Missing child's ZDP segment or ZMT segment") Q
|
---|
53 | .I IVMSEG1="ZMT" Q
|
---|
54 | .I $P(IVMSEG,"^",2)=""!($P(IVMSEG,"^",3)="")!($P(IVMSEG,"^",4)="") D PROB("Missing child data from ZDP segment") Q
|
---|
55 | .D GET("ZICC",IVMNBR) I IVMSEG1'="ZIC" D PROB("Missing child's ZIC segment") Q
|
---|
56 | .D GET("ZIRC",IVMNBR) I IVMSEG1'="ZIR" D PROB("Missing child's ZIR segment") Q
|
---|
57 | .S IVMFLGC=IVMFLGC+1 ; # of children
|
---|
58 | ;
|
---|
59 | I $D(HLERR) G ENQ
|
---|
60 | ;
|
---|
61 | ; - check for remaining ZMT and ZBT segments
|
---|
62 | D GET("ZMT2") I IVMSEG1'="ZMT" D PROB("Missing Copay Test ZMT segment") G ENQ
|
---|
63 | ;
|
---|
64 | ; ** added ZMT4 lines for LTC phase II (IVM*2*49)
|
---|
65 | ; uncomment after all sites have installed to enable consistency chk
|
---|
66 | D GET("ZMT4") I IVMSEG1'="ZMT" D PROB("Missing LTC Test ZMT segment") G ENQ
|
---|
67 | ;
|
---|
68 | ; remove next line after all sites have installed
|
---|
69 | ;D GET("ZMT4") I IVMSEG1'="ZMT" K ^TMP($J,"IVMCM","ZMT4") S IVMDA=IVMDA-1
|
---|
70 | ;
|
---|
71 | D GET("ZBT") I IVMSEG1'="ZBT" D PROB("Missing Beneficiary Travel ZBT segment") G ENQ
|
---|
72 | ;
|
---|
73 | ENQ I IVMSEG1="MSH" S IVMDA=IVMDA-1,HLERR="",IVMTYPE=5
|
---|
74 | K IVMSEG1,IVMNBR
|
---|
75 | Q
|
---|
76 | ;
|
---|
77 | ;
|
---|
78 | GET(SEG,NUM) ; Get the next HL7 segment.
|
---|
79 | ; Formal input:
|
---|
80 | ; SEG -- String with which to build ^TMP($J,"IVMCM"
|
---|
81 | ; NUM -- Number to index child dependent strings [optional]
|
---|
82 | ; Required variable input:
|
---|
83 | ; HLDA -- Pointer to the incoming message in file #772
|
---|
84 | ; IVMDA -- Pointer to the next message line within file #772
|
---|
85 | S IVMDA=$O(^TMP($J,IVMRTN,+IVMDA)),IVMSEG=$G(^(+IVMDA,0))
|
---|
86 | S IVMSEG1=$E(IVMSEG,1,3)
|
---|
87 | I $G(SEG)="" G GETQ
|
---|
88 | I $G(NUM),IVMSEG1'="ZMT" S ^TMP($J,"IVMCM",SEG,NUM)=$P(IVMSEG,HLFS,2,99) G GETQ
|
---|
89 | I IVMSEG1="ZMT",$E(SEG,1,3)'="ZMT" S SEG="ZMT1"
|
---|
90 | ;
|
---|
91 | ;IVM*2*90 don't allow upload of LTC with a date & a bad status code
|
---|
92 | I SEG="ZMT4",$P(IVMSEG,HLFS,3),$P(IVMSEG,HLFS,4)'=0,$P(IVMSEG,HLFS,4)'=1,$P(IVMSEG,HLFS,4)'="""""" Q
|
---|
93 | ;
|
---|
94 | S ^TMP($J,"IVMCM",SEG)=$P(IVMSEG,HLFS,2,99)
|
---|
95 | GETQ Q
|
---|
96 | ;
|
---|
97 | PROB(ERR) ; Process encountered errors.
|
---|
98 | ; Input: ERR -- Error text
|
---|
99 | S HLERR=ERR
|
---|
100 | D ACK^IVMPREC
|
---|
101 | Q
|
---|
102 | ;
|
---|
103 | ADDL ; Perform additional segment checks for ORF messages.
|
---|
104 | ;
|
---|
105 | N DOB,ERRMSG,IVMMSA,IVMPAT,IVMQRD,IVMQRF,QARRAY,QRYIEN,SEX,SSN
|
---|
106 | ;
|
---|
107 | ; edit checks for MSA, QRD, and QRF segments
|
---|
108 | D GET("") I IVMSEG1'="MSA" D PROB("Missing required MSA segment") G ADDLQ
|
---|
109 | S IVMMCI=$P(IVMSEG,"^",3) ; msg control id of msg being acknowledged
|
---|
110 | S IVMMSA=IVMSEG
|
---|
111 | ; trace reply back to the original query msg
|
---|
112 | S QRYIEN=$$FINDMSG^IVMCQ2(IVMMCI)
|
---|
113 | I 'QRYIEN D PROB("Query not found") G ADDLQ
|
---|
114 | I QRYIEN,'$$GET^IVMCQ2(QRYIEN,.QARRAY) D PROB("Query not found") G ADDLQ
|
---|
115 | S DFN=QARRAY("DFN")
|
---|
116 | ;
|
---|
117 | D GET("") I IVMSEG1'="QRD" D PROB("Missing required QRD segment") G ADDLQ
|
---|
118 | S IVMQRD=IVMSEG
|
---|
119 | S SSN=$P(IVMQRD,HLFS,9)
|
---|
120 | ;
|
---|
121 | D GET("") I IVMSEG1'="QRF" D PROB("Missing required QRF segment") G ADDLQ
|
---|
122 | S IVMQRF=IVMSEG
|
---|
123 | S DOB=$$FMDATE^HLFNC($P(IVMQRF,HLFS,5))
|
---|
124 | S SEX=$P(IVMQRF,HLFS,6)
|
---|
125 | ;
|
---|
126 | ;
|
---|
127 | ; if application reject rec'd from HEC (i.e. No income data on file)
|
---|
128 | I $P(IVMMSA,HLFS,2)="AR" D
|
---|
129 | .S HLERR=""
|
---|
130 | .S IVMTYPE=7 ;type 4 is now used for LTC test (IVM*2*49)
|
---|
131 | .; - if patient identifiers rec'd from HEC incorrect,
|
---|
132 | .; queue off job to send a new query
|
---|
133 | .I $$GETPAT^IVMUFNC(DFN,.IVMPAT),((SSN'=IVMPAT("SSN"))!(DOB'=IVMPAT("DOB"))!(SEX'=IVMPAT("SEX"))) D QRYQUE^IVMCQ2(DFN)
|
---|
134 | ;
|
---|
135 | ADDLQ Q
|
---|