- 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
- 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
- +2 ;
- +3 ;IHS/SD/SDR 2.6*3 FIXPMS10008 and FIXPMS10012 Corrections to RANGE tag
- +4 ;IHS/SD/SDR 2.6*21 HEAT130924 Made correction to fee lookup for dental codes.
- +5 ; Was using the code to lookup in the "B" x-ref but that one is by IEN.
- +6 ;IHS/SD/SDR 2.6*27 CR8894 Corrections to Range tag; all variables weren't defined and Category III codes skipped
- +7 ;
- ONE(ABMFSCHD,ABMMLT,ABMCODE,ABMDT) ;PEP - returns charge for one code
- +1 ; One of two errors may be returned with a "0"
- +2 ; Fee Schedule doesn't exist
- +3 ; Code not in Fee Schedule
- +4 ;
- +5 ; ABMFSCHD = Fee Schedule Number
- +6 ; ABMMLT = What multiple to get code from; NOTE-some codes can exist
- +7 ; in more than one multiple
- +8 ; ABMCODE = code IEN
- +9 ; ABMDT = Date of Service
- +10 ;
- +11 NEW ABMI,ABMEDT,ABMFLG
- +12 SET ABMA=""
- +13 IF '$DATA(^ABMDFEE(ABMFSCHD))
- SET ABMA="0^Fee Schedule doesn't exist"
- QUIT ABMA
- +14 ;dental
- IF ABMMLT=21
- SET ABMCODE=$GET(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,0))
- +15 IF $GET(ABMCODE)=""
- SET ABMA="0^Code not in Fee Schedule"
- QUIT ABMA
- +16 ;I '$D(^ABMDFEE(ABMFSCHD,ABMMLT,"B",ABMCODE)) S ABMA="0^Code not in Fee Schedule" Q ABMA ;abm*2.6*2
- +17 ;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
- +18 ;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
- +19 ;abm*2.6*21 IHS/SD/SDR HEAT130924
- IF ABMMLT=21
- IF '$DATA(^ABMDFEE(ABMFSCHD,ABMMLT,1_$SELECT(+$GET(ABMR("CODE"))'=0:ABMR("CODE"),+$GET(ABMZ("DCD"))'=0:ABMZ("DCD"),1:"")))
- SET ABMA="0^Code not in Fee Schedule"
- QUIT ABMA
- +20 ;S ABMI=$O(^ABMDFEE(ABMFSCHD,ABMMLT,"B",ABMCODE,0)) ;abm*2.6*2
- +21 ;S ABMI=$O(^ABMDFEE(ABMFSCHD,ABMMLT,"B",+ABMCODE,0)) ;abm*2.6*2 ;abm*2.6*21 IHS/SD/SDR HEAT130924
- +22 ;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
- +23 ;start new abm*2.6*27 IHS/SD/SDR CR8894
- +24 ;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
- +25 ;I ABMMLT'=21 D Q:(+ABMA=0)
- +26 ;.S ABMI=$O(^ABMDFEE(ABMFSCHD,ABMMLT,"B",ABMCODE,0))
- +27 ;.I +ABMI=0 S ABMI=$O(^ABMDFEE(ABMFSCHD,ABMMLT,"C",ABMCODE,0))
- +28 ;.I +ABMI=0 S ABMA="0^Code not in Fee Schedule" Q
- +29 ;.S ABMI=$$DINUM^ABMFOFS(ABMI)
- +30 ;I ABMMLT'=21 S ABMI=$S(+ABMCODE=0:$$DINUM^ABMFOFS(ABMCODE),1:ABMCODE)
- +31 IF ABMMLT'=21
- SET ABMI=$SELECT(+ABMCODE=0:$$DINUM^ABMFOFS(ABMCODE),($LENGTH(ABMCODE)'=$LENGTH(+ABMCODE)):$$DINUM^ABMFOFS(ABMCODE),1:ABMCODE)
- +32 ;end new abm*2.6*27 IHS/SD/SDR CR8894
- +33 ;abm*2.6*21 IHS/SD/SDR HEAT130924
- IF (ABMMLT=21)
- SET ABMI=1_$SELECT(+$GET(ABMR("CODE"))'=0:ABMR("CODE"),+$GET(ABMZ("DCD"))'=0:ABMZ("DCD"),1:"")
- +34 ;
- +35 SET ABMFDT=0
- SET ABMEDT=0
- SET ABMFLG=0
- SET ABMSV=0
- +36 FOR
- SET ABMFDT=$ORDER(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,"B",ABMFDT))
- IF (+$GET(ABMFDT)=0)
- QUIT
- Begin DoDot:1
- +37 IF +$GET(ABMSV)=0
- SET ABMSV=ABMFDT
- +38 IF (ABMDT>ABMSV&(ABMDT<ABMFDT))!(ABMDT=ABMSV)
- Begin DoDot:2
- +39 SET ABMDIEN=$ORDER(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,"B",ABMSV,0))
- +40 SET ABMFLG=1
- End DoDot:2
- +41 SET ABMSV=ABMFDT
- End DoDot:1
- IF (ABMFLG'=0)
- QUIT
- +42 ;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
- +43 ;abm*2.6*2
- IF ABMFLG=0
- IF (+$GET(ABMSV)'=0)
- IF ((ABMDT>ABMSV)!(ABMDT=ABMSV))
- SET ABMDIEN=$ORDER(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,"B",ABMSV,0))
- SET ABMFLG=1
- +44 ;default to old charge ;abm*2.6*2
- IF ABMFLG=0
- IF ($DATA(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI))<11)
- SET ABMA=+$PIECE($GET(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,0)),U,2)
- QUIT ABMA
- +45 IF ABMFLG=0
- SET ABMA="0^No Active Fee for requested date"
- QUIT ABMA
- +46 ;
- +47 SET ABMA=+$PIECE(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,ABMDIEN,0),U,2)_U_+$PIECE(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,ABMDIEN,0),U,3)_U_+$PIECE(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,1,ABMDIEN,0),U,4)
- +48 ;this is the old charge amount - default just in case
- IF ABMA=""
- SET ABMA=+$PIECE($GET(^ABMDFEE(ABMFSCHD,ABMMLT,ABMI,0)),U,2)
- +49 IF ABMA=""
- SET ABMA="0^Code not in Fee Schedule"
- +50 QUIT ABMA
- +51 ;
- RANGE(ABMFSCHD,ABMMLT,ABMDT) ;PEP - returns range of codes with charges
- +1 ; results will be put into ^TMP global
- +2 ; (^TMP("ABM-FS",$J,CODE)=GLOBAL CHARGE^TECHNICAL CHARGE^PROFESSIONAL CHARGE
- +3 ; One error could be returned with a "-1" for Fee Schedule doesn't exist
- +4 ;
- +5 ; ABMFSCHD = Fee Schedule Number
- +6 ; ABMMLT = What multiple (range) of codes to return
- +7 ; ABMDT = Effective Date
- +8 ;
- +9 KILL ^TMP("ABM-FS",$JOB)
- +10 NEW ABMCODE,ABMDIEN,ABMEDT
- +11 IF '$DATA(^ABMDFEE(ABMFSCHD))
- SET ^TMP("ABM-FS",$JOB)="0^Fee Schedule doesn't exist"
- QUIT
- +12 ;start old code abm*2.6*3 FIXPMS10008
- +13 ;S ABMCODE=0
- +14 ;F S ABMCODE=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE)) Q:(+$G(ABMCODE)=0) D
- +15 ;.S ABMEDT=0,ABMSV=0
- +16 ;.F S ABMEDT=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,1,"B",ABMEDT)) Q:(+$G(ABMEDT)=0) D
- +17 ;..I +$G(ABMSV)=0 S ABMSV=ABMEDT
- +18 ;..I ABMDT>ABMSV,(ABMDT<ABMFDT) D
- +19 ;...S ABMDIEN=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,1,"B",ABMSV,0))
- +20 ;...S ABMFLG=0
- +21 ;...S ^TMP("ABM-FS",$J,ABMCODE)=+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,1,ABMDIEN,0),U,2)
- +22 ;...S $P(^TMP("ABM-FS",$J,ABMCODE),U,2)=+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,1,ABMDIEN,0),U,3)
- +23 ;...S $P(^TMP("ABM-FS",$J,ABMCODE),U,3)=+$P(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,1,ABMDIEN,0),U,4)
- +24 ;...;default to old charge amount, just in case
- +25 ;...I $G(^TMP("ABM-FS",$J,ABMCODE))="" S ^TMP("ABM-FS",$J,ABMCODE)=+$P($G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCODE,0)),U,2)
- +26 ;end old code start new code FIXPMS10008
- +27 SET ABMCIEN=0
- +28 FOR
- SET ABMCIEN=$ORDER(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN))
- IF (+$GET(ABMCIEN)=0)
- QUIT
- Begin DoDot:1
- +29 ;S ABMFDT=0,ABMSV=0,ABMFLG=0 ;abm*2.6*8 HEAT19236
- +30 ;abm*2.6*8 HEAT19236
- SET ABMFDT=9999999
- SET ABMSV=9999999
- SET ABMFLG=0
- +31 ;F S ABMFDT=$O(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,"B",ABMFDT)) Q:(+$G(ABMFDT)=0) D Q:(ABMFLG'=0) ;abm*2.6*8 HEAT19236
- +32 ;abm*2.6*8 HEAT19236
- FOR
- SET ABMFDT=$ORDER(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,"B",ABMFDT),-1)
- IF (+$GET(ABMFDT)=0)
- QUIT
- Begin DoDot:2
- +33 ;I +$G(ABMSV)=0 S ABMSV=ABMFDT ;abm*2.6*8 HEAT19236
- +34 ;I (ABMDT>ABMSV&(ABMDT<ABMFDT))!(ABMDT=ABMSV) D ;abm*2.6*8 HEAT19236
- +35 ;abm*2.6*8 HEAT19236
- IF (ABMFDT=ABMDT)!(ABMFDT<ABMDT)
- Begin DoDot:3
- +36 ;abm*2.6* HEAT19236
- SET ABMSV=$GET(ABMFDT)
- +37 SET ABMDIEN=$ORDER(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,"B",ABMSV,0))
- +38 SET ABMFLG=1
- +39 ;S ABMSV=$G(ABMFDT) ;abm*2.6* HEAT19236
- End DoDot:3
- End DoDot:2
- IF (ABMFLG'=0)
- QUIT
- +40 ;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
- +41 ;abm*2.6*8 HEAT19236
- IF ABMFLG=0
- IF (+$GET(ABMSV)'=0)
- IF ((ABMDT>ABMSV)!(ABMDT=ABMSV))
- SET ABMDIEN=$ORDER(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,"B",ABMSV,0))
- SET ABMFLG=1
- +42 IF ABMFLG=1
- Begin DoDot:2
- +43 ;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
- +44 ;CPTs ;abm*2.6*27 IHS/SD/SDR CR8894
- IF "^19^11^15^17^23^13^"[("^"_ABMMLT_"^")
- SET ABMCODE=$PIECE($GET(^ICPT($PIECE($GET(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,0)),U),0)),U)
- +45 ;start old abm*2.6*27 IHS/SD/SDR CR8894
- +46 ;I ABM("CAT")=21 S ABMCODE=$P($G(^AUTTADA($P($G(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,0)),U),0)),U) ;dental
- +47 ;I ABM("CAT")=25 S ABMCODE=ABMCIEN ;drug - get drescription later
- +48 ;I ABM("CAT")=31 S ABMCODE=$P($G(^AUTTREVN(ABMCIEN,0)),U) ;reveue code
- +49 ;I ABM("CAT")=32 S ABMCODE=ABMCIEN ;charge master - get description later
- +50 ;end old start new abm*2.6*27 IHS/SD/SDR CR8894
- +51 ;dental
- IF ABMMLT=21
- SET ABMCODE=$PIECE($GET(^AUTTADA($PIECE($GET(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,0)),U),0)),U)
- +52 ;drug - get drescription later
- IF ABMMLT=25
- SET ABMCODE=ABMCIEN
- +53 ;reveue code
- IF ABMMLT=31
- SET ABMCODE=$PIECE($GET(^AUTTREVN(ABMCIEN,0)),U)
- +54 ;charge master - get description later
- IF ABMMLT=32
- SET ABMCODE=ABMCIEN
- +55 ;end new abm*2.6*27 IHS/SD/SDR CR8894
- +56 ;code not found in CPT file ;abm*2.6*3
- IF $GET(ABMCODE)=""
- QUIT
- +57 ;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
- +58 ;abm*2.6*27 IHS/SD/SDR CR8894
- SET ^TMP("ABM-FS",$JOB,ABMCODE)=$SELECT(ABMMLT=21:$PIECE($GET(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,0)),U),1:ABMCIEN)
- +59 SET $PIECE(^TMP("ABM-FS",$JOB,ABMCODE),U,2)=+$PIECE(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,ABMDIEN,0),U,2)
- +60 SET $PIECE(^TMP("ABM-FS",$JOB,ABMCODE),U,3)=+$PIECE(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,ABMDIEN,0),U,3)
- +61 SET $PIECE(^TMP("ABM-FS",$JOB,ABMCODE),U,4)=+$PIECE(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,1,ABMDIEN,0),U,4)
- +62 ;default to old charge amount, just in case
- +63 IF $GET(^TMP("ABM-FS",$JOB,ABMCODE))=""
- SET ^TMP("ABM-FS",$JOB,ABMCODE)=+$PIECE($GET(^ABMDFEE(ABMFSCHD,ABMMLT,ABMCIEN,0)),U,2)
- End DoDot:2
- +64 ;end new code FIXPMS10008
- End DoDot:1
- +65 QUIT