| 1 | IBATOP ;ALB/CPM-TRANSFER PRICING PATIENT LISTING ;21-MAR-99
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**115,153,183,249**;21-MAR-94
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | EN ; Option entry point.
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  W !!,"This report creates a listing of all Transfer Pricing patients for"
 | 
|---|
| 7 |  W !,"specific networks or facilities.  Please enter all applicable networks"
 | 
|---|
| 8 |  W !,"and facilities, specifying networks by VISN (i.e., 'VISN 1').",!
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ; - allow entry of network/facilities; quit if none entered
 | 
|---|
| 11 |  Q:$$FAC^IBATUTL
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  ; - set flag to determine if all facilities were entered
 | 
|---|
| 14 |  S IBALL='$D(IBFAC)
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  W !!,"This report requires only an 80 column printer.",!
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 |  ; - select a device
 | 
|---|
| 19 |  S %ZIS="QM" D ^%ZIS I POP G ENQ
 | 
|---|
| 20 |  I $D(IO("Q")) D  G ENQ
 | 
|---|
| 21 |  .S ZTRTN="DQ^IBATOP",ZTDESC="IB - TRANSFER PRICING PATIENT LISTING"
 | 
|---|
| 22 |  .S ZTSAVE("IBALL")="" I $D(IBFAC) S ZTSAVE("IBFAC(")=""
 | 
|---|
| 23 |  .D ^%ZTLOAD
 | 
|---|
| 24 |  .W !!,$S($D(ZTSK):"This job has been queued.  The task number is "_ZTSK_".",1:"Unable to queue this job.")
 | 
|---|
| 25 |  .K ZTSK,IO("Q") D HOME^%ZIS
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  U IO
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | DQ ; Tasked entry point.
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  K ^TMP("IBATOP",$J),IBARR,IBFACN,^TMP($J,"SDAMA301"),^TMP("IBDFN",$J)
 | 
|---|
| 32 |  N IBARRAY,IBCOUNT,IBNDT
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 |  ; - process the entire file if all patients were selected
 | 
|---|
| 35 |  I IBALL D  G PRINT
 | 
|---|
| 36 |  .S DFN=0 F  S DFN=$O(^IBAT(351.6,DFN)) Q:'DFN  S IBD=$G(^(DFN,0)) D
 | 
|---|
| 37 |  ..;
 | 
|---|
| 38 |  ..; - get the enrolled facility and find the associated network
 | 
|---|
| 39 |  ..S IBSTN=+$$PPF^IBATUTL(DFN)
 | 
|---|
| 40 |  ..;S IBSTN=+$P(IBD,"^",3)
 | 
|---|
| 41 |  ..I '$D(IBARR(IBSTN)) D
 | 
|---|
| 42 |  ...N X,Y
 | 
|---|
| 43 |  ...S X=$$VISN^IBATUTL(IBSTN),Y=$$INST^IBATUTL(IBSTN)
 | 
|---|
| 44 |  ...S:$P(Y,"^",2)="" $P(Y,"^",2)="<No Sta. #>"
 | 
|---|
| 45 |  ...S IBARR(IBSTN)=+$P($P(X,"^",2)," ",2)_"^"_Y
 | 
|---|
| 46 |  ...S IBFACN(IBSTN)=Y
 | 
|---|
| 47 |  ..;
 | 
|---|
| 48 |  ..; - set patient information
 | 
|---|
| 49 |  ..D SET(+IBARR(IBSTN),IBSTN,DFN)
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  ; - process patients from selected networks/facilities
 | 
|---|
| 52 |  S IBX="" F  S IBX=$O(IBFAC(IBX)) Q:IBX=""  D
 | 
|---|
| 53 |  .S IBSTN="" F  S IBSTN=$O(IBFAC(IBX,"C",IBSTN)) Q:IBSTN=""  D
 | 
|---|
| 54 |  ..;
 | 
|---|
| 55 |  ..; - get facility/network information
 | 
|---|
| 56 |  ..S IBNET=+$P($P($$VISN^IBATUTL(IBSTN),"^",2)," ",2)
 | 
|---|
| 57 |  ..S IBY=$$INST^IBATUTL(IBSTN)
 | 
