IBCEPCID ;ALB/WCJ - Provider ID functions ;13 Feb 2006
;;2.0;INTEGRATED BILLING;**320**;21-MAR-94
;; Per VHA Directive 10-93-142, this routine should not be modified.
;
G AWAY
AWAY Q
;
COPY(IBINS) ; The purpose of this routine is to sync up insurance company IDs
; It is passed an insurance company. If the insurance company is a stand alone company,
; it quits. If it is passed a child, it synchs up with the parent. If it is passed a parent, it syncs
; up with all it's children.
;
; The IDs that synched up are Provider ID's defined for providers by an insurance company, default IDs for all
; Providers for and an insurance company, and additonal billing providers IDs for an insuracne company.
;
;
N TYPE,PARENT,CHILD,COPYINS
Q:$G(IBINS)=""
S TYPE=$$TYPE(IBINS)
Q:TYPE=""
I TYPE="P" S PARENT=IBINS,CHILD=""
I TYPE="C" S CHILD=IBINS,PARENT=$P($G(^DIC(36,IBINS,3)),U,14) Q:PARENT=""
D COPYTO(PARENT,CHILD,.COPYINS)
D LOOPTRNS(.COPYINS)
Q
;
TYPE(IBINS) ;
Q $P($G(^DIC(36,+IBINS,3)),U,13)
;
COPYTO(PARENT,CHILD,COPYINS) ; Figure out who to copy to:
I CHILD]"" S COPYINS(PARENT,CHILD)="" Q
F S CHILD=$O(^DIC(36,"APC",PARENT,CHILD)) Q:'CHILD S COPYINS(PARENT,CHILD)=""
Q
;
LOOPTRNS(COPYINS) ;
N PARENT,CHILD,IBFILE
S PARENT=$O(COPYINS(""))
Q:PARENT="" ; just in case
;
S CHILD="" F S CHILD=$O(COPYINS(PARENT,CHILD)) Q:CHILD="" D
.F IBFILE=355.9,355.91,355.92 D
.. I IBFILE=355.9 D Q
... N IBPRV,CU,FT,CT,QUAL,CDA,PDA
... ;
... ; File 355.9
... ; Delete IDs in child but not parent
... ; Edit IDs that are in both
... S IBPRV="" F S IBPRV=$O(^IBA(IBFILE,"AUNIQ",IBPRV)) Q:IBPRV="" D
.... Q:IBPRV'[";VA(200," ; only copying VA providers
.... Q:'$D(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD))
.... S CU="" F S CU=$O(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU)) Q:CU="" D
..... S FT="" F S FT=$O(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU,FT)) Q:FT="" D
...... S CT="" F S CT=$O(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU,FT,CT)) Q:CT="" D
....... S QUAL="" F S QUAL=$O(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU,FT,CT,QUAL)) Q:QUAL="" D
........ S CDA=$O(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU,FT,CT,QUAL,0))
........ Q:'CDA
........ I '$D(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT,CT,QUAL)) D DEL(IBFILE,CDA) Q
........ S PDA=$O(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT,CT,QUAL,0))
........ Q:PDA=""
........ D MOD(IBFILE,CDA,PDA) Q
... ;
... ; File 355.9
... ; Add IDs in parent but not child
... S IBPRV="" F S IBPRV=$O(^IBA(IBFILE,"AUNIQ",IBPRV)) Q:IBPRV="" D
.... Q:IBPRV'[";VA(200," ; only copying VA providers
.... Q:'$D(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT))
.... S CU="" F S CU=$O(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU)) Q:CU="" D
..... S FT="" F S FT=$O(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT)) Q:FT="" D
...... S CT="" F S CT=$O(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT,CT)) Q:CT="" D
....... S QUAL="" F S QUAL=$O(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT,CT,QUAL)) Q:QUAL="" D
........ S PDA=$O(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT,CT,QUAL,0))
........ Q:'PDA
........ I '$D(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU,FT,CT,QUAL)) D ADD(IBFILE,PDA,CHILD) Q
.. ;
.. ; Files 355.91 and 355.92
.. ; Delete IDs in Child but not parent
.. ; Edit IDs that are in both
.. I $D(^IBA(IBFILE,"AUNIQ",CHILD)) D
... N CU,FT,CTORD,QUAL,PDA,CDA,DELFL
... S CU="" F S CU=$O(^IBA(IBFILE,"AUNIQ",CHILD,CU)) Q:CU="" D
.... S FT="" F S FT=$O(^IBA(IBFILE,"AUNIQ",CHILD,CU,FT)) Q:FT="" D
..... S CTORD="" F S CTORD=$O(^IBA(IBFILE,"AUNIQ",CHILD,CU,FT,CTORD)) Q:CTORD="" D
...... S QUAL="" F S QUAL=$O(^IBA(IBFILE,"AUNIQ",CHILD,CU,FT,CTORD,QUAL)) Q:QUAL="" D
....... S CDA="" F S CDA=$O(^IBA(IBFILE,"AUNIQ",CHILD,CU,FT,CTORD,QUAL,CDA)) Q:CDA="" D
........ S PDA=$O(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT,CTORD,QUAL,0))
........ S DELFL=1
........ I PDA,IBFILE=355.91,$D(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT,CTORD,QUAL)) S DELFL=0
........ I PDA,IBFILE=355.92 S DELFL=0
........ D:DELFL DEL(IBFILE,CDA)
........ D:'DELFL MOD(IBFILE,CDA,PDA)
.. ;
.. ; Files 355.91 and 355.92
.. ; Add IDs that are in parent but not child
.. I $D(^IBA(IBFILE,"AUNIQ",PARENT)) D
... N CU,FT,CTORD,QUAL,PDA
... S CU="" F S CU=$O(^IBA(IBFILE,"AUNIQ",PARENT,CU)) Q:CU="" D
.... S FT="" F S FT=$O(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT)) Q:FT="" D
..... S CTORD="" F S CTORD=$O(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT,CTORD)) Q:CTORD="" D
...... S QUAL="" F S QUAL=$O(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT,CTORD,QUAL)) Q:QUAL="" D
....... S PDA="" F S PDA=$O(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT,CTORD,QUAL,PDA)) Q:PDA="" D
........ Q:$O(^IBA(IBFILE,"AUNIQ",CHILD,CU,FT,CTORD,QUAL,0))
........ D ADD(IBFILE,PDA,CHILD) Q
Q
;
ADD(IBFILE,IEN,INS) ; Add a provider ID
N DIC,DIR,X,Y,Z,DA,DR,DIE,DO,DD,DLAYGO,DTOUT,DUOUT
N ZERO,CU,FT,CTORD,QUAL,ID
S ZERO=$G(^IBA(IBFILE,IEN,0))
Q:ZERO=""
S CU=$P(ZERO,U,3)
S FT=$P(ZERO,U,4)
S CTORD=$P(ZERO,U,5)
S QUAL=$P(ZERO,U,6)
S ID=$P(ZERO,U,7)
;
I IBFILE=355.91!(IBFILE=355.92) D
. S X=INS
. S DIC("DR")=".03////"_CU_";.04////"_FT_";.05////"_CTORD_";.06////"_QUAL_";.07////"_ID
. I IBFILE=355.92 S DIC("DR")=DIC("DR")_";.08////A"
;
I IBFILE=355.9 D
. S DIC("DR")=".02////"_INS_";.03////"_CU_";.04////"_FT_";.05////"_CTORD_";.06////"_QUAL_";.07////"_ID
. S X=$P(ZERO,U)
;
S DIC(0)="L",(DIC,DLAYGO)=IBFILE
D FILE^DICN
Q
;
DEL(IBFILE,DA) ; Delete a Provider ID
N DIK,DIR,X,Y,Z,I
S DIK="^IBA("_IBFILE_","
F I=1:1 L +^IBA(IBFILE,DA):5 I Q
D ^DIK
L -^IBA(IBFILE,DA)
Q
;
MOD(IBFILE,IEN,PIEN) ; Modify an existing Provider ID
N I,ZERO,ID,PID,PZERO,FDAROOT
S ZERO=$G(^IBA(IBFILE,IEN,0))
Q:ZERO=""
S PZERO=$G(^IBA(IBFILE,PIEN,0))
Q:PZERO=""
S ID=$P(ZERO,U,7)
S PID=$P(PZERO,U,7)
Q:ID=PID
S FDAROOT(IBFILE,IEN_",",.07)=PID
F I=1:1 L +^IBA(IBFILE,IEN):5 I Q
D FILE^DIE(,"FDAROOT")
L -^IBA(IBFILE,IEN)
Q
;
RESYNCH() ; Resynch everything
L +^DIC(36):5 E W *7,!!,"Can not lock insurance company file, please try later.",!! Q
N INS
S INS="" F S INS=$O(^DIC(36,"APC",INS)) Q:INS="" D COPY(INS)
L -^DIC(36)
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCEPCID 6166 printed Dec 13, 2024@02:12 Page 2
IBCEPCID ;ALB/WCJ - Provider ID functions ;13 Feb 2006
+1 ;;2.0;INTEGRATED BILLING;**320**;21-MAR-94
+2 ;; Per VHA Directive 10-93-142, this routine should not be modified.
+3 ;
+4 GOTO AWAY
AWAY QUIT
+1 ;
COPY(IBINS) ; The purpose of this routine is to sync up insurance company IDs
+1 ; It is passed an insurance company. If the insurance company is a stand alone company,
+2 ; it quits. If it is passed a child, it synchs up with the parent. If it is passed a parent, it syncs
+3 ; up with all it's children.
+4 ;
+5 ; The IDs that synched up are Provider ID's defined for providers by an insurance company, default IDs for all
+6 ; Providers for and an insurance company, and additonal billing providers IDs for an insuracne company.
+7 ;
+8 ;
+9 NEW TYPE,PARENT,CHILD,COPYINS
+10 if $GET(IBINS)=""
QUIT
+11 SET TYPE=$$TYPE(IBINS)
+12 if TYPE=""
QUIT
+13 IF TYPE="P"
SET PARENT=IBINS
SET CHILD=""
+14 IF TYPE="C"
SET CHILD=IBINS
SET PARENT=$PIECE($GET(^DIC(36,IBINS,3)),U,14)
if PARENT=""
QUIT
+15 DO COPYTO(PARENT,CHILD,.COPYINS)
+16 DO LOOPTRNS(.COPYINS)
+17 QUIT
+18 ;
TYPE(IBINS) ;
+1 QUIT $PIECE($GET(^DIC(36,+IBINS,3)),U,13)
+2 ;
COPYTO(PARENT,CHILD,COPYINS) ; Figure out who to copy to:
+1 IF CHILD]""
SET COPYINS(PARENT,CHILD)=""
QUIT
+2 FOR
SET CHILD=$ORDER(^DIC(36,"APC",PARENT,CHILD))
if 'CHILD
QUIT
SET COPYINS(PARENT,CHILD)=""
+3 QUIT
+4 ;
LOOPTRNS(COPYINS) ;
+1 NEW PARENT,CHILD,IBFILE
+2 SET PARENT=$ORDER(COPYINS(""))
+3 ; just in case
if PARENT=""
QUIT
+4 ;
+5 SET CHILD=""
FOR
SET CHILD=$ORDER(COPYINS(PARENT,CHILD))
if CHILD=""
QUIT
Begin DoDot:1
+6 FOR IBFILE=355.9,355.91,355.92
Begin DoDot:2
+7 IF IBFILE=355.9
Begin DoDot:3
+8 NEW IBPRV,CU,FT,CT,QUAL,CDA,PDA
+9 ;
+10 ; File 355.9
+11 ; Delete IDs in child but not parent
+12 ; Edit IDs that are in both
+13 SET IBPRV=""
FOR
SET IBPRV=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV))
if IBPRV=""
QUIT
Begin DoDot:4
+14 ; only copying VA providers
if IBPRV'[";VA(200,"
QUIT
+15 if '$DATA(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD))
QUIT
+16 SET CU=""
FOR
SET CU=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU))
if CU=""
QUIT
Begin DoDot:5
+17 SET FT=""
FOR
SET FT=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU,FT))
if FT=""
QUIT
Begin DoDot:6
+18 SET CT=""
FOR
SET CT=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU,FT,CT))
if CT=""
QUIT
Begin DoDot:7
+19 SET QUAL=""
FOR
SET QUAL=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU,FT,CT,QUAL))
if QUAL=""
QUIT
Begin DoDot:8
+20 SET CDA=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU,FT,CT,QUAL,0))
+21 if 'CDA
QUIT
+22 IF '$DATA(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT,CT,QUAL))
DO DEL(IBFILE,CDA)
QUIT
+23 SET PDA=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT,CT,QUAL,0))
+24 if PDA=""
QUIT
+25 DO MOD(IBFILE,CDA,PDA)
QUIT
End DoDot:8
End DoDot:7
End DoDot:6
End DoDot:5
End DoDot:4
+26 ;
+27 ; File 355.9
+28 ; Add IDs in parent but not child
+29 SET IBPRV=""
FOR
SET IBPRV=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV))
if IBPRV=""
QUIT
Begin DoDot:4
+30 ; only copying VA providers
if IBPRV'[";VA(200,"
QUIT
+31 if '$DATA(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT))
QUIT
+32 SET CU=""
FOR
SET CU=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU))
if CU=""
QUIT
Begin DoDot:5
+33 SET FT=""
FOR
SET FT=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT))
if FT=""
QUIT
Begin DoDot:6
+34 SET CT=""
FOR
SET CT=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT,CT))
if CT=""
QUIT
Begin DoDot:7
+35 SET QUAL=""
FOR
SET QUAL=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT,CT,QUAL))
if QUAL=""
QUIT
Begin DoDot:8
+36 SET PDA=$ORDER(^IBA(IBFILE,"AUNIQ",IBPRV,PARENT,CU,FT,CT,QUAL,0))
+37 if 'PDA
QUIT
+38 IF '$DATA(^IBA(IBFILE,"AUNIQ",IBPRV,CHILD,CU,FT,CT,QUAL))
DO ADD(IBFILE,PDA,CHILD)
QUIT
End DoDot:8
End DoDot:7
End DoDot:6
End DoDot:5
End DoDot:4
End DoDot:3
QUIT
+39 ;
+40 ; Files 355.91 and 355.92
+41 ; Delete IDs in Child but not parent
+42 ; Edit IDs that are in both
+43 IF $DATA(^IBA(IBFILE,"AUNIQ",CHILD))
Begin DoDot:3
+44 NEW CU,FT,CTORD,QUAL,PDA,CDA,DELFL
+45 SET CU=""
FOR
SET CU=$ORDER(^IBA(IBFILE,"AUNIQ",CHILD,CU))
if CU=""
QUIT
Begin DoDot:4
+46 SET FT=""
FOR
SET FT=$ORDER(^IBA(IBFILE,"AUNIQ",CHILD,CU,FT))
if FT=""
QUIT
Begin DoDot:5
+47 SET CTORD=""
FOR
SET CTORD=$ORDER(^IBA(IBFILE,"AUNIQ",CHILD,CU,FT,CTORD))
if CTORD=""
QUIT
Begin DoDot:6
+48 SET QUAL=""
FOR
SET QUAL=$ORDER(^IBA(IBFILE,"AUNIQ",CHILD,CU,FT,CTORD,QUAL))
if QUAL=""
QUIT
Begin DoDot:7
+49 SET CDA=""
FOR
SET CDA=$ORDER(^IBA(IBFILE,"AUNIQ",CHILD,CU,FT,CTORD,QUAL,CDA))
if CDA=""
QUIT
Begin DoDot:8
+50 SET PDA=$ORDER(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT,CTORD,QUAL,0))
+51 SET DELFL=1
+52 IF PDA
IF IBFILE=355.91
IF $DATA(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT,CTORD,QUAL))
SET DELFL=0
+53 IF PDA
IF IBFILE=355.92
SET DELFL=0
+54 if DELFL
DO DEL(IBFILE,CDA)
+55 if 'DELFL
DO MOD(IBFILE,CDA,PDA)
End DoDot:8
End DoDot:7
End DoDot:6
End DoDot:5
End DoDot:4
End DoDot:3
+56 ;
+57 ; Files 355.91 and 355.92
+58 ; Add IDs that are in parent but not child
+59 IF $DATA(^IBA(IBFILE,"AUNIQ",PARENT))
Begin DoDot:3
+60 NEW CU,FT,CTORD,QUAL,PDA
+61 SET CU=""
FOR
SET CU=$ORDER(^IBA(IBFILE,"AUNIQ",PARENT,CU))
if CU=""
QUIT
Begin DoDot:4
+62 SET FT=""
FOR
SET FT=$ORDER(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT))
if FT=""
QUIT
Begin DoDot:5
+63 SET CTORD=""
FOR
SET CTORD=$ORDER(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT,CTORD))
if CTORD=""
QUIT
Begin DoDot:6
+64 SET QUAL=""
FOR
SET QUAL=$ORDER(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT,CTORD,QUAL))
if QUAL=""
QUIT
Begin DoDot:7
+65 SET PDA=""
FOR
SET PDA=$ORDER(^IBA(IBFILE,"AUNIQ",PARENT,CU,FT,CTORD,QUAL,PDA))
if PDA=""
QUIT
Begin DoDot:8
+66 if $ORDER(^IBA(IBFILE,"AUNIQ",CHILD,CU,FT,CTORD,QUAL,0))
QUIT
+67 DO ADD(IBFILE,PDA,CHILD)
QUIT
End DoDot:8
End DoDot:7
End DoDot:6
End DoDot:5
End DoDot:4
End DoDot:3
End DoDot:2
End DoDot:1
+68 QUIT
+69 ;
ADD(IBFILE,IEN,INS) ; Add a provider ID
+1 NEW DIC,DIR,X,Y,Z,DA,DR,DIE,DO,DD,DLAYGO,DTOUT,DUOUT
+2 NEW ZERO,CU,FT,CTORD,QUAL,ID
+3 SET ZERO=$GET(^IBA(IBFILE,IEN,0))
+4 if ZERO=""
QUIT
+5 SET CU=$PIECE(ZERO,U,3)
+6 SET FT=$PIECE(ZERO,U,4)
+7 SET CTORD=$PIECE(ZERO,U,5)
+8 SET QUAL=$PIECE(ZERO,U,6)
+9 SET ID=$PIECE(ZERO,U,7)
+10 ;
+11 IF IBFILE=355.91!(IBFILE=355.92)
Begin DoDot:1
+12 SET X=INS
+13 SET DIC("DR")=".03////"_CU_";.04////"_FT_";.05////"_CTORD_";.06////"_QUAL_";.07////"_ID
+14 IF IBFILE=355.92
SET DIC("DR")=DIC("DR")_";.08////A"
End DoDot:1
+15 ;
+16 IF IBFILE=355.9
Begin DoDot:1
+17 SET DIC("DR")=".02////"_INS_";.03////"_CU_";.04////"_FT_";.05////"_CTORD_";.06////"_QUAL_";.07////"_ID
+18 SET X=$PIECE(ZERO,U)
End DoDot:1
+19 ;
+20 SET DIC(0)="L"
SET (DIC,DLAYGO)=IBFILE
+21 DO FILE^DICN
+22 QUIT
+23 ;
DEL(IBFILE,DA) ; Delete a Provider ID
+1 NEW DIK,DIR,X,Y,Z,I
+2 SET DIK="^IBA("_IBFILE_","
+3 FOR I=1:1
LOCK +^IBA(IBFILE,DA):5
IF $TEST
QUIT
+4 DO ^DIK
+5 LOCK -^IBA(IBFILE,DA)
+6 QUIT
+7 ;
MOD(IBFILE,IEN,PIEN) ; Modify an existing Provider ID
+1 NEW I,ZERO,ID,PID,PZERO,FDAROOT
+2 SET ZERO=$GET(^IBA(IBFILE,IEN,0))
+3 if ZERO=""
QUIT
+4 SET PZERO=$GET(^IBA(IBFILE,PIEN,0))
+5 if PZERO=""
QUIT
+6 SET ID=$PIECE(ZERO,U,7)
+7 SET PID=$PIECE(PZERO,U,7)
+8 if ID=PID
QUIT
+9 SET FDAROOT(IBFILE,IEN_",",.07)=PID
+10 FOR I=1:1
LOCK +^IBA(IBFILE,IEN):5
IF $TEST
QUIT
+11 DO FILE^DIE(,"FDAROOT")
+12 LOCK -^IBA(IBFILE,IEN)
+13 QUIT
+14 ;
RESYNCH() ; Resynch everything
+1 LOCK +^DIC(36):5
IF '$TEST
WRITE *7,!!,"Can not lock insurance company file, please try later.",!!
QUIT
+2 NEW INS
+3 SET INS=""
FOR
SET INS=$ORDER(^DIC(36,"APC",INS))
if INS=""
QUIT
DO COPY(INS)
+4 LOCK -^DIC(36)
+5 QUIT