| [613] | 1 | IBCNERP2 ;DAOU/BHS - IBCNE IIV RESPONSE REPORT COMPILE ;03-JUN-2002 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**184,271**;21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ; Input vars from IBCNERP1: | 
|---|
|  | 6 | ;  IBCNERTN="IBCNERP1" | 
|---|
|  | 7 | ;  IBCNESPC("BEGDT")=Start Dt for rpt | 
|---|
|  | 8 | ;  IBCNESPC("ENDDT")=End Dt for rpt | 
|---|
|  | 9 | ;  IBCNESPC("PYR")=Pyr IEN for rpt. If "", then show all. | 
|---|
|  | 10 | ;  IBCNESPC("PAT")=Pt IEN for rpt. If "", then show all. | 
|---|
|  | 11 | ;  IBCNESPC("TYPE")=A (All Responses) for date range OR M (Most Recent | 
|---|
|  | 12 | ;   Responses) for date range (by unique Pyr/Pt pair) | 
|---|
|  | 13 | ;  IBCNESPC("SORT")=1 (Pyr nm) OR 2 (Pt nm) | 
|---|
|  | 14 | ;  IBCNESPC("TRCN")=Trace #^IEN, if non-null, all other params are null | 
|---|
|  | 15 | ;  IBCNESPC("RFLAG")=Report Flag used to indicate which report is being | 
|---|
|  | 16 | ;   run.  Response Report (0), Inactive Report (1), or Ambiguous | 
|---|
|  | 17 | ;   Report (2). | 
|---|
|  | 18 | ;  IBCNESPC("DTEXP")=Expiration date used in the inactive policy report | 
|---|
|  | 19 | ; | 
|---|
|  | 20 | ; Output vars used by IBCNERP3: | 
|---|
|  | 21 | ;  Structure of ^TMP based on IIV Response File (#365) | 
|---|
|  | 22 | ;   IBCNERTN="IBCNERP1" | 
|---|
|  | 23 | ;   SORT1=PyrNm (SORT=1) or PtNm(SORT=2) | 
|---|
|  | 24 | ;   SORT2=PtNm (SORT=1) or PyrNm (SORT=2) | 
|---|
|  | 25 | ;  ^TMP($J,IBCNERTN,SORT1,SORT2,CNT,0/1) based on ^IBCN(365,DA,0/1) | 
|---|
|  | 26 | ;   CNT=Seq ct | 
|---|
|  | 27 | ;  ^TMP($J,IBCNERTN,SORT1,SORT2,2,EBCT) based on ^IBCN(365,DA,2,EBCT,0) | 
|---|
|  | 28 | ;   EBCT = Elig/Benefit multiple field IEN (ptr to 365.02) | 
|---|
|  | 29 | ;  ^TMP($J,IBCNERTN,SORT1,SORT2,2,EBCT,NTCT) based on | 
|---|
|  | 30 | ;   ^IBCN(365,DA,2,EB,0,NT,0) Notes for EB seg | 
|---|
|  | 31 | ;   NTCT = Notes Ct may not equal Notes IEN (365.22) if ln must wrap | 
|---|
|  | 32 | ;  ^TMP($J,IBCNERTN,SORT1,SORT2,3,CNCT) based on ^IBCN(365,DA,3,CNCT,0) | 
|---|
|  | 33 | ;   CNCT = Contact Person multiple field IEN (ptr to 365.03) | 
|---|
|  | 34 | ;  ^TMP($J,IBCNERTN,SORT1,SORT2,4,CT) based on ^IBCN(365,DA,4) | 
|---|
|  | 35 | ;    CT=1 if len of text <=70, else ln is split | 
|---|
|  | 36 | ;  ^TMP($J,IBCNERTN,SORT1,SORT2,5,CT) based on # lns of comments reqd | 
|---|
|  | 37 | ;    CT=1 to display future retransmission date | 
|---|
|  | 38 | ; | 
|---|
|  | 39 | ; Must call at EN | 
|---|
|  | 40 | Q | 
|---|
|  | 41 | ; | 
|---|
|  | 42 | ; | 
|---|
|  | 43 | EN(IBCNERTN,IBCNESPC) ; Entry | 
|---|
|  | 44 | ; Init | 
|---|
|  | 45 | N IBDT,IBBDT,IBPY,IBPYR,IBPT | 
|---|
|  | 46 | N IBPAT,IBPTR,SORT1,SORT2,RPTDATA,IBTOT | 
|---|
|  | 47 | N PYRIEN,PATIEN,IBTRC,IBTYP,IBCT,IBSRT,IBEXP,FRST,TQN,DONTINC,IPRF | 
|---|
|  | 48 | ; | 
|---|
|  | 49 | I '$D(ZTQUEUED),$G(IOST)["C-" W !!,"Compiling report data ..." | 
|---|
|  | 50 | ; | 
|---|
|  | 51 | ; Temp ct | 
|---|
|  | 52 | S (IBTOT,IBCT)=0 | 
|---|
|  | 53 | ; | 
|---|
|  | 54 | ; Kill scratch globals | 
|---|
|  | 55 | K ^TMP($J,IBCNERTN),^TMP($J,IBCNERTN_"X") | 
|---|
|  | 56 | ; | 
|---|
|  | 57 | S IBTRC=$G(IBCNESPC("TRCN")) | 
|---|
|  | 58 | ; Skip for TRACE# | 
|---|
|  | 59 | I IBTRC'="" G TRCN | 
|---|
|  | 60 | ; | 
|---|
|  | 61 | S IBBDT=IBCNESPC("BEGDT") | 
|---|
|  | 62 | S IBPY=$G(IBCNESPC("PYR")) | 
|---|
|  | 63 | S IBPT=$G(IBCNESPC("PAT")) | 
|---|
|  | 64 | S IBTYP=$G(IBCNESPC("TYPE")) | 
|---|
|  | 65 | S IBSRT=$G(IBCNESPC("SORT")) | 
|---|
|  | 66 | S IBEXP=$G(IBCNESPC("DTEXP")) | 
|---|
|  | 67 | S IPRF=$G(IBCNESPC("RFLAG")) | 
|---|
|  | 68 | ; | 
|---|
|  | 69 | ; Loop thru the IIV Response File (#365) by Date/Time Response Rec X-Ref | 
|---|
|  | 70 | ; S IBDT=$O(^IBCN(365,"AD",IBCNESPC("ENDDT"))) | 
|---|
|  | 71 | ; Initialize IBDT to end date | 
|---|
|  | 72 | S IBDT=IBCNESPC("ENDDT")_".999999" | 
|---|
|  | 73 | F  S IBDT=$O(^IBCN(365,"AD",IBDT),-1) Q:IBDT=""!($P(IBDT,".",1)<IBBDT)  D  Q:$G(ZTSTOP) | 
|---|
|  | 74 | . S PYRIEN=$S(IBPY="":0,1:$O(^IBCN(365,"AD",IBDT,IBPY),-1)) | 
|---|
|  | 75 | . F  S PYRIEN=$O(^IBCN(365,"AD",IBDT,PYRIEN)) Q:'PYRIEN!((IBPY'="")&(PYRIEN'=IBPY))  D  Q:$G(ZTSTOP) | 
|---|
|  | 76 | .. I $D(ZTQUEUED),$$S^%ZTLOAD() S ZTSTOP=1 Q | 
|---|
|  | 77 | .. ; Pyr nm from Pyr File (#365.12) | 
|---|
|  | 78 | .. S IBPYR=$P($G(^IBE(365.12,PYRIEN,0)),U) | 
|---|
|  | 79 | .. I IBPYR="" Q | 
|---|
|  | 80 | .. S PATIEN=$S(IBPT="":0,1:$O(^IBCN(365,"AD",IBDT,PYRIEN,IBPT),-1)) | 
|---|
|  | 81 | .. F  S PATIEN=$O(^IBCN(365,"AD",IBDT,PYRIEN,PATIEN)) Q:'PATIEN!((IBPT'="")&(PATIEN'=IBPT))  D  Q:$G(ZTSTOP) | 
|---|
|  | 82 | ... ; Pt nm from Pt File (#2) | 
|---|
|  | 83 | ... S IBPAT=$P($G(^DPT(PATIEN,0)),U) | 
|---|
|  | 84 | ... I IBPAT="" Q | 
|---|
|  | 85 | ... S IBPTR=0 | 
|---|
|  | 86 | ... F  S IBPTR=$O(^IBCN(365,"AD",IBDT,PYRIEN,PATIEN,IBPTR)) Q:'IBPTR  D  Q:$G(ZTSTOP) | 
|---|
|  | 87 | .... S IBTOT=IBTOT+1 | 
|---|
|  | 88 | .... ; Since non-positive identifications are no longer placed in the | 
|---|
|  | 89 | .... ; insurance buffer, two new reports were added to allow users to | 
|---|
|  | 90 | .... ; view the responses.  One report (IPFR=1) shows only responses | 
|---|
|  | 91 | .... ; of inactive policies.  The other (IPFR=2) shows ambiguous responses. | 
|---|
|  | 92 | .... ; Any response that is not active nor inactive is considered | 
|---|
|  | 93 | .... ; ambiguous for the purposes of this report. | 
|---|
|  | 94 | .... I IPRF D  Q:DONTINC | 
|---|
|  | 95 | ..... N EBIC,NODE1,PCD | 
|---|
|  | 96 | ..... S DONTINC=1 | 
|---|
|  | 97 | ..... S TQN=$P($G(^IBCN(365,IBPTR,0)),U,5) Q:TQN=""  ; TQ ien (#365.1) | 
|---|
|  | 98 | ..... S NODE1=$G(^IBCN(365,IBPTR,1)) | 
|---|
|  | 99 | ..... I $P($G(^IBCN(365.1,TQN,0)),U,11)="V" Q     ; If verification quit | 
|---|
|  | 100 | ..... I IPRF=1,($P(NODE1,U,12)="")!($P(NODE1,U,12)<$G(IBEXP)) Q | 
|---|
|  | 101 | ..... S FRST=$O(^IBCN(365,IBPTR,2,0)) | 
|---|
|  | 102 | ..... I FRST="" Q | 
|---|
|  | 103 | ..... S PCD=$P($G(^IBCN(365,IBPTR,2,FRST,0)),U,6) | 
|---|
|  | 104 | ..... I PCD]"",PCD'="IIV Eligibility Determination" Q | 
|---|
|  | 105 | ..... S EBIC=$$GET1^DIQ(365.02,FRST_","_IBPTR_",","ELIGIBILITY/BENEFIT INFO:CODE") | 
|---|
|  | 106 | ..... I PCD]"",IPRF=1,EBIC'=6 Q | 
|---|
|  | 107 | ..... I PCD]"",IPRF=2,EBIC=6!(EBIC=1) Q | 
|---|
|  | 108 | ..... I $P(NODE1,U,14)]"" Q  ; Error Condition | 
|---|
|  | 109 | ..... I $P(NODE1,U,15)]"" Q  ; Error Action | 
|---|
|  | 110 | ..... I $P($G(^IBCN(365,IBPTR,4)),U)]"" Q  ; Error Text | 
|---|
|  | 111 | ..... S DONTINC=0 | 
|---|
|  | 112 | ....; | 
|---|
|  | 113 | .... I $D(ZTQUEUED),IBTOT#100=0,$$S^%ZTLOAD() S ZTSTOP=1 Q | 
|---|
|  | 114 | .... ; Sort fields | 
|---|
|  | 115 | .... S SORT1=$S(IBSRT=1:IBPYR,1:IBPAT) | 
|---|
|  | 116 | .... S SORT2=$S(IBSRT=1:IBPAT,1:IBPYR) | 
|---|
|  | 117 | .... ; Only check for Most Recent - Pyr/Pt pair | 
|---|
|  | 118 | .... I IBTYP="M",$D(^TMP($J,IBCNERTN_"X",PYRIEN,PATIEN)) Q | 
|---|
|  | 119 | .... ; Set temp ind. | 
|---|
|  | 120 | .... I IBTYP="M" S ^TMP($J,IBCNERTN_"X",PYRIEN,PATIEN)="" | 
|---|
|  | 121 | .... ; Update ct | 
|---|
|  | 122 | .... S IBCT=IBCT+1 | 
|---|
|  | 123 | .... ; Sort data - build RPTDATA array | 
|---|
|  | 124 | .... K RPTDATA | 
|---|
|  | 125 | .... D GETDATA^IBCNERPE(IBPTR,.RPTDATA) | 
|---|
|  | 126 | .... ; Merge data from RPTDATA to ^TMP | 
|---|
|  | 127 | .... ;M ^TMP($J,IBCNERTN,SORT1,SORT2,IBCT)=RPTDATA | 
|---|
|  | 128 | .... N %X,%Y | 
|---|
|  | 129 | .... S %X="RPTDATA(" | 
|---|
|  | 130 | .... S %Y="^TMP($J,IBCNERTN,SORT1,SORT2,IBCT," | 
|---|
|  | 131 | .... I $D(RPTDATA)#10=1 S ^TMP($J,IBCNERTN,SORT1,SORT2,IBCT)=RPTDATA | 
|---|
|  | 132 | .... D %XY^%RCR K %X,%Y | 
|---|
|  | 133 | ; | 
|---|
|  | 134 | ; Purge index of duplicate Pyr/Pt combos | 
|---|
|  | 135 | K ^TMP($J,IBCNERTN_"X") | 
|---|
|  | 136 | ; | 
|---|
|  | 137 | G EXIT | 
|---|
|  | 138 | ; | 
|---|
|  | 139 | TRCN ; Trace # proc. | 
|---|
|  | 140 | S IBPTR=$P(IBTRC,U,2) | 
|---|
|  | 141 | I IBPTR="" G EXIT | 
|---|
|  | 142 | ; Sort the data - build RPTDATA array | 
|---|
|  | 143 | KILL RPTDATA | 
|---|
|  | 144 | D GETDATA^IBCNERPE(IBPTR,.RPTDATA) | 
|---|
|  | 145 | ; Default sort - one record | 
|---|
|  | 146 | ; Pyr nm from Pyr File (#365.12) | 
|---|
|  | 147 | S PYRIEN=$P(RPTDATA(0),U,3) | 
|---|
|  | 148 | I PYRIEN="" G EXIT | 
|---|
|  | 149 | S SORT1=$P($G(^IBE(365.12,PYRIEN,0)),U,1) | 
|---|
|  | 150 | I SORT1="" G EXIT | 
|---|
|  | 151 | ; Pt nm from Pt File (#2) | 
|---|
|  | 152 | S PATIEN=$P(RPTDATA(0),U,2) | 
|---|
|  | 153 | I PATIEN="" G EXIT | 
|---|
|  | 154 | S SORT2=$P($G(^DPT(PATIEN,0)),U,1) | 
|---|
|  | 155 | I SORT2="" G EXIT | 
|---|
|  | 156 | ; Merge data- RPTDATA to ^TMP | 
|---|
|  | 157 | ;M ^TMP($J,IBCNERTN,SORT1,SORT2,1)=RPTDATA | 
|---|
|  | 158 | N %X,%Y | 
|---|
|  | 159 | S %X="RPTDATA(" | 
|---|
|  | 160 | S %Y="^TMP($J,IBCNERTN,SORT1,SORT2,1," | 
|---|
|  | 161 | I $D(RPTDATA)#10=1 S ^TMP($J,IBCNERTN,SORT1,SORT2,1)=RPTDATA | 
|---|
|  | 162 | D %XY^%RCR K %X,%Y | 
|---|
|  | 163 | ; | 
|---|
|  | 164 | EXIT ; | 
|---|
|  | 165 | Q | 
|---|
|  | 166 | ; | 
|---|
|  | 167 | X12(FILE,CODE,FLD) ; Output based on File # and X12 code | 
|---|
|  | 168 | I $G(FILE)=""!($G(CODE)="") Q "" | 
|---|
|  | 169 | ; Quit w/o label if not defined in File Def. | 
|---|
|  | 170 | Q $$LBL(365.02,$G(FLD))_$P($G(^IBE(FILE,CODE,0)),U,2) | 
|---|
|  | 171 | ; | 
|---|
|  | 172 | LBL(FILE,FLD) ; Determine label from File Def. | 
|---|
|  | 173 | N IBLBL | 
|---|
|  | 174 | ; | 
|---|
|  | 175 | I $G(FILE)=""!($G(FLD)="") Q "" | 
|---|
|  | 176 | S IBLBL=$$GET1^DID(FILE,FLD,"","TITLE") | 
|---|
|  | 177 | Q $S(IBLBL'="":IBLBL_": ",1:"") | 
|---|
|  | 178 | ; | 
|---|