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

PXRRPRSP.m

Go to the documentation of this file.
  1. PXRRPRSP ;ISL/PKR - Provider encounter summary print. ;6/03/97
  1. ;;1.0;PCE PATIENT CARE ENCOUNTER;**3,10,12,18**;Aug 12, 1996
  1. ;
  1. N BMARG,C1S,C3S,C1HS,C2HS,C3HS,C3HSMAX,DONE,HEAD
  1. N INDENT,MID,MEWPAGE,PAGE,PCLMAX,PNMAX
  1. N CLASSNAM,DATE,DAY,DTOTAL,GTOTAL,HLOC
  1. N FACILITY,FACPNAME,FTOTAL
  1. N PCLASS,PNAME,PPNAME,PTOTAL
  1. N TEMP,VACODE,VIEN
  1. ;
  1. ;Allow the task to be cleaned up upon successful completion.
  1. S ZTREQ="@"
  1. ;
  1. U IO
  1. S DONE=0
  1. ;Setup the formatting parameters.
  1. S PCLMAX=^XTMP(PXRRXTMP,"PCLMAX")
  1. S PNMAX=^XTMP(PXRRXTMP,"PNMAX")
  1. S INDENT=3
  1. S C1HS=INDENT
  1. S C1S=INDENT
  1. S C2HS=C1S+PNMAX+1
  1. S C3HS=C2HS+PCLMAX+3
  1. S C3HS=$$MAX^XLFMTH((C1HS+45),C3HS)
  1. S C3HSMAX=C2HS+38
  1. ;If C3HS>C3HSMAX set it to C3HSMAX+2 and wrap the Person Class entries.
  1. I C3HS>C3HSMAX S C3HS=C3HSMAX+2
  1. ;We assume that the counts will never be longer than six digits.
  1. S MID=C3HS+6
  1. ;
  1. S (HEAD,PAGE)=1
  1. S BMARG=2
  1. S GTOTAL=0
  1. D HDR^PXRRGPRT(PAGE)
  1. W !!,"Criteria for Provider Encounter Summary Report"
  1. D OPRCRIT^PXRRGPRT(3)
  1. ;
  1. SET ;Set up print fields
  1. S FACILITY=0
  1. FAC S FACILITY=$O(^XTMP(PXRRXTMP,FACILITY))
  1. I +FACILITY=0 G FINAL
  1. S FTOTAL=0
  1. ;Mark the facility as being found.
  1. F IC=1:1:NFAC I $P(PXRRFAC(IC),U,1)=FACILITY D Q
  1. . S $P(PXRRFAC(IC),U,4)="M"
  1. S FACPNAME=$P(PXRRFACN(FACILITY),U,1)_" "_$P(PXRRFACN(FACILITY),U,2)
  1. S HEAD=1
  1. D HEAD
  1. ;
  1. S PNAME=0
  1. PRV S PNAME=$O(^XTMP(PXRRXTMP,FACILITY,PNAME))
  1. I PNAME="" D G FAC
  1. . I $Y>(IOSL-BMARG-3) D
  1. .. D PAGE^PXRRGPRT
  1. .. I 'DONE W !!,"Facility: ",FACPNAME
  1. . I 'DONE D
  1. .. S TEMP="Total facility encounters "
  1. .. D PTOTAL^PXRRGPRT(TEMP,FTOTAL,MID,1)
  1. .. S GTOTAL=GTOTAL+FTOTAL
  1. .. I $D(PXRRPECL) D CLASSNE^PXRRGPRT(INDENT)
  1. I DONE G END
  1. S PPNAME=$P(PNAME,U,1)
  1. ;
  1. ;Check for a user request to stop the task.
  1. I $$S^%ZTLOAD S ZTSTOP=1 D EXIT^PXRRGUT
  1. ;
  1. S CLASSNAM=0
  1. CLASS ;
  1. I DONE G END
  1. S CLASSNAM=$O(^XTMP(PXRRXTMP,FACILITY,PNAME,CLASSNAM))
  1. I CLASSNAM="" D G PRV
  1. . K ^TMP(PXRRXTMP,$J,PNAME)
  1. S VACODE=$P(CLASSNAM,U,2)
  1. I $L(VACODE)>0 S PCLASS=$$OCCUP^PXBGPRV("","",VACODE,1)
  1. E S PCLASS=-3
  1. ;If were are doing selected person classes keep track of the ones we
  1. ;found.
  1. I $D(PXRRPECL) S TEMP=$$MATCH^PXRRPECU(PCLASS)
  1. S DATE=0
  1. ;
  1. DATE ;
  1. S DTOTAL=0
  1. S DATE=$O(^XTMP(PXRRXTMP,FACILITY,PNAME,CLASSNAM,DATE))
  1. I DATE="" D G CLASS
  1. .;Print the provider totals.
  1. . D SPRINT(.PTOTAL)
  1. . S FTOTAL=FTOTAL+PTOTAL
  1. I DONE G END
  1. ;
  1. S HLOC=0
  1. HLO S HLOC=$O(^XTMP(PXRRXTMP,FACILITY,PNAME,CLASSNAM,DATE,HLOC))
  1. I HLOC="" G DATE
  1. ;
  1. ;Build a ^TMP array of all the visits for the current provider.
  1. S DAY=$P(DATE,".",1)
  1. S VIEN=0
  1. F S VIEN=$O(^XTMP(PXRRXTMP,FACILITY,PNAME,CLASSNAM,DATE,HLOC,VIEN)) Q:+VIEN=0 D
  1. . S ^TMP(PXRRXTMP,$J,PNAME,DAY,HLOC,VIEN)=""
  1. ;
  1. G HLO
  1. ;
  1. FINAL ;Print grand totals
  1. S TEMP="Total encounters "
  1. I $Y>(IOSL-BMARG-3) D
  1. . D PAGE^PXRRGPRT
  1. . I 'DONE W !
  1. I 'DONE D
  1. . D PTOTAL^PXRRGPRT(TEMP,GTOTAL,MID,0)
  1. . D FACNE^PXRRGPRT(INDENT)
  1. END ;
  1. D EXIT^PXRRGUT
  1. D EOR^PXRRGUT
  1. Q
  1. ;
  1. ;=======================================================================
  1. FMTPCL(PCL,START,END,PCL1,PCL2) ;Format the abbreviated Person Class, PCL so
  1. ;that it fits between START and END. If it is too long break it into
  1. ;two lines, PCL1 and PCL2.
  1. N LBC,LEN,LPLUS,LSPACE,MAXLEN
  1. S MAXLEN=END-START
  1. S LEN=$L(PCL)
  1. I LEN'>MAXLEN D Q
  1. . S PCL1="("_PCL_")"
  1. ;PCL is too long to fit on one line find a plus or a space to make the
  1. ;break.
  1. S LSPACE=$$LASTCHAR(PCL," ",MAXLEN)
  1. S LPLUS=$$LASTCHAR(PCL,"+",MAXLEN)
  1. S LBC=$$MAX^XLFMTH(LPLUS,LSPACE)
  1. S PCL1="("_$E(PCL,1,LBC)
  1. S PCL2=" "_$E(PCL,LBC+1,LEN)_")"
  1. Q
  1. ;
  1. ;=======================================================================
  1. I HEAD D
  1. . I $Y>(IOSL-BMARG-7) D PAGE^PXRRGPRT
  1. . I DONE Q
  1. . W !!,"Facility: ",FACPNAME
  1. . W !!,?(C1HS+20),"Person Class"
  1. . W !,?C1HS,"Provider (Occupation+Specialty+Subspecialty)",?C3HS,"Encounters"
  1. . W !,?C1HS,"--------------------------------------------",?C3HS,"----------"
  1. . S HEAD=0
  1. Q
  1. ;
  1. ;=======================================================================
  1. LASTCHAR(STRING,CHAR,MAX) ;Return the position of the last character, CHAR, in
  1. ;STRING ensuring that it is less than MAX.
  1. ;Return 0 if there are none.
  1. N IC0,IC1
  1. S IC0=$F(STRING,CHAR)
  1. I IC0=0 Q 0
  1. F S IC1=$F(STRING,CHAR,IC0) Q:(IC1=0)!(IC1>MAX) D
  1. . S IC0=IC1
  1. Q IC0-1
  1. ;
  1. ;=======================================================================
  1. SPRINT(PTOTAL) ;Print the provider total and return the total.
  1. N DAY,END,HLOC,PCL1,PCL2,TEMP,VACODE,VIEN
  1. S PTOTAL=0
  1. S DAY=0
  1. NDAY S DAY=$O(^TMP(PXRRXTMP,$J,PNAME,DAY))
  1. I DAY="" D Q
  1. .;No more DAYs to sum over print the total.
  1. . I $Y>(IOSL-BMARG-1) D
  1. .. D PAGE^PXRRGPRT
  1. .. D HEAD
  1. . I 'DONE D
  1. .. S C3S=MID-$L(PTOTAL)
  1. .. S VACODE=$P(CLASSNAM,U,2)
  1. .. S TEMP=$$ABBRV^PXRRPECU(VACODE)
  1. .. D FMTPCL(TEMP,C2HS,C3HSMAX,.PCL1,.PCL2)
  1. .. W !,?C1S,PPNAME,?C2HS,PCL1,?C3S,PTOTAL
  1. .. I $D(PCL2) W !,?C2HS,PCL2
  1. I DONE Q
  1. ;
  1. S HLOC=""
  1. NHLOC S HLOC=$O(^TMP(PXRRXTMP,$J,PNAME,DAY,HLOC))
  1. I HLOC="" G NDAY
  1. ;
  1. S VIEN=0
  1. NVIEN S VIEN=$O(^TMP(PXRRXTMP,$J,PNAME,DAY,HLOC,VIEN))
  1. I VIEN="" G NHLOC
  1. S PTOTAL=PTOTAL+1
  1. G NVIEN
  1. ;