Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: IBCNSOK

IBCNSOK.m

Go to the documentation of this file.
  1. IBCNSOK ;ALB/AAS - Patient Insurance consistency checker ; 2/22/93
  1. ;;Version 2.0 ; INTEGRATED BILLING ;; 21-MAR-94
  1. ;;Per VHA Directive 10-93-142, this routine should not be modified.
  1. ;
  1. % I '$D(DT) D DT^DICRW
  1. K ^TMP("IBCNS-ERR",$J)
  1. ;
  1. W !!,"Check Patient file Insurance Type Group Plan consistency"
  1. W !!,"I'm going to check the Insurance company for each patient policy with the",!,"Insurance company in the associated Group Plan file."
  1. W !!,"This will take a while, please queue this job to a device. I'll print",!,"a report when I'm done.",!!
  1. ;
  1. UP S IBUPDAT=0
  1. S DIR(0)="Y",DIR("A")="Update any Inconsistencies",DIR("B")="NO"
  1. S DIR("?")="Enter YES if you want any inconsistencies updated, enter NO if you just want the report."
  1. D ^DIR K DIR
  1. S IBUPDAT=+Y I $D(DIRUT) G END
  1. ;
  1. DEV W !! S %ZIS="QM" D ^%ZIS G:POP END
  1. I $D(IO("Q")) K IO("Q") D G END
  1. .S ZTRTN="DQ^IBCNSOK",ZTDESC="IB - v2 PATIENT FILE DOUBLE CHECK",ZTIO="",ZTSAVE("IB*")=""
  1. .W ! D ^%ZTLOAD D HOME^%ZIS
  1. .I $D(ZTSK) W !," Patient file update queued as task ",ZTSK K ZTSK Q
  1. ;
  1. D DQ G END
  1. Q
  1. ;
  1. END K ^TMP("IBCNS-ERR",$J)
  1. I $D(ZTQUEUED) S ZTREQ="@" Q
  1. D ^%ZISC
  1. K %ZIS,DIRUT,I,J,X,Y,DA,DR,DIC,DIE,DIR,IBCPOL,IBCOPOL2,IBCDFND,NODE,IBI,IBCNTI,IBCNTP,IBCNTPP,IBUPDT,IBCDFN
  1. Q
  1. ;
  1. DQ ; -- entry point from task man
  1. U IO
  1. S IBQUIT=0
  1. D NOW^%DTC S IBSPDT=%
  1. I '$D(ZTQUEUED) D
  1. .W !!," I'll write a dot for each 100 entries"
  1. .W:IBUPDAT !," and a + for each entry updated"
  1. .W !," Start time: " S Y=IBSPDT D DT^DIQ
  1. N DFN,IBI,IBCPOL,IBCDFND,DA,DR,DIE,DIC,IBCNT,IBCNTP,IBCNTPP,IBCNTI,IBCDFN
  1. S (IBCNT,IBCNTP,IBCNTPP,IBCNTI,DFN)=0
  1. ;
  1. 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
  1. .I '$D(ZTQUEUED) W:'(IBCNTPP#100) "."
  1. .S IBCNTPP=IBCNTPP+1
  1. .S IBCDFND=$G(^DPT(DFN,.312,IBCDFN,0))
  1. .I IBCDFND="",$D(^DPT(DFN,.312,IBCDFN)) D ERR3
  1. .;
  1. .S IBCPOL=+$G(^IBA(355.3,+$P(IBCDFND,"^",18),0))
  1. .I '$P(IBCDFND,"^",18) D ERR1 Q ; no group plan field
  1. .I +IBCPOL'=+IBCDFND D ERR2 Q ; ins. companies don't match
  1. .Q
  1. ;
  1. D REPORT G END
  1. Q
  1. ;
  1. ERR1 ; -- no group plan pointer
  1. S NODE="IBCNS-ERR1" D FIX
  1. Q
  1. ;
  1. ERR2 ; -- wrong insurance pointer
  1. S NODE="IBCNS-ERR2" D FIX
  1. Q
  1. ;
  1. ERR3 ; -- dangle insurance node left
  1. S NODE="IBCNS-ERR3" D SET
  1. I IBUPDAT K ^DPT(DFN,.312,IBCDFN) W:'$D(ZTQUEUED) "+"
  1. Q
  1. ;
  1. FIX ; -- reset pointer correctly
  1. S IBCPOL2=IBCPOL
  1. ;
  1. S IBCPOL=$$CHIP^IBCNSU(IBCDFND)
  1. Q:'IBCPOL
  1. Q:+IBCDFND'=+$G(^IBA(355.3,+IBCPOL,0)) ; patient ins. and policy must have same ins. company file.
  1. S DA=IBCDFN,DA(1)=DFN,DIE="^DPT("_DFN_",.312,"
  1. S DR="1.09////1;.18////"_IBCPOL
  1. D:IBUPDAT ^DIE K DA,DR,DIE,DIC W:'$D(ZTQUEUED) "+"
  1. SET S ^TMP("IBCNS-ERR",$J,$P(^DPT(DFN,0),"^"),DFN,IBCDFN)=IBCPOL2_"^"_IBCPOL_"^"_NODE
  1. Q
  1. ;
  1. REPORT ; -- Okay now tell us about the errors
  1. D NOW^%DTC S IBHDT=$$FMTE^XLFDT(%),IBPAG=0
  1. D HDR
  1. S NAME="",NODE="IBCNS-ERR"
  1. I '$D(^TMP(NODE,$J)) W !!,"No Errors Found!" Q
  1. F S NAME=$O(^TMP(NODE,$J,NAME)) Q:NAME="" D
  1. .S DFN=0 F S DFN=$O(^TMP(NODE,$J,NAME,DFN)) Q:'DFN D
  1. ..S IBCDFN=0 F S IBCDFN=$O(^TMP(NODE,$J,NAME,DFN,IBCDFN)) Q:'IBCDFN S IBDATA=^(IBCDFN) D ONE
  1. Q
  1. ;
  1. ONE ; -- print one line
  1. D PID^VADPT
  1. W !,$E($P($G(^DPT(DFN,0)),"^"),1,16)_" ("_DFN_")"
  1. W ?25,VA("PID")
  1. S IBCDFND=$G(^DPT(DFN,.312,IBCDFN,0))
  1. W ?39,$E($P($G(^DIC(36,+IBCDFND,0)),"^"),1,25)
  1. S IBCPOLD=$G(^IBA(355.3,+IBDATA,0))
  1. I +IBCPOLD W ?68,$E($P(IBCPOLD,"^",4)_"("_$P($G(^DIC(36,+IBCPOLD,0)),"^"),1,33)_")"
  1. S IBCPOLD=$G(^IBA(355.3,$P(IBDATA,"^",2),0))
  1. I +IBCPOLD W ?105,$E($P(IBCPOLD,"^",4)_"("_$P($G(^DIC(36,+IBCPOLD,0)),"^"),1,20)_")"
  1. W ?127,$S($G(IBUPDAT):"YES",1:"NO")
  1. 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")
  1. Q
  1. ;
  1. HDR ; -- Print header
  1. Q:IBQUIT
  1. I $E(IOST,1,2)="C-",IBPAG D PAUSE^VALM1 I $D(DIRUT) S IBQUIT=1 Q
  1. I $E(IOST,1,2)="C-"!(IBPAG) W @IOF
  1. S IBPAG=IBPAG+1
  1. W !,"Patients with Incorrect Group Plans",?(IOM-33),"Page ",IBPAG," ",IBHDT
  1. W !,"PATIENT",?25,"PATIENT ID",?39,"INSURANCE CO.",?68,"OLD PLAN",?105,"NEW PLAN",?127,"UPDATED"
  1. W !,$TR($J(" ",IOM)," ","-")
  1. I $D(ZTQUEUED),$$S^%ZTLOAD S ZTSTOP=1,IBQUIT=1 W !!,"....task stoped at user request" Q
  1. Q