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
|
---|