IBCBB1 ;ALB/AAS - CONTINUATION OF EDIT CHECK ROUTINE ;2-NOV-89
;;2.0;INTEGRATED BILLING;**27,52,80,93,106,51,151,148,153,137,232,280,155,320,343,349,363,371,395,384,432,447,488,554,577,592,608,623,641,665,702,759**;21-MAR-94;Build 24
;Per VA Directive 6402, this routine should not be modified.
;
; *** Begin IB*2.0*488 VD (Issue 46 RBN)
N I
S I=""
S X=+$G(^DGCR(399,IBIFN,"MP"))
I 'X,$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) S X=+$$CURR^IBCEF2(IBIFN)
;JWS;IB*2.0*592:US1108 - Dental form check
I X,+$G(^DIC(36,X,3)) S I=$P(^(3),U,$S($$FT^IBCEF(IBIFN)=2:2,$$FT^IBCEF(IBIFN)=7:15,1:4))
S I=$$UP^XLFSTR(I)
I (I'=""&(I["PRNT")&($G(IBER)'["IB488")) D
. S IBER=$G(IBER)_"IB488;"
;
; Cause an error if FORCED TO PRINT TO CLEARINGHOUSE
I $P($G(^DGCR(399,IBIFN,"TX")),U,8)=2 D
. S IBER=$G(IBER)_"IB489;"
;
; Cause a fatal error if the claim has no procedures & is NOT a UB-04 Inpatient claim.
I +$O(^DGCR(399,IBIFN,"CP",0))=0 D
.I $$INPAT^IBCEF(IBIFN,1),$$INSPRF^IBCEF(IBIFN) Q ; inpatient UB-04 check
.I '$$INPAT^IBCEF(IBIFN,1),$$INSPRF^IBCEF(IBIFN) D Q ; Outpatient Institutional Claim.
..I IBER["IB352" Q
..S IBER=IBER_"IB352;"
.;
.; Professional claim
.I IBER["IB353" Q
.S IBER=IBER_"IB353;"
.Q
; *** End IB*2.0*488 -- VD
;
;MAP TO DGCRBB1
;
% ;Bill Status
N Z,Z0,Z1,IBFT
I $S(+IBST=0:1,1:"^1^2^3^4^7^"'[(U_IBST_U)) S IBER=IBER_"IB045;"
;
;Statement Covers From
I IBFDT="" S IBER=IBER_"IB061;"
I IBFDT]"",IBFDT'?7N&(IBFDT'?7N1".".N) S IBER=IBER_"IB061;"
I IBFDT>IBTDT S IBER=IBER_"IB061;" ; from must be on or before the to date
S IBFFY=$$FY^IBOUTL(IBFDT)
; if inpat - from date must not be prior to admit date.
I $$INPAT^IBCEF(IBIFN,1),(IBFDT<($P($G(^DGPT(+$P(IBND0,U,8),0)),U,2)\1)) S IBER=IBER_"IB061;"
;
;Statement Covers To
I IBTDT="" S IBER=IBER_"IB062;"
I IBTDT]"",IBTDT'?7N&(IBTDT'?7N1".".N) S IBER=IBER_"IB062;"
I IBTDT>DT!(IBTDT<IBFDT) S IBER=IBER_"IB062;" ; to date must not be >than today's date
S IBTFY=$$FY^IBOUTL(IBTDT)
;
;Total Charges
; IB*2.0*447/TAZ Removed this error so that zero dollar revenue codes can process on the 837
;I +IBTC'>0!(+IBTC'=IBTC) S IBER=IBER_"IB064;"
; IB*2.0*641 v9/WCJ added back so $0 claims won't go out
I +IBTC'>0 S IBER=IBER_"IB064;"
;
;Billable charges for secondary claim
I $$MCRONBIL^IBEFUNC(IBIFN)&(($P(IBNDU1,U,1)-$P(IBNDU1,U,2))'>0) S IBER=IBER_"IB094;"
;Fiscal Year 1
S IBFFY=$$FY^IBOUTL(IBFDT)
;
;Check provider link for current user, enterer, reviewer and Authorizor
I '$D(^VA(200,DUZ,0)) S IBER=IBER_"IB048;"
I IBEU]"",'$D(^VA(200,IBEU,0)) S IBER=IBER_"IB048;"
I IBRU]"",'$D(^VA(200,IBRU,0)) S IBER=IBER_"IB060;"
I IBAU]"",'$D(^VA(200,IBAU,0)) S IBER=IBER_"IB041;"
;
I IBER="",+$$STA^PRCAFN(IBIFN)=104 S IBER=IBER_"IB040;"
; If ins bill, must have valid COB sequence
I $P(IBND0,U,11)="i",$S($P(IBND0,U,21)="":1,1:"PST"'[$P(IBND0,U,21)) S IBER=IBER_"IB324;"
;
; Check for valid sec provider id for current ins
S Z=0 F S Z=$O(^DGCR(399,IBIFN,"PRV",Z)) Q:'Z S Z0=$G(^(Z,0)),Z1=+$$COBN^IBCEF(IBIFN) I $P(Z0,U,4+Z1)'="",$P(Z0,U,11+Z1)'="" D
. I '$$SECIDCK^IBCEF74(IBIFN,Z1,$P(Z0,U,11+Z1),Z) D WARN^IBCBB11("Prov secondary id type for the "_$P("PRIMARY^SECONDARY^TERTIARY",U,Z1)_" "_$$EXTERNAL^DILFD(399.0222,.01,,+Z0)_" is invalid/won't transmit")
; Check NPIs
D NPICHK^IBCBB11
;
; Check multiple rx NPIs
D RXNPI^IBCBB11(IBIFN)
;
; Check taxonomies
D TAXCHK^IBCBB11
;
; Check for Physician Name
K IBXDATA D F^IBCEF("N-ATT/REND PHYSICIAN NAME",,,IBIFN)
; IB*2.0*432 - CMS1500 no longer needs a claim level rendering
S IBFT=$$FT^IBCEF(IBIFN)
;JWS;IB*2.0*592:US1108 - Dental form check
I IBFT'=2,IBFT'=7,$P($G(IBXDATA),U)="" S IBER=IBER_"IB303;"
;
N FUNCTION,IBINS
; IB*2.0*432 - CMS1500 no longer needs a claim level rendering
;S FUNCTION=$S($$FT^IBCEF(IBIFN)=3:4,1:3)
S FUNCTION=$S(IBFT=3:4,1:3)
;JWS;IB*2.0*592:US1108 - Dental form check
I IBFT'=2,IBFT'=7,IBER'["IB303;" D
. F IBINS=1:1:3 D
.. S Z=$$GETTYP^IBCEP2A(IBIFN,IBINS)
.. I Z,$P(Z,U,2) D ; Rendering/attending prov secondary id required
... N IBID,IBOK,Q0
... D PROVINF^IBCEF74(IBIFN,IBINS,.IBID,1,"C") ; check all as though they were current
... S IBOK=0
... S Q0=0 F S Q0=$O(IBID(1,FUNCTION,Q0)) Q:'Q0 I $P(IBID(1,FUNCTION,Q0),U,9)=+Z S IBOK=1 Q
... I 'IBOK S IBER=IBER_$S(IBINS=1:"IB236;",IBINS=2:"IB237;",IBINS=3:"IB238;",1:"")
;
; Patch 432 enh5:The IB system shall no longer prevent users from authorizing(fatal error message)a claim because the system cannot find the providersSSNorEIN
; D PRIIDCHK^IBCBB11
;
N IBM,IBM1
S IBM=$G(^DGCR(399,IBIFN,"M"))
S IBM1=$G(^DGCR(399,IBIFN,"M1"))
I $P(IBM,U),$P($G(^DIC(36,$P(IBM,U),4)),U,6),$P(IBM1,U,2)="" S IBER=IBER_"IB244;"
I $P(IBM,U,2),$P($G(^DIC(36,$P(IBM,U,2),4)),U,6),$P(IBM1,U,3)="" S IBER=IBER_"IB245;"
I $P(IBM,U,3),$P($G(^DIC(36,$P(IBM,U,3),4)),U,6),$P(IBM1,U,4)="" S IBER=IBER_"IB246;"
;
; If outside facility, check for ID and qualifier in 355.93
; 5/15/06 - esg - hard error IB243 turned into warning message instead
S Z=$P($G(^DGCR(399,IBIFN,"U2")),U,10)
I Z D
. I $P($G(^IBA(355.93,Z,0)),U,9)=""!($P($G(^IBA(355.93,Z,0)),U,13)="") D
.. N Z1,Z2
.. S Z1="Missing Lab or Facility Primary ID for non-VA facility, "
.. S Z2=$$EXTERNAL^DILFD(399,232,,Z)
.. I $L(Z2)'>19 D WARN^IBCBB11(Z1_Z2) Q
.. D WARN^IBCBB11(Z1),WARN^IBCBB11(" "_Z2)
.. Q
. Q
;
; Must be one and only one division on bill
S IBZ=$$MULTDIV^IBCBB11(IBIFN,IBND0)
; I IBZ S IBER=IBER_$S(IBZ=1:"IB095;",IBZ=2:"IB104;",1:"IB105;")
; Allow multi-divisional for OP instutional claims
I IBZ,$$INPAT^IBCEF(IBIFN)!'($$INSPRF^IBCEF(IBIFN)) S IBER=IBER_$S(IBZ=1:"IB095;",IBZ=2:"IB104;",1:"IB105;")
; Still need error msg on OP Institutional if No Default division
I IBZ=3,'$$INPAT^IBCEF(IBIFN),$$INSPRF^IBCEF(IBIFN) S IBER=IBER_"IB105;"
; Division address must be defined in institution file
I $P(IBND0,U,22) D
. N Z,Z0,Z1
. S Z0=$G(^DIC(4,+$P($G(^DG(40.8,+$P(IBND0,U,22),0)),U,7),0))
. S Z1=$G(^DIC(4,+$P($G(^DG(40.8,+$P(IBND0,U,22),0)),U,7),1))
. I $P(Z0,U,2)="" S IBER=IBER_"IB097;" Q
. F Z=1,3,4 I $P(Z1,U,Z)="" S IBER=IBER_"IB097;" Q
;
; IB*2.0*432 Check ambulance addresses, COB Non-covered amt. & Attachment Control
I $$AMBCK^IBCBB11(IBIFN)=1 S IBER=IBER_"IB329;"
I $$COBAMT^IBCBB11(IBIFN)=1 S IBER=IBER_"IB330;"
I $$TMCK^IBCBB11(IBIFN)=1 S IBER=IBER_"IB331;"
I $$ACCK^IBCBB11(IBIFN)=1 S IBER=IBER_"IB332;"
I $$COBMRA^IBCBB11(IBIFN)=1 S IBER=IBER_"IB342;"
I $$COBSEC^IBCBB11(IBIFN)=1 S IBER=IBER_"IB343;"
;
;CHAMPVA Rate Type and Primary Insurance Carriers Type of Coverage must match
S (IBRTCHV,IBPICHV)=0
I $P($G(^DGCR(399.3,+IBAT,0)),U,1)="CHAMPVA" S IBRTCHV=1
I $P($G(^IBE(355.2,+$P($G(^DIC(36,+IBNDMP,0)),U,13),0)),U,1)="CHAMPVA" S IBPICHV=1
I (+IBRTCHV!+IBPICHV)&('IBRTCHV!'IBPICHV) S IBER=IBER_"IB085;"
;
;Non-VA bill must use FEE REIMB INS rate type; FEE REIMB INS rate type can only be used for Non-VA bill
;IB*2.0*554/DRF 10/9/2015
;N IBNVART,IBNVAST
;S (IBNVART,IBNVAST)=0
;I $P($G(^DGCR(399.3,+IBAT,0)),U,1)="FEE REIMB INS" S IBNVART=1
;S IBNVAST=$$NONVAFLG(IBIFN)
;I IBNVART,'IBNVAST S IBER=IBER_"IB360;" ;Non-VA rate type used for bill that is not Non-VA
;I 'IBNVART,IBNVAST S IBER=IBER_"IB361;" ;Non-VA rate type not used for bill that is Non-VA
;
N IBZPRC,IBZPRCUB
D F^IBCEF("N-ALL PROCEDURES","IBZPRC",,IBIFN)
; Procedure Clinic is required for Surgical Procedures Outpt Facility Charges
I +$P(IBND0,U,27)'=2,$$BILLRATE^IBCRU3(IBAT,IBCL,IBEVDT,"RC OUTPATIENT") D
. N Z,Z0,Z1,ZE S (ZE,Z)=0 F S Z=$O(^DGCR(399,IBIFN,"CP",Z)) Q:'Z D I +ZE S IBER=IBER_"IB320;" Q
.. S Z0=$G(^DGCR(399,IBIFN,"CP",Z,0)),Z1=+Z0 I Z0'[";ICPT(" Q
.. I '((Z1'<10000)&(Z1'>69999))&'((Z1'<93501)&(Z1'>93533)) Q
.. I '$P(Z0,U,7) S ZE=1
;
; Extract procedures for UB-04
D F^IBCEF("N-UB-04 PROCEDURES","IBZPRCUB",,IBIFN)
; Does this bill have ANY prescriptions associated with it?
; Must bill prescriptions separately from other charges
;
; DEM;432 - Call line level provider edit checks.
D LNPROV^IBCBB12(IBIFN) ; DEM;432 - If there are line provider edits, then routine LNPROV^IBCBB12(IBIFN) updates IBER string.
; DEM;432 - Call to Other Operating/Operating Provider edit checks.
I $$OPPROVCK^IBCBB12(IBIFN)=1 S IBER=IBER_"IB337;" ; DEM;432
; DEM;432 - Line level Attachment Control edits.
I $$LNTMCK^IBCBB11(IBIFN)=1 S IBER=IBER_"IB331;" ; DEM;432
I $$LNACCK^IBCBB11(IBIFN)=1 S IBER=IBER_"IB332;" ; DEM;432
;
; vd/Beginning of IB*2*577 - Validate Line Level NDC edits.
I $$LNNDCCK^IBCBB11(IBIFN)=1 S IBER=IBER_"IB365;" ;IB*2*577;JWS;11/20/17 FIX
; vd/End of IB*2*577
I $$ISRX^IBCEF1(IBIFN) D
. N IBZ,IBRXDEF
. S IBRXDEF=$P($G(^IBE(350.9,1,1)),U,30),IBZ=0
. F S IBZ=$O(IBZPRCUB(IBZ)) Q:'IBZ I IBZPRCUB(IBZ),+$P(IBZPRCUB(IBZ),U)'=IBRXDEF S IBER=IBER_"IB102;" Q
. K IBZ
;
; Check that COB sequences are not skipped
K Z
F Z=1:1:3 S:+$G(^DGCR(399,IBIFN,"I"_Z)) Z(Z)=""
F Z=0:1:2 S Z0=$O(Z(Z)) Q:'Z0 I Z0'=(Z+1) S IBER=IBER_"IB322;" Q
K Z
; HD64676 IB*2*371 - OK for payer sequence to be blank when the Rate
; Type is either Interagency or Sharing Agreement
I $P($G(^DGCR(399,IBIFN,0)),U,21)="",$P($G(^DGCR(399,IBIFN,0)),U,7)'=4,$P($G(^DGCR(399,IBIFN,0)),U,7)'=9 S IBER=IBER_"IB323;"
K IBXDATA D F^IBCEF("N-PROCEDURE CODING METHD",,,IBIFN)
; Coding method should agree with types of procedure codes
S IBOK=$S('$O(IBZPRC(0))!(IBXDATA=""):1,1:0)
I 'IBOK S IBOK=1,IBZ=0 F S IBZ=$O(IBZPRC(IBZ)) Q:'IBZ I IBZPRC(IBZ),$P(IBZPRC(IBZ),U)'[$S(IBXDATA=9:"ICD",1:"ICP") S IBOK=0 Q
I 'IBOK D WARN^IBCBB11("Coding Method does not agree with all procedure codes found on bill")
D EDITMRA^IBCBB3(.IBQUIT,.IBER,IBIFN,IBFT)
Q:$G(IBQUIT)
;
;Other things that could be added: Rev Code - calculating charges
; Diagnosis Coding, if MT copay - check for other co-payments
;
I $P(IBNDTX,U,8),$$REQMRA^IBEFUNC(IBIFN) S IBER=IBER_"IB121;" ; can't force MRAs to print
I $P(IBNDTX,U,8)!$P(IBNDTX,U,9) D
. Q:$P(IBNDTX,U,8)=2 ; Don't want to do this for option 2 any more.
. D WARN^IBCBB11($S($$REQMRA^IBEFUNC(IBIFN)&($P(IBNDTX,U,9)):"MRA Secondary ",1:"")_"Bill has been forced to print "_$S($P(IBNDTX,U,8)=1!($P(IBNDTX,U,9)=1):"locally",1:"at clearinghouse"))
N IBXZ,IBIZ F IBIZ=12,13,14 S IBXZ=$P(IBNDM,U,IBIZ) I +IBXZ S IBXZ=$P($G(^DPT(DFN,.312,IBXZ,0)),U,18) I +IBXZ S IBXZ=$G(^IBA(355.3,+IBXZ,0)) I +$P(IBXZ,U,12) D
. D WARN^IBCBB11($P($G(^DIC(36,+IBXZ,0)),U,1)_" requires Amb Care Certification")
;
D VALNDC^IBCBB11(IBIFN,DFN) ;validate NDC#
;
;Build AR array if no errors and MRA not needed or already rec'd
I IBER="",$S($$NEEDMRA^IBEFUNC(IBIFN)!($$REQMRA^IBEFUNC(IBIFN)):0,1:1) D ARRAY
;
;Check ROI
N ROIERR
;/vd - IB*2.0*623 (US4995) - Modified the following 2 lines of code with the following conditional.
;S ROIERR=0 I $P($G(^DGCR(399,IBIFN,"U")),U,5)=1,+$P($G(^DGCR(399,IBIFN,"U")),U,7)=0 S ROIERR=1 ; screen 7 sensitive record and no ROI
;I $$ROICHK^IBCBB11(IBIFN,DFN,+IBNDMP) S ROIERR=1 ; check file for sensitive Rx and missing ROI
S ROIERR=0
I $$ROIDTCK^IBCEU7(IBIFN) D ; ROI Eligible based upon Service Date of Claim
. I $P($G(^DGCR(399,IBIFN,"U")),U,5)=1,+$P($G(^DGCR(399,IBIFN,"U")),U,7)=0 S ROIERR=1 ; screen 7 sensitive record and no ROI
. I $$ROICHK^IBCBB11(IBIFN,DFN,+IBNDMP) S ROIERR=1 ; check file for sensitive Rx and missing ROI
I ROIERR S IBER=IBER_"IB328;"
;
;Verify Line Charges Match Claim Total Charge. IB*2.0*447 BI
I +$$GET1^DIQ(399,IBIFN_",",201)'=+$$IBLNTOT^IBCBB13(IBIFN) S IBER=IBER_"IB344;"
;
;Test for valid EIN/SY ID Values. IB*2.0*447 BI
I $$IBSYEI^IBCBB13(IBIFN) S IBER=IBER_"IB345;"
;
;Test for a missing ICN. IB*2.0*447 BI
I $$IBMICN^IBCBB13(IBIFN) S IBER=IBER_"IB346;"
;
;Test for a ZERO charge amounts. IB*2.0*447 BI
;no use looking for a warning when you already flagged a fatal edit for a similar issue;WCJ;IB*2.0*641 v9;added check for IB064
I IBER'["IB064;",$$IBRCCHK^IBCBB13(IBIFN) D WARN^IBCBB11("Claim contains revenue codes with no associated charges.")
;
;Test for missing "Patient reason for visit". IB*2.0*447 BI
I $$FT^IBCEF(IBIFN)=3,'$$INPAT^IBCEF(IBIFN),$$IBPRV3^IBCBB13(IBIFN) S IBER=IBER_"IB347;"
;
;Test for missing Payer ID. IB*2.0*447 BI
;I $$IBMPID^IBCBB13(IBIFN) S IBER=IBER_"IB348;"
;Changed Error to Warning. IB*2.0*447 TAZ
I $$IBMPID^IBCBB13(IBIFN) D WARN^IBCBB11("Not all payers have Payer IDs.")
;
;Test for missing "Priority (Type) of Admission" for UB-04. IB*2.0*447 BI
;IB*2.0*665v1;JWS;Institutional Claims - prevent > 24 codes to be entered
I $$FT^IBCEF(IBIFN)=3 D
. I $$GET1^DIQ(399,IBIFN_",",158)="" S IBER=IBER_"IB349;"
. I '$$GET1^DIQ(399,IBIFN_",",27,"I") D
.. N X,I,IS
.. S (I,IS,X)=0 F S X=$O(^DGCR(399,IBIFN,"OC",X)) Q:X'=+X S:$P(^(X,0),"^",4)="" I=$G(I)+1 I $P(^(0),"^",4)'="" S IS=$G(IS)+1
.. ;IB*2.0*702;JWS;remove 665 fatal error for Occ Codes > 24, make it a warning
.. ;I I>24 S IBER=IBER_"IB383;" I '$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) S IBER=IBER_"IB384;"
.. I I>24,'$$GET1^DIQ(399,IBIFN_",",27,"I") D
... D WARN^IBCBB11("A HIPAA Compliant EDI Claim cannot contain more than 24 Occurrence Codes.")
... ;;D WARN^IBCBB11("If this claim is sent electronically, only the first 24 Occurrence Codes will be submitted.")
.. ;IB*2.0*702;JWS;remove 665 fatal error for Occ Span Codes > 24, make it a warning
.. ;I IS>24 S IBER=IBER_"IB385;" I '$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) S IBER=IBER_"IB386;"
.. I IS>24,'$$GET1^DIQ(399,IBIFN_",",27,"I") D
... D WARN^IBCBB11("A HIPAA Compliant EDI Claim cannot contain more than 24 Occurrence Span"),WARN^IBCBB11("Codes.")
... ;;D WARN^IBCBB11("If this claim is sent electronically, only the first 24 Occurrence Span Codes will be submitted.")
.. ;IB*2.0*702;JWS;remove 665 fatal error for Value Codes > 23, make it a warning
.. ;I $P($G(^DGCR(399,IBIFN,"CV",0)),U,4)>23 S IBER=IBER_"IB389;" I '$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) S IBER=IBER_"IB390;" ;IB*2.0*665v2
.. I $P($G(^DGCR(399,IBIFN,"CV",0)),U,4)>23,'$$GET1^DIQ(399,IBIFN_",",27,"I") D
... D WARN^IBCBB11("A HIPAA Compliant EDI Claim cannot contain more than 23 Value Codes.")
... ;;D WARN^IBCBB11("If this claim is sent electronically, only the first 23 Value Codes will be submitted.")
.. Q
;IB*2.0*665v1;end
;
;IB*2.0*665v2; Inpatient Institutional Claims - prevent > 25 procedure codes electronically
I $$INPAT^IBCEF(IBIFN,1),$$INSPRF^IBCEF(IBIFN),'$$GET1^DIQ(399,IBIFN_",",27,"I") D
. N IBPROC,IBXIEN,Z
. S IBXIEN=IBIFN
. D PROCX^IBCVA1
. ;IB*2.0*702;JWS;remove 665 fatal error for Inpatient Institutional Procedure Codes > 25, make it a warning
. ;I $G(IBPROC)>25 S IBER=IBER_"IB387;" I '$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) S IBER=IBER_"IB388;"
. I $G(IBPROC)>25,'$$GET1^DIQ(399,IBIFN_",",27,"I") D
.. D WARN^IBCBB11("A HIPAA Compliant EDI Institutional Claim cannot contain more than"),WARN^IBCBB11("25 Procedure Codes. If this claim is submitted electronically,")
.. D WARN^IBCBB11("only the first 25 Procedure Codes will be included on the claim.")
;IB*2.0*665v2;end
;IB*2.0*702;end
;
;IB*2.0*702;JWS;remove 665 fatal error for Condition Codes > 24, make it a warning
;IB*2.0*665v5;WCJ;prevent > 24 condition codes to be entered unless going to paper.
;I $P($G(^DGCR(399,IBIFN,"CC",0)),U,4)>24,'$$GET1^DIQ(399,IBIFN_",",27,"I") S IBER=IBER_"IB391;" I '$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) S IBER=IBER_"IB392;" ;IB*2.0*665v5
I $P($G(^DGCR(399,IBIFN,"CC",0)),U,4)>24,'$$GET1^DIQ(399,IBIFN_",",27,"I") D
. D WARN^IBCBB11("A HIPAA Compliant EDI Claim cannot contain more than 24 Condition Codes.")
. ;;D WARN^IBCBB11("If this claim is sent electronically, only the first 24 Condition Codes will be submitted.")
;
I $$FT^IBCEF(IBIFN)=2 S IBER=IBER_$$CMNCHK^IBCBB13(IBIFN) ;JRA;IB*2.0*608 Check for missing CMN info
;
;IB*2.0*759;JWS;5/22/23;EBILL-2923;Prevent claims going out via EDI with NOEXC Payer ID
; check COB TOTAL NON-COVERED AMOUNT exist and claim is secondary
;IB*2.0*759;v11;WCJ;2/14/24;EBILL-3841;commented out check - see defect for more information
;I $P($G(^DGCR(399,IBIFN,"U4")),"^")'="",$$COBN^IBCEF(IBIFN)=2 D
;. N IBP
;. ; if there is a primary bill#, use it to determine if an MRA was requested
;. S IBP=$P($G(^DGCR(399,IBIFN,"M1")),U,5) I IBP="" S IBP=IBIFN
;. ; if primary insurance is Medicare and MRA was not requested, and FORCE CLAIM TO PRINT is not true, and Payer ID is not approved for excluded services EDI submission
;. I $$WNRBILL^IBEFUNC(IBIFN,1),$P($G(^DGCR(399,IBP,"S")),U,7)="",$P($G(^DGCR(399,IBIFN,"TX")),U,8)'=1,$$SW^IBCE837Q(IBIFN) S IBER=$G(IBER)_"IB400;IB401;"
;. Q
;
END ;Don't kill IBIFN, IBER, DFN
I $O(^TMP($J,"BILL-WARN",0)),$G(IBER)="" S IBER="WARN" ;Warnings only
K IBBNO,IBEVDT,IBLOC,IBCL,IBTF,IBAT,IBWHO,IBST,IBFDT,IBTDT,IBTC,IBFY,IBFY1,IBAU,IBRU,IBEU,IBARTP,IBFYC,IBMRA,IBTOB,IBTOB12,IBNDU2,IBNDUF3,IBNDUF31,IBNDTX
K IBNDS,IBND0,IBNDU,IBNDM,IBNDMP,IBNDU1,IBFFY,IBTFY,IBFT,IBRTCHV,IBPICHV,IBXDATA,IBOK
I $D(IBER),IBER="" W !,"No Errors found for National edits"
Q
;
ARRAY ;Build PRCASV(array)
N IBCOBN,X
K PRCASV
Q:$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN))
S IBCOBN=$$COBN^IBCEF(IBIFN)
S X=IBIFN
S PRCASV("BDT")=DT,PRCASV("ARREC")=IBIFN
S PRCASV("APR")=DUZ
S PRCASV("PAT")=DFN,PRCASV("CAT")=$P(^DGCR(399.3,IBAT,0),"^",6)
I IBWHO="i" S PRCASV("DEBTOR")=+IBNDMP_";DIC(36,"
S PRCASV("DEBTOR")=$S(IBWHO="p":DFN_";DPT(",IBWHO="o":$P(IBNDM,"^",11)_";DIC(4,",IBWHO="i":PRCASV("DEBTOR"),1:"")
S PRCASV("CARE")=$E($$TOB^IBCEF1(IBIFN),1,2)
S PRCASV("FY")=$$FY^IBOUTL(DT)_U_($P(IBNDU1,U)-$P(IBNDU1,U,2))
;S PRCASV("FY")=$P(IBNDU1,U,9)_U_$S($P(IBNDU1,U,2)]"":($P(IBNDU1,U,10)-$P(IBNDU1,U,2)),1:$P(IBNDU1,U,10))_$S($P(IBNDU1,U,11)]"":U_$P(IBNDU1,U,11)_U_$P(IBNDU1,U,12),1:"")
PLUS I IBWHO="i",$P(IBNDM,"^",2),$D(^DIC(36,$P(IBNDM,"^",2),0)) S PRCASV("2NDINS")=$P(IBNDM,"^",2)
I IBWHO="i",$P(IBNDM,"^",3),$D(^DIC(36,$P(IBNDM,"^",3),0)) S PRCASV("3RDINS")=$P(IBNDM,"^",3)
;
N IBX S IBX=$P(IBND0,U,21),IBX=$S(IBX="P":"I1",IBX="S":"I2",IBX="T":"I3",1:"") Q:IBX=""
N IBNDI1
Q:'$D(^DGCR(399,IBIFN,IBX)) S IBNDI1=^(IBX)
S:$P(IBNDI1,"^",3)]"" PRCASV("GPNO")=$P(IBNDI1,"^",3)
S:$P(IBNDI1,"^",15)]"" PRCASV("GPNM")=$P(IBNDI1,"^",15)
S:$P(IBNDI1,"^",17)]"" PRCASV("INPA")=$P(IBNDI1,"^",17)
S:$P(IBNDI1,"^",2)]"" PRCASV("IDNO")=$P(IBNDI1,"^",2),PRCASV("INID")=PRCASV("IDNO")
; Check that this is a secondary or tertiary bill and insurance for previous
; COB sequence is Medicare WNR and MRA is active --> send data elements to AR
I IBCOBN>1,$$WNRBILL^IBEFUNC(IBIFN,IBCOBN-1),$$EDIACTV^IBCEF4(2) D MRA
Q
;
MRA N IBEOB S IBEOB=0
;
K PRCASV("MEDURE"),PRCASV("MEDCA")
; Get EOB data
F S IBEOB=$O(^IBM(361.1,"B",IBIFN,IBEOB)) Q:'IBEOB D
. D MRACALC^IBCEMU2(IBEOB,IBIFN,1,.PRCASV)
Q ;MRA
;
;; PREGNANCY DX CODES: V22**-V24**, V27**-V28**, 630**-677**
;; FLU SHOTS PROCEDURE CODES: 90724, G0008, 90732, G0009
;
NONVAFLG(IBIFN) ; Check if Non-VA bill
; Function returns 1 if Non-VA bill
; IB*2.0*554/DRF 10/9/2015
N FLAG,PTF
S FLAG=0
I $P($G(^DGCR(399,IBIFN,"U2")),U,10)]"" S FLAG=1 ;Non-VA provider defined
S PTF=$P($G(^DGCR(399,IBIFN,0)),U,8)
I PTF,$P($G(^DGPT(PTF,0)),U,4)=1 S FLAG=1 ;PTF entry indicates Non-VA
Q FLAG
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCBB1 19544 printed Nov 22, 2024@17:18:52 Page 2
IBCBB1 ;ALB/AAS - CONTINUATION OF EDIT CHECK ROUTINE ;2-NOV-89
+1 ;;2.0;INTEGRATED BILLING;**27,52,80,93,106,51,151,148,153,137,232,280,155,320,343,349,363,371,395,384,432,447,488,554,577,592,608,623,641,665,702,759**;21-MAR-94;Build 24
+2 ;Per VA Directive 6402, this routine should not be modified.
+3 ;
+4 ; *** Begin IB*2.0*488 VD (Issue 46 RBN)
+5 NEW I
+6 SET I=""
+7 SET X=+$GET(^DGCR(399,IBIFN,"MP"))
+8 IF 'X
IF $$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN))
SET X=+$$CURR^IBCEF2(IBIFN)
+9 ;JWS;IB*2.0*592:US1108 - Dental form check
+10 IF X
IF +$GET(^DIC(36,X,3))
SET I=$PIECE(^(3),U,$SELECT($$FT^IBCEF(IBIFN)=2:2,$$FT^IBCEF(IBIFN)=7:15,1:4))
+11 SET I=$$UP^XLFSTR(I)
+12 IF (I'=""&(I["PRNT")&($GET(IBER)'["IB488"))
Begin DoDot:1
+13 SET IBER=$GET(IBER)_"IB488;"
End DoDot:1
+14 ;
+15 ; Cause an error if FORCED TO PRINT TO CLEARINGHOUSE
+16 IF $PIECE($GET(^DGCR(399,IBIFN,"TX")),U,8)=2
Begin DoDot:1
+17 SET IBER=$GET(IBER)_"IB489;"
End DoDot:1
+18 ;
+19 ; Cause a fatal error if the claim has no procedures & is NOT a UB-04 Inpatient claim.
+20 IF +$ORDER(^DGCR(399,IBIFN,"CP",0))=0
Begin DoDot:1
+21 ; inpatient UB-04 check
IF $$INPAT^IBCEF(IBIFN,1)
IF $$INSPRF^IBCEF(IBIFN)
QUIT
+22 ; Outpatient Institutional Claim.
IF '$$INPAT^IBCEF(IBIFN,1)
IF $$INSPRF^IBCEF(IBIFN)
Begin DoDot:2
+23 IF IBER["IB352"
QUIT
+24 SET IBER=IBER_"IB352;"
End DoDot:2
QUIT
+25 ;
+26 ; Professional claim
+27 IF IBER["IB353"
QUIT
+28 SET IBER=IBER_"IB353;"
+29 QUIT
End DoDot:1
+30 ; *** End IB*2.0*488 -- VD
+31 ;
+32 ;MAP TO DGCRBB1
+33 ;
% ;Bill Status
+1 NEW Z,Z0,Z1,IBFT
+2 IF $SELECT(+IBST=0:1,1:"^1^2^3^4^7^"'[(U_IBST_U))
SET IBER=IBER_"IB045;"
+3 ;
+4 ;Statement Covers From
+5 IF IBFDT=""
SET IBER=IBER_"IB061;"
+6 IF IBFDT]""
IF IBFDT'?7N&(IBFDT'?7N1".".N)
SET IBER=IBER_"IB061;"
+7 ; from must be on or before the to date
IF IBFDT>IBTDT
SET IBER=IBER_"IB061;"
+8 SET IBFFY=$$FY^IBOUTL(IBFDT)
+9 ; if inpat - from date must not be prior to admit date.
+10 IF $$INPAT^IBCEF(IBIFN,1)
IF (IBFDT<($PIECE($GET(^DGPT(+$PIECE(IBND0,U,8),0)),U,2)\1))
SET IBER=IBER_"IB061;"
+11 ;
+12 ;Statement Covers To
+13 IF IBTDT=""
SET IBER=IBER_"IB062;"
+14 IF IBTDT]""
IF IBTDT'?7N&(IBTDT'?7N1".".N)
SET IBER=IBER_"IB062;"
+15 ; to date must not be >than today's date
IF IBTDT>DT!(IBTDT<IBFDT)
SET IBER=IBER_"IB062;"
+16 SET IBTFY=$$FY^IBOUTL(IBTDT)
+17 ;
+18 ;Total Charges
+19 ; IB*2.0*447/TAZ Removed this error so that zero dollar revenue codes can process on the 837
+20 ;I +IBTC'>0!(+IBTC'=IBTC) S IBER=IBER_"IB064;"
+21 ; IB*2.0*641 v9/WCJ added back so $0 claims won't go out
+22 IF +IBTC'>0
SET IBER=IBER_"IB064;"
+23 ;
+24 ;Billable charges for secondary claim
+25 IF $$MCRONBIL^IBEFUNC(IBIFN)&(($PIECE(IBNDU1,U,1)-$PIECE(IBNDU1,U,2))'>0)
SET IBER=IBER_"IB094;"
+26 ;Fiscal Year 1
+27 SET IBFFY=$$FY^IBOUTL(IBFDT)
+28 ;
+29 ;Check provider link for current user, enterer, reviewer and Authorizor
+30 IF '$DATA(^VA(200,DUZ,0))
SET IBER=IBER_"IB048;"
+31 IF IBEU]""
IF '$DATA(^VA(200,IBEU,0))
SET IBER=IBER_"IB048;"
+32 IF IBRU]""
IF '$DATA(^VA(200,IBRU,0))
SET IBER=IBER_"IB060;"
+33 IF IBAU]""
IF '$DATA(^VA(200,IBAU,0))
SET IBER=IBER_"IB041;"
+34 ;
+35 IF IBER=""
IF +$$STA^PRCAFN(IBIFN)=104
SET IBER=IBER_"IB040;"
+36 ; If ins bill, must have valid COB sequence
+37 IF $PIECE(IBND0,U,11)="i"
IF $SELECT($PIECE(IBND0,U,21)="":1,1:"PST"'[$PIECE(IBND0,U,21))
SET IBER=IBER_"IB324;"
+38 ;
+39 ; Check for valid sec provider id for current ins
+40 SET Z=0
FOR
SET Z=$ORDER(^DGCR(399,IBIFN,"PRV",Z))
if 'Z
QUIT
SET Z0=$GET(^(Z,0))
SET Z1=+$$COBN^IBCEF(IBIFN)
IF $PIECE(Z0,U,4+Z1)'=""
IF $PIECE(Z0,U,11+Z1)'=""
Begin DoDot:1
+41 IF '$$SECIDCK^IBCEF74(IBIFN,Z1,$PIECE(Z0,U,11+Z1),Z)
DO WARN^IBCBB11("Prov secondary id type for the "_$PIECE("PRIMARY^SECONDARY^TERTIARY",U,Z1)_" "_$$EXTERNAL^DILFD(399.0222,.01,,+Z0)_" is invalid/won't transmit")
End DoDot:1
+42 ; Check NPIs
+43 DO NPICHK^IBCBB11
+44 ;
+45 ; Check multiple rx NPIs
+46 DO RXNPI^IBCBB11(IBIFN)
+47 ;
+48 ; Check taxonomies
+49 DO TAXCHK^IBCBB11
+50 ;
+51 ; Check for Physician Name
+52 KILL IBXDATA
DO F^IBCEF("N-ATT/REND PHYSICIAN NAME",,,IBIFN)
+53 ; IB*2.0*432 - CMS1500 no longer needs a claim level rendering
+54 SET IBFT=$$FT^IBCEF(IBIFN)
+55 ;JWS;IB*2.0*592:US1108 - Dental form check
+56 IF IBFT'=2
IF IBFT'=7
IF $PIECE($GET(IBXDATA),U)=""
SET IBER=IBER_"IB303;"
+57 ;
+58 NEW FUNCTION,IBINS
+59 ; IB*2.0*432 - CMS1500 no longer needs a claim level rendering
+60 ;S FUNCTION=$S($$FT^IBCEF(IBIFN)=3:4,1:3)
+61 SET FUNCTION=$SELECT(IBFT=3:4,1:3)
+62 ;JWS;IB*2.0*592:US1108 - Dental form check
+63 IF IBFT'=2
IF IBFT'=7
IF IBER'["IB303;"
Begin DoDot:1
+64 FOR IBINS=1:1:3
Begin DoDot:2
+65 SET Z=$$GETTYP^IBCEP2A(IBIFN,IBINS)
+66 ; Rendering/attending prov secondary id required
IF Z
IF $PIECE(Z,U,2)
Begin DoDot:3
+67 NEW IBID,IBOK,Q0
+68 ; check all as though they were current
DO PROVINF^IBCEF74(IBIFN,IBINS,.IBID,1,"C")
+69 SET IBOK=0
+70 SET Q0=0
FOR
SET Q0=$ORDER(IBID(1,FUNCTION,Q0))
if 'Q0
QUIT
IF $PIECE(IBID(1,FUNCTION,Q0),U,9)=+Z
SET IBOK=1
QUIT
+71 IF 'IBOK
SET IBER=IBER_$SELECT(IBINS=1:"IB236;",IBINS=2:"IB237;",IBINS=3:"IB238;",1:"")
End DoDot:3
End DoDot:2
End DoDot:1
+72 ;
+73 ; Patch 432 enh5:The IB system shall no longer prevent users from authorizing(fatal error message)a claim because the system cannot find the providersSSNorEIN
+74 ; D PRIIDCHK^IBCBB11
+75 ;
+76 NEW IBM,IBM1
+77 SET IBM=$GET(^DGCR(399,IBIFN,"M"))
+78 SET IBM1=$GET(^DGCR(399,IBIFN,"M1"))
+79 IF $PIECE(IBM,U)
IF $PIECE($GET(^DIC(36,$PIECE(IBM,U),4)),U,6)
IF $PIECE(IBM1,U,2)=""
SET IBER=IBER_"IB244;"
+80 IF $PIECE(IBM,U,2)
IF $PIECE($GET(^DIC(36,$PIECE(IBM,U,2),4)),U,6)
IF $PIECE(IBM1,U,3)=""
SET IBER=IBER_"IB245;"
+81 IF $PIECE(IBM,U,3)
IF $PIECE($GET(^DIC(36,$PIECE(IBM,U,3),4)),U,6)
IF $PIECE(IBM1,U,4)=""
SET IBER=IBER_"IB246;"
+82 ;
+83 ; If outside facility, check for ID and qualifier in 355.93
+84 ; 5/15/06 - esg - hard error IB243 turned into warning message instead
+85 SET Z=$PIECE($GET(^DGCR(399,IBIFN,"U2")),U,10)
+86 IF Z
Begin DoDot:1
+87 IF $PIECE($GET(^IBA(355.93,Z,0)),U,9)=""!($PIECE($GET(^IBA(355.93,Z,0)),U,13)="")
Begin DoDot:2
+88 NEW Z1,Z2
+89 SET Z1="Missing Lab or Facility Primary ID for non-VA facility, "
+90 SET Z2=$$EXTERNAL^DILFD(399,232,,Z)
+91 IF $LENGTH(Z2)'>19
DO WARN^IBCBB11(Z1_Z2)
QUIT
+92 DO WARN^IBCBB11(Z1)
DO WARN^IBCBB11(" "_Z2)
+93 QUIT
End DoDot:2
+94 QUIT
End DoDot:1
+95 ;
+96 ; Must be one and only one division on bill
+97 SET IBZ=$$MULTDIV^IBCBB11(IBIFN,IBND0)
+98 ; I IBZ S IBER=IBER_$S(IBZ=1:"IB095;",IBZ=2:"IB104;",1:"IB105;")
+99 ; Allow multi-divisional for OP instutional claims
+100 IF IBZ
IF $$INPAT^IBCEF(IBIFN)!'($$INSPRF^IBCEF(IBIFN))
SET IBER=IBER_$SELECT(IBZ=1:"IB095;",IBZ=2:"IB104;",1:"IB105;")
+101 ; Still need error msg on OP Institutional if No Default division
+102 IF IBZ=3
IF '$$INPAT^IBCEF(IBIFN)
IF $$INSPRF^IBCEF(IBIFN)
SET IBER=IBER_"IB105;"
+103 ; Division address must be defined in institution file
+104 IF $PIECE(IBND0,U,22)
Begin DoDot:1
+105 NEW Z,Z0,Z1
+106 SET Z0=$GET(^DIC(4,+$PIECE($GET(^DG(40.8,+$PIECE(IBND0,U,22),0)),U,7),0))
+107 SET Z1=$GET(^DIC(4,+$PIECE($GET(^DG(40.8,+$PIECE(IBND0,U,22),0)),U,7),1))
+108 IF $PIECE(Z0,U,2)=""
SET IBER=IBER_"IB097;"
QUIT
+109 FOR Z=1,3,4
IF $PIECE(Z1,U,Z)=""
SET IBER=IBER_"IB097;"
QUIT
End DoDot:1
+110 ;
+111 ; IB*2.0*432 Check ambulance addresses, COB Non-covered amt. & Attachment Control
+112 IF $$AMBCK^IBCBB11(IBIFN)=1
SET IBER=IBER_"IB329;"
+113 IF $$COBAMT^IBCBB11(IBIFN)=1
SET IBER=IBER_"IB330;"
+114 IF $$TMCK^IBCBB11(IBIFN)=1
SET IBER=IBER_"IB331;"
+115 IF $$ACCK^IBCBB11(IBIFN)=1
SET IBER=IBER_"IB332;"
+116 IF $$COBMRA^IBCBB11(IBIFN)=1
SET IBER=IBER_"IB342;"
+117 IF $$COBSEC^IBCBB11(IBIFN)=1
SET IBER=IBER_"IB343;"
+118 ;
+119 ;CHAMPVA Rate Type and Primary Insurance Carriers Type of Coverage must match
+120 SET (IBRTCHV,IBPICHV)=0
+121 IF $PIECE($GET(^DGCR(399.3,+IBAT,0)),U,1)="CHAMPVA"
SET IBRTCHV=1
+122 IF $PIECE($GET(^IBE(355.2,+$PIECE($GET(^DIC(36,+IBNDMP,0)),U,13),0)),U,1)="CHAMPVA"
SET IBPICHV=1
+123 IF (+IBRTCHV!+IBPICHV)&('IBRTCHV!'IBPICHV)
SET IBER=IBER_"IB085;"
+124 ;
+125 ;Non-VA bill must use FEE REIMB INS rate type; FEE REIMB INS rate type can only be used for Non-VA bill
+126 ;IB*2.0*554/DRF 10/9/2015
+127 ;N IBNVART,IBNVAST
+128 ;S (IBNVART,IBNVAST)=0
+129 ;I $P($G(^DGCR(399.3,+IBAT,0)),U,1)="FEE REIMB INS" S IBNVART=1
+130 ;S IBNVAST=$$NONVAFLG(IBIFN)
+131 ;I IBNVART,'IBNVAST S IBER=IBER_"IB360;" ;Non-VA rate type used for bill that is not Non-VA
+132 ;I 'IBNVART,IBNVAST S IBER=IBER_"IB361;" ;Non-VA rate type not used for bill that is Non-VA
+133 ;
+134 NEW IBZPRC,IBZPRCUB
+135 DO F^IBCEF("N-ALL PROCEDURES","IBZPRC",,IBIFN)
+136 ; Procedure Clinic is required for Surgical Procedures Outpt Facility Charges
+137 IF +$PIECE(IBND0,U,27)'=2
IF $$BILLRATE^IBCRU3(IBAT,IBCL,IBEVDT,"RC OUTPATIENT")
Begin DoDot:1
+138 NEW Z,Z0,Z1,ZE
SET (ZE,Z)=0
FOR
SET Z=$ORDER(^DGCR(399,IBIFN,"CP",Z))
if 'Z
QUIT
Begin DoDot:2
+139 SET Z0=$GET(^DGCR(399,IBIFN,"CP",Z,0))
SET Z1=+Z0
IF Z0'[";ICPT("
QUIT
+140 IF '((Z1'<10000)&(Z1'>69999))&'((Z1'<93501)&(Z1'>93533))
QUIT
+141 IF '$PIECE(Z0,U,7)
SET ZE=1
End DoDot:2
IF +ZE
SET IBER=IBER_"IB320;"
QUIT
End DoDot:1
+142 ;
+143 ; Extract procedures for UB-04
+144 DO F^IBCEF("N-UB-04 PROCEDURES","IBZPRCUB",,IBIFN)
+145 ; Does this bill have ANY prescriptions associated with it?
+146 ; Must bill prescriptions separately from other charges
+147 ;
+148 ; DEM;432 - Call line level provider edit checks.
+149 ; DEM;432 - If there are line provider edits, then routine LNPROV^IBCBB12(IBIFN) updates IBER string.
DO LNPROV^IBCBB12(IBIFN)
+150 ; DEM;432 - Call to Other Operating/Operating Provider edit checks.
+151 ; DEM;432
IF $$OPPROVCK^IBCBB12(IBIFN)=1
SET IBER=IBER_"IB337;"
+152 ; DEM;432 - Line level Attachment Control edits.
+153 ; DEM;432
IF $$LNTMCK^IBCBB11(IBIFN)=1
SET IBER=IBER_"IB331;"
+154 ; DEM;432
IF $$LNACCK^IBCBB11(IBIFN)=1
SET IBER=IBER_"IB332;"
+155 ;
+156 ; vd/Beginning of IB*2*577 - Validate Line Level NDC edits.
+157 ;IB*2*577;JWS;11/20/17 FIX
IF $$LNNDCCK^IBCBB11(IBIFN)=1
SET IBER=IBER_"IB365;"
+158 ; vd/End of IB*2*577
+159 IF $$ISRX^IBCEF1(IBIFN)
Begin DoDot:1
+160 NEW IBZ,IBRXDEF
+161 SET IBRXDEF=$PIECE($GET(^IBE(350.9,1,1)),U,30)
SET IBZ=0
+162 FOR
SET IBZ=$ORDER(IBZPRCUB(IBZ))
if 'IBZ
QUIT
IF IBZPRCUB(IBZ)
IF +$PIECE(IBZPRCUB(IBZ),U)'=IBRXDEF
SET IBER=IBER_"IB102;"
QUIT
+163 KILL IBZ
End DoDot:1
+164 ;
+165 ; Check that COB sequences are not skipped
+166 KILL Z
+167 FOR Z=1:1:3
if +$GET(^DGCR(399,IBIFN,"I"_Z))
SET Z(Z)=""
+168 FOR Z=0:1:2
SET Z0=$ORDER(Z(Z))
if 'Z0
QUIT
IF Z0'=(Z+1)
SET IBER=IBER_"IB322;"
QUIT
+169 KILL Z
+170 ; HD64676 IB*2*371 - OK for payer sequence to be blank when the Rate
+171 ; Type is either Interagency or Sharing Agreement
+172 IF $PIECE($GET(^DGCR(399,IBIFN,0)),U,21)=""
IF $PIECE($GET(^DGCR(399,IBIFN,0)),U,7)'=4
IF $PIECE($GET(^DGCR(399,IBIFN,0)),U,7)'=9
SET IBER=IBER_"IB323;"
+173 KILL IBXDATA
DO F^IBCEF("N-PROCEDURE CODING METHD",,,IBIFN)
+174 ; Coding method should agree with types of procedure codes
+175 SET IBOK=$SELECT('$ORDER(IBZPRC(0))!(IBXDATA=""):1,1:0)
+176 IF 'IBOK
SET IBOK=1
SET IBZ=0
FOR
SET IBZ=$ORDER(IBZPRC(IBZ))
if 'IBZ
QUIT
IF IBZPRC(IBZ)
IF $PIECE(IBZPRC(IBZ),U)'[$SELECT(IBXDATA=9:"ICD",1:"ICP")
SET IBOK=0
QUIT
+177 IF 'IBOK
DO WARN^IBCBB11("Coding Method does not agree with all procedure codes found on bill")
+178 DO EDITMRA^IBCBB3(.IBQUIT,.IBER,IBIFN,IBFT)
+179 if $GET(IBQUIT)
QUIT
+180 ;
+181 ;Other things that could be added: Rev Code - calculating charges
+182 ; Diagnosis Coding, if MT copay - check for other co-payments
+183 ;
+184 ; can't force MRAs to print
IF $PIECE(IBNDTX,U,8)
IF $$REQMRA^IBEFUNC(IBIFN)
SET IBER=IBER_"IB121;"
+185 IF $PIECE(IBNDTX,U,8)!$PIECE(IBNDTX,U,9)
Begin DoDot:1
+186 ; Don't want to do this for option 2 any more.
if $PIECE(IBNDTX,U,8)=2
QUIT
+187 DO WARN^IBCBB11($SELECT($$REQMRA^IBEFUNC(IBIFN)&($PIECE(IBNDTX,U,9)):"MRA Secondary ",1:"")_"Bill has been forced to print "_$SELECT($PIECE(IBNDTX,U,8)=1!($PIECE(IBNDTX,U,9)=1):"locally",1:"at clearinghouse"))
End DoDot:1
+188 NEW IBXZ,IBIZ
FOR IBIZ=12,13,14
SET IBXZ=$PIECE(IBNDM,U,IBIZ)
IF +IBXZ
SET IBXZ=$PIECE($GET(^DPT(DFN,.312,IBXZ,0)),U,18)
IF +IBXZ
SET IBXZ=$GET(^IBA(355.3,+IBXZ,0))
IF +$PIECE(IBXZ,U,12)
Begin DoDot:1
+189 DO WARN^IBCBB11($PIECE($GET(^DIC(36,+IBXZ,0)),U,1)_" requires Amb Care Certification")
End DoDot:1
+190 ;
+191 ;validate NDC#
DO VALNDC^IBCBB11(IBIFN,DFN)
+192 ;
+193 ;Build AR array if no errors and MRA not needed or already rec'd
+194 IF IBER=""
IF $SELECT($$NEEDMRA^IBEFUNC(IBIFN)!($$REQMRA^IBEFUNC(IBIFN)):0,1:1)
DO ARRAY
+195 ;
+196 ;Check ROI
+197 NEW ROIERR
+198 ;/vd - IB*2.0*623 (US4995) - Modified the following 2 lines of code with the following conditional.
+199 ;S ROIERR=0 I $P($G(^DGCR(399,IBIFN,"U")),U,5)=1,+$P($G(^DGCR(399,IBIFN,"U")),U,7)=0 S ROIERR=1 ; screen 7 sensitive record and no ROI
+200 ;I $$ROICHK^IBCBB11(IBIFN,DFN,+IBNDMP) S ROIERR=1 ; check file for sensitive Rx and missing ROI
+201 SET ROIERR=0
+202 ; ROI Eligible based upon Service Date of Claim
IF $$ROIDTCK^IBCEU7(IBIFN)
Begin DoDot:1
+203 ; screen 7 sensitive record and no ROI
IF $PIECE($GET(^DGCR(399,IBIFN,"U")),U,5)=1
IF +$PIECE($GET(^DGCR(399,IBIFN,"U")),U,7)=0
SET ROIERR=1
+204 ; check file for sensitive Rx and missing ROI
IF $$ROICHK^IBCBB11(IBIFN,DFN,+IBNDMP)
SET ROIERR=1
End DoDot:1
+205 IF ROIERR
SET IBER=IBER_"IB328;"
+206 ;
+207 ;Verify Line Charges Match Claim Total Charge. IB*2.0*447 BI
+208 IF +$$GET1^DIQ(399,IBIFN_",",201)'=+$$IBLNTOT^IBCBB13(IBIFN)
SET IBER=IBER_"IB344;"
+209 ;
+210 ;Test for valid EIN/SY ID Values. IB*2.0*447 BI
+211 IF $$IBSYEI^IBCBB13(IBIFN)
SET IBER=IBER_"IB345;"
+212 ;
+213 ;Test for a missing ICN. IB*2.0*447 BI
+214 IF $$IBMICN^IBCBB13(IBIFN)
SET IBER=IBER_"IB346;"
+215 ;
+216 ;Test for a ZERO charge amounts. IB*2.0*447 BI
+217 ;no use looking for a warning when you already flagged a fatal edit for a similar issue;WCJ;IB*2.0*641 v9;added check for IB064
+218 IF IBER'["IB064;"
IF $$IBRCCHK^IBCBB13(IBIFN)
DO WARN^IBCBB11("Claim contains revenue codes with no associated charges.")
+219 ;
+220 ;Test for missing "Patient reason for visit". IB*2.0*447 BI
+221 IF $$FT^IBCEF(IBIFN)=3
IF '$$INPAT^IBCEF(IBIFN)
IF $$IBPRV3^IBCBB13(IBIFN)
SET IBER=IBER_"IB347;"
+222 ;
+223 ;Test for missing Payer ID. IB*2.0*447 BI
+224 ;I $$IBMPID^IBCBB13(IBIFN) S IBER=IBER_"IB348;"
+225 ;Changed Error to Warning. IB*2.0*447 TAZ
+226 IF $$IBMPID^IBCBB13(IBIFN)
DO WARN^IBCBB11("Not all payers have Payer IDs.")
+227 ;
+228 ;Test for missing "Priority (Type) of Admission" for UB-04. IB*2.0*447 BI
+229 ;IB*2.0*665v1;JWS;Institutional Claims - prevent > 24 codes to be entered
+230 IF $$FT^IBCEF(IBIFN)=3
Begin DoDot:1
+231 IF $$GET1^DIQ(399,IBIFN_",",158)=""
SET IBER=IBER_"IB349;"
+232 IF '$$GET1^DIQ(399,IBIFN_",",27,"I")
Begin DoDot:2
+233 NEW X,I,IS
+234 SET (I,IS,X)=0
FOR
SET X=$ORDER(^DGCR(399,IBIFN,"OC",X))
if X'=+X
QUIT
if $PIECE(^(X,0),"^",4)=""
SET I=$GET(I)+1
IF $PIECE(^(0),"^",4)'=""
SET IS=$GET(IS)+1
+235 ;IB*2.0*702;JWS;remove 665 fatal error for Occ Codes > 24, make it a warning
+236 ;I I>24 S IBER=IBER_"IB383;" I '$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) S IBER=IBER_"IB384;"
+237 IF I>24
IF '$$GET1^DIQ(399,IBIFN_",",27,"I")
Begin DoDot:3
+238 DO WARN^IBCBB11("A HIPAA Compliant EDI Claim cannot contain more than 24 Occurrence Codes.")
+239 ;;D WARN^IBCBB11("If this claim is sent electronically, only the first 24 Occurrence Codes will be submitted.")
End DoDot:3
+240 ;IB*2.0*702;JWS;remove 665 fatal error for Occ Span Codes > 24, make it a warning
+241 ;I IS>24 S IBER=IBER_"IB385;" I '$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) S IBER=IBER_"IB386;"
+242 IF IS>24
IF '$$GET1^DIQ(399,IBIFN_",",27,"I")
Begin DoDot:3
+243 DO WARN^IBCBB11("A HIPAA Compliant EDI Claim cannot contain more than 24 Occurrence Span")
DO WARN^IBCBB11("Codes.")
+244 ;;D WARN^IBCBB11("If this claim is sent electronically, only the first 24 Occurrence Span Codes will be submitted.")
End DoDot:3
+245 ;IB*2.0*702;JWS;remove 665 fatal error for Value Codes > 23, make it a warning
+246 ;I $P($G(^DGCR(399,IBIFN,"CV",0)),U,4)>23 S IBER=IBER_"IB389;" I '$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) S IBER=IBER_"IB390;" ;IB*2.0*665v2
+247 IF $PIECE($GET(^DGCR(399,IBIFN,"CV",0)),U,4)>23
IF '$$GET1^DIQ(399,IBIFN_",",27,"I")
Begin DoDot:3
+248 DO WARN^IBCBB11("A HIPAA Compliant EDI Claim cannot contain more than 23 Value Codes.")
+249 ;;D WARN^IBCBB11("If this claim is sent electronically, only the first 23 Value Codes will be submitted.")
End DoDot:3
+250 QUIT
End DoDot:2
End DoDot:1
+251 ;IB*2.0*665v1;end
+252 ;
+253 ;IB*2.0*665v2; Inpatient Institutional Claims - prevent > 25 procedure codes electronically
+254 IF $$INPAT^IBCEF(IBIFN,1)
IF $$INSPRF^IBCEF(IBIFN)
IF '$$GET1^DIQ(399,IBIFN_",",27,"I")
Begin DoDot:1
+255 NEW IBPROC,IBXIEN,Z
+256 SET IBXIEN=IBIFN
+257 DO PROCX^IBCVA1
+258 ;IB*2.0*702;JWS;remove 665 fatal error for Inpatient Institutional Procedure Codes > 25, make it a warning
+259 ;I $G(IBPROC)>25 S IBER=IBER_"IB387;" I '$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) S IBER=IBER_"IB388;"
+260 IF $GET(IBPROC)>25
IF '$$GET1^DIQ(399,IBIFN_",",27,"I")
Begin DoDot:2
+261 DO WARN^IBCBB11("A HIPAA Compliant EDI Institutional Claim cannot contain more than")
DO WARN^IBCBB11("25 Procedure Codes. If this claim is submitted electronically,")
+262 DO WARN^IBCBB11("only the first 25 Procedure Codes will be included on the claim.")
End DoDot:2
End DoDot:1
+263 ;IB*2.0*665v2;end
+264 ;IB*2.0*702;end
+265 ;
+266 ;IB*2.0*702;JWS;remove 665 fatal error for Condition Codes > 24, make it a warning
+267 ;IB*2.0*665v5;WCJ;prevent > 24 condition codes to be entered unless going to paper.
+268 ;I $P($G(^DGCR(399,IBIFN,"CC",0)),U,4)>24,'$$GET1^DIQ(399,IBIFN_",",27,"I") S IBER=IBER_"IB391;" I '$$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN)) S IBER=IBER_"IB392;" ;IB*2.0*665v5
+269 IF $PIECE($GET(^DGCR(399,IBIFN,"CC",0)),U,4)>24
IF '$$GET1^DIQ(399,IBIFN_",",27,"I")
Begin DoDot:1
+270 DO WARN^IBCBB11("A HIPAA Compliant EDI Claim cannot contain more than 24 Condition Codes.")
+271 ;;D WARN^IBCBB11("If this claim is sent electronically, only the first 24 Condition Codes will be submitted.")
End DoDot:1
+272 ;
+273 ;JRA;IB*2.0*608 Check for missing CMN info
IF $$FT^IBCEF(IBIFN)=2
SET IBER=IBER_$$CMNCHK^IBCBB13(IBIFN)
+274 ;
+275 ;IB*2.0*759;JWS;5/22/23;EBILL-2923;Prevent claims going out via EDI with NOEXC Payer ID
+276 ; check COB TOTAL NON-COVERED AMOUNT exist and claim is secondary
+277 ;IB*2.0*759;v11;WCJ;2/14/24;EBILL-3841;commented out check - see defect for more information
+278 ;I $P($G(^DGCR(399,IBIFN,"U4")),"^")'="",$$COBN^IBCEF(IBIFN)=2 D
+279 ;. N IBP
+280 ;. ; if there is a primary bill#, use it to determine if an MRA was requested
+281 ;. S IBP=$P($G(^DGCR(399,IBIFN,"M1")),U,5) I IBP="" S IBP=IBIFN
+282 ;. ; if primary insurance is Medicare and MRA was not requested, and FORCE CLAIM TO PRINT is not true, and Payer ID is not approved for excluded services EDI submission
+283 ;. I $$WNRBILL^IBEFUNC(IBIFN,1),$P($G(^DGCR(399,IBP,"S")),U,7)="",$P($G(^DGCR(399,IBIFN,"TX")),U,8)'=1,$$SW^IBCE837Q(IBIFN) S IBER=$G(IBER)_"IB400;IB401;"
+284 ;. Q
+285 ;
END ;Don't kill IBIFN, IBER, DFN
+1 ;Warnings only
IF $ORDER(^TMP($JOB,"BILL-WARN",0))
IF $GET(IBER)=""
SET IBER="WARN"
+2 KILL IBBNO,IBEVDT,IBLOC,IBCL,IBTF,IBAT,IBWHO,IBST,IBFDT,IBTDT,IBTC,IBFY,IBFY1,IBAU,IBRU,IBEU,IBARTP,IBFYC,IBMRA,IBTOB,IBTOB12,IBNDU2,IBNDUF3,IBNDUF31,IBNDTX
+3 KILL IBNDS,IBND0,IBNDU,IBNDM,IBNDMP,IBNDU1,IBFFY,IBTFY,IBFT,IBRTCHV,IBPICHV,IBXDATA,IBOK
+4 IF $DATA(IBER)
IF IBER=""
WRITE !,"No Errors found for National edits"
+5 QUIT
+6 ;
ARRAY ;Build PRCASV(array)
+1 NEW IBCOBN,X
+2 KILL PRCASV
+3 if $$MCRWNR^IBEFUNC(+$$CURR^IBCEF2(IBIFN))
QUIT
+4 SET IBCOBN=$$COBN^IBCEF(IBIFN)
+5 SET X=IBIFN
+6 SET PRCASV("BDT")=DT
SET PRCASV("ARREC")=IBIFN
+7 SET PRCASV("APR")=DUZ
+8 SET PRCASV("PAT")=DFN
SET PRCASV("CAT")=$PIECE(^DGCR(399.3,IBAT,0),"^",6)
+9 IF IBWHO="i"
SET PRCASV("DEBTOR")=+IBNDMP_";DIC(36,"
+10 SET PRCASV("DEBTOR")=$SELECT(IBWHO="p":DFN_";DPT(",IBWHO="o":$PIECE(IBNDM,"^",11)_";DIC(4,",IBWHO="i":PRCASV("DEBTOR"),1:"")
+11 SET PRCASV("CARE")=$EXTRACT($$TOB^IBCEF1(IBIFN),1,2)
+12 SET PRCASV("FY")=$$FY^IBOUTL(DT)_U_($PIECE(IBNDU1,U)-$PIECE(IBNDU1,U,2))
+13 ;S PRCASV("FY")=$P(IBNDU1,U,9)_U_$S($P(IBNDU1,U,2)]"":($P(IBNDU1,U,10)-$P(IBNDU1,U,2)),1:$P(IBNDU1,U,10))_$S($P(IBNDU1,U,11)]"":U_$P(IBNDU1,U,11)_U_$P(IBNDU1,U,12),1:"")
PLUS IF IBWHO="i"
IF $PIECE(IBNDM,"^",2)
IF $DATA(^DIC(36,$PIECE(IBNDM,"^",2),0))
SET PRCASV("2NDINS")=$PIECE(IBNDM,"^",2)
+1 IF IBWHO="i"
IF $PIECE(IBNDM,"^",3)
IF $DATA(^DIC(36,$PIECE(IBNDM,"^",3),0))
SET PRCASV("3RDINS")=$PIECE(IBNDM,"^",3)
+2 ;
+3 NEW IBX
SET IBX=$PIECE(IBND0,U,21)
SET IBX=$SELECT(IBX="P":"I1",IBX="S":"I2",IBX="T":"I3",1:"")
if IBX=""
QUIT
+4 NEW IBNDI1
+5 if '$DATA(^DGCR(399,IBIFN,IBX))
QUIT
SET IBNDI1=^(IBX)
+6 if $PIECE(IBNDI1,"^",3)]""
SET PRCASV("GPNO")=$PIECE(IBNDI1,"^",3)
+7 if $PIECE(IBNDI1,"^",15)]""
SET PRCASV("GPNM")=$PIECE(IBNDI1,"^",15)
+8 if $PIECE(IBNDI1,"^",17)]""
SET PRCASV("INPA")=$PIECE(IBNDI1,"^",17)
+9 if $PIECE(IBNDI1,"^",2)]""
SET PRCASV("IDNO")=$PIECE(IBNDI1,"^",2)
SET PRCASV("INID")=PRCASV("IDNO")
+10 ; Check that this is a secondary or tertiary bill and insurance for previous
+11 ; COB sequence is Medicare WNR and MRA is active --> send data elements to AR
+12 IF IBCOBN>1
IF $$WNRBILL^IBEFUNC(IBIFN,IBCOBN-1)
IF $$EDIACTV^IBCEF4(2)
DO MRA
+13 QUIT
+14 ;
MRA NEW IBEOB
SET IBEOB=0
+1 ;
+2 KILL PRCASV("MEDURE"),PRCASV("MEDCA")
+3 ; Get EOB data
+4 FOR
SET IBEOB=$ORDER(^IBM(361.1,"B",IBIFN,IBEOB))
if 'IBEOB
QUIT
Begin DoDot:1
+5 DO MRACALC^IBCEMU2(IBEOB,IBIFN,1,.PRCASV)
End DoDot:1
+6 ;MRA
QUIT
+7 ;
+8 ;; PREGNANCY DX CODES: V22**-V24**, V27**-V28**, 630**-677**
+9 ;; FLU SHOTS PROCEDURE CODES: 90724, G0008, 90732, G0009
+10 ;
NONVAFLG(IBIFN) ; Check if Non-VA bill
+1 ; Function returns 1 if Non-VA bill
+2 ; IB*2.0*554/DRF 10/9/2015
+3 NEW FLAG,PTF
+4 SET FLAG=0
+5 ;Non-VA provider defined
IF $PIECE($GET(^DGCR(399,IBIFN,"U2")),U,10)]""
SET FLAG=1
+6 SET PTF=$PIECE($GET(^DGCR(399,IBIFN,0)),U,8)
+7 ;PTF entry indicates Non-VA
IF PTF
IF $PIECE($GET(^DGPT(PTF,0)),U,4)=1
SET FLAG=1
+8 QUIT FLAG