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