|---|
| 58 |  ..S:$P(IBY,"^",2)="" $P(IBY,"^",2)="<No Sta. #>"
 | 
|---|
| 59 |  ..S IBFACN(IBSTN)=IBY
 | 
|---|
| 60 |  ..;
 | 
|---|
| 61 |  ..; - find all patients from the specific facility
 | 
|---|
| 62 |  ..S DFN=0 F  S DFN=$O(^IBAT(351.6,"AD",IBSTN,DFN)) Q:'DFN  D
 | 
|---|
| 63 |  ...D SET(IBNET,IBSTN,DFN)
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 | PRINT ;
 | 
|---|
| 66 |  ; now call scheduling to look up future appts
 | 
|---|
| 67 |  S IBARRAY(1)=$$NOW^XLFDT_";9999999"
 | 
|---|
| 68 |  S IBARRAY(3)="R;I;NT"
 | 
|---|
| 69 |  S IBARRAY(4)="^TMP(""IBDFN"",$J,"
 | 
|---|
| 70 |  S IBARRAY("SORT")="P"
 | 
|---|
| 71 |  S IBARRAY("FLDS")=1
 | 
|---|
| 72 |  S IBCOUNT=$$SDAPI^SDAMA301(.IBARRAY)
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  ; Print the report.
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  S (IBPAG,IBQ)=0 D NOW^%DTC S IBRUN=$$DAT2^IBOUTL(%)
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 |  I '$D(^TMP("IBATOP",$J)) D HDR(0) W !!!,"There are no Transfer Pricing patients for the selected networks/facilities."  G ENQ
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  S IBNET="" F  S IBNET=$O(^TMP("IBATOP",$J,IBNET)) Q:IBNET=""!(IBQ)  D
 | 
|---|
| 81 |  .D PAUSE:IBPAG,HDR(IBNET)
 | 
|---|
| 82 |  .S IBSTN="" F  S IBSTN=$O(^TMP("IBATOP",$J,IBNET,IBSTN)) Q:IBSTN=""!(IBQ)  D
 | 
|---|
| 83 |  ..;
 | 
|---|
| 84 |  ..I $Y>(IOSL-4) D PAUSE Q:IBQ  D HDR(IBNET)
 | 
|---|
| 85 |  ..D DISFAC(IBSTN)
 | 
|---|
| 86 |  ..;
 | 
|---|
| 87 |  ..S IBNAM="" F  S IBNAM=$O(^TMP("IBATOP",$J,IBNET,IBSTN,IBNAM)) Q:IBNAM=""!(IBQ)  S IBXX=$G(^(IBNAM)) D
 | 
|---|
| 88 |  ...;
 | 
|---|
| 89 |  ...I $Y>(IOSL-2) D PAUSE Q:IBQ  D HDR(IBNET),DISFAC(IBSTN)
 | 
|---|
| 90 |  ...;
 | 
|---|
| 91 |  ...W !,$E($P(IBNAM,"@@"),1,20)," (",$P(IBXX,"^"),")"
 | 
|---|
| 92 |  ...W ?28,$E($P(IBXX,"^",2),1,19),?49,$P(IBXX,"^",3),?55,$P(IBXX,"^",4)
 | 
|---|
| 93 |  ...W ?61,$S($P(IBXX,"^",5):$$DAT1^IBOUTL($P(IBXX,"^",5)),1:"")
 | 
|---|
| 94 |  ...S IBNDT=$O(^TMP($J,"SDAMA301",$P(IBNAM,"@@",2),0))
 | 
