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

BXPARPPD.m

Go to the documentation of this file.
  1. BXPARPPD ;IHS/OIT/FBD - PARAMETER AUDIT REPORTS - PARAMETER/PROVIDER/DATE RANGE ;
  1. ;;1.0;IHS EXTENSIONS TO KERNEL TOOLKIT;;Dec 19, 2013;Build 12
  1. ;
  1. ;
  1. ;REPORT OF PARAMETER VALUES FOR ONE OR MORE PROVIDERS OVER A USER-
  1. ;SPECIFIED DATE RANGE.
  1. ;
  1. ;PROVIDERS MAY BE SPECIFIED IN ONE OF TWO MANNERS:
  1. ; 1. MANUAL SELECTION BY USER OF ONE OR MORE PROVIDERS
  1. ; 2. SPECIFICATION OF AN EXISTING PROVIDER TAXONOMY
  1. ;
  1. ;REPORT WILL CONSIS OF THREE SECTIONS:
  1. ; 1. PARAMETER VALUES AT START OF DATE RANGE
  1. ; 2. PARAMETER VALUE CHANGES TRACKED THROUGH COURSE OF DATE RANGE
  1. ; 3. PARAMETER VALUES AT END OF DATE RANGE
  1. ;
  1. EN ;EP
  1. NEW BXPAEXIT,BXPSEL,BXBASE,BXPYEAR,DIRUT,DUOUT,X,Y,BXPABDT,BXPAEDT,BXPASEL
  1. NEW BXPAPRV,ABORT,BXPABDT,BXPAEDT,BXPAITM,CT,DASH,L,NXDATE,P,PAR,PDATE,PIEN
  1. NEW POP,PRV,PRDSC,ZTRTN,FLAG,IEN,QFL,TYPE,BXPBASE,BXPADT
  1. S BXPAEXIT=0
  1. D Q:BXPAEXIT
  1. .NEW DIR
  1. .W !!,"Select one of the following:",!
  1. .W !?10,"1 User Defined Date Range"
  1. .W !?10,"2 Quarter: January 1 - March 31"
  1. .W !?10,"3 Quarter: April 1 - June 30"
  1. .W !?10,"4 Quarter: July 1 - September 30"
  1. .W !?10,"5 Quarter: October 1 - December 31"
  1. .S DIR(0)="N^1:5:",DIR("A")="Select Report Period" K DA D ^DIR K DIR
  1. .I $D(DIRUT) S BXPAEXIT=1 Q
  1. .I $D(DUOUT) S BXPAEXIT=1 Q
  1. .S BXPSEL=Y
  1. I BXPSEL>1 D YR Q:BXPAEXIT
  1. ;
  1. I BXPSEL=2 S BXPABDT=$E(BXPYEAR,1,3)_"0101",BXPAEDT=$E(BXPYEAR,1,3)_"0331"
  1. I BXPSEL=3 S BXPABDT=$E(BXPYEAR,1,3)_"0401",BXPAEDT=$E(BXPYEAR,1,3)_"0630"
  1. I BXPSEL=4 S BXPABDT=$E(BXPYEAR,1,3)_"0701",BXPAEDT=$E(BXPYEAR,1,3)_"0930"
  1. I BXPSEL=5 S BXPABDT=$E(BXPYEAR,1,3)_"1001",BXPAEDT=$E(BXPYEAR,1,3)_"1231"
  1. I BXPSEL=1 D DATESEL^BXPARUTL
  1. ;
  1. D PROVSEL^BXPARUTL Q:BXPAEXIT ;SELECT PROVIDER(S)
  1. D ITMSEL^BXPARUTL Q:BXPAEXIT ;SELECT AUDIT ITEM(S)
  1. ;
  1. ;SELECT DEVICE
  1. S ZTRTN="TSK^BXPARPPD"
  1. S ZTDESC="Parameter Audit Report"
  1. S %ZIS="QM" D ^%ZIS Q:POP
  1. I '$D(IO("Q")) K ZTDESC G @ZTRTN
  1. S ZTIO=ION,ZTSAVE("*")=""
  1. D ^%ZTLOAD
  1. ;
  1. TSK ;QUEUED TASK ENTRY POINT FOR REPORT
  1. S U="^"
  1. D COMPILE
  1. D PARS
  1. D CLEANUP
  1. Q
  1. ;
  1. ;
  1. COMPILE ;COMPILE REPORT DATA
  1. NEW PTR,DATE,INST,VALUE
  1. K ^TMP("BXPADATA",$J)
  1. ; Get the priority levels of the parameter(s)
  1. S PAR="" F S PAR=$O(BXPAITM(PAR)) Q:PAR="" D PPRI(PAR)
  1. ;
  1. S PRV=""
  1. F S PRV=$O(BXPAPRV(PRV)) Q:PRV="" D
  1. .S BXPAUNM=BXPAPRV(PRV)
  1. .S PAR="" F S PAR=$O(BXPAITM(PAR)) Q:PAR="" D
  1. ..D PAR(PAR)
  1. Q
  1. ;
  1. PAR(BXPAR) ;EP
  1. NEW PTR,DATE,BXUSER,PLEV,PRI,BXPSOC,INST,VALUE,BXI,BXSRC,BXOP
  1. S PTR=""
  1. F S PTR=$O(^BXPA(9002026.01,"APAR",BXPAR,PTR)) Q:PTR="" D
  1. .S BXOP=$P(^BXPA(9002026.01,PTR,0),U,4)
  1. .S DATE=$P(^BXPA(9002026.01,PTR,0),U,1)\1 ;AUDIT RECORD DATE/TIME
  1. .I DATE<BXPABDT,BXOP'="B" Q
  1. .I DATE<BXPABDT,BXOP="B" S DATE=BXPABDT
  1. .I DATE>BXPAEDT Q
  1. .S BXUSER=$P(^BXPA(9002026.01,PTR,0),U,6),PIEN=$P(BXUSER,";",1),PLEV=$P(BXUSER,";",2)
  1. .I PLEV="VA(200,",'$D(BXPAPRV(PIEN)) Q
  1. .I PLEV="VA(200,",PRV'=PIEN Q
  1. .S PRI=$P($G(BXPAITM(BXPAR,PLEV)),U,1) I PRI="" Q
  1. .S PRDSC=$P(BXPAITM(BXPAR,PLEV),U,2)
  1. .S BXPSOC=BXPAITM(BXPAR)
  1. .S INST=$P(^BXPA(9002026.01,PTR,0),U,7) ;PARAMETER NAME
  1. .S VALUE=$P(^BXPA(9002026.01,PTR,0),U,9) ;PARAMETER VALUE
  1. .I BXPAR="ORK EDITABLE BY USER" D
  1. ..S BXPSOC="0:NO;1:YES"
  1. .I BXPAR="ORQQPX COVER SHEET REMINDERS" S QFL=0 D Q:QFL
  1. ..S FLAG=$E(VALUE,1,1),TYPE=$E(VALUE,2,2),IEN=$E(VALUE,3,$L(VALUE))
  1. ..S VALUE=FLAG,BXPSOC="L:Lock;R:Remove;N:Normal"
  1. ..I TYPE="C" S QFL=1 Q
  1. ..I TYPE="R" S INST=$P(^PXD(811.9,IEN,0),U,1)
  1. .I $L(VALUE)=1 D
  1. ..I BXPSOC="" Q
  1. ..F BXI=1:1:$L(BXPSOC,";") D
  1. ...S BXSRC=$P(BXPSOC,";",BXI)
  1. ...I $P(BXSRC,":",1)=VALUE S VALUE=$P(BXSRC,":",2) Q
  1. .S ^TMP("BXPADATA",$J,BXPAUNM,BXPAR,INST,DATE,PRI,PRDSC)=VALUE_U_PTR
  1. .S ^TMP("BXPADATA",$J,BXPAUNM)=PRV
  1. Q
  1. ;
  1. PPRI(BXPAR) ;EP - Parameter Priority
  1. NEW BXPN,BXN,BXPRDS,BXPSOC,BXPRGL,BXPRGLRF,BXPRI
  1. S BXPN=$O(^XTV(8989.51,"B",BXPAR,"")) I BXPN="" Q
  1. S BXPSOC=$P($G(^XTV(8989.51,BXPN,1)),U,2),BXPAITM(BXPAR)=BXPSOC
  1. D HIST^BXPARUTL(BXPAR,.BXPADT)
  1. S BXN=0
  1. F S BXN=$O(^XTV(8989.51,BXPN,30,BXN)) Q:'BXN D
  1. .S BXPRI=$P(^XTV(8989.51,BXPN,30,BXN,0),U,1),BXPRGL=$P(^XTV(8989.51,BXPN,30,BXN,0),U,2)
  1. .S BXPRDS=$P($G(^XTV(8989.518,BXPRGL,0)),U,2)
  1. .S BXPRGLRF=$$STRIP^XLFSTR($$ROOT^DILFD(BXPRGL,""),"^")
  1. .S BXPAITM(BXPAR,BXPRGLRF)=BXPRI_U_BXPRDS
  1. Q
  1. ;
  1. PARS ;
  1. NEW USER,PRV,RANGE,PAR,BGDT,ENDT,PRI,LEVEL,VALUE,INST,DATE,DRANGE,HPRV,HPAR
  1. S (P,L,ABORT,CT)=0
  1. S RANGE=$$FMTE^XLFDT(BXPABDT,"5Z")_" - "_$$FMTE^XLFDT(BXPAEDT,"5Z")
  1. U IO
  1. I '$D(^TMP("BXPADATA",$J)) D Q
  1. .S PRV=""
  1. .F S PRV=$O(BXPAPRV(PRV)) Q:PRV="" D
  1. ..S HPRV=BXPAPRV(PRV),HPAR=""
  1. ..F S HPAR=$O(BXPAITM(HPAR)) Q:HPAR="" D
  1. ...S PAR=HPAR
  1. ...D HDRM
  1. ...W !,?10,"Not defined in audit log by this date",! S L=L+2
  1. S USER=""
  1. F S USER=$O(^TMP("BXPADATA",$J,USER)) Q:USER="" D I $G(ABORT)=1 Q
  1. .S PRV=^TMP("BXPADATA",$J,USER)
  1. .S PAR=""
  1. .F S PAR=$O(^TMP("BXPADATA",$J,USER,PAR)) Q:PAR="" D W ! S L=L+1 I $G(ABORT)=1 Q
  1. ..NEW HPAR,HPRV
  1. ..S HPAR=PAR_" Parameter Report",HPRV="For provider: "_USER
  1. ..D HDRM I $G(ABORT)=1 Q
  1. ..S INST=""
  1. ..F S INST=$O(^TMP("BXPADATA",$J,USER,PAR,INST)) Q:INST="" D I $G(ABORT)=1 Q
  1. ...S DATE=""
  1. ...F S DATE=$O(^TMP("BXPADATA",$J,USER,PAR,INST,DATE)) Q:(DATE="")!(DATE>BXPAEDT)!(DATE<BXPABDT) D I $G(ABORT)=1 Q
  1. ....S NXDATE=$O(^TMP("BXPADATA",$J,USER,PAR,INST,DATE))
  1. ....S BGDT=$S(DATE'<PBGDT:DATE,1:PBGDT)
  1. ....I $G(ENDT)="" S ENDT=NXDATE S:NXDATE="" ENDT=BXPAEDT
  1. ....; Check if provider is inactive or terminated
  1. ....I $P(^VA(200,PRV,0),U,7)=1 S ENDT=$P($G(^VA(200,PRV,1.1)),U,1)\1
  1. ....I $P(^VA(200,PRV,0),U,11)'="" S ENDT=$P(^VA(200,PRV,0),U,11)
  1. ....I ENDT>DT S ENDT=DT
  1. ....S DRANGE=$$FMTE^XLFDT(BGDT,"5Z")_" - "_$$FMTE^XLFDT(ENDT,"5Z")
  1. ....I ENDT<BXPABDT S DRANGE="User not active"
  1. ....I PAR="ORQQPX COVER SHEET REMINDERS" D Q
  1. ..... S PRI=""
  1. ..... F S PRI=$O(^TMP("BXPADATA",$J,USER,PAR,INST,DATE,PRI),-1) Q:PRI="" D I $G(ABORT)=1 Q
  1. ......S LEVEL=$O(^TMP("BXPADATA",$J,USER,PAR,INST,DATE,PRI,""))
  1. ......S VALUE=$P(^TMP("BXPADATA",$J,USER,PAR,INST,DATE,PRI,LEVEL),U,1)
  1. ......W !,$E(INST,1,35),?40,LEVEL,?45,DRANGE,?70,VALUE S L=L+1
  1. ......I L+4>IOSL D HDRM Q:$G(ABORT)=1
  1. ....S PRI=$O(^TMP("BXPADATA",$J,USER,PAR,INST,DATE,"")) I PRI="" Q
  1. ....S LEVEL=$O(^TMP("BXPADATA",$J,USER,PAR,INST,DATE,PRI,""))
  1. ....S VALUE=$P(^TMP("BXPADATA",$J,USER,PAR,INST,DATE,PRI,LEVEL),U,1)
  1. ....W !,$E(INST,1,35),?40,LEVEL,?45,DRANGE,?70,VALUE S L=L+1
  1. ....K BGDT,ENDT
  1. ....I L+4>IOSL D HDRM Q:$G(ABORT)=1
  1. Q
  1. ;
  1. OUTPUT ;PRINT OUT REPORT
  1. ;N LINE,PAGE,PDATE,EFFDATE,INST,DASH,VALUE
  1. S PDATE=$E(DT,4,5)_"/"_$E(DT,6,7)_"/"_(1700+$E(DT,1,3)) ;TODAY'S DATE IN A PRINTABLE FORMAT
  1. ;S EFFDATE=$E(BXPAEFDT,4,5)_"/"_$E(BXPAEFDT,6,7)_"/"_(1700+$E(BXPAEFDT,1,3)) ;EFFECTIVE DATE IN A PRINTABLE FORMAT
  1. S DASH="",$P(DASH,"-",IOM)="" ;DASHED LINE FOR OUTPUT SEPARATOR
  1. S PAGE=0 ;INITIALIZE REPORT PAGE COUNTER
  1. S IOSL=$S(IOST["C-":IOSL-2,1:IOSL) ;FOR TERMINAL OUTPUT, LEAVE ROOM FOR A 'PAUSE' MESSAGE AT BOTTOM OF SCREEN
  1. S LINE=IOSL ;REPORT LINE COUNTER
  1. Q
  1. ;
  1. HDRM ;EP - HEADER
  1. S DASH="",$P(DASH,"-",IOM)=""
  1. K DIR
  1. S DIR(0)="E"
  1. I $E(IOST,1,2)="C-",P D ^DIR I $G(DIRUT)=1!($G(DTOUT)=1) S ABORT=1 Q
  1. I $E(IOST,1,2)="C-"!P W @IOF
  1. S P=P+1,L=6,PDATE=$E(DT,4,5)_"/"_$E(DT,6,7)_"/"_(1700+$E(DT,1,3))
  1. W !,?55,PDATE_" Page: "_P
  1. W !,?80-$L(HPAR)\2,HPAR
  1. W !,?80-$L(HPRV)\2,HPRV
  1. W !,?80-$L(RANGE)\2,RANGE
  1. D HIS(PAR)
  1. W !,DASH,!
  1. Q
  1. ;
  1. YR ;EP
  1. NEW BXBASE,DIR,DIRUT,DUOUT,Y
  1. W !!,"Enter the Calendar Year for which report is to be run. Use a 4 digit",!,"year, e.g. 2014."
  1. S BXBASE=$O(^BXPA(9002026.01,"B",""))\1,BXPBASE=$E(BXBASE,1,3)_"0000"
  1. S DIR(0)="D^::EP"
  1. S DIR("A")="Select Year"
  1. S DIR("?")="This report is compiled for a period. Enter a valid year."
  1. D ^DIR K DIR
  1. I $D(DIRUT) S BXPAEXIT=1 Q
  1. I $D(DUOUT) S BXPAEXIT=1 Q
  1. I $E(Y,4,7)'="0000" W !!,"Please enter a year only!",! G YR
  1. S BXPYEAR=Y
  1. I $E(BXPYEAR,1,3)<$E(BXPBASE,1,3) W !,"Year cannot be before Baseline date year." G YR
  1. Q
  1. ;
  1. LINEOUT ;OUTPUT A SINGLE LINE OF THE REPORT
  1. S LINE=LINE+1
  1. I LINE>IOSL D ;
  1. .I (IOST["C-"),+PAGE D ;EXECUTE PAUSE MESSAGE WHEN BOTTOM OF SCREEN IS REACHED
  1. ..K DIR
  1. ..S DIR(0)="E" ;END-OF-PAGE
  1. ..D ^DIR
  1. .D HEADER
  1. W $E(INST,1,38),?41,VALUE,!
  1. Q
  1. ;
  1. ;
  1. I +PAGE!(IOST["C-") W @IOF ;SKIP FORM FEED ON FIRST PAGE, IF OUTPUT DEVICE NOT A CRT
  1. S PAGE=PAGE+1
  1. W "PARAMETER SETTINGS FOR",?24,BXPAUNM,?69,PDATE,!
  1. W ?6,"IN EFFECT ON DATE",?24,EFFDATE,?71,"PAGE ",PAGE,!
  1. W !,?5,"PARAMETER",?41,"VALUE",!
  1. W DASH,!
  1. S LINE=6
  1. Q
  1. ;
  1. ;
  1. CLEANUP ;CLEAN PARTITION BEFORE EXITING PROCESS
  1. K BXPAEFDT,BXPAUSER,BXPAUNM,BXPAENT,BXPADATA,DIR
  1. K ^TMP("BXPADATA",$J)
  1. D ^%ZISC
  1. Q
  1. ;
  1. HIS(PAR) ;EP
  1. NEW PDATE,PSTAT,CT,BHDRM
  1. K BGDT,ENDT,PBGDT
  1. S (PDATE,PBGDT)=BXPABDT,CT=0
  1. F S PDATE=$O(BXPADT(PAR,PDATE)) Q:PDATE=""!(PDATE>BXPAEDT) D
  1. .I CT=0 S BHDRM="*Auditing for this parameter was "
  1. .S PSTAT=$O(BXPADT(PAR,PDATE,""),-1),CT=CT+1
  1. .S BHDRM=BHDRM_PSTAT_" on "_$$FMTE^XLFDT(PDATE,"5Z")
  1. .I $O(BXPADT(PAR,PDATE))'="" S BHDRM=BHDRM_" and "
  1. .I PSTAT="DISABLED" S ENDT=PDATE
  1. .I PSTAT="ENABLED" S PBGDT=PDATE
  1. I $G(BHDRM)'="" W "*",!,?80-$L(BHDRM)\2,BHDRM
  1. Q