SCRPW56 ;RENO/KEITH - Most Frequent 50 CPT Codes (OP6) or (IP6) ;06/22/99
 ;;5.3;Scheduling;**144,180,466**;AUG 13, 1993;Build 2
 ;06/22/99 ACS - Added CPT modifier API calls
 ;
 S SDSTA=$G(SDSTA,2)
 D RQUE^SCRPW50("START^SCRPW56","Most Frequent 50 CPT Codes "_$S(SDSTA=2:"(OP6)",1:"(IP6)"),1) Q
 ;
START ;Print report
 K ^TMP("SCRPW",$J) S (SDSTOP,SDOUT)=0,SDT=SD("FYD")
 F  S SDT=$O(^SCE("B",SDT)) Q:'SDT!SDOUT!(SDT>SD("EDT"))  S SDOE=0 F  S SDOE=$O(^SCE("B",SDT,SDOE)) Q:'SDOE!SDOUT  S SDOE0=$$GETOE^SDOE(SDOE),SDIV=$P(SDOE0,U,11) I $$VALID() D SET(SDIV) D:SDMD SET(0)
 G:SDOUT EXIT S (SDVCT,SDIV)=""
 F  S SDIV=$O(^TMP("SCRPW",$J,SDIV)) Q:SDIV=""!SDOUT  D STOP,DLIST S SDCPT="" F  S SDCPT=$O(^TMP("SCRPW",$J,SDIV,0,SDCPT)) Q:SDCPT=""!SDOUT  S SDI=^TMP("SCRPW",$J,SDIV,0,SDCPT),^TMP("SCRPW",$J,SDIV,1,SDI,SDCPT)=""
 G:SDOUT EXIT S SDLINE="",$P(SDLINE,"-",(IOM+1))="" D NOW^%DTC S Y=% X ^DD("DD") S SDPNOW=$P(Y,":",1,2),SDTIT(1)="<*>  MOST FREQUENT 50 CPT CODES "_$S(SDSTA=2:"(OP6)",1:"(IP6)")_"  <*>",SDPG=0 D:$E(IOST)="C" DISP0^SCRPW23
 I '$D(^TMP("SCRPW",$J)) S SDPAGE=1,SDX="No activity found within report parameters." D HDR G:SDOUT EXIT W !!?(IOM-$L(SDX)\2),SDX G EXIT
 G:SDOUT EXIT S SDIVN="" F  S SDIVN=$O(SDIV(SDIVN)) Q:SDIVN=""!SDOUT  D DPRT(SDIV(SDIVN))
 G:SDOUT EXIT D:SDVCT>1 DPRT(0)
EXIT I $E(IOST)="C",'SDOUT N DIR S DIR(0)="E" D ^DIR
 K ^TMP("SCRPW",$J),%,%H,%I,DIR,SD,SDCPT,SDDIV,SDFL,SDI,SDII,SDIII,SDIV,SDIVN,SDLINE,SDMD,SDOE,SDOE0,SDOUT,SDPAGE,SDPG,SDPNOW,SDPROC,SDPRTY,SDPT,SDPTN,SDQTY,SDSTOP,SDT,SDTIT,SDV,SDVCT,SDX,X,Y Q
 ;
