| 1 | IBCNSJ ;ALB/CPM - INSURANCE PLAN UTILITIES ; 30-DEC-94 | 
|---|
| 2 | ;;Version 2.0 ; INTEGRATED BILLING ;**28,43**; 21-MAR-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | DEL(IBPLAN) ; Delete an Insurance Plan | 
|---|
| 6 | ;  Input:  IBPLAN  --  Pointer to the plan in file #355.3 | 
|---|
| 7 | ; | 
|---|
| 8 | I '$G(IBPLAN) G DELQ | 
|---|
| 9 | N DA,DIDEL,DIK,IBX | 
|---|
| 10 | ; | 
|---|
| 11 | ; - delete all associated Benefits Used | 
|---|
| 12 | S IBX=0 F  S IBX=$O(^IBA(355.5,"B",IBPLAN,IBX)) Q:'IBX  D DBU(IBX) | 
|---|
| 13 | ; | 
|---|
| 14 | ; - delete all associated Annual Benefits | 
|---|
| 15 | S IBX=0 F  S IBX=$O(^IBA(355.4,"C",IBPLAN,IBX)) Q:'IBX  S DA=IBX,DIDEL=355.4,DIK="^IBA(355.4," D ^DIK | 
|---|
| 16 | ; | 
|---|
| 17 | ; - delete all associated coverage limitations | 
|---|
| 18 | S IBX=0 F  S IBX=$O(^IBA(355.32,"B",IBPLAN,IBX)) Q:'IBX  S DA=IBX,DIDEL=355.32,DIK="^IBA(355.32," D ^DIK | 
|---|
| 19 | ; | 
|---|
| 20 | ; - delete the plan itself | 
|---|
| 21 | S DA=IBPLAN,DIDEL=355.3,DIK="^IBA(355.3," D ^DIK | 
|---|
| 22 | DELQ Q | 
|---|
| 23 | ; | 
|---|
| 24 | DBU(DA) ; Delete Benefits Used. | 
|---|
| 25 | N DIDEL,DIK | 
|---|
| 26 | I $G(DA) S DIDEL=355.5,DIK="^IBA(355.5," D ^DIK | 
|---|
| 27 | Q | 
|---|
| 28 | ; | 
|---|
| 29 | IRACT(IBPLAN,IBF) ; Inactivate/reactivate an Insurance Plan | 
|---|
| 30 | ;  Input:  IBPLAN  --  Pointer to the plan in file #355.3 | 
|---|
| 31 | ;             IBF  --  1 -> plan is to be inactivated | 
|---|
| 32 | ;                      0 -> plan is to be reactivated | 
|---|
| 33 | ; | 
|---|
| 34 | I '$G(IBPLAN)!("^0^1^"'[("^"_$G(IBF)_"^")) G IRACTQ | 
|---|
| 35 | N DA,DIE,DR,X,Y | 
|---|
| 36 | S DA=IBPLAN,DR=".11////"_IBF,DIE="^IBA(355.3," D ^DIE | 
|---|
| 37 | D UPDATE^IBCNSP3(IBPLAN) | 
|---|
| 38 | IRACTQ Q | 
|---|
| 39 | ; | 
|---|
| 40 | COV(DFN) ; Update 'Covered by Insurance?' prompt | 
|---|
| 41 | ;  Input:     DFN  --  Pointer to the patient in file #2 | 
|---|
| 42 | ; | 
|---|
| 43 | ;  This call differs from COVERED^IBCNSM31 in that field #.3192 | 
|---|
| 44 | ;  was not edited by the user, but an action on a plan or policy | 
|---|
| 45 | ;  may require that this field be changed.  Plus, there is no | 
|---|
| 46 | ;  output to the screen. | 
|---|
| 47 | ; | 
|---|
| 48 | I '$G(DFN) G COVQ | 
|---|
| 49 | N X,Y,I,IBCOV,IBNCOV,DA,DR,DIE,DIC,IBINS,IBINSD | 
|---|
| 50 | S (IBCOV,IBNCOV)=$P($G(^DPT(DFN,.31)),"^",11) | 
|---|
| 51 | D ALL^IBCNS1(DFN,"IBINS",2,DT) S IBINSD=+$G(IBINS(0)) | 
|---|
| 52 | S IBNCOV=$S('$O(^DPT(DFN,.312,0)):"N",IBINSD:"Y",1:"N") | 
|---|
| 53 | I IBCOV'=IBNCOV S DIE="^DPT(",DR=".3192////"_IBNCOV,DA=DFN D ^DIE | 
|---|
| 54 | COVQ Q | 
|---|
| 55 | ; | 
|---|
| 56 | COMP(GN) ; Compress Insurance Plan Name or Number | 
|---|
| 57 | ;           Convert to caps and strip punctuation and leading zeroes. | 
|---|
| 58 | ;  Input:  GN  --  Insurance plan name or number to be compressed | 
|---|
| 59 | ; Output: GN1  --  The compressed name or number | 
|---|
| 60 | ; | 
|---|
| 61 | N GN1,X | 
|---|
| 62 | S GN1=GN I GN1?."0" S GN1="" G COMPQ | 
|---|
| 63 | S GN1=$TR(GN1,"abcdefghijklmnopqrstuvwxyz!"" #$%&,()*+'-./:;<=>?@[]_\{|}","ABCDEFGHIJKLMNOPQRSTUVWXYZ") ; change lower-case to upper, strip away all punctuation | 
|---|
| 64 | F X=1:1:$L(GN1) Q:$E(GN1,X)'="0"  ; strip off leading zeroes | 
|---|
| 65 | S GN1=$E(GN1,X,$L(GN1)) | 
|---|
| 66 | I GN1?."0" S GN1="" | 
|---|
| 67 | COMPQ Q GN1 | 
|---|
| 68 | ; | 
|---|
| 69 | ANYGP(X,EX,ALL) ; Does this insurance company offer any group plans? | 
|---|
| 70 | ;  Input:  X  --  Pointer to the company in file #36 | 
|---|
| 71 | ;         EX  --  Pointer to an insurance plan in file #355.3 | 
|---|
| 72 | ;                 This optional input parameter is used to exclude | 
|---|
| 73 | ;                 a specific plan from being considered. | 
|---|
| 74 | ;        ALL  --  Set to 1 if inactive plans are to be included | 
|---|
| 75 | ; Output:  0  --  Company doesn't offer any group plans | 
|---|
| 76 | ;          1  --  Company does offer group plans | 
|---|
| 77 | ; | 
|---|
| 78 | N I,J,Y S Y=0 | 
|---|
| 79 | I '$G(X) G ANYGPQ | 
|---|
| 80 | S I=0 F  S I=$O(^IBA(355.3,"B",X,I)) Q:'I  D  Q:Y | 
|---|
| 81 | .I $G(EX),I=EX Q | 
|---|
| 82 | .S J=$G(^IBA(355.3,I,0)) | 
|---|
| 83 | .I $P(J,"^",2) D | 
|---|
| 84 | ..I $G(ALL) S Y=1 Q | 
|---|
| 85 | ..I '$P(J,"^",11) S Y=1 | 
|---|
| 86 | ANYGPQ Q Y | 
|---|
| 87 | ; | 
|---|
| 88 | SUBS(CO,PLAN,ANY,ARR,Z) ; How many possible plan subscriptions are there? | 
|---|
| 89 | ;  Input:    CO  --  Pointer to the company in file #36 | 
|---|
| 90 | ;          PLAN  --  Pointer to the plan in file #355.3 | 
|---|
| 91 | ;           ANY  --  [Optional] Set to 1 if at least one subscriber | 
|---|
| 92 | ;                    is to be found | 
|---|
| 93 | ;           ARR  --  [Optional] If defined, all policies will be | 
|---|
| 94 | ;                    returned in this array as | 
|---|
| 95 | ; | 
|---|
| 96 | ;                    ARR(DFN,ien)="", where | 
|---|
| 97 | ; | 
|---|
| 98 | ;                    DFN points to the patient in file #2, and | 
|---|
| 99 | ;                    'ien' points to the policy in file #2.312 | 
|---|
| 100 | ; | 
|---|
| 101 | ;             Z  --  [Optional] Set to 1 if the call is just to | 
|---|
| 102 | ;                    determine that there is more than one subscriber | 
|---|
| 103 | ; | 
|---|
| 104 | ; Output:  Number of (potential) plan subscriptions | 
|---|
| 105 | ; | 
|---|
| 106 | N DFN,STOP,X,Y S (STOP,X)=0 | 
|---|
| 107 | I '$G(CO)!'$G(PLAN) G SUBSQ | 
|---|
| 108 | S DFN=0 F  S DFN=$O(^DPT("AB",CO,DFN)) Q:'DFN  D  Q:STOP | 
|---|
| 109 | .S Y=0 F  S Y=$O(^DPT("AB",CO,DFN,Y)) Q:'Y  I $P($G(^DPT(DFN,.312,Y,0)),"^",18)=PLAN S X=X+1 S:$G(ARR)]"" @ARR@(DFN,Y)="" I $G(ANY) S STOP=1 Q | 
|---|
| 110 | .I 'STOP,X>1,$G(Z) S STOP=1 | 
|---|
| 111 | SUBSQ Q X | 
|---|