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