Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: IBCBB2

IBCBB2.m

Go to the documentation of this file.
  1. IBCBB2 ;ALB/ARH - CONTINUATION OF EDIT CHECKS ROUTINE (CMS-1500) ;04/14/92
  1. ;;2.0;INTEGRATED BILLING;**51,137,210,245,232,296,320,349,371,403,432,447,473,488,461,623,641,665,702**;21-MAR-94;Build 53
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. ;MAP TO DGCRBB2
  1. ;
  1. EN ;
  1. N IBI,IBJ,IBN,IBY,IBDX,IBDXO,IBDXL,IBDXTYP,IBDXVER,IBCPT,IBCPTL,IBOLAB,Z,IBXSAVE,IBLOC,IBTX,IBPS,IBSP,IBLCT,IBNVFLG,IBU3
  1. I '$D(IBER) S IBER=""
  1. S IBTX=$$TXMT^IBCEF4(IBIFN)
  1. ;
  1. ; Max 4 modifiers per CPT code allowed before warning
  1. K IBXDATA
  1. D F^IBCEF("N-HCFA 1500 MODIFIERS",,,IBIFN) ;Get modifiers
  1. ;
  1. S Z=0 F S Z=$O(IBZPRC92(Z)) Q:'Z I $P(IBZPRC92(Z),U)["ICPT(",$L($P(IBZPRC92(Z),U,15),",")>4 S IBI="Proc "_$$PRCD^IBCEF1($P(IBZPRC92(Z),U))_" has > 4 modifiers - only first 4 will be used" D WARN^IBCBB11(IBI)
  1. ;
  1. ; ICD diagnosis, at least 1 required
  1. D SET^IBCSC4D(IBIFN,.IBDX,.IBDXO) I '$P(IBDX,U,2) S IBER=IBER_"IB071;"
  1. ;
  1. ; Principle diagnosis - updated for ICD-10 **461
  1. S IBI=$O(IBDXO(0)) I IBI S IBDXTYP=$$ICD9^IBACSV(+$P(IBDXO(IBI),U),$$BDATE^IBACSV(IBIFN)) D
  1. . S IBDXVER=$P(IBDXTYP,U,19),IBDXTYP=$E(IBDXTYP)
  1. . I IBDXVER=1,IBDXTYP="E" S IBER=IBER_"IB117;"
  1. . I IBDXVER=1,$$INPAT^IBCEF(IBIFN,1),IBDXTYP="V" S Z="Principal Dx V-code may not be valid" D WARN^IBCBB11(Z)
  1. . I IBDXVER=30,"VWXY"[IBDXTYP S IBER=IBER_"IB355;"
  1. . I IBDXVER=30,$$INPAT^IBCEF(IBIFN,1),IBDXTYP="Z" S Z="Principal Dx Z-code may not be valid" D WARN^IBCBB11(Z)
  1. ;
  1. I '$$OCC10(IBIFN,.IBDX,2) S IBER=IBER_"IB093;"
  1. ;
  1. ; CPT procs must be associated with a dx, must have a defined provider
  1. S (IBLOC,IBN,IBI,IBY)=0 F S IBI=$O(^DGCR(399,IBIFN,"CP",IBI)) Q:IBI'?1N.N S IBCPT=^(IBI,0) D I +IBY S IBN=1
  1. . I 'IBLOC,$P(IBCPT,U,15)'="",IBTX S Z="At least 1 charge has local box 24K data that will not be transmitted - " S IBLOC=1 D WARN^IBCBB11(Z) S Z=" This data will only print locally" D WARN^IBCBB11(Z)
  1. . I $P(IBCPT,U)'["ICPT(" S:IBER'["IB092" IBER=IBER_"IB092;" Q
  1. . S IBY=1 F IBJ=11:1:14 I +$P(IBCPT,"^",IBJ) S IBCPTL(+$P(IBCPT,"^",IBJ))="",IBY=0
  1. I +IBN S IBER=IBER_"IB072;"
  1. ;
  1. ; CMS-1500: dxs associated with procs must be defined dxs for the bill
  1. S IBI=0 F S IBI=$O(IBDX(IBI)) Q:'IBI S IBDXL(IBDX(IBI))=""
  1. S (IBN,IBI)=0 F S IBI=$O(IBCPTL(IBI)) Q:'IBI I '$D(IBDXL(IBI)) S IBN=1 Q
  1. I +IBN S IBER=IBER_"IB073;"
  1. ; ejk *296* Change # of diagnoses codes from 4 to 8 on CMS-1500 Claims.
  1. ; baa *488* Change # of diagnoses codes from 8 to 12.
  1. ; vd *623-US4055* Modified the logic for dental claims to check for # of diagnosis codes greater than 4.
  1. ;
  1. ;IB*2.0*702;JWS;remove 665 fatal error for Professional claims with >12 Diagnosis Codes, make it a warning
  1. ;WCJ;IB*2.0*665v4;more than 12 diag on CMS-1500 is an error PERIOD
  1. ;I IBTX,$$FT^IBCEF(IBIFN)'=7 S IBI=12 F S IBI=$O(IBDXO(IBI)) Q:'IBI S Z=+$G(IBDX(+$G(IBDXO(IBI)))) I Z,$D(IBCPTL(Z)) D WARN^IBCBB11("Too many diagnoses for claim & will be rejected - consider printing locally")
  1. ;I IBTX,$$FT^IBCEF(IBIFN)'=7,$O(IBDXO(12)) S IBER=IBER_"IB397;"
  1. I IBTX,$$FT^IBCEF(IBIFN)'=7,$O(IBDXO(12)) D WARN^IBCBB11("A HIPAA Compliant EDI Professional claim cannot contain more than 12"),WARN^IBCBB11("diagnosis codes.")
  1. ;
  1. ;IB*2.0*702;JWS;remove 665 fatal error for Dental claims with >4 Diagnosis Codes, make it a warning
  1. ;WCJ;IB*2.0*665v4;more than 4 diag on Dental (J-something something) is an error PERIOD
  1. ;I $$FT^IBCEF(IBIFN)=7,$P($G(IBDXO),U,2)>4 D WARN^IBCBB11("Only 4 diagnosis codes are allowed on a dental transaction")
  1. ;I $$FT^IBCEF(IBIFN)=7,$O(IBDXO(4)) S IBER=IBER_"IB398;"
  1. I $$FT^IBCEF(IBIFN)=7,$O(IBDXO(4)) D WARN^IBCBB11("A HIPAA Compliant EDI Dental claim cannot contain more than 4"),WARN^IBCBB11("diagnosis codes.")
  1. ;
  1. I $$WNRBILL^IBEFUNC(IBIFN),$$MRATYPE^IBEFUNC(IBIFN)'="B" S IBER=IBER_"IB087;"
  1. ;
  1. ; IB*320 - CLIA# error/warning - error msg for MRA claims, else warning
  1. I $P(IBNDU2,U,13)="",$$CLIAREQ^IBCEP8A(IBIFN) D
  1. . I $$REQMRA^IBEFUNC(IBIFN) S IBER=IBER_"IB235;" Q
  1. . D WARN^IBCBB11("Claim contains laboratory services. The payer may require a CLIA #.")
  1. . Q
  1. ;
  1. ; Only one occurrence code can be present for event date for box 14
  1. S Z=$$EVENT^IBCF22(IBIFN,.IBXSAVE,.IBI)
  1. I IBI S IBER=IBER_"IB099;"
  1. ;
  1. ; esg - 6/6/07 - warning if missing non-VA care type for outside facility
  1. S IBNVFLG=0
  1. I $P(IBNDU2,U,10),'$P(IBNDU2,U,11) D WARN^IBCBB11("Non-VA facility indicated, but the Non-VA Care Type field is not defined") S IBNVFLG=1
  1. ;
  1. ; unit/charge limits
  1. K IBXDATA
  1. D F^IBCEF("N-HCFA 1500 SERVICES (PRINT)",,,IBIFN) ;Get charge lines
  1. S (IBLCT,IBOLAB)=0,IBPS="",IBSP=$$BILLSPEC^IBCEU3(IBIFN)
  1. S IBI=0 F S IBI=$O(IBXDATA(IBI)) Q:'IBI D Q:IBER["IB310"!(IBER["IB311")
  1. . S IBLCT=IBLCT+1
  1. . I $P(IBNDU2,U,11) D
  1. .. I '$P(IBXDATA(IBI),U,11) S IBPS=IBPS_$S(IBPS'="":",",1:"")_IBI Q
  1. .. I $P(IBXDATA(IBI),U,14),"24"'[$P(IBNDU2,U,11) D WARN^IBCBB11("Outside lab charges exist on a non-lab NON-VA bill")
  1. . ; Start IB*2.0*473 Changed the following two warnings to errors.
  1. . ;I '$P(IBNDU2,U,11),$P(IBXDATA(IBI),U,11) D WARN^IBCBB11("Purchased service amounts are invalid unless this is a NON-VA bill")
  1. . ;I IBNVFLG,'$P(IBXDATA(IBI),U,11) D WARN^IBCBB11("Non-VA facility indicated, but no purchased service charge on line# "_IBI)
  1. . I $G(IBER)'["IB350" I '$P(IBNDU2,U,11),$P(IBXDATA(IBI),U,11) S IBER=IBER_"IB350;"
  1. . I $G(IBER)'["IB351" I IBNVFLG,'$P(IBXDATA(IBI),U,11) S IBER=IBER_"IB351;"
  1. . ; End IB*2.0*473
  1. . I $G(IBER)'["IB310" I $D(IBXDATA(IBI,"A")) S IBER=IBER_"IB310;" Q
  1. . I $D(IBXDATA(IBI,"ARX")),IBER'["311;" S IBER=IBER_"IB311;" Q
  1. . I $P(IBXDATA(IBI),U,14) S IBOLAB=IBOLAB+1
  1. . ;JWS;IB*2.0*641v9; put back the edit for Place of Service
  1. . ; Place of service required => remove edit below for IB*2.0*488 ; baa
  1. . I $G(IBER)'["IB314;",$P(IBXDATA(IBI),U,3)="" S IBER=IBER_"IB314;"
  1. . ; Type of service required => remove edit below for IB*2.0*488 ; baa
  1. . ;I $G(IBER)'["IB313;",$P(IBXDATA(IBI),U,4)="" S IBER=IBER_"IB313;"
  1. . ; 43 and 53 are invalid types of service
  1. . I $G(IBER)'["IB110;",($P(IBXDATA(IBI),U,4)=43!($P(IBXDATA(IBI),U,4)=53)) S IBER=IBER_"IB110;"
  1. . ; Units for the line item must be less than 100/1000 => Remove edit baa *488
  1. . ;I IBER'["IB088",$P(IBXDATA(IBI),U,9)'<100 D
  1. . ;. I $P(IBXDATA(IBI),U,4)'=7 S IBER=IBER_"IB088;" Q
  1. . ;. I $P(IBXDATA(IBI),U,9)'<1000 S IBER=IBER_"IB088;"
  1. . ; Line item total charge must be less than $10,000.00, greater than 0
  1. . ; IB*2.0*432 - The IB system shall provide the ability for users to enter maximum line item dollar amounts of 9999999.99.
  1. . ; I IBER'["IB090",$P(IBXDATA(IBI),U,9)'<10000 S IBER=IBER_"IB090;"
  1. . I IBER'["IB090",$P(IBXDATA(IBI),U,9)'<10000000 S IBER=IBER_"IB090;"
  1. . ; IB*2.0*447 BI Removed individual warning replaced by a claim level warning.
  1. . ; I '($P(IBXDATA(IBI),U,9)*$P(IBXDATA(IBI),U,8)),$$COBN^IBCEF(IBIFN)'>1 S Z="Procedure "_$P(IBXDATA(IBI),U,5)_" has a 0-charge and will not be transmitted" D WARN^IBCBB11(Z)
  1. I IBTX,IBLCT>50 D
  1. . I $G(IBER)'["IB308" I '$$REQMRA^IBEFUNC(IBIFN) S IBER=IBER_"IB308;" Q
  1. . I $G(IBER)'["IB325" I '$P(IBNDTX,U,9) S IBER=IBER_"IB325;"
  1. S IBU3=$P($G(^DGCR(399,IBIFN,"U3")),U,4,7) I $TR(IBU3,U)'="" D
  1. .; ib*2.0*432 add line-level check
  1. .;I +IBSP'=35 D WARN^IBCBB11("Chiropractic service details only valid if provider specialty is '35'")
  1. .I $$LINSPEC^IBCEU3(IBIFN)'[35 D WARN^IBCBB11("Chiropractic service details only valid if provider specialty is '35'")
  1. .I $G(IBER)'["IB137" I $P(IBU3,U,2)="" S IBER=IBER_"IB137;"
  1. .I $G(IBER)'["IB338" I $P(IBU3,U,4)="" S IBER=IBER_"IB138;" Q
  1. .I $G(IBER)'["IB139" I $P(IBU3,U,3)="","AM"[$P(IBU3,U,4) S IBER=IBER_"IB139;"
  1. .Q
  1. ; IB*2.0*473 BI Changed the following warning to an error.
  1. ;I IBPS'="" D WARN^IBCBB11("NON-VA facility indicated, but no purchased service charge on line item"_$S(IBPS[",":"s",1:"")_" #"_IBPS)
  1. I $G(IBER)'["IB351" I IBPS'="" S IBER=IBER_"IB351;"
  1. I $P(IBNDU2,U,11),$P(IBNDU2,U,11)=4,IBOLAB>1 D WARN^IBCBB11("For proper payment, you must bill each outside lab on a separate claim form")
  1. K IBXDATA
  1. ;
  1. ; ; Check for Physician Name
  1. D F^IBCEF("N-REFERRING PROVIDER NAME",,,IBIFN)
  1. I $P($G(IBXDATA),U)]"" D
  1. .N IBZ,FUNCTION,IBINS
  1. .S FUNCTION=1
  1. .F IBINS=1:1:3 D
  1. .. S Z=$$GETTYP^IBCEP2A(IBIFN,IBINS,FUNCTION)
  1. .. I Z,$P(Z,U,2) D ; Rendering/attending prov secondary id required
  1. ... N IBID,IBOK,Q0
  1. ... D PROVINF^IBCEF74(IBIFN,IBINS,.IBID,1,"C") ; check all as though they were current
  1. ... S IBOK=0
  1. ... 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
  1. ... I 'IBOK S IBER=IBER_$S(IBINS=1:"IB239;",IBINS=2:"IB240;",IBINS=3:"IB241;",1:"")
  1. ;
  1. Q
  1. ;
  1. OCC10(IBIFN,IBARR,IBFT) ; Determine if occurrence code 10 exists for pregnancy dx
  1. ; IBARR=array subscripted by ien of DX code if IBFT=2 (CMS-1500 form)
  1. ; by seq # and = ien of DX code if IBFT'=2
  1. ;
  1. N IBN,IBI,IBXDATA,IBXSAVE,IBDX,Z
  1. S IBN=1
  1. ;
  1. ; If a pregnancy DX exists, must be an occurrence code 10 for LMP date
  1. ; ICD-9 dx ranges are: V22*-V24*, V27*-V28*, 630*-677*
  1. ; ICD-10 dx ranges are: O00.*-O9A.*, Z34.*-Z36.*, Z37.*-Z39.*, Z3A.*
  1. ;
  1. I '$D(^TMP($J,"LMD")) D
  1. . D F^IBCEF("N-OCCURRENCE CODES",,,IBIFN)
  1. . S ^TMP($J,"LMD")=""
  1. . S Z=0 F S Z=$O(IBXSAVE("OCC",Z)) Q:'Z I +IBXSAVE("OCC",Z)=10 S ^TMP($J,"LMD")=1 Q
  1. ;
  1. I '^TMP($J,"LMD") S IBI=0 F S IBI=$O(IBARR(IBI)) Q:'IBI D Q:'IBN
  1. . N Z,Z1,ZC
  1. . S IBDX=$S($G(IBFT)'=2:+IBARR(IBI),1:IBI)
  1. . S ZC=$$ICD9^IBACSV(IBDX,$$BDATE^IBACSV(IBIFN)),Z=$E(ZC,1,3),Z1=$E(Z,2,3) ; Pregnancy Dx exists
  1. . I $P(ZC,U,19)=1,$S(Z'<630&(Z<678):1,$E(Z)="V":$S(Z1'<22&(Z1<25):1,1:Z1'<27&(Z1<28)),1:0) S IBN=0 ; ICD-9 Dx
  1. . I $P(ZC,U,19)=30,$S(Z?1"O"2N:1,Z="O9A":1,$E(Z)="Z"&(Z1'<34)&(Z1<40):1,Z="Z3A":1,1:0) S IBN=0 ; ICD-10 Dx
  1. ;
  1. OCC10Q K ^TMP($J,"LMD")
  1. Q IBN
  1. ;