DPRT(SDV) ;Print division
 ;Required input: SDV=division ifn or '0' for combined divisions
 I SDV S SDTIT(2)="For "_$S(SDDIV["DIVISIONS":"division",1:"facility")_": "_SDIVN
 I 'SDV S SDTIT(2)="Report for: "_$P(SDDIV,U,2) D
 .S SDI=2,SDIVN="" F  S SDIVN=$O(SDIV(SDIVN)) Q:SDIVN=""  S SDI=SDI+1,SDTIT(SDI)=$J("Division: ",$L(SDIVN))_SDIVN
 .Q
 S SDPAGE=1 D HDR Q:SDOUT  S (SDI,SDII)="" F  S SDI=$O(^TMP("SCRPW",$J,SDV,1,SDI),-1) Q:SDI=""!SDOUT!(SDII>49)  S SDCPT="" F  S SDCPT=$O(^TMP("SCRPW",$J,SDV,1,SDI,SDCPT)) Q:SDCPT=""!SDOUT!(SDII>49)  D PLINE
 Q
 ;
PLINE ;Print output line
 D:$Y>(IOSL-8) HDR Q:SDOUT  D HD1
 ;S SDPROC=$G(^ICPT(SDCPT,0)),SDPROC=$P(SDPROC,U)_"  "_$P(SDPROC,U,2),SDII=SDII+1
 N CPTINFO,CPTCODE,CPTTEXT
 S CPTINFO=$$CPT^ICPTCOD(SDCPT,,1)
 Q:CPTINFO'>0
 S CPTCODE=$P(CPTINFO,"^",2)
 S CPTTEXT=$P(CPTINFO,"^",3)
 S SDPROC=CPTCODE_" "_CPTTEXT
 S SDII=SDII+1
 W !?7,$J(SDII,3),?13,SDPROC,?50,$J(SDI,10,0) D  W !
 .S (SDFL,SDPT)="" F  S SDPT=$O(^TMP("SCRPW",$J,SDV,0,SDCPT,SDPT)) Q:SDPT=""!SDOUT  D
 ..I $Y>(IOSL-3) D HDR,HD1 Q:SDOUT  S SDFL=1
 ..S SDPTN=$$CODE2TXT^XUA4A72(SDPT),SDPTN=$P(SDPT,"V",2)_"  "_$P(SDPTN,U,2)
 ..W:SDFL ! W ?62,$E(SDPTN,1,50),?114,$J(^TMP("SCRPW",$J,SDV,0,SDCPT,SDPT),10,0) S SDFL=SDFL+1
 ..Q
 .Q
 Q
 ;
HDR ;Print header
 I $E(IOST)="C",SDPG N DIR S DIR(0)="E" W ! D ^DIR S SDOUT=Y'=1 Q:SDOUT
 D STOP Q:SDOUT  W:SDPG!($E(IOST)="C") $$XY^SCRPW50(IOF,1,0) W:$X $$XY^SCRPW50("",0,0)
 N SDI S SDI=0 W SDLINE F  S SDI=$O(SDTIT(SDI)) Q:'SDI  W !?(IOM-$L(SDTIT(SDI))\2),SDTIT(SDI)
 W !,SDLINE,!,"For Fiscal Year activity through ",SD("PEDT"),!,"Date printed: ",SDPNOW,?(IOM-6-$L(SDPAGE)),"Page: ",SDPAGE,!,SDLINE S SDPAGE=SDPAGE+1,SDPG=1 Q
 ;
HD1 ;Print subheader
 Q:SDOUT  W !?52,"CPT Code",?114,"Prov. Type",!?7,"Rank",?13,"CPT Code",?51,"Frequency",?62,"Provider Type",?115,"Frequency"
 W !?7,"----",?13,$E(SDLINE,1,35),?50,$E(SDLINE,1,10),?62,$E(SDLINE,1,50),?114,$E(SDLINE,1,10) Q
 ;
DLIST ;Create alphabetic list of divisions found
 Q:'SDIV  S SDX=$P($G(^DG(40.8,SDIV,0)),U) S:'$L(SDX) SDX="*** UNKNOWN ***" S SDIV(SDX)=SDIV,SDVCT=SDVCT+1 Q
 ;
VALID() ;Check encounter record
 I $P(SDOE0,U,4),$P($G(^SC($P(SDOE0,U,4),0)),U,17)="Y" Q 0
 I SDIV,$$DIV(),$P(SDOE0,U,2),'$P(SDOE0,U,6),$P(SDOE0,U,7),$P(SDOE0,U,12)=SDSTA Q 1
 Q 0
 ;
DIV() ;Check division
 Q:'SDDIV 1  Q $D(SDDIV(SDIV))
 ;
STOP ;Check for stop task request
 S:$D(ZTQUEUED) (SDOUT,ZTSTOP)=$S($$S^%ZTLOAD:1,1:0) Q
 ;
SET(SDIV) ;Set division lists
 ;Required input: SDIV=division ifn or '0' for summary
 S SDSTOP=SDSTOP+1 I SDSTOP#2000=0 D STOP^SCRPW40 Q:SDOUT
 N SDPROC,SDPRTY,SDI,SDII,SDIII,SDX
 D GETCPT^SDOE(SDOE,"SDPROC"),PROV^SCRPW50(SDOE,.SDPRTY)
 S SDI=0 F  S SDI=$O(SDPROC(SDI)) Q:'SDI  S SDCPT=$P(SDPROC(SDI),U),SDQTY=$P(SDPROC(SDI),U,16) S:'SDQTY SDQTY=1 I SDCPT D
 .S ^TMP("SCRPW",$J,SDIV,0,SDCPT)=$G(^TMP("SCRPW",$J,SDIV,0,SDCPT))+SDQTY
 .S SDII=0 F  S SDII=$O(SDPRTY(SDII)) Q:'SDII  S SDX=SDPRTY(SDII) I $L(SDX) D
 ..S ^TMP("SCRPW",$J,SDIV,0,SDCPT,SDX)=$G(^TMP("SCRPW",$J,SDIV,0,SDCPT,SDX))+1
 ..Q
 .Q
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSCRPW56   4648     printed  Sep 23, 2025@20:20:15                                                                                                                                                                                                     Page 2
SCRPW56   ;RENO/KEITH - Most Frequent 50 CPT Codes (OP6) or (IP6) ;06/22/99
 +1       ;;5.3;Scheduling;**144,180,466**;AUG 13, 1993;Build 2
 +2       ;06/22/99 ACS - Added CPT modifier API calls
 +3       ;
 +4        SET SDSTA=$GET(SDSTA,2)
 +5        DO RQUE^SCRPW50("START^SCRPW56","Most Frequent 50 CPT Codes "_$SELECT(SDSTA=2:"(OP6)",1:"(IP6)"),1)
           QUIT 
 +6       ;
START     ;Print report
 +1        KILL ^TMP("SCRPW",$JOB)
           SET (SDSTOP,SDOUT)=0
           SET SDT=SD("FYD")
 +2        FOR 
               SET SDT=$ORDER(^SCE("B",SDT))
               if 'SDT!SDOUT!(SDT>SD("EDT"))
                   QUIT 
               SET SDOE=0
               FOR 
                   SET SDOE=$ORDER(^SCE("B",SDT,SDOE))
                   if 'SDOE!SDOUT
                       QUIT 
                   SET SDOE0=$$GETOE^SDOE(SDOE)
                   SET SDIV=$PIECE(SDOE0,U,11)
                   IF $$VALID()
                       DO SET(SDIV)
                       if SDMD
                           DO SET(0)
 +3        if SDOUT
               GOTO EXIT
           SET (SDVCT,SDIV)=""
 +4        FOR 
               SET SDIV=$ORDER(^TMP("SCRPW",$JOB,SDIV))
               if SDIV=""!SDOUT
                   QUIT 
               DO STOP
               DO DLIST
               SET SDCPT=""
               FOR 
                   SET SDCPT=$ORDER(^TMP("SCRPW",$JOB,SDIV,0,SDCPT))
                   if SDCPT=""!SDOUT
                       QUIT 
                   SET SDI=^TMP("SCRPW",$JOB,SDIV,0,SDCPT)
                   SET ^TMP("SCRPW",$JOB,SDIV,1,SDI,SDCPT)=""
 +5        if SDOUT
               GOTO EXIT
           SET SDLINE=""
           SET $PIECE(SDLINE,"-",(IOM+1))=""
           DO NOW^%DTC
           SET Y=%
           XECUTE ^DD("DD")
           SET SDPNOW=$PIECE(Y,":",1,2)
           SET SDTIT(1)="<*>  MOST FREQUENT 50 CPT CODES "_$SELECT(SDSTA=2:"(OP6)",1:"(IP6)")_"  <*>"
           SET SDPG=0
           if $EXTRACT(IOST)="C"
               DO DISP0^SCRPW23
 +6        IF '$DATA(^TMP("SCRPW",$JOB))
               SET SDPAGE=1
               SET SDX="No activity found within report parameters."
               DO HDR
               if SDOUT
                   GOTO EXIT
               WRITE !!?(IOM-$LENGTH(SDX)\2),SDX
               GOTO EXIT
 +7        if SDOUT
               GOTO EXIT
           SET SDIVN=""
           FOR 
               SET SDIVN=$ORDER(SDIV(SDIVN))
               if SDIVN=""!SDOUT
                   QUIT 
               DO DPRT(SDIV(SDIVN))
 +8        if SDOUT
               GOTO EXIT
           if SDVCT>1
               DO DPRT(0)
EXIT       IF $EXTRACT(IOST)="C"
               IF 'SDOUT
                   NEW DIR
                   SET DIR(0)="E"
                   DO ^DIR
 +1        KILL ^TMP("SCRPW",$JOB),%,%H,%I,DIR,SD,SDCPT,SDDIV,SDFL,SDI,SDII,SDIII,SDIV,SDIVN,SDLINE,SDMD,SDOE,SDOE0,SDOUT,SDPAGE,SDPG,SDPNOW,SDPROC,SDPRTY,SDPT,SDPTN,SDQTY,SDSTOP,SDT,SDTIT,SDV,SDVCT,SDX,X,Y
           QUIT 
 +2       ;
DPRT(SDV) ;Print division
 +1       ;Required input: SDV=division ifn or '0' for combined divisions
 +2        IF SDV
               SET SDTIT(2)="For "_$SELECT(SDDIV["DIVISIONS":"division",1:"facility")_": "_SDIVN
 +3        IF 'SDV
               SET SDTIT(2)="Report for: "_$PIECE(SDDIV,U,2)
               Begin DoDot:1
 +4                SET SDI=2
                   SET SDIVN=""
                   FOR 
                       SET SDIVN=$ORDER(SDIV(SDIVN))
                       if SDIVN=""
                           QUIT 
                       SET SDI=SDI+1
                       SET SDTIT(SDI)=$JUSTIFY("Division: ",$LENGTH(SDIVN))_SDIVN
 +5                QUIT 
               End DoDot:1
 +6        SET SDPAGE=1
           DO HDR
           if SDOUT
               QUIT 
           SET (SDI,SDII)=""
           FOR 
               SET SDI=$ORDER(^TMP("SCRPW",$JOB,SDV,1,SDI),-1)
               if SDI=""!SDOUT!(SDII>49)
                   QUIT 
               SET SDCPT=""
               FOR 
                   SET SDCPT=$ORDER(^TMP("SCRPW",$JOB,SDV,1,SDI,SDCPT))
                   if SDCPT=""!SDOUT!(SDII>49)
                       QUIT 
                   DO PLINE
 +7        QUIT 
 +8       ;
PLINE     ;Print output line
 +1        if $Y>(IOSL-8)
               DO HDR
           if SDOUT
               QUIT 
           DO HD1
 +2       ;S SDPROC=$G(^ICPT(SDCPT,0)),SDPROC=$P(SDPROC,U)_"  "_$P(SDPROC,U,2),SDII=SDII+1
 +3        NEW CPTINFO,CPTCODE,CPTTEXT
 +4        SET CPTINFO=$$CPT^ICPTCOD(SDCPT,,1)
 +5        if CPTINFO'>0
               QUIT 
 +6        SET CPTCODE=$PIECE(CPTINFO,"^",2)
 +7        SET CPTTEXT=$PIECE(CPTINFO,"^",3)
 +8        SET SDPROC=CPTCODE_" "_CPTTEXT
 +9        SET SDII=SDII+1
 +10       WRITE !?7,$JUSTIFY(SDII,3),?13,SDPROC,?50,$JUSTIFY(SDI,10,0)
           Begin DoDot:1
 +11           SET (SDFL,SDPT)=""
               FOR 
                   SET SDPT=$ORDER(^TMP("SCRPW",$JOB,SDV,0,SDCPT,SDPT))
                   if SDPT=""!SDOUT
                       QUIT 
                   Begin DoDot:2
 +12                   IF $Y>(IOSL-3)
                           DO HDR
                           DO HD1
                           if SDOUT
                               QUIT 
                           SET SDFL=1
 +13                   SET SDPTN=$$CODE2TXT^XUA4A72(SDPT)
                       SET SDPTN=$PIECE(SDPT,"V",2)_"  "_$PIECE(SDPTN,U,2)
 +14                   if SDFL
                           WRITE !
                       WRITE ?62,$EXTRACT(SDPTN,1,50),?114,$JUSTIFY(^TMP("SCRPW",$JOB,SDV,0,SDCPT,SDPT),10,0)
                       SET SDFL=SDFL+1
 +15                   QUIT 
                   End DoDot:2
 +16           QUIT 
           End DoDot:1
           WRITE !
 +17       QUIT 
 +18      ;
HDR       ;Print header
 +1        IF $EXTRACT(IOST)="C"
               IF SDPG
                   NEW DIR
                   SET DIR(0)="E"
                   WRITE !
                   DO ^DIR
                   SET SDOUT=Y'=1
                   if SDOUT
                       QUIT 
 +2        DO STOP
           if SDOUT
               QUIT 
           if SDPG!($EXTRACT(IOST)="C")
               WRITE $$XY^SCRPW50(IOF,1,0)
           if $X
               WRITE $$XY^SCRPW50("",0,0)
 +3        NEW SDI
           SET SDI=0
           WRITE SDLINE
           FOR 
               SET SDI=$ORDER(SDTIT(SDI))
               if 'SDI
                   QUIT 
               WRITE !?(IOM-$LENGTH(SDTIT(SDI))\2),SDTIT(SDI)
 +4        WRITE !,SDLINE,!,"For Fiscal Year activity through ",SD("PEDT"),!,"Date printed: ",SDPNOW,?(IOM-6-$LENGTH(SDPAGE)),"Page: ",SDPAGE,!,SDLINE
           SET SDPAGE=SDPAGE+1
           SET SDPG=1
           QUIT 
 +5       ;
HD1       ;Print subheader
 +1        if SDOUT
               QUIT 
           WRITE !?52,"CPT Code",?114,"Prov. Type",!?7,"Rank",?13,"CPT Code",?51,"Frequency",?62,"Provider Type",?115,"Frequency"
 +2        WRITE !?7,"----",?13,$EXTRACT(SDLINE,1,35),?50,$EXTRACT(SDLINE,1,10),?62,$EXTRACT(SDLINE,1,50),?114,$EXTRACT(SDLINE,1,10)
           QUIT 
 +3       ;
DLIST     ;Create alphabetic list of divisions found
 +1        if 'SDIV
               QUIT 
           SET SDX=$PIECE($GET(^DG(40.8,SDIV,0)),U)
           if '$LENGTH(SDX)
               SET SDX="*** UNKNOWN ***"
           SET SDIV(SDX)=SDIV
           SET SDVCT=SDVCT+1
           QUIT 
 +2       ;
VALID()   ;Check encounter record
 +1        IF $PIECE(SDOE0,U,4)
               IF $PIECE($GET(^SC($PIECE(SDOE0,U,4),0)),U,17)="Y"
                   QUIT 0
 +2        IF SDIV
               IF $$DIV()
                   IF $PIECE(SDOE0,U,2)
                       IF '$PIECE(SDOE0,U,6)
                           IF $PIECE(SDOE0,U,7)
                               IF $PIECE(SDOE0,U,12)=SDSTA
                                   QUIT 1
 +3        QUIT 0
 +4       ;
DIV()     ;Check division
 +1        if 'SDDIV
               QUIT 1
           QUIT $DATA(SDDIV(SDIV))
 +2       ;
STOP      ;Check for stop task request
 +1        if $DATA(ZTQUEUED)
               SET (SDOUT,ZTSTOP)=$SELECT($$S^%ZTLOAD:1,1:0)
           QUIT 
 +2       ;
SET(SDIV) ;Set division lists
 +1       ;Required input: SDIV=division ifn or '0' for summary
 +2        SET SDSTOP=SDSTOP+1
           IF SDSTOP#2000=0
               DO STOP^SCRPW40
               if SDOUT
                   QUIT 
 +3        NEW SDPROC,SDPRTY,SDI,SDII,SDIII,SDX
 +4        DO GETCPT^SDOE(SDOE,"SDPROC")
           DO PROV^SCRPW50(SDOE,.SDPRTY)
 +5        SET SDI=0
           FOR 
               SET SDI=$ORDER(SDPROC(SDI))
               if 'SDI
                   QUIT 
               SET SDCPT=$PIECE(SDPROC(SDI),U)
               SET SDQTY=$PIECE(SDPROC(SDI),U,16)
               if 'SDQTY
                   SET SDQTY=1
               IF SDCPT
                   Begin DoDot:1
 +6                    SET ^TMP("SCRPW",$JOB,SDIV,0,SDCPT)=$GET(^TMP("SCRPW",$JOB,SDIV,0,SDCPT))+SDQTY
 +7                    SET SDII=0
                       FOR 
                           SET SDII=$ORDER(SDPRTY(SDII))
                           if 'SDII
                               QUIT 
                           SET SDX=SDPRTY(SDII)
                           IF $LENGTH(SDX)
                               Begin DoDot:2
 +8                                SET ^TMP("SCRPW",$JOB,SDIV,0,SDCPT,SDX)=$GET(^TMP("SCRPW",$JOB,SDIV,0,SDCPT,SDX))+1
 +9                                QUIT 
                               End DoDot:2
 +10                   QUIT 
                   End DoDot:1
 +11       QUIT