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

ABMFEAPI.m

Go to the documentation of this file.
  1. ABMFEAPI ; IHS/SD/SDR - 3P Fee Table API
  1. ;;2.6;IHS THIRD PARTY BILLING SYSTEM;**2,3,8,14,21,27**;NOV 12, 2009;Build 486
  1. ;
  1. ;IHS/SD/SDR 2.6*3 FIXPMS10008 and FIXPMS10012 Corrections to RANGE tag
  1. ;IHS/SD/SDR 2.6*21 HEAT130924 Made correction to fee lookup for dental codes.
  1. ; Was using the code to lookup in the "B" x-ref but that one is by IEN.
  1. ;IHS/SD/SDR 2.6*27 CR8894 Corrections to Range tag; all variables weren't defined and Category III codes skipped
  1. ;
  1. ONE(ABMFSCHD,ABMMLT,ABMCODE,ABMDT) ;PEP - returns charge for one code
  1. ; One of two errors may be returned with a "0"
  1. ; Fee Schedule doesn't exist
  1. ; Code not in Fee Schedule
  1. ;
  1. ; ABMFSCHD = Fee Schedule Number
  1. ; ABMMLT = What multiple to get code from; NOTE-some codes can exist
  1. ; in more than one multiple
  1. ; ABMCODE = code IEN
  1. ; ABMDT = Date of Service
  1. ;
  1. N ABMI,ABMEDT,ABMFLG
  1. S ABMA=""
  1. I '$D(^ABMDFEE(ABMFSCHD)) S ABMA="0^Fee Schedule doesn't exist" Q ABMA
  1. I ABMMLT=21 S ABMCODE=$G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,0)) ;dental
  1. I $G(ABMCODE)="" S ABMA="0^Code not in Fee Schedule" Q ABMA
  1. ;I '$D(^ABMDFEE(ABMFSCHD,ABMMLT,"B",ABMCODE)) S ABMA="0^Code not in Fee Schedule" Q ABMA ;abm*2.6*2
  1. ;I '$D(^ABMDFEE(ABMFSCHD,ABMMLT,"B",+ABMCODE)) S ABMA="0^Code not in Fee Schedule" Q ABMA ;abm*2.6*2 ;abm*2.6*21 IHS/SD/SDR HEAT130924
  1. ;I ABMMLT'=21,'$D(^ABMDFEE(ABMFSCHD,ABMMLT,"B",+ABMCODE)) S ABMA="0^Code not in Fee Schedule" Q ABMA ;abm*2.6*21 IHS/SD/SDR HEAT130924 ;abm*2.6*27 IHS/SD/SDR CR8894
  1. I ABMMLT=21,'$D(^ABMDFEE(ABMFSCHD,ABMMLT,1_$S(+$G(ABMR("CODE"))'=0:ABMR("CODE"),+$G(ABMZ("DCD"))'=0:ABMZ("DCD"),1:""))) S ABMA="0^Code not in Fee Schedule" Q ABMA ;abm*2.6*21 IHS/SD/SDR HEAT130924
  1. ;S ABMI=$O(^ABMDFEE(ABMFSCHD,ABMMLT,"B",ABMCODE,0)) ;abm*2.6*2
  1. ;S ABMI=$O(^ABMDFEE(ABMFSCHD,ABMMLT,"B",+ABMCODE,0)) ;abm*2.6*2 ;abm*2.6*21 IHS/SD/SDR HEAT130924
  1. ;S:(ABMMLT'=21) ABMI=$O(^ABMDFEE(ABMFSCHD,ABMMLT,"B",+ABMCODE,0)) ;abm*2.6*21 IHS/SD/SDR HEAT130924 ;abm*2.6*27 IHS/SD/SDR CR8894
  1. ;start new abm*2.6*27 IHS/SD/SDR CR8894
  1. ;S:(ABMMLT'=21) ABMI=$$DINUM^ABMFOFS($O(^ABMDFEE(ABMFSCHD,ABMMLT,"B",ABMCODE,0))) ;abm*2.6*21 IHS/SD/SDR HEAT130924 ;abm*2.6*27 IHS/SD/SDR CR8894
  1. ;I ABMMLT'=21 D Q:(+ABMA=0)
  1. ;.S ABMI=$O(^ABMDFEE(ABMFSCHD,ABMMLT,"B",ABMCODE,0))
  1. ;.I +ABMI=0 S ABMI=$O(^ABMDFEE(ABMFSCHD,ABMMLT,"C",ABMCODE,0))
  1. ;.I +ABMI=0 S ABMA="0^Code not in Fee Schedule" Q
  1. ;.S ABMI=$$DINUM^ABMFOFS(ABMI)
  1. ;I ABMMLT'=21 S ABMI=$S(+ABMCODE=0:$$DINUM^ABMFOFS(ABMCODE),1:ABMCODE)
  1. I ABMMLT'=21 S ABMI=$S(+ABMCODE=0:$$DINUM^ABMFOFS(ABMCODE),($L(ABMCODE)'=$L(+ABMCODE)):$$DINUM^ABMFOFS(ABMCODE),1:ABMCODE)
  1. ;end new abm*2.6*27 IHS/SD/SDR CR8894
  1. S:(ABMMLT=21) ABMI=1_$S(+$G(ABMR("CODE"))'=0:ABMR("CODE"),+$G(ABMZ("DCD"))'=0:ABMZ("DCD"),1:"") ;abm*2.6*21 IHS/SD/SDR HEAT130924
  1. ;
  1. S ABMFDT=0,ABMEDT=0,ABMFLG=0,ABMSV=0
  1. F S ABMFDT=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,"B",ABMFDT)) Q:(+$G(ABMFDT)=0) D Q:(ABMFLG'=0)
  1. .I +$G(ABMSV)=0 S ABMSV=ABMFDT
  1. .I (ABMDT>ABMSV&(ABMDT<ABMFDT))!(ABMDT=ABMSV) D
  1. ..S ABMDIEN=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,"B",ABMSV,0))
  1. ..S ABMFLG=1
  1. .S ABMSV=ABMFDT
  1. ;I ABMFLG=0,(+$G(ABMSV)'=""),((ABMDT>ABMSV)!(ABMDT=ABMSV)) S ABMDIEN=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,"B",ABMSV,0)),ABMFLG=1 ;abm*2.6*2
  1. I ABMFLG=0,(+$G(ABMSV)'=0),((ABMDT>ABMSV)!(ABMDT=ABMSV)) S ABMDIEN=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,"B",ABMSV,0)),ABMFLG=1 ;abm*2.6*2
  1. I ABMFLG=0,($D(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI))<11) S ABMA=+$P($G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,0)),U,2) Q ABMA ;default to old charge ;abm*2.6*2
  1. I ABMFLG=0 S ABMA="0^No Active Fee for requested date" Q ABMA
  1. ;
  1. S ABMA=+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,ABMDIEN,0),U,2)_U_+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,ABMDIEN,0),U,3)_U_+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,ABMDIEN,0),U,4)
  1. I ABMA="" S ABMA=+$P($G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,0)),U,2) ;this is the old charge amount - default just in case
  1. I ABMA="" S ABMA="0^Code not in Fee Schedule"
  1. Q ABMA
  1. ;
  1. RANGE(ABMFSCHD,ABMMLT,ABMDT) ;PEP - returns range of codes with charges
  1. ; results will be put into ^TMP global
  1. ; (^TMP("ABM-FS",$J,CODE)=GLOBAL CHARGE^TECHNICAL CHARGE^PROFESSIONAL CHARGE
  1. ; One error could be returned with a "-1" for Fee Schedule doesn't exist
  1. ;
  1. ; ABMFSCHD = Fee Schedule Number
  1. ; ABMMLT = What multiple (range) of codes to return
  1. ; ABMDT = Effective Date
  1. ;
  1. K ^TMP("ABM-FS",$J)
  1. N ABMCODE,ABMDIEN,ABMEDT
  1. I '$D(^ABMDFEE(ABMFSCHD)) S ^TMP("ABM-FS",$J)="0^Fee Schedule doesn't exist" Q
  1. ;start old code abm*2.6*3 FIXPMS10008
  1. ;S ABMCODE=0
  1. ;F S ABMCODE=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE)) Q:(+$G(ABMCODE)=0) D
  1. ;.S ABMEDT=0,ABMSV=0
  1. ;.F S ABMEDT=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,1,"B",ABMEDT)) Q:(+$G(ABMEDT)=0) D
  1. ;..I +$G(ABMSV)=0 S ABMSV=ABMEDT
  1. ;..I ABMDT>ABMSV,(ABMDT<ABMFDT) D
  1. ;...S ABMDIEN=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,1,"B",ABMSV,0))
  1. ;...S ABMFLG=0
  1. ;...S ^TMP("ABM-FS",$J,ABMCODE)=+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,1,ABMDIEN,0),U,2)
  1. ;...S $P(^TMP("ABM-FS",$J,ABMCODE),U,2)=+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,1,ABMDIEN,0),U,3)
  1. ;...S $P(^TMP("ABM-FS",$J,ABMCODE),U,3)=+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,1,ABMDIEN,0),U,4)
  1. ;...;default to old charge amount, just in case
  1. ;...I $G(^TMP("ABM-FS",$J,ABMCODE))="" S ^TMP("ABM-FS",$J,ABMCODE)=+$P($G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,0)),U,2)
  1. ;end old code start new code FIXPMS10008
  1. S ABMCIEN=0
  1. F S ABMCIEN=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN)) Q:(+$G(ABMCIEN)=0) D
  1. .;S ABMFDT=0,ABMSV=0,ABMFLG=0 ;abm*2.6*8 HEAT19236
  1. .S ABMFDT=9999999,ABMSV=9999999,ABMFLG=0 ;abm*2.6*8 HEAT19236
  1. .;F S ABMFDT=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,"B",ABMFDT)) Q:(+$G(ABMFDT)=0) D Q:(ABMFLG'=0) ;abm*2.6*8 HEAT19236
  1. .F S ABMFDT=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,"B",ABMFDT),-1) Q:(+$G(ABMFDT)=0) D Q:(ABMFLG'=0) ;abm*2.6*8 HEAT19236
  1. ..;I +$G(ABMSV)=0 S ABMSV=ABMFDT ;abm*2.6*8 HEAT19236
  1. ..;I (ABMDT>ABMSV&(ABMDT<ABMFDT))!(ABMDT=ABMSV) D ;abm*2.6*8 HEAT19236
  1. ..I (ABMFDT=ABMDT)!(ABMFDT<ABMDT) D ;abm*2.6*8 HEAT19236
  1. ...S ABMSV=$G(ABMFDT) ;abm*2.6* HEAT19236
  1. ...S ABMDIEN=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,"B",ABMSV,0))
  1. ...S ABMFLG=1
  1. ...;S ABMSV=$G(ABMFDT) ;abm*2.6* HEAT19236
  1. .;I ABMFLG=0,(+$G(ABMSV)'=""),((ABMDT>ABMSV)!(ABMDT=ABMSV)) S ABMDIEN=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,"B",ABMSV,0)),ABMFLG=1 ;abm*2.6*8 HEAT19236
  1. .I ABMFLG=0,(+$G(ABMSV)'=0),((ABMDT>ABMSV)!(ABMDT=ABMSV)) S ABMDIEN=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,"B",ABMSV,0)),ABMFLG=1 ;abm*2.6*8 HEAT19236
  1. .I ABMFLG=1 D
  1. ..;I "^19^11^15^17^23^13^"[("^"_ABM("CAT")_"^") S ABMCODE=$P($G(^ICPT(ABMCIEN,0)),U) ;CPTs ;abm*2.6*27 IHS/SD/SDR CR8894
  1. ..I "^19^11^15^17^23^13^"[("^"_ABMMLT_"^") S ABMCODE=$P($G(^ICPT($P($G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,0)),U),0)),U) ;CPTs ;abm*2.6*27 IHS/SD/SDR CR8894
  1. ..;start old abm*2.6*27 IHS/SD/SDR CR8894
  1. ..;I ABM("CAT")=21 S ABMCODE=$P($G(^AUTTADA($P($G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,0)),U),0)),U) ;dental
  1. ..;I ABM("CAT")=25 S ABMCODE=ABMCIEN ;drug - get drescription later
  1. ..;I ABM("CAT")=31 S ABMCODE=$P($G(^AUTTREVN(ABMCIEN,0)),U) ;reveue code
  1. ..;I ABM("CAT")=32 S ABMCODE=ABMCIEN ;charge master - get description later
  1. ..;end old start new abm*2.6*27 IHS/SD/SDR CR8894
  1. ..I ABMMLT=21 S ABMCODE=$P($G(^AUTTADA($P($G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,0)),U),0)),U) ;dental
  1. ..I ABMMLT=25 S ABMCODE=ABMCIEN ;drug - get drescription later
  1. ..I ABMMLT=31 S ABMCODE=$P($G(^AUTTREVN(ABMCIEN,0)),U) ;reveue code
  1. ..I ABMMLT=32 S ABMCODE=ABMCIEN ;charge master - get description later
  1. ..;end new abm*2.6*27 IHS/SD/SDR CR8894
  1. ..Q:$G(ABMCODE)="" ;code not found in CPT file ;abm*2.6*3
  1. ..;S ^TMP("ABM-FS",$J,ABMCODE)=$S(ABM("CAT")=21:$P($G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,0)),U),1:ABMCIEN) ;abm*2.6*27 IHS/SD/SDR CR8894
  1. ..S ^TMP("ABM-FS",$J,ABMCODE)=$S(ABMMLT=21:$P($G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,0)),U),1:ABMCIEN) ;abm*2.6*27 IHS/SD/SDR CR8894
  1. ..S $P(^TMP("ABM-FS",$J,ABMCODE),U,2)=+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,ABMDIEN,0),U,2)
  1. ..S $P(^TMP("ABM-FS",$J,ABMCODE),U,3)=+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,ABMDIEN,0),U,3)
  1. ..S $P(^TMP("ABM-FS",$J,ABMCODE),U,4)=+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,ABMDIEN,0),U,4)
  1. ..;default to old charge amount, just in case
  1. ..I $G(^TMP("ABM-FS",$J,ABMCODE))="" S ^TMP("ABM-FS",$J,ABMCODE)=+$P($G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,0)),U,2)
  1. .;end new code FIXPMS10008
  1. Q