| 1 | IBCNSOK ;ALB/AAS - Patient Insurance consistency checker ; 2/22/93 | 
|---|
| 2 | ;;Version 2.0 ; INTEGRATED BILLING ;; 21-MAR-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | % I '$D(DT) D DT^DICRW | 
|---|
| 6 | K ^TMP("IBCNS-ERR",$J) | 
|---|
| 7 | ; | 
|---|
| 8 | W !!,"Check Patient file Insurance Type Group Plan consistency" | 
|---|
| 9 | W !!,"I'm going to check the Insurance company for each patient policy with the",!,"Insurance company in the associated Group Plan file." | 
|---|
| 10 | W !!,"This will take a while, please queue this job to a device.  I'll print",!,"a report when I'm done.",!! | 
|---|
| 11 | ; | 
|---|
| 12 | UP S IBUPDAT=0 | 
|---|
| 13 | S DIR(0)="Y",DIR("A")="Update any Inconsistencies",DIR("B")="NO" | 
|---|
| 14 | S DIR("?")="Enter YES if you want any inconsistencies updated, enter NO if you just want the report." | 
|---|
| 15 | D ^DIR K DIR | 
|---|
| 16 | S IBUPDAT=+Y I $D(DIRUT) G END | 
|---|
| 17 | ; | 
|---|
| 18 | DEV W !! S %ZIS="QM" D ^%ZIS G:POP END | 
|---|
| 19 | I $D(IO("Q")) K IO("Q") D  G END | 
|---|
| 20 | .S ZTRTN="DQ^IBCNSOK",ZTDESC="IB - v2 PATIENT FILE DOUBLE CHECK",ZTIO="",ZTSAVE("IB*")="" | 
|---|
| 21 | .W ! D ^%ZTLOAD D HOME^%ZIS | 
|---|
| 22 | .I $D(ZTSK) W !,"    Patient file update queued as task ",ZTSK K ZTSK Q | 
|---|
| 23 | ; | 
|---|
| 24 | D DQ G END | 
|---|
| 25 | Q | 
|---|
| 26 | ; | 
|---|
| 27 | END K ^TMP("IBCNS-ERR",$J) | 
|---|
| 28 | I $D(ZTQUEUED) S ZTREQ="@" Q | 
|---|
| 29 | D ^%ZISC | 
|---|
| 30 | K %ZIS,DIRUT,I,J,X,Y,DA,DR,DIC,DIE,DIR,IBCPOL,IBCOPOL2,IBCDFND,NODE,IBI,IBCNTI,IBCNTP,IBCNTPP,IBUPDT,IBCDFN | 
|---|
| 31 | Q | 
|---|
| 32 | ; | 
|---|
| 33 | DQ ; -- entry point from task man | 
|---|
| 34 | U IO | 
|---|
| 35 | S IBQUIT=0 | 
|---|
| 36 | D NOW^%DTC S IBSPDT=% | 
|---|
| 37 | I '$D(ZTQUEUED) D | 
|---|
| 38 | .W !!,"    I'll write a dot for each 100 entries" | 
|---|
| 39 | .W:IBUPDAT !,"    and a + for each entry updated" | 
|---|
| 40 | .W !,"    Start time: " S Y=IBSPDT D DT^DIQ | 
|---|
| 41 | N DFN,IBI,IBCPOL,IBCDFND,DA,DR,DIE,DIC,IBCNT,IBCNTP,IBCNTPP,IBCNTI,IBCDFN | 
|---|
| 42 | S (IBCNT,IBCNTP,IBCNTPP,IBCNTI,DFN)=0 | 
|---|
| 43 | ; | 
|---|
| 44 | F  S DFN=$O(^DPT(DFN)) Q:'DFN  S IBCNT=IBCNT+1,IBCDFN=0 S:$O(^DPT(DFN,.312,IBCDFN)) IBCNTI=IBCNTI+1 F  S IBCDFN=$O(^DPT(DFN,.312,IBCDFN)) Q:'IBCDFN  D | 
|---|
| 45 | .I '$D(ZTQUEUED) W:'(IBCNTPP#100) "." | 
|---|
| 46 | .S IBCNTPP=IBCNTPP+1 | 
|---|
| 47 | .S IBCDFND=$G(^DPT(DFN,.312,IBCDFN,0)) | 
|---|
| 48 | .I IBCDFND="",$D(^DPT(DFN,.312,IBCDFN)) D ERR3 | 
|---|
| 49 | .; | 
|---|
| 50 | .S IBCPOL=+$G(^IBA(355.3,+$P(IBCDFND,"^",18),0)) | 
|---|
| 51 | .I '$P(IBCDFND,"^",18) D ERR1 Q  ; no group plan field | 
|---|
| 52 | .I +IBCPOL'=+IBCDFND D ERR2 Q  ;   ins. companies don't match | 
|---|
| 53 | .Q | 
|---|
| 54 | ; | 
|---|
| 55 | D REPORT G END | 
|---|
| 56 | Q | 
|---|
| 57 | ; | 
|---|
| 58 | ERR1 ; -- no group plan pointer | 
|---|
| 59 | S NODE="IBCNS-ERR1" D FIX | 
|---|
| 60 | Q | 
|---|
| 61 | ; | 
|---|
| 62 | ERR2 ; -- wrong insurance pointer | 
|---|
| 63 | S NODE="IBCNS-ERR2" D FIX | 
|---|
| 64 | Q | 
|---|
| 65 | ; | 
|---|
| 66 | ERR3 ; -- dangle insurance node left | 
|---|
| 67 | S NODE="IBCNS-ERR3" D SET | 
|---|
| 68 | I IBUPDAT K ^DPT(DFN,.312,IBCDFN) W:'$D(ZTQUEUED) "+" | 
|---|
| 69 | Q | 
|---|
| 70 | ; | 
|---|
| 71 | FIX ; -- reset pointer correctly | 
|---|
| 72 | S IBCPOL2=IBCPOL | 
|---|
| 73 | ; | 
|---|
| 74 | S IBCPOL=$$CHIP^IBCNSU(IBCDFND) | 
|---|
| 75 | Q:'IBCPOL | 
|---|
| 76 | Q:+IBCDFND'=+$G(^IBA(355.3,+IBCPOL,0))  ; patient ins. and policy must have same ins. company file. | 
|---|
| 77 | S DA=IBCDFN,DA(1)=DFN,DIE="^DPT("_DFN_",.312," | 
|---|
| 78 | S DR="1.09////1;.18////"_IBCPOL | 
|---|
| 79 | D:IBUPDAT ^DIE K DA,DR,DIE,DIC W:'$D(ZTQUEUED) "+" | 
|---|
| 80 | SET S ^TMP("IBCNS-ERR",$J,$P(^DPT(DFN,0),"^"),DFN,IBCDFN)=IBCPOL2_"^"_IBCPOL_"^"_NODE | 
|---|
| 81 | Q | 
|---|
| 82 | ; | 
|---|
| 83 | REPORT ; -- Okay now tell us about the errors | 
|---|
| 84 | D NOW^%DTC S IBHDT=$$FMTE^XLFDT(%),IBPAG=0 | 
|---|
| 85 | D HDR | 
|---|
| 86 | S NAME="",NODE="IBCNS-ERR" | 
|---|
| 87 | I '$D(^TMP(NODE,$J)) W !!,"No Errors Found!" Q | 
|---|
| 88 | F  S NAME=$O(^TMP(NODE,$J,NAME)) Q:NAME=""  D | 
|---|
| 89 | .S DFN=0 F  S DFN=$O(^TMP(NODE,$J,NAME,DFN)) Q:'DFN  D | 
|---|
| 90 | ..S IBCDFN=0 F  S IBCDFN=$O(^TMP(NODE,$J,NAME,DFN,IBCDFN)) Q:'IBCDFN  S IBDATA=^(IBCDFN) D ONE | 
|---|
| 91 | Q | 
|---|
| 92 | ; | 
|---|
| 93 | ONE ; -- print one line | 
|---|
| 94 | D PID^VADPT | 
|---|
| 95 | W !,$E($P($G(^DPT(DFN,0)),"^"),1,16)_" ("_DFN_")" | 
|---|
| 96 | W ?25,VA("PID") | 
|---|
| 97 | S IBCDFND=$G(^DPT(DFN,.312,IBCDFN,0)) | 
|---|
| 98 | W ?39,$E($P($G(^DIC(36,+IBCDFND,0)),"^"),1,25) | 
|---|
| 99 | S IBCPOLD=$G(^IBA(355.3,+IBDATA,0)) | 
|---|
| 100 | I +IBCPOLD W ?68,$E($P(IBCPOLD,"^",4)_"("_$P($G(^DIC(36,+IBCPOLD,0)),"^"),1,33)_")" | 
|---|
| 101 | S IBCPOLD=$G(^IBA(355.3,$P(IBDATA,"^",2),0)) | 
|---|
| 102 | I +IBCPOLD W ?105,$E($P(IBCPOLD,"^",4)_"("_$P($G(^DIC(36,+IBCPOLD,0)),"^"),1,20)_")" | 
|---|
| 103 | W ?127,$S($G(IBUPDAT):"YES",1:"NO") | 
|---|
| 104 | W !?5,"Error: ",$S($P(IBDATA,"^",3)="IBCNS-ERR1":"Policy is missing group Plan",$P(IBDATA,"^",3)="IBCNS-ERR3":"Dangling insurance node detected",1:"Group Plan is with different insurance company") | 
|---|
| 105 | Q | 
|---|
| 106 | ; | 
|---|
| 107 | HDR ; -- Print header | 
|---|
| 108 | Q:IBQUIT | 
|---|
| 109 | I $E(IOST,1,2)="C-",IBPAG D PAUSE^VALM1 I $D(DIRUT) S IBQUIT=1 Q | 
|---|
| 110 | I $E(IOST,1,2)="C-"!(IBPAG) W @IOF | 
|---|
| 111 | S IBPAG=IBPAG+1 | 
|---|
| 112 | W !,"Patients with Incorrect Group Plans",?(IOM-33),"Page ",IBPAG,"  ",IBHDT | 
|---|
| 113 | W !,"PATIENT",?25,"PATIENT ID",?39,"INSURANCE CO.",?68,"OLD PLAN",?105,"NEW PLAN",?127,"UPDATED" | 
|---|
| 114 | W !,$TR($J(" ",IOM)," ","-") | 
|---|
| 115 | I $D(ZTQUEUED),$$S^%ZTLOAD S ZTSTOP=1,IBQUIT=1 W !!,"....task stoped at user request" Q | 
|---|
| 116 | Q | 
|---|