[613] | 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
|
---|