|---|
| 95 |  ...I IBNDT S $P(IBXX,"^",6)=$S('$P(IBXX,"^",6):IBNDT,IBNDT<$P(IBXX,"^",6):IBNDT,1:$P(IBXX,"^",6))
 | 
|---|
| 96 |  ...W ?71,$S($P(IBXX,"^",6):$$DAT1^IBOUTL($P(IBXX,"^",6)),1:"")
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  I 'IBQ D PAUSE
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 | ENQ K ^TMP("IBATOP",$J)
 | 
|---|
| 101 |  I $D(ZTQUEUED) S ZTREQ="@" G ENQ1
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 |  D ^%ZISC
 | 
|---|
| 104 | ENQ1 K IBPAG,IBD,IBQ,IBRUN,IBNET,IBSTN,IBNAM,IBXX,IBY
 | 
|---|
| 105 |  K IBFAC,IBFACN,IBARR,IBALL,IBX,DFN,POP,X,Y,SDCNT
 | 
|---|
| 106 |  Q
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 | SET(IBNET,IBSTA,DFN) ; Create the temporary sort file.
 | 
|---|
| 110 |  ;  Input:  IBNET  --  The network/VISN number
 | 
|---|
| 111 |  ;          IBSTA  --  The Station number
 | 
|---|
| 112 |  ;            DFN  --  Pointer to the patient in file #2
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  N IBDFN,IBINS,IBMT,IBTXMT,VAEL,VAERR
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  S IBDFN=$$PT^IBEFUNC(DFN)
 | 
|---|
| 117 |  S IBINS=$$INSURED^IBCNS1(DFN),IBMT=$P($$LST^DGMTU(DFN),"^",4)
 | 
|---|
| 118 |  S IBMT=$S(IBMT="C":"YES",IBMT="G":"GMT",IBMT="P":"PEN",IBMT="R":"REQ",1:"NO")
 | 
|---|
| 119 |  S IBTXMT=$$TXMT(DFN)
 | 
|---|
| 120 |  D ELIG^VADPT
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 |  ; - set all patients to be included in array for next appt.
 | 
|---|
| 123 |  I $$GETICN^MPIF001(DFN)>0 S ^TMP("IBDFN",$J,DFN)=""
 | 
|---|
| 124 |  ;
 | 
|---|
| 125 |  ; - set all patient data into the temporary file
 | 
|---|
| 126 |  S ^TMP("IBATOP",$J,IBNET,IBSTA,$P(IBDFN,"^")_"@@"_DFN)=$P(IBDFN,"^",3)_"^"_$P(VAEL(1),"^",2)_"^"_IBMT_"^"_$S(IBINS:"YES",1:"NO")_"^"_IBTXMT
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | TXMT(DFN) ; Find the patient's last treatment date and next sched date
 | 
|---|
| 130 |  ;  Input:   DFN  --  Pointer to the patient in file #2
 | 
|---|
| 131 |  ; Output:   1^2, where
 | 
|---|
| 132 |  ;                1 => last treatment date, or null
 | 
|---|
| 133 |  ;                2 => next scheduled treatment date, or null
 | 
|---|
| 134 |  ;                     (not including scheduling)
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 |  N IBDT,IBLT,IBNEXT,IBQ,X,X1,X2
 | 
|---|
| 137 |  S (IBLT,IBNEXT)=""
 | 
|---|
| 138 |  ;
 | 
|---|
| 139 |  ; - if current inpatient, set last treatment date to today
 | 
|---|
| 140 |  I $G(^DPT(DFN,.105)) S IBLT=DT G TXMTN
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 |  ; - get the last discharge date
 | 
|---|
| 143 |  S IBLT=+$O(^DGPM("ATID3",DFN,"")) S:IBLT IBLT=9999999.9999999-IBLT\1
 | 
|---|
| 144 |  S:IBLT>DT IBLT=DT
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 |  ; - get the last registration date and compare to last treatment date
 | 
|---|
| 147 |  S X=+$O(^DPT(DFN,"DIS",0)) I X S X=9999999-X\1 S:X>IBLT IBLT=X
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 |  ; - get the last appointment or stop after last treatment date (if any)
 | 
|---|
| 150 |  K ^TMP("DIERR",$J)
 | 
|---|
| 151 |  I '$G(IBQ) D
 | 
|---|
| 152 |  .D OPEN^SDQ(.IBQ) Q:'$G(IBQ)
 | 
|---|
| 153 |  .D INDEX^SDQ(.IBQ,"PATIENT/DATE","SET")
 | 
|---|
| 154 |  .D SCANCB^SDQ(.IBQ,"I $S($P(SDOE0,U,8)=2:1,$P(SDOE0,U,8)=1:$$APPT^IBATOP(SDOE0),1:0) S IBLT=SDOE0\1,SDSTOP=1","SET")
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 |  D PAT^SDQ(.IBQ,DFN,"SET")
 | 
|---|
| 157 |  D DATE^SDQ(.IBQ,IBLT+.000001,9999999,"SET")
 | 
|---|
| 158 |  D ACTIVE^SDQ(.IBQ,"TRUE","SET")
 | 
|---|
| 159 |  D SCAN^SDQ(.IBQ,"BACKWARD")
 | 
|---|
| 160 |  D CLOSE^SDQ(.IBQ)
 | 
|---|
| 161 |  K ^TMP("DIERR",$J)
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 | TXMTN ; - find next scheduled treatment date
 | 
|---|
| 164 |  S IBNEXT=""
 | 
|---|
| 165 |  S X=0 F  S X=$O(^DGS(41.1,"B",DFN,X)) Q:'X  D  ;         sched adm
 | 
|---|
| 166 |  .S X1=$G(^DGS(41.1,X,0))
 | 
|---|
| 167 |  .S X2=$P(X1,"^",2)\1
 | 
|---|
| 168 |  .Q:X2<DT  ;                 must be old scheduled adm
 | 
|---|
| 169 |  .Q:$P(X1,"^",13)  ;         sched adm is cancelled
 | 
|---|
| 170 |  .Q:$P(X1,"^",17)  ;         patient already admitted
 | 
|---|
| 171 |  .I X2>IBNEXT S IBNEXT=X2
 | 
|---|
| 172 |  ;
 | 
|---|
| 173 |  Q IBLT_"^"_IBNEXT
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 | APPT(SDOE0) ; Determine if appt associated with encounter is valid
 | 
|---|
| 176 |  Q $S($P(SDOE0,U,12)=2:1,$P(SDOE0,U,12)=14:1,1:0)
 | 
|---|
| 177 |  ;
 | 
|---|
| 178 |  ;
 | 
|---|
| 179 | PAUSE ; Page break
 | 
|---|
| 180 |  Q:$E(IOST,1,2)'="C-"
 | 
|---|
| 181 |  N IBX,DIR,DIRUT,DUOUT,DTOUT,DIROUT,X,Y
 | 
|---|
| 182 |  F IBX=$Y:1:(IOSL-3) W !
 | 
|---|
| 183 |  S DIR(0)="E" D ^DIR I $D(DIRUT)!($D(DUOUT)) S IBQ=1
 | 
|---|
| 184 |  Q
 | 
|---|
| 185 |  ;
 | 
|---|
| 186 | HDR(IBNET) ; Write the detail report header.
 | 
|---|
| 187 |  I $E(IOST,1,2)="C-"!(IBPAG) W @IOF,*13
 | 
|---|
| 188 |  S IBPAG=IBPAG+1
 | 
|---|
| 189 |  W !,"Transfer Pricing Patient Listing",?38,"Run Date: ",IBRUN,?72,"Page: ",IBPAG
 | 
|---|
| 190 |  I $G(IBNET) W !,"Network: VISN ",IBNET
 | 
|---|
| 191 |  W !?50,"MT",?55,"Act",?63,"Last",?71,"Nxt Sched"
 | 
|---|
| 192 |  W !,"Patient Name/ID",?28,"Primary Eligibility",?49,"Stat"
 | 
|---|
| 193 |  W ?55,"Ins",?63,"Seen",?71,"Visit/Adm"
 | 
|---|
| 194 |  W !,$$DASH(IOM)
 | 
|---|
| 195 |  Q
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 | DISFAC(X) ; Display the station number and name.
 | 
|---|
| 198 |  ;  Input:  X  --  The Station Number
 | 
|---|
| 199 |  ; Variable input:  IBFACN array
 | 
|---|
| 200 |  ;
 | 
|---|
| 201 |  W !!?4,"Home Facility: ",$P(IBFACN(X),"^",2),"  ",$P(IBFACN(X),"^"),!
 | 
|---|
| 202 |  Q
 | 
|---|
| 203 |  ;
 | 
|---|
| 204 | DASH(X) ; Return a dashed line.
 | 
|---|
| 205 |  Q $TR($J("",X)," ","=")
 | 
|---|