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

BARRPVC.m

Go to the documentation of this file.
  1. BARRPVC ; IHS/SD/SDR - Provider Visit Count Report ;08/20/2008
  1. ;;1.8;IHS ACCOUNTS RECEIVABLE;**28**;OCT 26, 2005;Build 92
  1. ;IHS/SD/SDR 1.8*28 CR8398 HEAT301053 - new routine. Report of MACRA reporting. Prompts for approval or visit date, date range,
  1. ; inpatient/outpatient/both, and providers. It will find all A/R Accounts with insurer type MEDICARE FI, and report
  1. ; a summary line with a breakdown by bill type, visit type for each.
  1. ;
  1. Q
  1. ;*****************************************
  1. EN ;
  1. W !!,"NOTE: This report will contain data for all Visit Locations where a provider"
  1. W !?7,"saw Medicare patients. There will be a summary line for each provider"
  1. W !?7,"under each Visit Location, with detail lines underneath that breaks down"
  1. W !?7,"the data further by bill type and visit type."
  1. ;
  1. K ^TMP($J,"BAR-PVC-TEST"),^TMP($J,"BAR-PVC"),^TMP($J,"BAR-PVC-LOC")
  1. S BARDONE=0
  1. D:'$D(BARUSR) INIT^BARUTL ;Setup basic A/R variables
  1. D DTYP ;approval or visit date
  1. I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. D DATES ;prompt for dates
  1. I '$D(BARY("DT"))!'$D(BARY("DT",1))!'$D(BARY("DT",2)) Q
  1. D INOUTPT ;inpatient, outpatient, or both
  1. I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. D PRVS ;what providers, default to ALL
  1. I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. SEL ;Select device
  1. S %ZIS="Q"
  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. S IOP=ION D ^%ZIS
  1. D PRINT
  1. Q
  1. DTYP ;EP
  1. K BARY("DT"),BARSTART,BAREND
  1. S DIR(0)="SO^1:Approval Date;2:Visit Date"
  1. S DIR("A")="Select TYPE of DATE Desired"
  1. D ^DIR
  1. K DIR
  1. I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. S BARY("DT")=$S(Y=1:"A",1:"V")
  1. Q
  1. DATES ;EP
  1. ; Ask beginning and ending Transaction Dates
  1. W !!," ============ Entry of "_$S(BARY("DT")="A":"APPROVAL",1:"VISIT")_" DATE Range =============",!
  1. K %D
  1. S BARSTART=$$DATE^BARDUTL(1)
  1. K %DT
  1. I BARSTART<1 Q
  1. S BAREND=$$DATE^BARDUTL(2)
  1. K %DT
  1. I BAREND<1 W ! G DATES
  1. I BAREND<BARSTART D G DATES
  1. .W *7
  1. .W !!,"The END date must not be before the START date.",!
  1. S BARY("DT",1)=BARSTART
  1. S BARY("DT",2)=BAREND
  1. Q
  1. INOUTPT ;EP
  1. K BARIOPT
  1. S DIR(0)="SO^1:Inpatient;2:Outpatient;3:Both Inpatient and Outpatient"
  1. S DIR("A")="Select Encounter Type Desired"
  1. D ^DIR
  1. K DIR
  1. I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. S BARY("INOUTPT")=Y
  1. Q
  1. PRVS ;EP
  1. ; Select Provider Inclusion Parameter
  1. K BARZ("PRV")
  1. W !
  1. F D Q:Y<0!(BARDONE)
  1. .S DIC("A")="Select PROVIDER: "
  1. .D PRV^BARRSL1 ;IHS/DIT/CPC - 20180419 CR8398 BAR*1.8*28
  1. .;S DIC="^VA(200,"
  1. .;S DIC("S")="I $D(^(""PS""))"
  1. .;S DIC("A")="Select PROVIDER: "
  1. .;I $D(BARY("PRV")) S DIC("A")="Select Another PROVIDER: "
  1. .;S DIC(0)="QEAM"
  1. .;D ^DIC
  1. .I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. .K DIC
  1. .S:+Y>0 BARZ("PRV",+Y)=""
  1. .I +Y<0,$D(BARZ("PRV")) Q
  1. .I +Y<0,'$D(BARZ("PRV")) D ;IHS/DIT/CPC - 20180419 CR8398 BAR*1.8*28 ADD TO REPLACE ABOVE
  1. ..W "ALL",!
  1. ..S I=""
  1. ..F S I=$O(^VA(200,"AK.PROVIDER",I)) Q:I="" D
  1. ...S J=""
  1. ...F S J=$O(^VA(200,"AK.PROVIDER",I,J)) Q:+J=0 D
  1. ....I $D(^VA(200,+J,"PS")) S BARZ("PRV",+J)="" ;IHS/DIT/CPC - 20180419 CR8398 BAR*1.8*28 END ADD TO REPLACE ABOVE
  1. Q
  1. QUE ;EP
  1. K IO("Q")
  1. S ZTRTN="PRINT^BARRPVC",ZTDESC="Provider Visit Count Report"
  1. S ZTSAVE("BAR*")=""
  1. D ^%ZTLOAD
  1. D ^%ZISC
  1. I $D(ZTSK)[0 W !!?5,"REPORT CANCELLED!"
  1. E W !!?5,"REQUEST QUEUED AS TASK # "_ZTSK_" !",!
  1. Q
  1. ;
  1. PRINT ;EP
  1. D LOOP
  1. ;
  1. S BAR("PG")=1
  1. D WHD
  1. S BARVLTOT("BILLS")=0
  1. S BARVLTOT("AMT")=0
  1. I $Y>(IOSL-5) D HD I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. S BAR("PRVN")=""
  1. F S BAR("PRVN")=$O(^TMP($J,"BAR-PVC",BAR("PRVN"))) Q:BAR("PRVN")="" D I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. .;W !!,BAR("PRVN"),?30,$J(+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U),10),?40,$J($FN(+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U,2),",",2),16),?58,$J($FN(+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U,3),",",2),16)
  1. .;W !!,$E(BAR("PRVN"),1,35),?38,$J(+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U),10),?40,$J($FN(+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U,2),",",2),16),?54,$J($FN(+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U,3),",",2),16)
  1. .W !!,$E(BAR("PRVN"),1,35),?40,+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U),?54,$FN(+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U,2),",",2),?69,$FN(+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U,3),",",2)
  1. .S BARVLTOT("BILLS")=+$G(BARVLTOT("BILLS"))+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U)
  1. .S BARVLTOT("AMT")=+$G(BARVLTOT("AMT"))+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U,2)
  1. .S BAR("BTYP")=0
  1. .S BAR("BTYPTEST")=0
  1. .F S BAR("BTYP")=$O(^TMP($J,"BAR-PVC",BAR("PRVN"),BAR("BTYP"))) Q:'BAR("BTYP") D I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. ..S BAR("BTYPTEST")=1
  1. ..W !?3,"Bill Type: "_$S(BAR("BTYP")="999999":"UNK",1:BAR("BTYP")) ;IHS/DIT/CPC - 20180419 CR8398 BAR*1.8*28
  1. ..S BAR("VTYP")=0
  1. ..S BAR("VTYPTEST")=0
  1. ..F S BAR("VTYP")=$O(^TMP($J,"BAR-PVC",BAR("PRVN"),BAR("BTYP"),BAR("VTYP"))) Q:'BAR("VTYP") D I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. ...S BAR("VTYPTEST")=1
  1. ...W !?5,"Visit Type: ",BAR("VTYP")_" "_$E($$GET1^DIQ(9002274.8,BAR("VTYP"),".01","E"),1,16)
  1. ...W ?38,$J(+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"),BAR("BTYP"),BAR("VTYP"))),U),8)
  1. ...W ?50,$J($FN(+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"),BAR("BTYP"),BAR("VTYP"))),U,2),",",2),16)
  1. ...W ?66,$J($FN(+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"),BAR("BTYP"),BAR("VTYP"))),U,3),",",2),14)
  1. ...I $Y>(IOSL-5) D HD
  1. ...I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. W !!
  1. ;
  1. NODATA ;
  1. S I=""
  1. F S I=$O(BARZ("PRV",I)) Q:I=""!BARDONE D
  1. .I +$G(BARZ("PRV",I))=0 W !!,"No data for Provider "_$$GET1^DIQ(200,I,".01","E"),! ;IHS/DIT/CPC - 20180419 CR8398 BAR*1.8*28
  1. .I $Y>(IOSL-5) D HD
  1. .I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. S I=""
  1. F S I=$O(^TMP($J,"BAR-PVC-LOC",I)) Q:+I=0!BARDONE D
  1. .I $Y>(IOSL-5) D HD
  1. .W !!,"Total: "_$$GET1^DIQ(90052.05,I,.01,"E"),?40,$P(^TMP($J,"BAR-PVC-LOC",I),U,2),?54,$FN(+$P($G(^TMP($J,"BAR-PVC-LOC",I)),U,3),",",2),?69,$FN(+$P($G(^TMP($J,"BAR-PVC-LOC",I)),U,4),",",2),!
  1. .I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. W !!,"REPORT COMPLETE"
  1. D ^%ZISC
  1. K ^TMP($J,"BAR-PVC")
  1. D CLNUP
  1. Q
  1. ;
  1. LOOP ;EP
  1. ;find all A/R Accounts that are insurers with insurer type Medicare FI
  1. K ^TMP($J,"BAR-PVC")
  1. S BARACCT=0
  1. F S BARACCT=$O(^BARAC(DUZ(2),BARACCT)) Q:'BARACCT D
  1. .I $P($G(^BARAC(DUZ(2),BARACCT,0)),U)'["AUTNINS" Q ;insurers only
  1. .S D0=BARACCT
  1. .S BARITYP=$$VALI^BARVPM(8) ;GET 'VIP INSURER TYPE' CODE (NUMBER)
  1. .I BARITYP'="R" Q
  1. .S BARY("ACCT",BARACCT)=""
  1. ;now go find all A/R Bills with those A/R Accounts
  1. S BARACCT=0
  1. F S BARACCT=$O(BARY("ACCT",BARACCT)) Q:'BARACCT D
  1. .S BAR=0
  1. .F S BAR=$O(^BARBL(DUZ(2),"D",BARACCT,BAR)) Q:'BAR D
  1. ..D BILL
  1. ..Q:'BARP("HIT")
  1. ..S:(+BAR("PRV")'=0) BAR("PRVN")=$$GET1^DIQ(200,BAR("PRV"),".01","E")
  1. ..S:(+BAR("PRV")'=0) BARZ("PRV",BAR("PRV"))=BARZ("PRV",BAR("PRV"))+1 ;IHS/DIT/CPC - 20180419 CR8398 BAR*1.8*28
  1. ..D TRANS ;look for pymts, pymt credits on bill
  1. ..S $P(^TMP($J,"BAR-PVC",BAR("PRVN")),U)=+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U)+1
  1. ..S $P(^TMP($J,"BAR-PVC",BAR("PRVN")),U,2)=+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U,2)+BAR("AMT")
  1. ..S $P(^TMP($J,"BAR-PVC",BAR("PRVN")),U,3)=+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"))),U,3)+BARTRAMT
  1. ..S $P(^TMP($J,"BAR-PVC",BAR("PRVN"),BAR("BTYP"),BAR("VTYP")),U)=+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"),BAR("BTYP"),BAR("VTYP"))),U)+1
  1. ..S $P(^TMP($J,"BAR-PVC",BAR("PRVN"),BAR("BTYP"),BAR("VTYP")),U,2)=+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"),BAR("BTYP"),BAR("VTYP"))),U,2)+BAR("AMT")
  1. ..S $P(^TMP($J,"BAR-PVC",BAR("PRVN"),BAR("BTYP"),BAR("VTYP")),U,3)=+$P($G(^TMP($J,"BAR-PVC",BAR("PRVN"),BAR("BTYP"),BAR("VTYP"))),U,3)+BARTRAMT
  1. ..S $P(^TMP($J,"BAR-PVC-LOC",BAR("VLOC")),U,1)=BAR("VLOC")
  1. ..S $P(^TMP($J,"BAR-PVC-LOC",BAR("VLOC")),U,2)=$P(^TMP($J,"BAR-PVC-LOC",BAR("VLOC")),U,2)+1 ;VISIT LOCATION COUNT ;IHS/DIT/CPC CR8398 BAR*1.8*28
  1. ..S $P(^TMP($J,"BAR-PVC-LOC",BAR("VLOC")),U,3)=$P(^TMP($J,"BAR-PVC-LOC",BAR("VLOC")),U,3)+BAR("AMT") ;VISIT LOCATION BILLED ;IHS/DIT/CPC CR8398 BAR*1.8*28
  1. ..S $P(^TMP($J,"BAR-PVC-LOC",BAR("VLOC")),U,4)=$P(^TMP($J,"BAR-PVC-LOC",BAR("VLOC")),U,4)+BARTRAMT ;VISIT LOCATION PAID ;IHS/DIT/CPC CR8398 BAR*1.8*28
  1. ..I $G(BARDEBUG) S ^TMP($J,"BAR-PVC-TEST",BAR("PRVN"),BAR("BTYP"),BAR("VTYP"),BAR("DOS"),BAR)=BAR("AMT")_U_BARTRAMT ;for validation
  1. Q
  1. BILL ;EP
  1. ; for checking Bill File data parameters
  1. S BARP("HIT")=0
  1. S BAR("QUIT")=0
  1. S BAR(0)=$G(^BARBL(DUZ(2),BAR,0)) ;A/R Bill 0 node
  1. S BAR(1)=$G(^BARBL(DUZ(2),BAR,1)) ;A/R Bill 1 node
  1. S BAR("VTYP")=$P(BAR(1),U,14) ;Visit type (3P Visit Type)
  1. S BAR("BTYP")=+$$GET1^DIQ(90050.01,BAR,27)
  1. S:'BAR("BTYP") BAR("BTYP")="999999" ;Bill type unknown
  1. S BAR("VLOC")=$P(BAR(1),U,8) ;Visit location (A/R Parent/Sat)
  1. S BAR("ACC")=$P(BAR(0),U,3) ;A/R Account
  1. S BAR("DOS")=$P(BAR(1),U,2) ;DOS Begin
  1. S BAR("ADT")=$P(BAR(0),U,18) ;3P Approval date
  1. S BAR("PRV")=$P(BAR(1),U,13) ;Provider (New Person)
  1. S BAR("AMT")=$P(BAR(0),U,13) ;Amount Billed
  1. ;
  1. ;S BARDEBUG=1
  1. I +BAR("PRV")=0 S BAR("PRVN")="NO PROVIDER" ;no provider on bill
  1. I $D(BAR("PRV")),'$D(BARZ("PRV",+BAR("PRV"))) D Q ;Not a selected provider
  1. .I $G(BARDEBUG) S ^TMP($J,"BAR-PVC-TEST","REASON REJECTED","NOT SELECTED PROVIDER",BAR)=""
  1. ;
  1. I $G(BARY("DT"))="V" D Q:$G(BAR("QUIT")) ; Not chosen visit date
  1. .S:BAR("DOS")<BARY("DT",1) BAR("QUIT")=1
  1. .S:BAR("DOS")>BARY("DT",2) BAR("QUIT")=1
  1. .I $G(BAR("QUIT")) I $G(BARDEBUG) S ^TMP($J,"BAR-PVC-TEST","REASON REJECTED","NOT CHOSEN VISIT DATE",BAR)=""
  1. ;
  1. I $G(BARY("DT"))="A" D Q:$G(BAR("QUIT")) ; Not chosen approval dt
  1. .S:BAR("ADT")<BARY("DT",1) BAR("QUIT")=1
  1. .S:$P(BAR("ADT"),".")>BARY("DT",2) BAR("QUIT")=1
  1. .I $G(BAR("QUIT")) I $G(BARDEBUG) S ^TMP($J,"BAR-PVC-TEST","REASON REJECTED","NOT CHOSEN APPROVAL DATE",BAR)=""
  1. ;
  1. I "^11^12^71^72^"[("^"_$E(BAR("BTYP"),1,2)_"^"),BARY("INOUTPT")=2 Q ;inpt but user selected outpt for report
  1. I "^11^12^71^72^"'[("^"_$E(BAR("BTYP"),1,2)_"^"),BARY("INOUTPT")=1 Q ;outpt but user selected inpt for report
  1. ;
  1. S BARP("HIT")=1
  1. Q
  1. TRANS ;EP
  1. S BARTRIEN=0
  1. S BARTRAMT=0
  1. F S BARTRIEN=$O(^BARTR(DUZ(2),"AC",BAR,BARTRIEN)) Q:'BARTRIEN D
  1. .I (($P($G(^BARTR(DUZ(2),BARTRIEN,1)),U)'=40)&($P($G(^BARTR(DUZ(2),BARTRIEN,1)),U,2)'=20)) Q ;pymt or pymt credits only
  1. .S BARTRAMT=+$G(BARTRAMT)+($$GET1^DIQ(90050.03,BARTRIEN,3.5,"E")) ;credit-debit
  1. Q
  1. HD ;
  1. D PAZ^BARRUTL I $D(DUOUT)!$D(DTOUT)!$D(DIROUT)!$D(DIRUT) S BARDONE=1 Q
  1. WHD ;
  1. ; Set header Array
  1. NEW I
  1. S BAR("HD",0)="Provider Visit Count Report"
  1. S BAR("HD",1)="For Medicare"
  1. S BAR("HD",2)="at ALL Visit Locations under "_$P($G(^AUTTLOC(DUZ(2),0)),U,2)_" Billing Location"
  1. S BAR("HD",3)="with "_$S(BARY("DT")="A":"APPROVAL",1:"VISIT")_ " DATES from "_$$SDT^BARDUTL(BARY("DT",1))_" to "_$$SDT^BARDUTL(BARY("DT",2))
  1. S BAR("HD",4)="for "_$S(BARY("INOUTPT")=1:"INPATIENT",BARY("INOUTPT")=2:"OUTPATIENT",1:"ALL")_" BILL TYPES"
  1. S BAR("LVL")=0
  1. S BAR("CONJ")=""
  1. D WHD^BARRHD
  1. W !,"Provider",?40,"Bill Count",?54,"Amount Billed",?69,"Amount Paid",!
  1. F I=1:1:80 W "="
  1. S BAR("PG")=BAR("PG")+1
  1. Q
  1. CLNUP ;IHS/DIT/CPC - 20180419 CR8398 BAR*1.8*28
  1. K BAR,BAR3PLOC,BARACCT,BARDONE,BAREND,BARHOLD,BARITYP,BARP,BARSTART,BARTRAMT
  1. K BARTRIEN,BARVLTOT,BARY,BARZ,D0,DIC,DIQ,DR,I,J,L,X,Y
  1. Q
  1. ;EOR - IHS/DIT/CPC 1.8*28