| [613] | 1 | IBNCPUT1 ;BHAM ISC/SS - IB NCPDP UTILITIES ;22-MAR-2006 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**342,363**;21-MAR-94;Build 35 | 
|---|
|  | 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ;Utilities for NPCDP | 
|---|
|  | 6 | ;/** | 
|---|
|  | 7 | ;Creates a new entry (or node for multiple with .01 field) | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | ;IBFILE - subfile# (9002313.59111) for comment | 
|---|
|  | 10 | ;IBIEN - ien of the parent file entry in which the new subfile entry will be inserted | 
|---|
|  | 11 | ;IBVAL01 - .01 value for the new entry | 
|---|
|  | 12 | ;NEWRECNO -(optional) specify IEN if you want specific value | 
|---|
|  | 13 | ; Note: "" then the system will assign the entry number itself. | 
|---|
|  | 14 | ;IBFLGS - FLAGS parameter for UPDATE^DIE | 
|---|
|  | 15 | ;Examples | 
|---|
|  | 16 | ;top level: | 
|---|
|  | 17 | ; D INSITEM(366.14,"",IBDATE,"") | 
|---|
|  | 18 | ; D INSITEM(366.14,"",IBDATE,45) | 
|---|
|  | 19 | ; | 
|---|
|  | 20 | ;1st level multiple: | 
|---|
|  | 21 | ; subfile number = #366.141 | 
|---|
|  | 22 | ; parent file #366.14 entry number = 345 | 
|---|
|  | 23 | ; D INSITEM(366.141,345,"SUBMIT","") | 
|---|
|  | 24 | ; to create mupltiple entry with particular entry number = 23 | 
|---|
|  | 25 | ; D INSITEM(366.141,345,"SUBMIT",23) | 
|---|
|  | 26 | ; | 
|---|
|  | 27 | ;2nd level multiple | 
|---|
|  | 28 | ;parent file #366.14 entry number = 234 | 
|---|
|  | 29 | ;parent multiple entry number = 55 | 
|---|
|  | 30 | ;create mupltiple entry INSURANCE | 
|---|
|  | 31 | ; D INSITEM(366.1412,"55,234","INS","") | 
|---|
|  | 32 | ; results in : | 
|---|
|  | 33 | ; ^IBCNR(366.14,234,1,55,5,0)=^366.1412PA^1^1 | 
|---|
|  | 34 | ; ^IBCNR(366.14,234,1,55,5,1,0)=INS | 
|---|
|  | 35 | ; ^IBCNR(366.14,234,1,55,5,"B","INS",1)= | 
|---|
|  | 36 | ;  (DD node for this muptiple =5 ) | 
|---|
|  | 37 | ; | 
|---|
|  | 38 | ;output : | 
|---|
|  | 39 | ; positive number - record # created | 
|---|
|  | 40 | ; <=0 - failure | 
|---|
|  | 41 | ;  See description above | 
|---|
|  | 42 | INSITEM(IBFILE,IBIEN,IBVAL01,NEWRECNO,IBFLGS) ;*/ | 
|---|
|  | 43 | N IBSSI,IBIENS,IBFDA,IBERR | 
|---|
|  | 44 | I '$G(NEWRECNO) N NEWRECNO S NEWRECNO=$G(NEWRECNO) | 
|---|
|  | 45 | I IBIEN'="" S IBIENS="+1,"_IBIEN_"," I $L(NEWRECNO)>0 S IBSSI(1)=+NEWRECNO | 
|---|
|  | 46 | I IBIEN="" S IBIENS="+1," I $L(NEWRECNO)>0 S IBSSI(1)=+NEWRECNO | 
|---|
|  | 47 | S IBFDA(IBFILE,IBIENS,.01)=IBVAL01 | 
|---|
|  | 48 | D UPDATE^DIE($G(IBFLGS),"IBFDA","IBSSI","IBERR") | 
|---|
|  | 49 | I $D(IBERR) D BMES^XPDUTL(IBERR("DIERR",1,"TEXT",1)) Q -1  ;D BMES^XPDUTL(IBERR("DIERR",1,"TEXT",1)) | 
|---|
|  | 50 | Q +$G(IBSSI(1)) | 
|---|
|  | 51 | ; | 
|---|
|  | 52 | ; | 
|---|
|  | 53 | ;fill fields | 
|---|
|  | 54 | ;Input: | 
|---|
|  | 55 | ;FILENO file number | 
|---|
|  | 56 | ;FLDNO field number | 
|---|
|  | 57 | ;RECIEN ien string | 
|---|
|  | 58 | ;NEWVAL new value to file | 
|---|
|  | 59 | ;Output: | 
|---|
|  | 60 | ;0^ NEWVAL^error if failure | 
|---|
|  | 61 | ;1^ NEWVAL if success | 
|---|
|  | 62 | FILLFLDS(FILENO,FLDNO,RECIEN,NEWVAL) ; | 
|---|
|  | 63 | N RECIENS,FDA,ERRARR | 
|---|
|  | 64 | S RECIENS=RECIEN_"," | 
|---|
|  | 65 | S FDA(FILENO,RECIENS,FLDNO)=NEWVAL | 
|---|
|  | 66 | D FILE^DIE("","FDA","ERRARR") | 
|---|
|  | 67 | I $D(ERRARR) Q "0^"_NEWVAL_"^"_ERRARR("DIERR",1,"TEXT",1) | 
|---|
|  | 68 | Q "1^"_NEWVAL | 
|---|
|  | 69 | ; | 
|---|
|  | 70 | ;convert external value of the field EVENT TYPE to its internal value | 
|---|
|  | 71 | ;IA# 10155 | 
|---|
|  | 72 | EXT2INT(IBEXTRN) ; | 
|---|
|  | 73 | N IBDD,IBZ,IBCNT,IBINTERN | 
|---|
|  | 74 | S IBINTERN=-1 | 
|---|
|  | 75 | S IBDD=$P($G(^DD(366.141,.01,0)),U,3) ;IA# 10155 | 
|---|
|  | 76 | F IBCNT=1:1 S IBZ=$P(IBDD,";",IBCNT) Q:IBZ=""  D  Q:IBINTERN'<0 | 
|---|
|  | 77 | . I $P(IBZ,":",2)=IBEXTRN S IBINTERN=+IBZ | 
|---|
|  | 78 | Q:IBINTERN<0 0  ;treat as UNKNOWN | 
|---|
|  | 79 | Q IBINTERN | 
|---|
|  | 80 | ; | 
|---|
|  | 81 | ; | 
|---|
|  | 82 | ;should RX copay from the entry in file #350 be placed on hold ? | 
|---|
|  | 83 | ;called from HOLD^IBRUTL | 
|---|
|  | 84 | ;Input: | 
|---|
|  | 85 | ; X - zeroth node of file #350 entry | 
|---|
|  | 86 | ;output: | 
|---|
|  | 87 | ; 0 - NO - DO NOT PUT ON HOLD | 
|---|
|  | 88 | ; 1 - this is RX copay but there is no ECME claim, so process it as usual | 
|---|
|  | 89 | ; 1 - this is ECME RX copay and it should be put on HOLD | 
|---|
|  | 90 | ; 1 - this is ECME RX copay and it was rejected or reversed | 
|---|
|  | 91 | ; 2 - this is not RX copay | 
|---|
|  | 92 | HOLDECME(X) ; | 
|---|
|  | 93 | N IBRXIEN,IBREFNO,IBRXZ,IBDATE,IBDFN,IBEBCOB,IBRETVAL | 
|---|
|  | 94 | S IBRETVAL="" | 
|---|
|  | 95 | S IBRXZ=$P($G(X),U,4),(IBRXIEN,IBREFNO)=0 | 
|---|
|  | 96 | I $P($P(IBRXZ,";"),":")'=52 Q 2  ;follow pre-existing logic | 
|---|
|  | 97 | S IBRXIEN=+$P($P(IBRXZ,";"),":",2) ;ien in file #52 | 
|---|
|  | 98 | S IBREFNO=+$P($P($P(X,U,4),";",2),":",2) ;refill number (0 - for  original) | 
|---|
|  | 99 | S IBDFN=+$P($G(X),U,2) ;Patient ien | 
|---|
|  | 100 | ;if this is OTC "non-e-billable" drug then DO NOT PUT ON HOLD | 
|---|
|  | 101 | I $$OTCNEBIL(IBRXIEN)=1 Q 0 | 
|---|
|  | 102 | ;if this is non-OTC drug OR if this is OTC drug but marked as e-billable then look if it has zero amount paid | 
|---|
|  | 103 | I $$AMNTHOLD^IBNCPUT1(IBDFN,IBRXIEN,IBREFNO)=0 Q 0  ;DO NOT PUT ON HOLD | 
|---|
|  | 104 | Q 1  ;follow pre-existing logic | 
|---|
|  | 105 | ; | 
|---|
|  | 106 | ;should RX copay be placed on hold based on the PAID amount? | 
|---|
|  | 107 | ;input: | 
|---|
|  | 108 | ; IBDFN - patient's ien | 
|---|
|  | 109 | ; IBRX - file #52 ien | 
|---|
|  | 110 | ; IBREF - refill no | 
|---|
|  | 111 | ;output: | 
|---|
|  | 112 | ; 1 - YES | 
|---|
|  | 113 | ; 0 - NO | 
|---|
|  | 114 | AMNTHOLD(IBDFN,IBRX,IBREF) ; | 
|---|
|  | 115 | N IBPAYRES ;for payer's response | 
|---|
|  | 116 | N IBADT | 
|---|
|  | 117 | ; | 
|---|
|  | 118 | S IBPAYRES=$$PAIDAMNT^BPSUTIL(IBRX,IBREF) | 
|---|
|  | 119 | ;if payable AND amount paid is zero AND does not have any other Pharmacy insurance | 
|---|
|  | 120 | ;THEN return NO - it should not be put on hold | 
|---|
|  | 121 | I +IBPAYRES=1,$P(IBPAYRES,U,2)=0,'$$MOREINS^IBNCPNB(IBDFN,+$P(IBPAYRES,U,3)) Q 0 | 
|---|
|  | 122 | Q 1 | 
|---|
|  | 123 | ;Is this RX for OTC drug which is NOT E-billiable? | 
|---|
|  | 124 | ;Input: | 
|---|
|  | 125 | ; IBRX - ien in file #52 | 
|---|
|  | 126 | ;Output: | 
|---|
|  | 127 | ; 1 - this is OTC drug and it is NOT marked as e-billable | 
|---|
|  | 128 | ; 0 - otherwise | 
|---|
|  | 129 | OTCNEBIL(IBRX) ; | 
|---|
|  | 130 | N ARR,IBSPHNDL,IBDRUG | 
|---|
|  | 131 | S IBDRUG=+$$RXAPI1^IBNCPUT1(IBRX,6,"I") | 
|---|
|  | 132 | S IBSPHNDL=$$DRUGDIE^IBNCPUT1(IBDRUG,3,"E",.ARR) | 
|---|
|  | 133 | I IBSPHNDL'["9" Q 0  ;this is not OTC drug | 
|---|
|  | 134 | I IBSPHNDL["E" Q 0  ;it is OTC E-billable drug | 
|---|
|  | 135 | ;it is OTC NON E-billable drug | 
|---|
|  | 136 | Q 1 | 
|---|
|  | 137 | ; | 
|---|
|  | 138 | ;Function to return field data from DRUG file (#50) | 
|---|
|  | 139 | ; Parameters | 
|---|
|  | 140 | ;  IBIEN50 - IEN of DRUG FILE #50 | 
|---|
|  | 141 | ;  IBFLDN - Field Number(s) (like .01) | 
|---|
|  | 142 | ;  IBEXIN - Specifies internal or external value of returned field | 
|---|
|  | 143 | ;         - optional, defaults to "I" | 
|---|
|  | 144 | ;  IBARR50 - Array to return value(s).  Optional.  Pass by reference. | 
|---|
|  | 145 | ;           See EN^DIQ documentation for variable DIQ | 
|---|
|  | 146 | ; | 
|---|
|  | 147 | ; Function returns field data if one field is specified.  If | 
|---|
|  | 148 | ;   multiple fields, the function will return "" and the field | 
|---|
|  | 149 | ;   values are returned in IBARR50 | 
|---|
|  | 150 | ; Example: W $$DRUGDIE^IBNCPUT1(134,25,"E",.ARR) | 
|---|
|  | 151 | DRUGDIE(IBIEN50,IBFLDN,IBEXIN,IBARR50) ; Return field values for Drug file | 
|---|
|  | 152 | I $G(IBIEN50)=""!($G(IBFLDN)="") Q "" | 
|---|
|  | 153 | N DIQ,PSSDIY | 
|---|
|  | 154 | N IBDIQ | 
|---|
|  | 155 | I $G(IBEXIN)'="E" S IBEXIN="I" | 
|---|
|  | 156 | S IBDIQ="IBARR50",IBDIQ(0)=IBEXIN | 
|---|
|  | 157 | D EN^PSSDI(50,"IB",50,.IBFLDN,.IBIEN50,.IBDIQ) | 
|---|
|  | 158 | Q $G(IBARR50(50,IBIEN50,IBFLDN,IBEXIN)) | 
|---|
|  | 159 | ; | 
|---|
|  | 160 | ;/* | 
|---|
|  | 161 | ;Function to return a value for a SINGLE field of file #52 | 
|---|
|  | 162 | ;DBIA 4858 | 
|---|
|  | 163 | ;input: | 
|---|
|  | 164 | ; IBIEN52 - ien of file #52 | 
|---|
|  | 165 | ; IBFLDN - one single field, for example ".01" | 
|---|
|  | 166 | ; IBFORMAT - | 
|---|
|  | 167 | ;  "E" for external format | 
|---|
|  | 168 | ;  "I" - internal | 
|---|
|  | 169 | ;  "N" - do not return nulls | 
|---|
|  | 170 | ;  default is "E" | 
|---|
|  | 171 | ;output: | 
|---|
|  | 172 | ; returns a field value or null (empty string) | 
|---|
|  | 173 | ; examples: | 
|---|
|  | 174 | ;W $$RXAPI1^IBNCPUT1(504733,6,"E") | 
|---|
|  | 175 | ;ALBUMIN 25% 50ML | 
|---|
|  | 176 | ;W $$RXAPI1^IBNCPUT1(504733,6,"I") | 
|---|
|  | 177 | ;134 | 
|---|
|  | 178 | RXAPI1(IBIEN52,IBFLDN,IBFORMAT) ;*/ | 
|---|
|  | 179 | N DIQ,DIC,IBARR,X,Y,D0,PSODIY | 
|---|
|  | 180 | N I,J,C,DA,DRS,DIL,DI,DIQ1 | 
|---|
|  | 181 | N IBDIQ | 
|---|
|  | 182 | S IBDIQ="IBARR" | 
|---|
|  | 183 | S IBDIQ(0)=$S($G(IBFORMAT)="":"E",1:IBFORMAT) | 
|---|
|  | 184 | D DIQ^PSODI(52,52,.IBFLDN,.IBIEN52,.IBDIQ) ;DBIA 4858 | 
|---|
|  | 185 | Q $S(IBDIQ(0)="N":$G(IBARR(52,IBIEN52,IBFLDN)),1:$G(IBARR(52,IBIEN52,IBFLDN,IBDIQ(0)))) | 
|---|
|  | 186 | ; | 
|---|
|  | 187 | ; | 
|---|
|  | 188 | ;IBNCPUT1 | 
|---|