| 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
|
---|