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

ABMEBDSP.m

Go to the documentation of this file.
  1. ABMEBDSP ; IHS/ASDST/DMJ - ELECTRONIC CLAIMS DISPLAY ;
  1. ;;2.6;IHS 3P BILLING SYSTEM;**3,6,8**;NOV 12, 2009
  1. ;Original;DMJ;
  1. ; IHS/ASDS/DMJ - V2.4 P7 - 9/7/01 - NOIS NDA-0301-180017 - Modified to resolve <UNDEF>PCN+1^ABMERUTL for all electronic
  1. ; modes of export.
  1. ; IHS/SD/SDR 10/10/02 - V2.5 P2 - XAA-0501-200006 - Modified to display # of bills on the bill total line
  1. ; IHS/SD/SDR - abm*2.6*6 - 5010 - clearinghouse changes
  1. DOC ;
  1. ; The purpose of this routine is to show the user summary
  1. ; information of a specified electronically transmitted batch
  1. ; of bills. The data is grouped by bill type within site with
  1. ; subtotals shown. A grand total (amt billed) is also shown.
  1. ; The data fields are: bill number, health record number,
  1. ; patient name, service date from, and amount billed.
  1. ;
  1. ; INPUT: none
  1. ;
  1. ; OUTPUT: none
  1. ;
  1. START ;START HERE
  1. ; Find the requested transmission batch in the transmission
  1. ; file. Screen out those entries that don't have an EMC
  1. ; file name.
  1. ;
  1. BEG ;
  1. ; Find beginning export batch
  1. W !
  1. S DIC="^ABMDTXST(DUZ(2),"
  1. S DIC("S")="I $L($P($G(^(1)),""^"",4))"
  1. S DIC(0)="AEMQ"
  1. S DIC("A")="Select beginning export batch: "
  1. D ^DIC
  1. Q:Y<0
  1. S ABME("XMITB")=+Y
  1. ;
  1. END ;
  1. ; Find ending export batch
  1. W !
  1. S DIC("A")="Select ending export batch: "
  1. D ^DIC
  1. K DIC
  1. Q:Y<0
  1. S ABME("XMITE")=+Y
  1. I ABME("XMITE")<ABME("XMITB") W !!,"INVALID RANGE!" G BEG
  1. ;
  1. ;start new code abm*2.6*6 5010
  1. LIST ; EP
  1. W !!,"Checking...",!
  1. K ABMP("XLIST")
  1. K ABMP("CHKLIST")
  1. S ABMP("XCNT")=0
  1. S ABMP("XMIT")=ABME("XMITB")-1
  1. F S ABMP("XMIT")=$O(^ABMDTXST(DUZ(2),ABMP("XMIT"))) Q:'+ABMP("XMIT")!(ABMP("XMIT")>ABME("XMITE")) D
  1. .Q:$P($G(^ABMDEXP($P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),0)),U,2),0)),U)'["837"
  1. .S ABMP("SIEN")=$O(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,9999999),-1) ;look at last entry only
  1. .I ABMP("SIEN")'="" S ABMP("GCN")=$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,ABMP("SIEN"),0)),U,2)
  1. .;I $G(ABMP("GCN"))="" S ABMP("GCN")=$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),1)),U,6) ;abm*2.6*8 HEAT42133
  1. .I $G(ABMP("GCN"))="" S ABMP("GCN")=$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),1)),U,6),ABMP("SIEN")=$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),0)),U) ;abm*2.6*8 HEAT42133
  1. .S ABMP("CHKLIST",ABMP("XMIT"))=1
  1. .S ABMP("XCNT")=+$G(ABMP("XCNT"))+1
  1. .S ABMP("XLIST",ABMP("XCNT"),ABMP("XMIT"),ABMP("SIEN"),ABMP("GCN"))=""
  1. .S ABMP("GLIST",ABMP("GCN"))=""
  1. S ABMP("XCNTL")=0
  1. F S ABMP("XCNTL")=$O(ABMP("GLIST",ABMP("XCNTL"))) Q:'ABMP("XCNTL") D
  1. .S ABMP("GCN")=0
  1. .F S ABMP("GCN")=$O(ABMP("GLIST",ABMP("GCN"))) Q:'ABMP("GCN") D
  1. ..S ABMP("XGMIT")=0
  1. ..F S ABMP("XGMIT")=$O(^ABMDTXST(DUZ(2),"EGCN",ABMP("GCN"),ABMP("XGMIT"))) Q:'ABMP("XGMIT") D
  1. ...S ABMP("SIEN")=$O(^ABMDTXST(DUZ(2),"EGCN",ABMP("GCN"),ABMP("XGMIT"),99999),-1)
  1. ...I +$G(ABMP("CHKLIST",ABMP("XGMIT")))'=0 Q ;already have transmission on list
  1. ...S ABMP("CHKLIST",ABMP("XGMIT"))=1
  1. ...S ABMP("XCNT")=+$G(ABMP("XCNT"))+1
  1. ...S ABMP("XLIST",ABMP("XCNT"),ABMP("XGMIT"),ABMP("SIEN"),ABMP("GCN"))=""
  1. ;
  1. I ABMP("XCNT")=1 S ABMP("ANS")=2,ABMSEL=1 ;default to one entry if only one found
  1. I +$G(ABMP("XCNT"))>1 D
  1. .W !,"There are multiple batches associated with your selection."
  1. .W !!,"Select from the following:",!
  1. .D BATCHLST
  1. S ABMQUIT=0
  1. I +$G(ABMP("XCNT"))>1 D
  1. .K DIR,DIE,DIC,X,Y,DA
  1. .S DIR(0)="SO^1:All associated batches;2:A single batch entry;3:Reselect export dates;4:Quit"
  1. .S DIR("A")="Select"
  1. .D ^DIR K DIR
  1. .S ABMP("ANS")=+Y
  1. .I ABMP("ANS")=1 ;print all entries
  1. .I ABMP("ANS")=2 D ;select one entry
  1. ..D BATCHLST
  1. ..K DIR,DIE,DIC,X,Y,DA
  1. ..S DIR(0)="NO^1:"_(ABMP("XCNT")-1)
  1. ..S DIR("A")="Select"
  1. ..D ^DIR K DIR
  1. ..I +Y=0 S ABMQUIT=1
  1. ..S ABMSEL=Y
  1. .I ABMP("ANS")=3 G START ;start over
  1. .I ABMP("ANS")=4 S ABMQUIT=1 Q ;quit w/out printing anything
  1. Q:ABMQUIT
  1. I ABMP("ANS")=2 D
  1. .S ABMECHK=0
  1. .F S ABMECHK=$O(ABMP("XLIST",ABMECHK)) Q:'ABMECHK D
  1. ..I ABMECHK'=ABMSEL K ABMP("XLIST",ABMECHK)
  1. ;end new code 5010
  1. SEL ;
  1. ; Select device
  1. S %ZIS="NQ"
  1. S %ZIS("A")="Enter DEVICE: "
  1. D ^%ZIS Q:POP
  1. I IO'=IO(0) D QUE,HOME^%ZIS S DIR(0)="E" D ^DIR K DIR Q
  1. I $D(IO("S")) S IOP=ION D ^%ZIS
  1. ;
  1. PRINT ;
  1. ; Callable point for queuing
  1. S ABME("PG")=0
  1. ;start old code abm*2.6*6 5010
  1. ;S ABMP("XMIT")=ABME("XMITB")-1
  1. ;F S ABMP("XMIT")=$O(^ABMDTXST(DUZ(2),ABMP("XMIT"))) Q:'+ABMP("XMIT")!(ABMP("XMIT")>ABME("XMITE")) D SET
  1. ;Q:Y=0
  1. ;end old code start new code 5010
  1. S ABME("CUMTOT")=0
  1. S ABME("CUMCNT")=0
  1. ;
  1. S ABME("XCNT")=0
  1. F S ABME("XCNT")=$O(ABMP("XLIST",ABME("XCNT"))) Q:'ABME("XCNT") D
  1. .S ABMP("XMIT")=0
  1. .F S ABMP("XMIT")=$O(ABMP("XLIST",ABME("XCNT"),ABMP("XMIT"))) Q:'ABMP("XMIT") D
  1. ..S ABMP("SIEN")=0
  1. ..F S ABMP("SIEN")=$O(ABMP("XLIST",ABME("XCNT"),ABMP("XMIT"),ABMP("SIEN"))) Q:'ABMP("SIEN") D
  1. ...S ABMP("GCN")=0
  1. ...F S ABMP("GCN")=$O(ABMP("XLIST",ABME("XCNT"),ABMP("XMIT"),ABMP("SIEN"),ABMP("GCN"))) Q:'ABMP("GCN") D
  1. ....D SET
  1. ....Q:Y=0
  1. ;end new code 5010
  1. W !!,$$EN^ABMVDF("HIN"),"E N D O F R E P O R T",$$EN^ABMVDF("HIF"),!
  1. I $E(IOST)="C" S DIR(0)="E" D ^DIR K DIR
  1. I $E(IOST)="P" W $$EN^ABMVDF("IOF")
  1. I $D(IO("S")) D ^%ZISC
  1. K ABME
  1. Q
  1. ;
  1. SET ;SET UP SOME THINGS
  1. ;
  1. ; ABME("BDATE") = Batch export date
  1. ; ABMP("EXP") = Export mode
  1. ; ABME("FORMAT") = Format
  1. ; ABMP("INS") = Insurer IEN
  1. ; ABME("INS") = Insurer name
  1. ; ABME("EMC") = EMC file name
  1. ;
  1. S Y=$P(^ABMDTXST(DUZ(2),ABMP("XMIT"),0),U)
  1. S ABMP("SAV")=0 ;abm*2.6*6
  1. D DD^%DT
  1. S ABME("BDATE")=Y
  1. S ABMP("EXP")=$P(^ABMDTXST(DUZ(2),ABMP("XMIT"),0),"^",2)
  1. Q:$P($G(^ABMDEXP(ABMP("EXP"),1)),U,5)'["E" ; Quit if not electronic
  1. S ABME("FORMAT")=$P(^ABMDEXP(ABMP("EXP"),0),U,7)
  1. S ABMP("INS")=$P(^ABMDTXST(DUZ(2),ABMP("XMIT"),0),"^",4)
  1. S ABME("INS")=$P(^AUTNINS(ABMP("INS"),0),U)
  1. S ABME("EMC")=$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),1)),U,4)
  1. ;S ABME("GRPN")=$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),1)),U,6) ;Control number ;abm*2.6*3
  1. ;start new code abm*2.6*3
  1. S ABMGDT=$O(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,"B",9999999),-1)
  1. I $G(ABMGDT)'="" D
  1. .S ABMGIEN=$O(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,"B",ABMGDT,0))
  1. .S ABME("GRPN")=$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,ABMGIEN,0)),U,2)
  1. I $G(ABME("GRPN"))="" S ABME("GRPN")=$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),1)),U,6)
  1. ;end new code abm*2.6*3
  1. S ABME("TOT")=0
  1. S ABME("STOT")=0
  1. S ABME("CNT")=0
  1. S ABME("OLDLOC")=0
  1. S ABME("OLDBTYP")=0
  1. S $P(ABME("-"),"-",81)=""
  1. S $P(ABME("EQ"),"=",81)=""
  1. D HD
  1. ;
  1. LOOP ; Loop through the bills of specified batch to gather data and
  1. ; print the report.
  1. S I=0
  1. F S I=$O(^ABMDTXST(DUZ(2),ABMP("XMIT"),2,I)) Q:'I D Q:Y=0
  1. .S DA=+^ABMDTXST(DUZ(2),ABMP("XMIT"),2,I,0) ; Bill number (IEN)
  1. .Q:'$D(^ABMDBILL(DUZ(2),DA,0)) ; Quit if not in file (wrong site)
  1. .Q:$P(^ABMDBILL(DUZ(2),DA,0),U,4)="X" ; Quit if bill cancelled
  1. .D DTAIL Q:Y=0
  1. .S ABME("STOT")=ABME("STOT")+$G(ABME(21))
  1. .S ABME("TOT")=ABME("TOT")+$G(ABME(21))
  1. .S ABME("CNT")=ABME("CNT")+1
  1. .Q
  1. S ABME("CUMCNT")=+$G(ABME("CUMCNT"))+ABME("CNT")
  1. S ABME("CUMTOT")=+$G(ABME("CUMTOT"))+ABME("TOT")
  1. Q:Y=0
  1. ;W !!,$$EN^ABMVDF("HIN"),"BATCH TOTAL: ",$$EN^ABMVDF("HIF"),?40,ABME("CNT")_"bills",?68,$J($FN(ABME("TOT"),",",2),10) ;abm*2.6*6 5010
  1. I $D(ABMP("XLIST",ABME("XCNT"))) W !!?20,$$EN^ABMVDF("HIN"),"Insurer total: ",$$EN^ABMVDF("HIF"),?40,ABME("CNT")_$S(ABME("CNT")=1:" bill",1:" bills"),?68,$J($FN(ABME("TOT"),",",2),10) ;abm*2.6*6 5010
  1. I +$O(ABMP("XLIST",ABME("XCNT")))=0 W !!,$$EN^ABMVDF("HIN"),"BATCH TOTAL: ",$$EN^ABMVDF("HIF"),?40,ABME("CUMCNT")_$S(ABME("CUMCNT")=1:" bill",1:" bills"),?68,$J($FN(ABME("CUMTOT"),",",2),10) ;abm*2.6*6 5010
  1. S ABME("TOT")=0
  1. Q
  1. ;
  1. DTAIL ;DISPLAY DETAIL
  1. ;
  1. ; ABME(1) = Bill number
  1. ; ABME(2) = Bill type
  1. ; ABME(3) = Visit location
  1. ; ABME(5) = Patient IEN
  1. ; ABME(8) = Active Insurer IEN
  1. ; ABME(21) = Bill amount
  1. ; ABME(71) = Service date from
  1. ;
  1. N I
  1. Q:'$D(^ABMDBILL(DUZ(2),DA)) ; Quit if no bill data
  1. F I=1,2,3,5,8 S ABME(I)=$P(^ABMDBILL(DUZ(2),DA,0),"^",I)
  1. I ABME(3)'=ABME("OLDLOC")!(ABME(2)'=ABME("OLDBTYP")) D
  1. .I ABME("OLDLOC") D STOT
  1. .W !!,$$EN^ABMVDF("HIN"),"SITE: ",$$EN^ABMVDF("HIF"),$P($G(^AUTTLOC(+ABME(3),0)),"^",2)
  1. .W ?41,$$EN^ABMVDF("HIN"),"BILL TYPE: ",$$EN^ABMVDF("HIF"),ABME(2),!
  1. .;start new code abm*2.6*6 5010
  1. .I $P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,ABMP("SIEN"),0)),U,7)'="" D
  1. ..W ?1,$$EN^ABMVDF("HIN"),"INSURER: ",ABME("INS"),?40,"ST02: ",$$FMT^ABMERUTL($P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),1)),U,7),"4NR"),$$EN^ABMVDF("HIF")
  1. .;end new code 5010
  1. .S ABME("OLDLOC")=ABME(3)
  1. .S ABME("OLDBTYP")=ABME(2)
  1. .S ABME("OLDINS")=ABME("INS") ;abm*2.6*6 5010
  1. .Q
  1. S ABME(21)=$P($G(^ABMDBILL(DUZ(2),DA,2)),U)
  1. S ABME(71)=$P($G(^ABMDBILL(DUZ(2),DA,7)),U)
  1. S Y=ABME(71)
  1. D DD^%DT
  1. S ABME(71)=Y
  1. S ABME("HRN")=$P($G(^AUPNPAT(+ABME(5),41,+ABME(3),0)),"^",2)
  1. W !?3,ABME(1),?13,ABME("HRN"),?21,$P($G(^DPT(+ABME(5),0)),U),?51,ABME(71),?68,$J($FN(ABME(21),",",2),10)
  1. I $Y+5>IOSL D HD Q:Y=0
  1. Q
  1. ;
  1. HD ;HEADER FOR DETAIL LISTING
  1. I ABME("PG"),$E(IOST)="C" S DIR(0)="E" D ^DIR K DIR Q:Y=0
  1. S ABME("PG")=ABME("PG")+1
  1. I (ABME("XCNT")>1&(($E(IOST)'="C")&($Y+5<IOSL))&(ABMP("XMIT")=ABMP("SAV"))) W ! Q ;abm*2.6*6 5010
  1. S ABMP("SAV")=ABMP("XMIT") ;abm*2.6*6
  1. W $$EN^ABMVDF("IOF"),!,?30,$$EN^ABMVDF("HIN"),"BATCH SUMMARY",?70,"Page: ",$$EN^ABMVDF("HIF"),ABME("PG")
  1. W !,$$EN^ABMVDF("HIN"),"BATCH DATE: ",$$EN^ABMVDF("HIF"),ABME("BDATE")
  1. ;W !,$$EN^ABMVDF("HIN"),"INSURER: ",$$EN^ABMVDF("HIF"),ABME("INS") ;abm*2.6*6 5010
  1. I $P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,ABMP("SIEN"),0)),U,7)="" W !,$$EN^ABMVDF("HIN"),"INSURER: ",$$EN^ABMVDF("HIF"),ABME("INS") ;abm*2.6*6 5010
  1. I $P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,ABMP("SIEN"),0)),U,7)'="" W !,$$EN^ABMVDF("HIN"),"CLEARINGHOUSE: ",$$EN^ABMVDF("HIF"),$P($G(^ABMRECVR($P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,ABMP("SIEN"),0)),U,7),0)),U) ;abm*2.6*6 5010
  1. W !,$$EN^ABMVDF("HIN"),"FORMAT: ",$$EN^ABMVDF("HIF"),ABME("FORMAT")
  1. W !,$$EN^ABMVDF("HIN"),"EMC FILE NAME: ",$$EN^ABMVDF("HIF"),ABME("EMC")
  1. W ?50,$$EN^ABMVDF("HIN"),"GROUP CONTROL #: ",$$EN^ABMVDF("HIF"),ABME("GRPN") ;grp control #
  1. W !,$$EN^ABMVDF("HIN"),ABME("EQ")
  1. W !,"BILL #",?13,"HRN",?21,"PATIENT",?48,"SERVICE DATE FROM",?72,"AMOUNT"
  1. W !,ABME("-"),!,$$EN^ABMVDF("HIF")
  1. Q
  1. ;
  1. STOT ;SITE TOTAL
  1. W !!,$$EN^ABMVDF("HIN"),"SITE/BILL TYPE TOTAL:",$$EN^ABMVDF("HIF"),?68,$J($FN(ABME("STOT"),",",2),10)
  1. S ABME("STOT")=0
  1. Q
  1. ;
  1. QUE ;QUE TO TASKMAN
  1. S ZTRTN="PRINT^ABMEBDSP"
  1. S ZTDESC="3P TX BATCH SUMMARY"
  1. S ZTSAVE("ABME(""XMITE"")")=""
  1. S ZTSAVE("ABME(""XMITB"")")=""
  1. S ZTSAVE("ABM*")=""
  1. K ZTSK
  1. D ^%ZTLOAD
  1. W:$G(ZTSK) !,"Task # ",ZTSK," queued.",!
  1. Q
  1. ;start new code abm*2.6*6 5010
  1. BATCHLST ;
  1. W !
  1. S ABME("XCNT")=0
  1. F S ABME("XCNT")=$O(ABMP("XLIST",ABME("XCNT"))) Q:'ABME("XCNT") D
  1. .S ABMP("XMIT")=0
  1. .F S ABMP("XMIT")=$O(ABMP("XLIST",ABME("XCNT"),ABMP("XMIT"))) Q:'ABMP("XMIT") D
  1. ..S ABMP("SIEN")=0
  1. ..F S ABMP("SIEN")=$O(ABMP("XLIST",ABME("XCNT"),ABMP("XMIT"),ABMP("SIEN"))) Q:'ABMP("SIEN") D
  1. ...S ABMP("GCN")=0
  1. ...F S ABMP("GCN")=$O(ABMP("XLIST",ABME("XCNT"),ABMP("XMIT"),ABMP("SIEN"),ABMP("GCN"))) Q:'ABMP("GCN") D
  1. ....S ABMPIT=$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),0)),U,3)
  1. ....S ABMP("ITYP")=$S(ABMPIT="P":"PRIVATE",ABMPIT="D":"MEDICAID",ABMPIT="R":"MEDICARE",ABMPIT="N":"NON-BEN",ABMPIT="W":"WORK.COMP",ABMPIT="C":"CHAMPUS",1:"ALL SOURCES")
  1. ....W ABME("XCNT"),?3,$$BDT^ABMDUTL($P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),0)),U)),?23,ABMP("GCN")
  1. ....W ?30,$P($G(^ABMDEXP($P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),0)),U,2),0)),U)
  1. ....W ?47,ABMP("ITYP")
  1. ....W:$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,ABMP("SIEN"),0)),U,7) ?59,$P($G(^ABMRECVR($P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,ABMP("SIEN"),0)),U,7),0)),U)
  1. ....W !?23,$P($G(^AUTNINS($P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),0)),U,4),0)),U)
  1. ....W:$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),0)),U,5) ?46,$P($G(^VA(200,$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),0)),U,5),0)),U)
  1. ....W:$P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,ABMP("SIEN"),0)),U,6) ?70,"ST02: ",$$FMT^ABMERUTL($P($G(^ABMDTXST(DUZ(2),ABMP("XMIT"),3,ABMP("SIEN"),0)),U,6),"4NR")
  1. ....W !
  1. Q
  1. ;end new code 5010