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

ABMDF34.m

Go to the documentation of this file.
  1. ABMDF34 ; IHS/SD/SDR - ADA-2012 Dental Export Routine ;
  1. ;;2.6;IHS 3P BILLING SYSTEM;**14,16,19**;NOV 12, 2009;Build 300
  1. ;IHS/SD/SDR - 2.6*14 - HEAT136149 - Fixed box 34 to print 'B' for ICD9 codes.
  1. ;IHS/SD/SDR - 2.6*14 Updated DX^ABMCVAPI call to be numeric
  1. ;IHS/SD/SDR - 2.6*16 HEAT231506 - Added code for 'AB' to print for ICD10.
  1. ;IHS/SD/AML - 2.6*19 - HEAT181886 - Change coor. dx from numeric to alpha
  1. ;
  1. ;************************************************************************************
  1. K ABM
  1. S U="^"
  1. S ABMP("EXP")=34 ; Export mode
  1. D TXST^ABMDFUTL ; Create entry in 3P TX STATUS
  1. S ABMY("N")=0 ; Initialize active insurer
  1. ; Print a form for every bill within an active insurer
  1. F S ABMY("N")=$O(ABMY(ABMY("N"))) Q:'ABMY("N") D
  1. .S ABMP("BDFN")="" ; Initialize bill IEN
  1. .F S ABMP("BDFN")=$O(ABMY(ABMY("N"),ABMP("BDFN"))) Q:'ABMP("BDFN") D
  1. ..D ENT
  1. ..S DIE="^ABMDBILL(DUZ(2),"
  1. ..S DA=ABMP("BDFN")
  1. ..S DR=".04////B;.16////A;.17////"_ABMP("XMIT")
  1. ..D ^ABMDDIE
  1. ..Q:$D(ABM("DIE-FAIL"))
  1. ;
  1. D TXUPDT^ABMDFUTL ; Update 3P TX STATUS
  1. ;
  1. XIT ;
  1. K ABM,ABMF,ABMV
  1. Q
  1. ;
  1. ENT ;EP for getting data and printing form
  1. K ABMF
  1. Q:'$D(^ABMDBILL(DUZ(2),ABMP("BDFN"),0)) ; Quit if no bill data
  1. Q:'$O(^ABMDBILL(DUZ(2),ABMP("BDFN"),33,0))&('$O(^ABMDBILL(DUZ(2),ABMP("BDFN"),43,0))) ; Quit if no dental and misc data
  1. D ENT^ABMDF34A,BODY
  1. Q
  1. ;
  1. BODY ;
  1. ; For each dental entry in the bill file, find and print data.
  1. S ABMX("INS")=ABMP("INS") ; IEN to INSURER
  1. K ABMP("FLAT")
  1. D FRATE^ABMDE2X1 ; find Flat Rate
  1. S (ABM("C"),ABM,ABM("TCHRG"),ABM("I"),ABM("YTOT"))=0
  1. ;
  1. ;S $P(ABMF(36),U)="09" ;(34) ;abm*2.6*14 HEAT136149
  1. ;S $P(ABMF(36),U)="B" ;(34) ;abm*2.6*14 HEAT136149 ;abm*2.6*16 IHS/SD/SDR HEAT231506
  1. S $P(ABMF(36),U)=$S($P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),0)),U,21)=10:"AB",1:"B") ;(34) ;abm*2.6*14 HEAT136149 ;abm*2.6*16 IHS/SD/SDR HEAT231506
  1. ;(34a)
  1. F S ABM=$O(^ABMDBILL(DUZ(2),ABMP("BDFN"),17,"C",ABM)) Q:'ABM D Q:(ABM("C")=4)
  1. .S ABM("C")=+$G(ABM("C"))+1
  1. .S ABM("X")=$O(^ABMDBILL(DUZ(2),ABMP("BDFN"),17,"C",ABM,""))
  1. .;S ABM("DX")=$P($$DX^ABMCVAPI($P(^ABMDBILL(DUZ(2),ABMP("BDFN"),17,ABM("X"),0),U),ABMP("VDT")),U,2) ;abm*2.6*14 updated API call
  1. .S ABM("DX")=$P($$DX^ABMCVAPI(+$P(^ABMDBILL(DUZ(2),ABMP("BDFN"),17,ABM("X"),0),U),ABMP("VDT")),U,2) ;abm*2.6*14 updated API call
  1. .I ABM=1 S $P(ABMF(37),U)=ABM("DX")
  1. .I ABM=2 S $P(ABMF(38),U)=ABM("DX")
  1. .I ABM=3 S $P(ABMF(37),U,2)=ABM("DX")
  1. .I ABM=4 S $P(ABMF(38),U,2)=ABM("DX")
  1. S (ABM,ABM("C"),ABM("X"),ABM("DX"))=0
  1. F S ABM=$O(^ABMDBILL(DUZ(2),ABMP("BDFN"),33,ABM)) Q:'ABM D Q:$D(DUOUT)
  1. .S ABM(0)=$G(^ABMDBILL(DUZ(2),ABMP("BDFN"),33,ABM,0))
  1. .D RESET:ABM("I")=0
  1. .S ABM("F")=ABM("F")+1 ; Increment line counter
  1. .I $P(ABM(0),U,5) D
  1. ..S ABMOPS=$P(ABM(0),U,5) ; IEN to DENTAL OPERATIVE SITE
  1. ..S $P(ABMF(ABM("F")),U,4)=$P($G(^ADEOPS(ABMOPS,88)),U) ; Tooth mnemonic (d) (27)
  1. .;
  1. .; Procedure date (24)
  1. .S $P(ABMF(ABM("F")),U)=$P(ABM(0),U,7) ; DOS (24)
  1. .S $P(ABMF(ABM("F")),U,2)=$P(ABM(0),U,11) ;Area of Oral Cavity (25)
  1. .S $P(ABMF(ABM("F")),U,3)=$P(ABM(0),U,12) ;Tooth system (26)
  1. .;
  1. .S $P(ABMF(ABM("F")),U,5)=$P(ABM(0),U,6) ; Tooth surface (28)
  1. .S $P(ABMF(ABM("F")),U,9)=$P(^AUTTADA(+ABM(0),0),U,2) ; Svc desc (30)
  1. .S $P(ABMF(ABM("F")),U,6)=$P(^AUTTADA(+ABM(0),0),U) ; Procedure # (29)
  1. .;S $P(ABMF(ABM("F")),U,7)=$P(ABM(0),U,4) ;Coor. DX (29a) ;abm*2.6*19 IHS/SD/AML HEAT181886 Translate numeric corres DX to alpha
  1. .;start new abm*2.6*19 IHS/SD/AML HEAT181886 translate numeric corres DX to alpha
  1. .S ABMCORDX=$P(ABM(0),U,4)
  1. .S ABMCORDX=$P(ABMCORDX,",",1,4)
  1. .F ABMTMP=1:1:$L(ABMCORDX,",") D
  1. ..S $P(ABMCORDX,",",ABMTMP)=$P("A^B^C^D^","^",$P(ABMCORDX,",",ABMTMP))
  1. .S $P(ABMF(ABM("F")),U,7)=$TR(ABMCORDX,",") ;Coor. DX (29a)
  1. .;end new abm*2.6*19 HEAT181886
  1. .S $P(ABMF(ABM("F")),U,8)=$P(ABM(0),U,9) ;Qty(29b)
  1. .;
  1. .S ABMDENP=$P($G(^ABMDREC(ABMP("INS"),0)),U,2) ; Dent remap
  1. .S:ABMDENP="" ABMDENP=$P($G(^ABMDPARM(ABMP("LDFN"),1,3)),U,11)
  1. .S:ABMDENP="" ABMDENP=$P($G(^ABMDPARM(DUZ(2),1,3)),U,11)
  1. .S:ABMDENP]"" $P(ABMF(ABM("F")),U,6)=ABMDENP_$P(ABMF(ABM("F")),U,6)
  1. .;
  1. .S ABM("CHRG")=+$P(ABM(0),U,8)
  1. .S $P(ABMF(ABM("F")),U,10)=$S(+$G(ABMP("FLAT")):"",1:ABM("CHRG"))*($S($P(ABM(0),U,9):$P(ABM(0),U,9),1:1)) ;Proc fee (31)
  1. .S ABM("TCHRG")=$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),2)),U) ; Total fee (33)
  1. .;
  1. .S ABM("I")=ABM("I")+1 ; Increment line counter
  1. .I ABM("I")=10 D
  1. ..Q:'$O(^ABMDBILL(DUZ(2),ABMP("BDFN"),33,ABM))
  1. ..S ABM("MORE")=1
  1. ..D ^ABMDF34X ; Print form
  1. ..S ABM("I")=0
  1. ;
  1. OTHER ;
  1. ; Other charges on page 3?
  1. I $P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),9)),U,21)'="" D
  1. .S $P(ABMF(36),U,2)=$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),9)),U,21) ;Other charges (32)
  1. .S ABM("TCHRG")=ABM("TCHRG")+$P(ABMF(36),U,2) ;add to total charges (33)
  1. ;
  1. ;Put misc services on dental form
  1. N ABMRV
  1. D 43^ABMERGR2 ;obtain misc services data in ABMRV array
  1. S ABMRCD=-1
  1. F S ABMRCD=$O(ABMRV(ABMRCD)) Q:ABMRCD="" D
  1. .S ABMED=""
  1. .F S ABMED=$O(ABMRV(ABMRCD,ABMED)) Q:ABMED="" D Q:$D(DUOUT)
  1. ..S ABMCNTR=0
  1. ..F S ABMCNTR=$O(ABMRV(ABMRCD,ABMED,ABMCNTR)) Q:ABMCNTR="" D
  1. ...D RESET:ABM("I")=0
  1. ...S ABM("F")=ABM("F")+1
  1. ...S ABMMS=$P($$CPT^ABMCVAPI($O(^ICPT("B",ABMED,"")),ABMP("VDT")),U,3) ;CPT name ;CSV-c
  1. ...S ABMMSDT=$P(ABMRV(ABMRCD,ABMED,ABMCNTR),U,10) ;date
  1. ...S ABMMSQTY=$P(ABMRV(ABMRCD,ABMED,ABMCNTR),U,5) ;quantity
  1. ...S ABMMSCHG=$P(ABMRV(ABMRCD,ABMED,ABMCNTR),U,6) ;charge
  1. ...I ABMMSDT]"" D
  1. ....S $P(ABMF(ABM("F")),U)=ABMMSDT
  1. ...S $P(ABMF(ABM("F")),U,6)=ABMED
  1. ...S $P(ABMF(ABM("F")),U,8)=ABMMSQTY
  1. ...S $P(ABMF(ABM("F")),U,9)=ABMMS
  1. ...S $P(ABMF(ABM("F")),U,10)=ABMMSCHG
  1. ...S ABM("I")=ABM("I")+1
  1. ...I ABM("I")=10 D
  1. ....Q:($O(ABMRV(ABMRCD,ABMED))=""&($O(ABMRV(ABMRCD))=""))
  1. ....S ABM("MORE")=1
  1. ....D ^ABMDF34X
  1. ....S ABM("I")=0
  1. ;
  1. ; Put RX data on dental form
  1. RXDATA N ABMRV
  1. D 23^ABMERGR2 ; Obtain RX data in ABMRV array
  1. S ABMRCD=-1
  1. F S ABMRCD=$O(ABMRV(ABMRCD)) Q:ABMRCD="" D
  1. .S ABMED=0
  1. .F S ABMED=$O(ABMRV(ABMRCD,ABMED)) Q:'+ABMED D Q:$D(DUOUT)
  1. ..S ABMCNTR=0
  1. ..F S ABMCNTR=$O(ABMRV(ABMRCD,ABMED,ABMCNTR)) Q:ABMCNTR="" D
  1. ...D RESET:ABM("I")=0
  1. ...S ABM("F")=ABM("F")+1
  1. ...S ABMRX=$P(ABMRV(ABMRCD,ABMED,ABMCNTR),U,9) ; NDC# name
  1. ...S ABMRXDT=$P(ABMRV(ABMRCD,ABMED,ABMCNTR),U,10) ; date/time
  1. ...S ABMRXQTY=$P(ABMRV(ABMRCD,ABMED,ABMCNTR),U,5) ; Quantity
  1. ...S ABMRXCHG=$P(ABMRV(ABMRCD,ABMED,ABMCNTR),U,6) ; Charge
  1. ...S $P(ABMF(ABM("F")),U,4)=$E(ABMRX,1,3)
  1. ...S $P(ABMF(ABM("F")),U,5)=$E(ABMRX,4,8)
  1. ...S $P(ABMF(ABM("F")),U,7)=$E(ABMRX,9,99)
  1. ...I ABMRXDT]"" S $P(ABMF(ABM("F")),U)=ABMRXDT
  1. ...S $P(ABMF(ABM("F")),U,8)=ABMRXCHG
  1. ...S ABM("TCHRG")=ABM("TCHRG")+ABMRXCHG
  1. ...S ABM("I")=ABM("I")+1
  1. ...I ABM("I")=10 D
  1. ....Q:($O(ABMRV(ABMRCD,ABMED))=""&($O(ABMRV(ABMRCD))=""))
  1. ....S ABM("MORE")=1
  1. ....D ^ABMDF34X ; Print form
  1. ....S ABM("I")=0
  1. ;
  1. D TAIL:ABM("I")
  1. Q
  1. ;
  1. RESET ;
  1. ; Reset line numbers for BODY
  1. F ABM("F")=25:1:35 K ABMF(ABM("F"))
  1. S ABM("F")=25
  1. Q
  1. ;
  1. TAIL ;END OF FORM
  1. I +$G(ABMP("FLAT")) S ABM("TCHRG")=+ABMP("FLAT")
  1. S $P(ABMF(38),U,3)=ABM("TCHRG") ; Total fee charged on bill
  1. S ABM("YTOT")=ABM("TCHRG")
  1. D YTOT^ABMDFUTL
  1. S (ABM("I"),ABM("TCHRG"))=0
  1. D ^ABMDF34X ; Print form
  1. Q