[613] | 1 | IBCNSP1 ;ALB/AAS - INSURANCE MANAGEMENT - policy actions ;22-OCT-92
|
---|
| 2 | ;;2.0;INTEGRATED BILLING;**6,28,40,43,52,85,103,361,371,377**;21-MAR-94;Build 23
|
---|
| 3 | ;;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
| 4 | ;;ICR#5002 for read of ^DIE input template data
|
---|
| 5 | ;
|
---|
| 6 | % G EN^IBCNSP
|
---|
| 7 | ;
|
---|
| 8 | EA ; -- Edit all
|
---|
| 9 | N IBCDFN,IBTRC,IBTRN
|
---|
| 10 | D FULL^VALM1 W !!
|
---|
| 11 | S IBCDFN=$P($G(IBPPOL),"^",4) I 'IBCDFN W !!,"Can't identify the policy!" G EAQ
|
---|
| 12 | S IBCNSEH=1 D PAT^IBCNSEH
|
---|
| 13 | ;
|
---|
| 14 | D BEFORE^IBCNSEVT
|
---|
| 15 | D PATPOL^IBCNSM32(IBCDFN)
|
---|
| 16 | D AFTER^IBCNSEVT,^IBCNSEVT
|
---|
| 17 | ;
|
---|
| 18 | ; -- edit policy data
|
---|
| 19 | D POL^IBCNSEH
|
---|
| 20 | D EDPOL^IBCNSM3(IBCDFN)
|
---|
| 21 | ;
|
---|
| 22 | W !! D AI
|
---|
| 23 | ;
|
---|
| 24 | EAQ D:$G(IBTRC) AIP^IBCNSP02(IBTRC)
|
---|
| 25 | D BLD^IBCNSP
|
---|
| 26 | S VALMBCK="R"
|
---|
| 27 | Q
|
---|
| 28 | ;
|
---|
| 29 | AB ; -- Annual Benefits
|
---|
| 30 | S X=+$P($G(IBPPOL),"^",4),IBCNS=+$G(^DPT(DFN,.312,X,0)),IBCPOL=+$P($G(^(0)),"^",18)
|
---|
| 31 | I 'IBCPOL W !!,"Can't identify the plan!" S VALMBCK="" G ABQ
|
---|
| 32 | D FULL^VALM1 W !!
|
---|
| 33 | D EN^VALM("IBCNS ANNUAL BENEFITS")
|
---|
| 34 | S VALMBCK="R"
|
---|
| 35 | ABQ Q
|
---|
| 36 | ;
|
---|
| 37 | BU ; -- Benefits Used
|
---|
| 38 | S IBCDFN=+$P($G(IBPPOL),"^",4),IBCNS=+$G(^DPT(DFN,.312,IBCDFN,0)),IBCPOL=+$P($G(^(0)),"^",18)
|
---|
| 39 | I 'IBCPOL W !!,"Can't identify the plan!" S VALMBCK="" G BUQ
|
---|
| 40 | D FULL^VALM1 W !!
|
---|
| 41 | D EN^VALM("IBCNS BENEFITS USED BY DATE")
|
---|
| 42 | S VALMBCK="R"
|
---|
| 43 | BUQ Q
|
---|
| 44 | ;
|
---|
| 45 | IT ; -- edit insurance type info from patient policy and plan edit
|
---|
| 46 | D FULL^VALM1 W !!
|
---|
| 47 | N IBCDFN
|
---|
| 48 | S IBCDFN=+$P($G(IBPPOL),"^",4),IBCPOL=+$P($G(^DPT(DFN,.312,IBCDFN,0)),"^",18)
|
---|
| 49 | I 'IBCPOL W !!,"Can't identify the plan!" S VALMBCK="" G ITQ
|
---|
| 50 | D ITEDIT(IBCPOL,IBCDFN)
|
---|
| 51 | ITQ S VALMBCK="R" Q
|
---|
| 52 | ;
|
---|
| 53 | IT1 ; -- edit insurance type info from patient policy
|
---|
| 54 | D ITEDIT(IBCPOL)
|
---|
| 55 | S VALMBCK="R"
|
---|
| 56 | Q
|
---|
| 57 | ;
|
---|
| 58 | ITEDIT(IBCPOL,IBCDFN) ;Edit insurance type info once you have plan (IBCPOL)
|
---|
| 59 | ; IBCDFN = the ifn of the policy multiple for pt in ^DPT, node .312
|
---|
| 60 | ; only defined for editing via patient policy
|
---|
| 61 | G:'$G(IBCPOL) ITEDITQ
|
---|
| 62 | D SAVE^IBCNSP3(IBCPOL)
|
---|
| 63 | L +^IBA(355.3,+IBCPOL):5 I '$T D LOCKED^IBTRCD1 G ITEDITQ
|
---|
| 64 | I $G(IBCDFN) S IBCNSEH=+$G(^IBE(350.9,1,4)) D POL^IBCNSEH
|
---|
| 65 | I $P($G(^IBA(355.3,IBCPOL,0)),"^",11) W !?2,*7,"Please note that this plan is inactive!",!
|
---|
| 66 | S DA=IBCPOL,DIE="^IBA(355.3,",DR=".05;.12;.06;.07;.08"
|
---|
| 67 | D ^DIE K DIC,DIE,DA,DR
|
---|
| 68 | D COMP^IBCNSP3(IBCPOL)
|
---|
| 69 | I IBDIF D UPDATE^IBCNSP3(IBCPOL) D:$G(IBCDFN) UPDATPT^IBCNSP3(DFN,IBCDFN),BLD^IBCNSP D:'$G(IBCDFN) INIT^IBCNSC4
|
---|
| 70 | L -^IBA(355.3,+IBCPOL)
|
---|
| 71 | ITEDITQ Q
|
---|
| 72 | ;
|
---|
| 73 | ED ; -- Edit effective dates
|
---|
| 74 | D FULL^VALM1 W !!
|
---|
| 75 | N IBDIF,DA,DR,DIE,DIC
|
---|
| 76 | D BEFORE^IBCNSEVT
|
---|
| 77 | D SAVEPT^IBCNSP3(DFN,IBCDFN)
|
---|
| 78 | L +^DPT(DFN,.312,+$P($G(IBPPOL),"^",4)):5 I '$T D LOCKED^IBTRCD1 G EDQ
|
---|
| 79 | D VARS^IBCNSP3
|
---|
| 80 | S DR="8;3;1.09//;3.04"
|
---|
| 81 | D ^DIE K DIC,DIE,DA,DR
|
---|
| 82 | D COMPPT^IBCNSP3(DFN,IBCDFN) I IBDIF D UPDATPT^IBCNSP3(DFN,IBCDFN),UPDCLM(DFN,IBCDFN),AFTER^IBCNSEVT,^IBCNSEVT,BLD^IBCNSP
|
---|
| 83 | L -^DPT(DFN,.312,+$P($G(IBPPOL),"^",4))
|
---|
| 84 | EDQ S VALMBCK="R" Q
|
---|
| 85 | ;
|
---|
| 86 | VC ; -- Verify Coverage
|
---|
| 87 | D FULL^VALM1 W !!
|
---|
| 88 | D VFY^IBCNSM2
|
---|
| 89 | D BLD^IBCNSP
|
---|
| 90 | S VALMBCK="R" Q
|
---|
| 91 | ;
|
---|
| 92 | SU ; -- Subscriber Update
|
---|
| 93 | D FULL^VALM1 W !!
|
---|
| 94 | ;Patch 40
|
---|
| 95 | N IBDIF,DA,DR,DIC,DIE,DGSENFLG
|
---|
| 96 | S DGSENFLG=1
|
---|
| 97 | D SAVEPT^IBCNSP3(DFN,IBCDFN)
|
---|
| 98 | D VARS^IBCNSP3
|
---|
| 99 | L +^DPT(DFN,.312,+$P($G(IBPPOL),"^",4)):5 I '$T D LOCKED^IBTRCD1 G SUQ
|
---|
| 100 | ;
|
---|
| 101 | D EDIT(DFN,IBCDFN) ; IB*371 - edit pat ins 2.312 subfile fields
|
---|
| 102 | ;
|
---|
| 103 | D COMPPT^IBCNSP3(DFN,IBCDFN)
|
---|
| 104 | I IBDIF D UPDATPT^IBCNSP3(DFN,IBCDFN),BLD^IBCNSP
|
---|
| 105 | L -^DPT(DFN,.312,+$P($G(IBPPOL),"^",4))
|
---|
| 106 | SUQ S VALMBCK="R" Q
|
---|
| 107 | ;
|
---|
| 108 | IC ; -- Insurance Contact Information
|
---|
| 109 | D FULL^VALM1 W !!
|
---|
| 110 | N IBDIF,DA,DR,DIC,DIE,IBTRC,DIR,DUOUT,DTOUT,DIRUT,IBTRN
|
---|
| 111 | D AI
|
---|
| 112 | D:$G(IBTRC) AIP^IBCNSP02(IBTRC),BLD^IBCNSP
|
---|
| 113 | S VALMBCK="R" Q
|
---|
| 114 | Q
|
---|
| 115 | AI ; -- Add ins. verification entry
|
---|
| 116 | N X,Y,I,J,DA,DR,DIC,DIE,DR,DD,DO,VA,VAIN,VAERR,IBQUIT,IBXIFN,IBTRN,DUOUT,IBX,IBQUIT,DTOUT
|
---|
| 117 | Q:'$G(DFN)
|
---|
| 118 | Q:'$G(IBCDFN) S IBQUIT=0
|
---|
| 119 | D AI^IBCNSP02
|
---|
| 120 | Q
|
---|
| 121 | ;
|
---|
| 122 | PIDEF(IBREL,FLD,IBDFN,SPDEF) ; Function to return patient file defaults
|
---|
| 123 | ; Called from input template IBCN PATIENT INSURANCE
|
---|
| 124 | ; IBREL = value from 2.312,4.03 field (PT. RELATIONSHIP - HIPAA)
|
---|
| 125 | ; FLD = field# in file 2.312
|
---|
| 126 | ; IBDFN = patient ien to file 2
|
---|
| 127 | ; SPDEF = spouse default flag =1 if this field should be defaulted
|
---|
| 128 | ; when the spouse is the policy holder
|
---|
| 129 | ;
|
---|
| 130 | ; The purpose is to provide a default value for the field when the
|
---|
| 131 | ; patient and the ins. subscriber are the same.
|
---|
| 132 | ;
|
---|
| 133 | NEW VAL
|
---|
| 134 | S VAL=""
|
---|
| 135 | I +$G(IBREL)'=1,+$G(IBREL)'=18 G PIDEFX ; patient not the insured or spouse, get out
|
---|
| 136 | I +$G(IBREL)=1,'$G(SPDEF) G PIDEFX ; not a field for spouse default
|
---|
| 137 | I '$G(FLD) G PIDEFX ; no field# passed in
|
---|
| 138 | I '$G(IBDFN) G PIDEFX ; no patient passed in
|
---|
| 139 | ;
|
---|
| 140 | ; Build the patient demographics area
|
---|
| 141 | I '$D(^UTILITY("VADM",$J)) D
|
---|
| 142 | . N VAHOW,DFN,VADM
|
---|
| 143 | . S VAHOW=2,DFN=IBDFN D DEM^VADPT
|
---|
| 144 | . Q
|
---|
| 145 | ;
|
---|
| 146 | ; Build the patient address area
|
---|
| 147 | I '$D(^UTILITY("VAPA",$J)) D
|
---|
| 148 | . N VAHOW,DFN,VAPA
|
---|
| 149 | . S VAHOW=2,DFN=IBDFN,VAPA("P")="" D ADD^VADPT
|
---|
| 150 | . Q
|
---|
| 151 | ;
|
---|
| 152 | I FLD=17 S VAL=$P($G(^UTILITY("VADM",$J,1)),U,1) G PIDEFX ; Name
|
---|
| 153 | I FLD=3.01 S VAL=$$FMTE^XLFDT($P($G(^UTILITY("VADM",$J,3)),U,1),"5Z") G PIDEFX ; Date of Birth
|
---|
| 154 | I FLD=3.02 S VAL=$$EXTERNAL^DILFD(2,.325,,$P($G(^DPT(IBDFN,.32)),U,5)) G PIDEFX ; Branch
|
---|
| 155 | I FLD=3.05 S VAL=$P($G(^UTILITY("VADM",$J,2)),U,2) G PIDEFX ; SSN
|
---|
| 156 | I FLD=3.06 S VAL=$P($G(^UTILITY("VAPA",$J,1)),U,1) G PIDEFX ; Street Address 1
|
---|
| 157 | I FLD=3.07 S VAL=$P($G(^UTILITY("VAPA",$J,2)),U,1) G PIDEFX ; Street Address 2
|
---|
| 158 | I FLD=3.08 S VAL=$P($G(^UTILITY("VAPA",$J,4)),U,1) G PIDEFX ; City
|
---|
| 159 | I FLD=3.09 S VAL=$P($G(^UTILITY("VAPA",$J,5)),U,2) G PIDEFX ; State
|
---|
| 160 | I FLD=3.1 S VAL=$P($G(^UTILITY("VAPA",$J,11)),U,2) G PIDEFX ; Zipcode
|
---|
| 161 | I FLD=3.11 S VAL=$P($G(^UTILITY("VAPA",$J,8)),U,1) G PIDEFX ; Phone#
|
---|
| 162 | I FLD=3.12 S VAL=$P($G(^UTILITY("VADM",$J,5)),U,2) G PIDEFX ; Sex
|
---|
| 163 | PIDEFX ;
|
---|
| 164 | Q VAL
|
---|
| 165 | ;
|
---|
| 166 | ASK(QUES,DEFLT) ; Function to ask Yes/No Question
|
---|
| 167 | ; Returns 1 (yes), 0 (no, up-arrow, or timeout)
|
---|
| 168 | NEW X,Y,DIR,DTOUT,DUOUT,DIRUT,DIROUT
|
---|
| 169 | S DIR(0)="Y",DIR("A")=$G(QUES)
|
---|
| 170 | S DIR("B")=$S($G(DEFLT):"Yes",1:"No")
|
---|
| 171 | W ! D ^DIR W:Y !
|
---|
| 172 | I $D(DIRUT) S Y=0
|
---|
| 173 | ASKX ;
|
---|
| 174 | Q Y
|
---|
| 175 | ;
|
---|
| 176 | EDIT(IBDFN,IBCDFN,IBQUIT) ; Main call to edit data in 2.312 pat ins subfile
|
---|
| 177 | ; IBDFN - patient DFN
|
---|
| 178 | ; IBCDFN - ien for patient insurance policy in subfile 2.312
|
---|
| 179 | ; IBQUIT - Output variable. Pass by reference. Will be set to 1 if
|
---|
| 180 | ; the user entered an up-arrow, timed-out, or deleted the
|
---|
| 181 | ; 2.312 subfile entry by entering "@" at the .01 field
|
---|
| 182 | ;
|
---|
| 183 | NEW DA,DR,DIE,IBZ,IBY,X,Y,DTOUT
|
---|
| 184 | NEW IDS,SUB,PAT,PCE,SUB1,PAT1
|
---|
| 185 | S DA(1)=+$G(IBDFN) ; patient IEN
|
---|
| 186 | S DA=+$G(IBCDFN) ; patient insurance IEN
|
---|
| 187 | I 'DA!'DA(1) G EDITX
|
---|
| 188 | S DIE="^DPT("_IBDFN_",.312,"
|
---|
| 189 | ;
|
---|
| 190 | ; Find the input template IEN for the [IBCN PATIENT INSURANCE] template
|
---|
| 191 | S IBY=+$$FIND1^DIC(.402,,"X","IBCN PATIENT INSURANCE")
|
---|
| 192 | I 'IBY G EDITX
|
---|
| 193 | ;
|
---|
| 194 | ; Build the DR array/string - ICR# 5002
|
---|
| 195 | M DR(1)=^DIE(IBY,"DR",2)
|
---|
| 196 | S DR=$G(DR(1,2.312))
|
---|
| 197 | I DR="" G EDITX
|
---|
| 198 | ;
|
---|
| 199 | S $P(^DIE(IBY,0),U,7)=DT ; see TEM+2^DIE ICR# 5002
|
---|
| 200 | ;
|
---|
| 201 | D ^DIE ; edit subfile data
|
---|
| 202 | ;
|
---|
| 203 | ; If the user entered an up-arrow, or timed-out, or deleted the entry,
|
---|
| 204 | ; then set the output variable IBQUIT
|
---|
| 205 | I $D(Y)!$D(DTOUT)!'$D(DA) S IBQUIT=1
|
---|
| 206 | ;
|
---|
| 207 | F IBZ="VADM","VAPA" K ^UTILITY(IBZ,$J) ; cleanup scratch global
|
---|
| 208 | ;
|
---|
| 209 | D UPDCLM(IBDFN,IBCDFN) ; update editable claims
|
---|
| 210 | ;
|
---|
| 211 | ; Cleanup any problems in the secondary ID area
|
---|
| 212 | S IDS=$G(^DPT(IBDFN,.312,IBCDFN,5)) ; whole 5 node
|
---|
| 213 | S (SUB,PAT)=""
|
---|
| 214 | F PCE=3:1:8 S $P(SUB,U,PCE)=$P(IDS,U,PCE-1) ; subscriber sec ID/qual
|
---|
| 215 | F PCE=3:1:8 S $P(PAT,U,PCE)=$P(IDS,U,PCE+5) ; patient sec ID/qual
|
---|
| 216 | ; SUB and PAT are 8-piece strings with pieces 1 and 2 being nil
|
---|
| 217 | S SUB1=$$SCRUB^IBCEF21(SUB) ; scrub 8-piece string
|
---|
| 218 | S PAT1=$$SCRUB^IBCEF21(PAT) ; scrub 8-piece string
|
---|
| 219 | I SUB'=SUB1 S $P(^DPT(IBDFN,.312,IBCDFN,5),U,2,7)=$P(SUB1,U,3,8)
|
---|
| 220 | I PAT'=PAT1 S $P(^DPT(IBDFN,.312,IBCDFN,5),U,8,13)=$P(PAT1,U,3,8)
|
---|
| 221 | ;
|
---|
| 222 | EDITX ;
|
---|
| 223 | Q
|
---|
| 224 | ;
|
---|
| 225 | UPDCLM(IBDFN,IBCDFN) ; Update the Insurance nodes of claims that are still editable
|
---|
| 226 | NEW IBIFN
|
---|
| 227 | S IBIFN=0 F S IBIFN=$O(^DGCR(399,"C",IBDFN,IBIFN)) Q:'IBIFN D UPDCLM^IBCNSP2(IBIFN,IBDFN,IBCDFN)
|
---|
| 228 | ;
|
---|
| 229 | UPDCLMX ;
|
---|
| 230 | Q
|
---|
| 231 | ;
|
---|
| 232 | PRELCNV(CODE,FLG) ; conversion between X12, NCPDP and VistA pt. relationship codes
|
---|
| 233 | ; CODE - code for pt. relationship to convert
|
---|
| 234 | ; FLG - 0 for X12 -> VistA conversion, 1 for VistA -> X12 conversion, 2 - for VistA -> NCPDP conversion
|
---|
| 235 | ; returns converted code for pt. relationship, or null if no match found
|
---|
| 236 | N I,RES,VSTR,X12STR
|
---|
| 237 | S VSTR="01^02^03^08^11^15^32^33^34^35^36"
|
---|
| 238 | S X12STR="18^01^19^20^39^41^32^33^29^53^G8"
|
---|
| 239 | S RES=""
|
---|
| 240 | I FLG=0 F I=1:1:11 S:$P(X12STR,U,I)=CODE RES=$P(VSTR,U,I) Q:RES'=""
|
---|
| 241 | I FLG=1 F I=1:1:11 S:$P(VSTR,U,I)=CODE RES=$P(X12STR,U,I) Q:RES'=""
|
---|
| 242 | I FLG=2,+CODE>0 S RES=$S(+CODE>3:"04",1:CODE)
|
---|
| 243 | Q RES
|
---|