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

APSPCSM1.m

Go to the documentation of this file.
  1. APSPCSM1 ; IHS/MSC/PLS - CONTROLLED SUBSTANCE MANAGEMENT REPORT ;13-Aug-2013 09:25;PLS
  1. ;;7.0;IHS PHARMACY MODIFICATIONS;**1007,1011,1013,1015,1016**;Sep 23, 2004;Build 74
  1. ;=====================================================================
  1. ;IHS/MSC/MGH Added column for fills in CMOP
  1. ;
  1. Q
  1. PRINT ;EP
  1. N APSPPG,DFLG,NEWPG
  1. S (APSPPG,DFLG,NEWPG)=0
  1. I APSPXML D
  1. .D HDRXML
  1. .D PRINT1
  1. .W !,$$TAG("Dispenses",1)
  1. .W !,$$TAG("Report",1)
  1. E D
  1. .D HDR
  1. .D PRINT1
  1. .W:'DFLG !,"No data found..."
  1. Q
  1. ;
  1. PRINT1 ;EP
  1. N DIV,SUB1,SUB2,SUB3,SUB4,SUB5,VAL,LP,LSTFDT
  1. S LSTFDT=0
  1. I APSPXML W !,$$TAG("PharmacyDivisions",0)
  1. S DIV=0 F S DIV=$O(^TMP($J,"XREF",DIV)) Q:'DIV D
  1. .I APSPDIV="*",'APSPXML W !!!,"Pharmacy Division: "_$$GET1^DIQ(59,DIV,.01),! ;W !,"|"_$$GET1^DIQ(59,DIV,.01)_"|" D PRINT3
  1. .I APSPRTYP=1 D ; Summary report
  1. ..W:APSPXML !,$$TAG("PharmacyDivision",0)
  1. ..W:APSPXML !,$$TAG("DivisionName",2,$$GET1^DIQ(59,DIV,.01))
  1. ..I APSPSORT=2 D ; Fill Date/Drug Name
  1. ...S SUB1=0 F S SUB1=$O(^TMP($J,"XREF",DIV,"S-FDT",SUB1)) Q:'SUB1 D
  1. ....S SUB2="" F S SUB2=$O(^TMP($J,"XREF",DIV,"S-FDT",SUB1,SUB2)) Q:'$L(SUB2) D
  1. .....S SUB3="" F S SUB3=$O(^TMP($J,"XREF",DIV,"S-FDT",SUB1,SUB2,SUB3)) Q:'SUB3 D
  1. ......D STATS^APSPCSM(^TMP($J,"DATA",SUB3))
  1. .....D PRINTSUM(APSPSORT,SUB2,.STATS,SUB1)
  1. .....K STATS
  1. .....S DFLG=1
  1. ....W !
  1. ..E D ; Drug Name
  1. ...S SUB1="" F S SUB1=$O(^TMP($J,"XREF",DIV,"S-DRUG",SUB1)) Q:'$L(SUB1) D
  1. ....S SUB2=0 F S SUB2=$O(^TMP($J,"XREF",DIV,"S-DRUG",SUB1,SUB2)) Q:'SUB2 D
  1. .....D STATS^APSPCSM(^TMP($J,"DATA",SUB2))
  1. ....D PRINTSUM(APSPSORT,SUB1,.STATS)
  1. ....K STATS
  1. ....S DFLG=1
  1. ..W:APSPXML !,$$TAG("PharmacyDivision",1)
  1. .E D ; Detailed report
  1. ..I APSPXML D
  1. ...W !,$$TAG("PharmacyDivision",0)
  1. ...W !,$$TAG("DivisionName",2,$$GET1^DIQ(59,DIV,.01))
  1. ..I APSPSORT=1 D ; Drug Name
  1. ...S SUB1="" F S SUB1=$O(^TMP($J,"XREF",DIV,"DRUG",SUB1)) Q:SUB1="" D ; Drug Name
  1. ....S SUB2=0 F S SUB2=$O(^TMP($J,"XREF",DIV,"DRUG",SUB1,SUB2)) Q:'SUB2 D ; Fill Date
  1. .....S SUB3=0 F S SUB3=$O(^TMP($J,"XREF",DIV,"DRUG",SUB1,SUB2,SUB3)) Q:'SUB3 D ; Data node
  1. ......D PRINT2(^TMP($J,"DATA",SUB3))
  1. ......S DFLG=1
  1. ..I APSPSORT=2 D ; Fill Date
  1. ...S SUB1=0 F S SUB1=$O(^TMP($J,"XREF",DIV,"FDT",SUB1)) Q:'SUB1 D ; Fill Date
  1. ....S SUB2="" F S SUB2=$O(^TMP($J,"XREF",DIV,"FDT",SUB1,SUB2)) Q:SUB2="" D ; Drug Name
  1. .....S SUB3=0 F S SUB3=$O(^TMP($J,"XREF",DIV,"FDT",SUB1,SUB2,SUB3)) Q:'SUB3 D ; Data node
  1. ......D PRINT2(^TMP($J,"DATA",SUB3))
  1. ......S DFLG=1
  1. ..I APSPSORT=3 D ; Drug Class
  1. ...S SUB1="" F S SUB1=$O(^TMP($J,"XREF",DIV,"DCLS",SUB1)) Q:'$L(SUB1) D ; Drug Class
  1. ....S SUB2="" F S SUB2=$O(^TMP($J,"XREF",DIV,"DCLS",SUB1,SUB2)) Q:'$L(SUB2) D ; Drug Name
  1. .....S SUB3=0 F S SUB3=$O(^TMP($J,"XREF",DIV,"DCLS",SUB1,SUB2,SUB3)) Q:'SUB3 D ; Fill Date
  1. ......S SUB4=0 F S SUB4=$O(^TMP($J,"XREF",DIV,"DCLS",SUB1,SUB2,SUB3,SUB4)) Q:'SUB4 D ; Data node
  1. .......D PRINT2(^TMP($J,"DATA",SUB4))
  1. .......S DFLG=1
  1. ..I APSPSORT=4 D ; Patient Name
  1. ...S SUB1="" F S SUB1=$O(^TMP($J,"XREF",DIV,"PAT",SUB1)) Q:'$L(SUB1) D ; Patient Name
  1. ....S SUB2=0 F S SUB2=$O(^TMP($J,"XREF",DIV,"PAT",SUB1,SUB2)) Q:'SUB2 D ; Fill Date
  1. .....S SUB3="" F S SUB3=$O(^TMP($J,"XREF",DIV,"PAT",SUB1,SUB2,SUB3)) Q:'$L(SUB3) D ; Drug Name
  1. ......S SUB4=0 F S SUB4=$O(^TMP($J,"XREF",DIV,"PAT",SUB1,SUB2,SUB3,SUB4)) Q:'SUB4 D ; Data node
  1. .......D PRINT2(^TMP($J,"DATA",SUB4))
  1. .......S DFLG=1
  1. ..I APSPSORT=5 D ; Provider
  1. ...S SUB1="" F S SUB1=$O(^TMP($J,"XREF",DIV,"PRV",SUB1)) Q:'$L(SUB1) D ; Provider
  1. ....S SUB2="" F S SUB2=$O(^TMP($J,"XREF",DIV,"PRV",SUB1,SUB2)) Q:'$L(SUB2) D ; Drug Name
  1. .....S SUB3=0 F S SUB3=$O(^TMP($J,"XREF",DIV,"PRV",SUB1,SUB2,SUB3)) Q:'SUB3 D ; Fill Date
  1. ......S SUB4=0 F S SUB4=$O(^TMP($J,"XREF",DIV,"PRV",SUB1,SUB2,SUB3,SUB4)) Q:'SUB4 D ; Data node
  1. .......D PRINT2(^TMP($J,"DATA",SUB4))
  1. .......S DFLG=1
  1. ...I APSPDET,APSPPRV'="*" D PRTDSUM
  1. ..W:APSPXML !,$$TAG("PharmacyDivision",1)
  1. .D:APSPDET PRTDSUM
  1. .K STATS
  1. D:APSPDET PRTRTOT
  1. I APSPXML W !,$$TAG("PharmacyDivisions",1)
  1. Q
  1. ; Print Summary report line
  1. PRINTSUM(RPTTYP,DRGNM,STATS,FDT) ;EP -
  1. N DAT
  1. S DAT=$G(STATS("DRUGN",DRGNM))
  1. I APSPXML D
  1. .W !,$$TAG("DispenseSummary")
  1. .W:$G(FDT) !,$$TAG("FillDate",2,$P($TR($$FMTE^XLFDT(FDT,"5Z"),"@"," "),":",1,2))
  1. .;W !,$$TAG("DrugName",2,DRGNM)
  1. .W !,$$TAG("DrugName",2,$P(DAT,U,3)) ;P1013
  1. .;W !,$$TAG("RXCnt",2,$J(STATS("RXCNT"),6))
  1. .W !,$$TAG("FillCnt",2,$J(STATS("FILLS"),6))
  1. .W !,$$TAG("UnitType",2,$P(DAT,U,2))
  1. .W !,$$TAG("TotalUnits",2,$J(+$G(STATS("DRUG",+DAT)),8))
  1. .;W !,$$TAG("AvgUnitsDispPerRX",2,$J(+$G(STATS("DRUG",+DAT))\STATS("RXCNT"),6,1))
  1. .W !,$$TAG("AvgUnitsDispPerFill",2,$J(+$G(STATS("DRUG",+DAT))\STATS("FILLS"),6,1))
  1. .W !,$$TAG("DispenseSummary",1)
  1. E D
  1. .I $G(FDT),((FDT'=LSTFDT)!NEWPG) D
  1. ..W "Fill Date ",$$FMTE^XLFDT(FDT,"5Z"),!
  1. ..S LSTFDT=FDT
  1. .;W DRGNM,?44,$J(STATS("RXCNT"),6),?51,$P(DAT,U,2),?63,$J(+$G(STATS("DRUG",+DAT)),8),?73,$J(+$G(STATS("DRUG",+DAT))\STATS("RXCNT"),6,1),!
  1. .;W DRGNM,?44,$J(STATS("FILLS"),6),?51,$P(DAT,U,2),?63,$J(+$G(STATS("DRUG",+DAT)),8),?73,$J(+$G(STATS("DRUG",+DAT))\STATS("FILLS"),6,1),!
  1. .;W DRGNM,?44,$E($P(DAT,U,2),1,10),?55,$J(STATS("FILLS"),6),?62,$J(+$G(STATS("DRUG",+DAT)),8),?74,$J(+$G(STATS("DRUG",+DAT))\STATS("FILLS"),6,1),?90,!
  1. .W $P(DAT,U,3),?44,$E($P(DAT,U,2),1,10),?55,$J(STATS("FILLS"),6),?62,$J(+$G(STATS("DRUG",+DAT)),8),?74,$J(+$G(STATS("DRUG",+DAT))\STATS("FILLS"),6,1),!
  1. .S NEWPG=0
  1. .D PRINT3 ; check page length
  1. Q
  1. ; Output summary for detail report
  1. PRTDSUM ; EP -
  1. N DRUGN,RX,RXCNT
  1. Q:'APSPETOT ; User didn't ask for totals
  1. I APSPXML D
  1. .W !,$$TAG("ReportSubTotals")
  1. .S DRUGN="" F S DRUGN=$O(STATS("RXDRUG",DRUGN)) Q:DRUGN="" D
  1. ..;W !,$$TAG("DrugName",2,DRUGN)
  1. ..W !,$$TAG("DrugName",2,$P(STATS("DRUGN",DRUGN),U,3))
  1. ..W !,$$TAG("RXCount",2,$J(STATS("RXDRUG",DRUGN),6,0))
  1. ..S RX=0 F S RX=$O(STATS("RXS",RX)) Q:'RX D
  1. ...S RXCNT=$G(RXCNT)+1
  1. ..W:$G(RXCNT) !,$$TAG("TotalPrescriptionCount",2,RXCNT)
  1. ..W !,$$TAG("TotalFills",2,STATS("FILLS"))
  1. .W !,$$TAG("ReportSubTotals",1)
  1. E D
  1. .D PRINT3
  1. .W !,"Report sub-totals",!
  1. .W !,?5,"Drug Name",?47,"# of fills",!
  1. .S DRUGN="" F S DRUGN=$O(STATS("RXDRUG",DRUGN)) Q:DRUGN="" D
  1. ..;W ?5,DRUGN,?47,$J(STATS("RXDRUG",DRUGN),6,0),!
  1. ..W ?5,$P(STATS("DRUGN",DRUGN),U,3),?47,$J(STATS("RXDRUG",DRUGN),6,0),!
  1. ..D PRINT3
  1. .S RX=0 F S RX=$O(STATS("RXS",RX)) Q:'RX D
  1. ..S RXCNT=$G(RXCNT)+1
  1. .;W !!,"Total prescription count: ",+$G(RXCNT)
  1. .W !,"Total fills (new, refill, and partial): ",+$G(STATS("FILLS"))
  1. Q
  1. ; Output totals for report
  1. PRTRTOT ; EP -
  1. N DRUGN,RX,RXCNT
  1. Q:'APSPETOT ; User didn't ask for totals
  1. I APSPXML D
  1. .W !,$$TAG("ReportTotals")
  1. .S DRUGN="" F S DRUGN=$O(APSPRTOT("RXDRUG",DRUGN)) Q:DRUGN="" D
  1. ..W !,$$TAG("DrugName",2,DRUGN)
  1. ..W !,$$TAG("RXCount",2,$J(APSPRTOT("RXDRUG",DRUGN),6,0))
  1. ..S RX=0 F S RX=$O(APSPRTOT("RXS",RX)) Q:'RX D
  1. ...S RXCNT=$G(RXCNT)+1
  1. ..W:$G(RXCNT) !,$$TAG("TotalPrescriptionCount",2,RXCNT)
  1. .W !,$$TAG("TotalFills",2,$G(APSPRTOT("FILLS")))
  1. .W !,$$TAG("ReportTotals",1)
  1. E D
  1. .D PRINT3
  1. .W !!,"Report Totals",!
  1. .W !,?5,"Drug Name",?47,"# of fills",!
  1. .S DRUGN="" F S DRUGN=$O(APSPRTOT("RXDRUG",DRUGN)) Q:DRUGN="" D
  1. ..;W ?5,DRUGN,?47,$J(APSPRTOT("RXDRUG",DRUGN),6,0),!
  1. ..W ?5,$P(APSPRTOT("DRUGN",DRUGN),U,3),?47,$J(APSPRTOT("RXDRUG",DRUGN),6,0),!
  1. ..D PRINT3
  1. .S RX=0 F S RX=$O(APSPRTOT("RXS",RX)) Q:'RX D
  1. ..S RXCNT=$G(RXCNT)+1
  1. .;W !!,"Total prescription count: ",+$G(RXCNT)
  1. .W !,"Total fills (new, refill, and partial): ",+$G(APSPRTOT("FILLS"))
  1. Q
  1. ; Print the line
  1. PRINT2(DATA) ; EP -
  1. N RX,DFN,HRN
  1. S RX=+DATA
  1. S DFN=$$GET1^DIQ(52,RX,2,"I")
  1. S HRN=$$HRN^AUPNPAT(DFN,DUZ(2))
  1. D STATS^APSPCSM(DATA)
  1. I APSPXML D
  1. .W !,$$TAG("Dispense")
  1. .W !,$$TAG("FillDate",2,$P($TR($$FMTE^XLFDT($P(DATA,U,2),"5Z"),"@"," "),":",1,2))
  1. .W !,$$TAG("Type",2,$P(DATA,U,9))
  1. .W !,$$TAG("PatientName",2,$$GET1^DIQ(2,DFN,.01))
  1. .W !,$$TAG("PatientHRN",2,HRN)
  1. .W !,$$TAG("PrescriptionNumber",2,$$GET1^DIQ(52,RX,.01))
  1. .W !,$$TAG("DrugName",2,$P(DATA,U,8))
  1. .W !,$$TAG("QTY",2,$P(DATA,U,6))
  1. .W !,$$TAG("DaysSupply",2,$P(DATA,U,13))
  1. .W !,$$TAG("DrugSchedule",2,$P(DATA,U,7))
  1. .W !,$$TAG("Provider",2,$$GET1^DIQ(200,$P(DATA,U,14),.01))
  1. .W !,$$TAG("ProviderDEA",2,$$GET1^DIQ(200,$P(DATA,U,14),53.2))
  1. .W !,$$TAG("Pharmacist",2,$$GET1^DIQ(200,$P(DATA,U,15),.01))
  1. .W !,$$TAG("RefillsRemaining",2,$P(DATA,U,16))
  1. .;IHS/MSC/MGH Patch 1015
  1. .W !,$$TAG("CMOP",2,$P(DATA,U,17))
  1. .W !,$$TAG("Dosing",2,$$GETSIG(RX))
  1. .W !,$$TAG("Dispense",1)
  1. E D
  1. .;IHS/MSC/MGH Patch 1015 added CMOP field
  1. .W !,$P($TR($$FMTE^XLFDT($P(DATA,U,2),"5Z"),"@"," "),":",1,2),?14,$P(DATA,U,9),?20,$E($$GET1^DIQ(2,DFN,.01),1,16),?38,HRN,?48,$$GET1^DIQ(52,RX,.01),?60,$P(DATA,U,8),?107,$P(DATA,U,6),?117,$P(DATA,U,13),?127,$P(DATA,U,7)
  1. .W !,?5,$$GET1^DIQ(200,$P(DATA,U,14),.01),?35,$$GET1^DIQ(200,$P(DATA,U,14),53.2),?50,$E($$GET1^DIQ(200,$P(DATA,U,15),.01),1,22),?74,$P(DATA,U,16),?90,$P(DATA,U,17)
  1. .I APSPDOSE D
  1. ..W !,?5,"Dosing:" D OUTSIG($$GETSIG(RX),IOM,12)
  1. .D PRINT3 ;check page length
  1. Q
  1. ; Check page length and optionally print blank line
  1. ;
  1. PRINT3 ;EP
  1. D:$Y+8>IOSL HDR
  1. Q
  1. ;
  1. HDR ;EP
  1. W:APSPPG @IOF
  1. S APSPPG=APSPPG+1,NEWPG=1
  1. W !,"Controlled Substance Management Report ("_$S(APSPRTYP=1:"Summary",1:"Detail")_")",?(IOM-28),$P($TR($$FMTE^XLFDT($$NOW^XLFDT,"5Z"),"@"," "),":",1,2),?(IOM-10),"Page: "_APSPPG
  1. W !,"Report Criteria:"
  1. W !,?5,"Inclusive Dates: "_APSPBDF_" to "_APSPEDF
  1. W !,?5,"Pharmacy Division: "_$S(APSPDIV:$$GET1^DIQ(59,APSPDIV,.01),1:"All")
  1. W !,?5,"Drug Class: "_APSPDCTN(APSPDCLS)
  1. I APSPRTYP=2 D
  1. .W !,?5,"Sorted by: "_$S(APSPSORT=1:"Drug Name, Fill Date",APSPSORT=3:"Drug Schedule, Drug Name then Fill Date",APSPSORT=2:"Fill Date then Drug Name",APSPSORT=4:"Patient then Fill Date",5:"Prescriber then Drug Name, Fill Date",1:"Unknown")
  1. E D
  1. .W !,?5,"Sorted by: "_$S(APSPSORT=1:"Drug Name",1:"Fill Date then Drug Name")
  1. W !,?5,"CMOP meds: "_$S(APSPCMOP:"Included",1:"Not Included")
  1. I APSPDET,APSPSORT=4,APSPPAT W !,?7,"Patient sort restricted to ",$$GET1^DIQ(2,APSPPAT,.01)
  1. I APSPDET,APSPSORT=5,APSPPRV W !,?7,"Prescriber sort restricted to ",$$GET1^DIQ(200,APSPPRV,.01)
  1. D HDR1:APSPRTYP=2,HDR2:APSPRTYP=1
  1. Q
  1. ;
  1. HDR1 ;EP
  1. D DASH
  1. ;IHS/MSC/MGH added CMOP field
  1. W "Date Disp.",?14,"Type",?20,"Patient",?40,"HRN",?48,"Rx Number",?60,"Drug Name",?107,"Qty",?113,"Days Supply",?127,"Drug Schedule"
  1. W !,?5,"Prescriber",?35,"DEA Number",?50,"Pharmacist",?74,"Refills left",?90,"CMOP/Mail"
  1. W !,?5,"Dosage Ordered"
  1. D DASH
  1. Q
  1. HDR2 ;EP - Summary Report Header
  1. ; Note: Header states RX but the value printed is fills
  1. D DASH
  1. D PRINT3
  1. ;W ?45,"# of",?75,"Units",!
  1. ;W "Drug Name",?45,"Fills",?51,"Unit Type",?66,"Total",?72,"/Fill"
  1. W ?44,"Unit",?56,"# RXs",?64,"#Units",?74,"Avg",!
  1. W "Drug Name",?44,"Type",?56,"Filled",?64,"Filled",?73,"Unit/RX"
  1. D DASH
  1. Q
  1. ;
  1. HDRXML ;EP - XML Header
  1. W $$XMLHDR^MXMLUTL() ;"<?xml version='1.0'?>"
  1. W !,$$TAG("Report")
  1. W !,$$TAG("ReportName",2,"Controlled Substance Management Report ("_$S(APSPRTYP=1:"Summary",1:"Detail")_")")
  1. W !,$$TAG("ReportDate",2,$P($TR($$FMTE^XLFDT($$NOW^XLFDT,"5Z"),"@"," "),":",1,2))
  1. W !,$$TAG("ReportCriteria")
  1. W !,$$TAG("InclusiveDates",2,APSPBDF_" to "_APSPEDF)
  1. W !,$$TAG("PharmacyDivision",2,$S(APSPDIV:$$GET1^DIQ(59,APSPDIV,.01),1:"All"))
  1. W !,$$TAG("DrugClass",2,APSPDCTN(APSPDCLS))
  1. W:APSPDET !,$$TAG("SortBy",2,$S(APSPSORT=1:"Drug Name, Fill Date",APSPSORT=3:"Drug Schedule, Drug Name then Fill Date",APSPSORT=2:"Fill Date, Drug Name",APSPSORT=4:"Patient, Fill Date",5:"Prescriber, Drug Name then Fill Date",1:"Unknown"))
  1. I APSPDET,APSPSORT=4,APSPPAT W !,$$TAG("Patient sort restricted to "_$$GET1^DIQ(2,APSPPAT,.01),2)
  1. I APSPDET,APSPSORT=5,APSPPRV W !,$$TAG("Prescriber sort restricted to "_$$GET1^DIQ(200,APSPPRV,.01),2)
  1. W !,$$TAG("CMOP",2,$S(APSPCMOP=1:"CMOP Included",1:"CMOP Not Included"))
  1. W !,$$TAG("ReportCriteria",1)
  1. W !,$$TAG("Dispenses")
  1. Q
  1. ;
  1. DASH ;EP
  1. N DASH
  1. W ! F DASH=1:1:IOM W "-"
  1. W !
  1. Q
  1. ;
  1. ; Returns formatted tag
  1. ; Input: TAG - Name of Tag
  1. ; TYPE - (-1) = empty 0 =start <tag> 1 =end </tag> 2 = start -VAL - end
  1. ; VAL - data value
  1. TAG(TAG,TYPE,VAL) ;EP
  1. S TYPE=$G(TYPE,0)
  1. S:$L($G(VAL)) VAL=$$SYMENC^MXMLUTL(VAL)
  1. I TYPE<0 Q "<"_TAG_"/>" ;empty
  1. E I TYPE=1 Q "</"_TAG_">"
  1. E I TYPE=2 Q "<"_TAG_">"_$G(VAL)_"</"_TAG_">"
  1. Q "<"_TAG_">"
  1. ; Return SIG as a single string
  1. GETSIG(RX) ;EP
  1. N LP,RET,SG
  1. S RET=""
  1. S SG=$G(^PSRX(RX,"SIG"))
  1. I $P(SG,U,2) D
  1. .S LP=0 F S LP=$O(^PSRX(RX,"SIG1",LP)) Q:'LP D
  1. ..S RET=RET_^PSRX(RX,"SIG1",LP,0)
  1. E S RET=$P(SG,U)
  1. Q RET
  1. ; Output SIG
  1. ; Input: X - Data to output
  1. ; RM - Right Margin
  1. ; LI - Left Indent
  1. OUTSIG(X,RM,LI) ;EP - Output SIG
  1. Q:'$L(X)
  1. K ^UTILITY($J,"W")
  1. N DIWL,DIWR,DIWF,LP
  1. S DIWL=0,DIWR=RM-LI,DIWF=""
  1. D ^DIWP
  1. ;S LP=0 F S LP=$O(^PSRX(RX,"PRC",LP)) Q:'LP D
  1. ;.I $D(^(LP,0)) S X=^(0) D ^DIWP
  1. I $D(^UTILITY($J,"W")) D
  1. .S LP=0 F S LP=$O(^UTILITY($J,"W",DIWL,LP)) Q:'LP W ?LI,^(LP,0),!
  1. K ^UTILITY($J,"W")
  1. Q