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

ABMM2PVH.m

Go to the documentation of this file.
  1. ABMM2PVH ;IHS/SD/SDR - MU Patient Volume Hospital Report ;
  1. ;;2.6;IHS 3P BILLING SYSTEM;**11,12,15**;NOV 12, 2009;Build 251
  1. ;IHS/SD/SDR - 2.6*15 - HEAT161159 - Changed PT LST to sort differently so there won't be duplicate vsts on pt lst.
  1. ;IHS/SD/SDR - 2.6*15 - HEAT156874 - Change for <SUBSCR>PTDATA+16^ABMM2PV7. Occurs when patient is missing from visit.
  1. ;IHS/SD/SDR - 2.6*15 - Added tag XIT and call to it in double queuer so global would get killed; it was hanging around and causing more data to print than should.
  1. ;IHS/SD/SDR - 2.6*15 - Changed insurer type FPL to P
  1. ;
  1. EN ;
  1. I $P($G(^ABMMUPRM(1,0)),U,2)="" D Q
  1. .W !!,"Setup has not been done. Please do MUP option prior to running any reports",!
  1. .S DIR(0)="E",DIR("A")="Enter RETURN to Continue" D ^DIR K DIR
  1. ;
  1. K ^XTMP("ABM-PVH2",$J)
  1. K ABMDX
  1. S ABMY("RTYP")="HOS"
  1. D FAC^ABMM2PVP Q:'$D(ABMF)&($D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT))
  1. M ABMFAC=ABMF
  1. ;
  1. W !!,"In order for an Eligible Hospital (EH) to participate in the Medicaid EHR"
  1. W !,"Incentive program EHs have to meet a minimum patient volume requirement of 10%."
  1. W !!,"For EHs the participation year is based on a federal fiscal year, this is the"
  1. W !,"same year that the EH would be demonstrating Meaningful use. (Federal Fiscal"
  1. W !,"Year is October 1 - September 30.)"
  1. ;
  1. D PARTYR^ABMM2PVP Q:$D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) ;part. year
  1. D SELINS^ABMM2PVP
  1. D 90DAY^ABMM2PVP Q:$D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) ;select 90-day
  1. I $G(ABMY("90"))="" K ABMY,ABMF G EN
  1. D RFORMAT^ABMM2PVP Q:$D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) ;summ or pt list
  1. D SUMMARY^ABMM2PVP Q:$D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT) ;summ of selections
  1. D ^XBFMK
  1. S DIR(0)="S^P:Print Report;R:Return to Selection Criteria -Erases ALL previous selections"
  1. S DIR("A")="<P> to Print or <R> to Reselect"
  1. I ABMY("RFMT")="P" D
  1. .S DIR(0)="S^P:Print Report;H:Print Delimited Report to the HOST FILE;R:Return to Selection Criteria -Erases ALL previous selections"
  1. .S DIR("A")="<P> to Print, <H> to Host File, or <R> to Reselect"
  1. D ^DIR K DIR Q:$D(DTOUT)!$D(DUOUT)!$D(DIRUT)!$D(DIROUT)
  1. I $P(Y,U)="R" K ABMY,ABMF G EN
  1. I $P(Y,U)="H" D Q ;HFS -prompt path/filename
  1. .D ^XBFMK
  1. .S DIR(0)="F"
  1. .S DIR("A")="Enter Path"
  1. .S DIR("B")=$P($G(^ABMDPARM(DUZ(2),1,4)),"^",7)
  1. .D ^DIR K DIR
  1. .I $G(Y)["^" S POP=1 Q
  1. .S ABMPATH=$S($G(Y)="":ABMPATH,1:Y)
  1. .D ^XBFMK
  1. .S DIR(0)="F"
  1. .S DIR("A")="Enter filename"
  1. .D ^DIR K DIR
  1. .I $G(Y)["^" S POP=1 Q
  1. .S ABMFN=Y
  1. .D COMPUTE^ABMM2PVH
  1. ;S ABMQ("RX")="POUT^ABMDRUTL" ;abm*2.6*15
  1. S ABMQ("RX")="XIT^ABMM2PVP" ;made it so report has its own exit routine ;abm*2.6*15
  1. S ABMQ("NS")="ABM"
  1. S ABMQ("RP")="COMPUTE^ABMM2PVH"
  1. D ^ABMDRDBQ
  1. Q
  1. ;start new abm*2.6*15
  1. XIT ;EP - exit option for report
  1. D ^XBFMK
  1. K ^XTMP("ABM-PVH2",$J)
  1. Q
  1. ;end new abm*2.6*15
  1. COMPUTE ;EP - gather data
  1. ;specified 90-day
  1. I ABMY("90")="B" D Q
  1. .S X1=ABMY("SDT")
  1. .S X2=89
  1. .D C^%DTC
  1. .S ABMY("EDT")=X
  1. .D VISITS
  1. .D BILLS
  1. .D ENROLL
  1. .D CALC
  1. .D PRINT
  1. ;
  1. ;User specified
  1. I ABMY("90")="C" D Q
  1. .D VISITS
  1. .D BILLS
  1. .D ENROLL
  1. .D CALC
  1. .D PRINT
  1. ;
  1. ;automated
  1. I ABMY("90")="A" D
  1. .S ABMY("SDT")=(ABMY("QYR")-1701)_"1001"
  1. .S ABMY("EDT")=(ABMY("QYR")-1700)_"0930"
  1. D VISITS
  1. D BILLS
  1. D ENROLL
  1. D CALC
  1. ;
  1. D PRINT
  1. Q
  1. VISITS ;
  1. S ABMFILE="AUPNVINP"
  1. S ABMSDT=ABMY("SDT")
  1. S ABMEDT=ABMY("EDT")+.999999
  1. F S ABMSDT=$O(^AUPNVINP("B",ABMSDT)) Q:'ABMSDT!(ABMSDT>ABMEDT) D
  1. .S ABMVIEN=0
  1. .F S ABMVIEN=$O(^AUPNVINP("B",ABMSDT,ABMVIEN)) Q:'ABMVIEN D
  1. ..S ABMVDFN=$$GET1^DIQ(9000010.02,ABMVIEN,.03,"I")
  1. ..S ABMSCAT=$$GET1^DIQ(9000010,ABMVDFN,.07,"I") ;service cat
  1. ..S ABMCLNC=$$GET1^DIQ(9000010,ABMVDFN,.08,"I") ;clinic
  1. ..Q:$$GET1^DIQ(9000010,ABMVDFN,".05","E")["DEMO,PATIENT" ;abm*2.6*15 HEAT161159 remove demo patients from list
  1. ..S ABMPT=$$GET1^DIQ(9000010,ABMVDFN,.05,"I") ;pt
  1. ..S ABMP("VDT")=$P($$GET1^DIQ(9000010.02,ABMVIEN,.01,"I"),".") ;disch dt
  1. ..D VISITCK
  1. S ABMSDT=ABMY("SDT")
  1. S ABMEDT=ABMY("EDT")+.999999
  1. S ABMFILE="AUPNVSIT"
  1. F S ABMSDT=$O(^AUPNVSIT("B",ABMSDT)) Q:'ABMSDT!(ABMSDT>ABMEDT) D
  1. .S ABMVDFN=0
  1. .F S ABMVDFN=$O(^AUPNVSIT("B",ABMSDT,ABMVDFN)) Q:'ABMVDFN D
  1. ..I ($D(^XTMP("ABM-PVH2",$J,"VISITS",ABMVDFN))) Q ;already cnt'ed this vst on rpt
  1. ..S ABMSCAT=$$GET1^DIQ(9000010,ABMVDFN,.07,"I") ;service cat
  1. ..S ABMCLNC=$$GET1^DIQ(9000010,ABMVDFN,.08,"I") ;clinic
  1. ..Q:$$GET1^DIQ(9000010,ABMVDFN,".05","E")["DEMO,PATIENT" ;abm*2.6*15 HEAT161159 remove demo patients from list
  1. ..S ABMPT=$$GET1^DIQ(9000010,ABMVDFN,.05,"I") ;pt
  1. ..S ABMP("VDT")=$P($$GET1^DIQ(9000010,ABMVDFN,.01,"I"),".") ;vst dt
  1. ..D VISITCK
  1. Q
  1. VISITCK ;EP
  1. ;serv cat MUST be H, or (A w/clinic=30)
  1. K ABMFLG,ABMCKDT
  1. I ABMFILE="AUPNVINP",ABMSCAT="H" S ABMFLG=1
  1. I (ABMFILE="AUPNVSIT")&((ABMSCAT="A")&(ABMCLNC=30)) S ABMFLG=1
  1. Q:(+$G(ABMFLG)=0)
  1. S ABMVLOC=$$GET1^DIQ(9000010,ABMVDFN,.06,"I")
  1. ;I ($$GET1^DIQ(9000010,ABMVDFN,.12)'="")&(ABMSDT>$$GET1^DIQ(9000010,ABMVDFN,.12,"I")&($$GET1^DIQ(9000010,ABMVDFN,1111,"I")'="R")) Q
  1. I (ABMFILE="AUPNVSIT")&($$GET1^DIQ(9000010,ABMVDFN,.12)'="")&($$GET1^DIQ(9000010,$$GET1^DIQ(9000010,ABMVDFN,.12,"I"),1111,"I")'="R") Q
  1. I (ABMFILE="AUPNVSIT")&($$GET1^DIQ(9000010,ABMVDFN,.12)="")&($$GET1^DIQ(9000010,ABMVDFN,1111,"I")'="R") Q
  1. Q:'$D(ABMF(ABMVLOC)) ;not selected loc
  1. D CALCDTS^ABMM2PV1
  1. S ABMDTFLG=0
  1. S ABMP("BDT")=ABMP("BSDT")
  1. F D Q:ABMDTFLG=1
  1. .I ABMP("VDT")<ABMP("BSDT") Q ;vst is before 90-day window
  1. .S ^XTMP("ABM-PVH2",$J,"LOC-DENOM",ABMP("BDT"))=+$G(^XTMP("ABM-PVH2",$J,"LOC-DENOM",ABMP("BDT")))+1
  1. .S ^XTMP("ABM-PVH2",$J,"LOC-DENOM",ABMP("BDT"),ABMVLOC)=+$G(^XTMP("ABM-PVH2",$J,"LOC-DENOM",ABMP("BDT"),ABMVLOC))+1
  1. .S ^XTMP("ABM-PVH2",$J,"PT VSTS",ABMPT,ABMSDT,ABMVDFN)="" ;list of vsts by pt,DOS
  1. .S ^XTMP("ABM-PVH2",$J,"VISITS",ABMVDFN)="" ;list of vsts to chk for pymt
  1. .S ^XTMP("ABM-PVH2",$J,"VISIT CNT",ABMP("BDT"))=+$G(^XTMP("ABM-PVH2",$J,"VISIT CNT",ABMP("BDT")))+1 ;cnt of vsts
  1. .S ^XTMP("ABM-PVH2",$J,"ALL VISITS",ABMP("BDT"),ABMVDFN)="" ;list of all vsts looked at
  1. .S ^XTMP("ABM-PVH2",$J,"ALL VISIT CNT")=+$G(^XTMP("ABM-PVH2",$J,"ALL VISIT CNT"))+1 ;cnt all vsts
  1. .;I ^XTMP("ABM-PVH2",$J,"ALL VISIT CNT")#1000 U IO(0) W "." ;abm*2.6*15
  1. .I (^XTMP("ABM-PVH2",$J,"ALL VISIT CNT")#1000&(IOST["C")) U IO(0) W "." ;abm*2.6*15 only write dots if to screen; was writing dots to HFS file
  1. .K ABMITYP,ABMDX
  1. .D PTDATA
  1. .S X1=ABMP("BDT")
  1. .S X2=1
  1. .D C^%DTC
  1. .I X>ABMP("BEDT") S ABMDTFLG=1 Q
  1. .S ABMP("BDT")=X
  1. Q
  1. BILLS ;EP
  1. S ABMCNT=0
  1. S ABMDUZ2=0
  1. S ABMFOUND=0
  1. F S ABMDUZ2=$O(^ABMDBILL(ABMDUZ2)) Q:'ABMDUZ2 D
  1. .Q:'$D(^ABMDBILL(ABMDUZ2,0))
  1. .S ABMVDFN=0
  1. .F S ABMVDFN=$O(^XTMP("ABM-PVH2",$J,"VISITS",ABMVDFN)) Q:'ABMVDFN D
  1. ..I (+$G(^XTMP("ABM-PVH2",$J,"VISITS",ABMVDFN)))=1 Q ;already cnt'd this vst on rpt
  1. ..Q:'$D(^ABMDBILL(ABMDUZ2,"AV",ABMVDFN)) ;vst not under this DUZ(2)
  1. ..K ABMBILLN,ABMSAV
  1. ..S ABMP("BDFN")=0
  1. ..F S ABMP("BDFN")=$O(^ABMDBILL(ABMDUZ2,"AV",ABMVDFN,ABMP("BDFN"))) Q:'ABMP("BDFN") D Q:(+$G(^XTMP("ABM-PVH2",$J,"VISITS",ABMVDFN)))=1
  1. ...S (ABMBILLN,ABMSAV)=$P($G(^ABMDBILL(ABMDUZ2,ABMP("BDFN"),0)),U)
  1. ...I $P($G(^ABMDBILL(ABMDUZ2,ABMP("BDFN"),0)),U,4)="X" Q
  1. ...S ABMSDT=$P($$GET1^DIQ(9000010,ABMVDFN,".01","I"),".")
  1. ...I +$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),6)),U,3)'=0 S ABMSDT=$P($G(^ABMDBILL(DUZ(2),ABMP("BDFN"),6)),U,3)
  1. ...S ABMVLOC=$P($G(^ABMDBILL(ABMDUZ2,ABMP("BDFN"),0)),U,3)
  1. ...S ABMP("VDT")=$P($G(^ABMDBILL(ABMDUZ2,ABMP("BDFN"),7)),U)
  1. ...S ABMINS=$P($G(^ABMDBILL(ABMDUZ2,ABMP("BDFN"),0)),U,8)
  1. ...S ABMPT=$P($G(^ABMDBILL(ABMDUZ2,ABMP("BDFN"),0)),U,5)
  1. ...K ABMDX
  1. ...D PRIMPOV^ABMM2PV7
  1. ...D ARBILLS
  1. ...I +$G(ABMFOUND)=1 D OTHERVST ;chk for other vsts on DOS to mark as pd
  1. ..;
  1. ..;now look thru bills found & remove zero pays when pymt found
  1. ..S ABMP("BDT")=0
  1. ..F S ABMP("BDT")=$O(^XTMP("ABM-PVH2",$J,"LOC-NUM PD BILLS",ABMP("BDT"))) Q:'ABMP("BDT") D
  1. ...S ABMGRP=""
  1. ...F S ABMGRP=$O(^XTMP("ABM-PVH2",$J,"LOC-NUM PD BILLS",ABMP("BDT"),ABMGRP)) Q:ABMGRP="" D
  1. ....S ABMP("VDFN")=0
  1. ....F S ABMP("VDFN")=$O(^XTMP("ABM-PVH2",$J,"LOC-NUM PD BILLS",ABMP("BDT"),ABMGRP,ABMP("VDFN"))) Q:'ABMP("VDFN") D
  1. .....S ABMP("BDFN")=0
  1. .....F S ABMP("BDFN")=$O(^XTMP("ABM-PVH2",$J,"LOC-NUM PD BILLS",ABMP("BDT"),ABMGRP,ABMP("VDFN"),ABMP("BDFN"))) Q:'ABMP("BDFN") D
  1. ......I $D(^XTMP("ABM-PVH2",$J,"LOC-NUM ZEROPD BILLS",ABMP("BDT"),ABMGRP,ABMP("VDFN"),ABMP("BDFN"))) D
  1. .......K ^XTMP("ABM-PVH2",$J,"LOC-NUM ZEROPD BILLS",ABMP("BDT"),ABMGRP,ABMP("VDFN"),ABMP("BDFN"))
  1. ......S ^XTMP("ABM-PVH2",$J,"LOC-NUM PD",ABMP("BDT"),ABMGRP)=+$G(^XTMP("ABM-PVH2",$J,"LOC-NUM PD",ABMP("BDT"),ABMGRP))+1
  1. ......S ^XTMP("ABM-PVH2",$J,"LOC-NUM PD",ABMP("BDT"),ABMVLOC,ABMGRP)=+$G(^XTMP("ABM-PVH2",$J,"LOC-NUM PD",ABMP("BDT"),ABMVLOC,ABMGRP))+1
  1. ..K ^XTMP("ABM-PVH2",$J,"LOC-NUM PD BILLS")
  1. ..;
  1. ..S ABMP("BDT")=0
  1. ..F S ABMP("BDT")=$O(^XTMP("ABM-PVH2",$J,"LOC-NUM ZEROPD BILLS",ABMP("BDT"))) Q:'ABMP("BDT") D
  1. ...S ABMGRP=""
  1. ...F S ABMGRP=$O(^XTMP("ABM-PVH2",$J,"LOC-NUM ZEROPD BILLS",ABMP("BDT"),ABMGRP)) Q:ABMGRP="" D
  1. ....S ABMP("VDFN")=0
  1. ....F S ABMP("VDFN")=$O(^XTMP("ABM-PVH2",$J,"LOC-NUM ZEROPD BILLS",ABMP("BDT"),ABMGRP,ABMP("VDFN"))) Q:'ABMP("VDFN") D
  1. .....S ABMP("BDFN")=0
  1. .....F S ABMP("BDFN")=$O(^XTMP("ABM-PVH2",$J,"LOC-NUM ZEROPD BILLS",ABMP("BDT"),ABMGRP,ABMP("VDFN"),ABMP("BDFN"))) Q:'ABMP("BDFN") D
  1. ......S ^XTMP("ABM-PVH2",$J,"LOC-NUM ZEROPD",ABMP("BDT"),ABMVLOC,ABMGRP)=+$G(^XTMP("ABM-PVH2",$J,"LOC-NUM ZEROPD",ABMP("BDT"),ABMVLOC,ABMGRP))+1
  1. ......S ^XTMP("ABM-PVH2",$J,"LOC-NUM ZEROPD",ABMP("BDT"),ABMGRP)=+$G(^XTMP("ABM-PVH2",$J,"LOC-NUM ZEROPD",ABMP("BDT"),ABMGRP))+1
  1. ..K ^XTMP("ABM-PVH2",$J,"LOC-NUM ZEROPD BILLS")
  1. Q
  1. ARBILLS ;EP
  1. S ABMBILLN=+ABMBILLN_" "
  1. S ABMSAV=+ABMSAV
  1. F S ABMBILLN=$O(^BARBL(ABMPAR,"B",ABMBILLN)) Q:$G(ABMBILLN)=""!(ABMBILLN'[ABMSAV) D Q:(+$G(^XTMP("ABM-PVH2",$J,"VISITS",ABMVDFN)))=1
  1. .S ABMARIEN=0
  1. .S ABMHOLD=DUZ(2)
  1. .S DUZ(2)=ABMPAR
  1. .F S ABMARIEN=$O(^BARBL(DUZ(2),"B",ABMBILLN,ABMARIEN)) Q:'ABMARIEN D Q:(+$G(^XTMP("ABM-PVH2",$J,"VISITS",ABMVDFN)))=1
  1. ..S ABMARACT=$$GET1^DIQ(90050.01,ABMARIEN_",",3,"I") ;A/R BILL, A/R ACCOUNT
  1. ..K ABMTRAMT,ABMTRIEN
  1. ..S D0=ABMARACT
  1. ..S ABMITYP=$$VALI^BARVPM(8) ;GET 'VIP INSURER TYPE' CODE
  1. ..I ABMITYP="FPL" S ABMITYP="P" ;change FPL to P abm*2.6*15 HEAT161159
  1. ..S ABMGRP=$S(ABMITYP="D":"MCD",$D(ABMI("INS",ABMINS)):"CHIP",1:"OTHR")
  1. ..S ABMABILN=$P($G(^BARBL(DUZ(2),ABMARIEN,0)),U)
  1. ..;I "^MCD^CHIP^"'[("^"_ABMGRP_"^") Q
  1. ..;S ^XTMP("ABM-PVH2",$J,"VISITS",ABMVDFN)=1
  1. ..I "^MCD^CHIP^"[("^"_ABMGRP_"^") S ^XTMP("ABM-PVH2",$J,"VISITS",ABMVDFN)=1
  1. ..I "^MCD^CHIP^"'[("^"_ABMGRP_"^") S ^XTMP("ABM-PVH2",$J,"VISITS",ABMVDFN)=2
  1. ..;
  1. ..D CALCDTS^ABMM2PV1
  1. ..S ABMDTFLG=0
  1. ..S ABMP("BDT")=ABMP("BSDT")
  1. ..F D Q:ABMDTFLG=1
  1. ...I (ABMCNT#1000&(IOST["C")) W "."
  1. ...S ABMCNT=+$G(ABMCNT)+1
  1. ...D PTDATA
  1. ...S X1=ABMP("BDT")
  1. ...S X2=1
  1. ...D C^%DTC
  1. ...I X>ABMP("BEDT") S ABMDTFLG=1 Q
  1. ...S ABMP("BDT")=X
  1. ..;
  1. ..D TRANS
  1. ..S DUZ(2)=ABMHOLD
  1. Q
  1. TRANS ;EP
  1. D TRANS^ABMM2PH3 ;abm*2.6*15 split routine due to size
  1. Q
  1. ZEROPD ;EP
  1. D ZEROPD^ABMM2PH3 ;abm*2.6*15 split routine due to size
  1. Q
  1. OTHERVST ;EP
  1. D OTHERVST^ABMM2PH3 ;abm*2.6*15 split routine due to size
  1. Q
  1. PTDATA ;EP
  1. D PTDATA^ABMM2PH3 ;abm*2.6*15 split routine due to size
  1. Q
  1. CALC ;EP
  1. D CALC^ABMM2PH2
  1. Q
  1. PRINT ;EP
  1. I ABMY("RFMT")="P",$G(ABMFN)'="" D PTHSTFL^ABMM2PH1 Q
  1. S ABMVLOC=0
  1. F S ABMVLOC=$O(ABMFAC(ABMVLOC)) Q:'ABMVLOC D D PAZ^ABMDRUTL Q:$D(DTOUT)!$D(DUOUT)!$D(DIROUT)
  1. .S ABM("PG")=1
  1. .S ABMSDT=$P($G(^XTMP("ABM-PVH2",$J,"LOC TOP",ABMVLOC)),U,2)
  1. .I +$G(^XTMP("ABM-PVH2",$J,"LOC TOP",ABMVLOC))>9.5 S ABMPMET=1
  1. .D HDR^ABMM2PV3
  1. .W !,"Hospital used in this report: ",$$GET1^DIQ(9999999.06,ABMVLOC,.01,"E"),$S($D(^ABMMUPRM(1,1,"B",ABMVLOC)):" (FQHC/RHC/Tribal/Urban)",1:""),!
  1. .S ABMPMET=0
  1. .I ABMY("RFMT")="P" D PATIENT^ABMM2PH1 Q
  1. .I +$G(^XTMP("ABM-PVH2",$J,"LOC TOP",ABMVLOC))>9.5 D MET^ABMM2PH1 Q
  1. .D NOTMET^ABMM2PH1
  1. K ^XTMP("ABM-PVH2",$J)
  1. Q
  1. ENROLL ;EP
  1. D ENROLL^ABMM2PH2
  1. Q