ORDEA01A ;ISP/RFR - DEA REPORTS 01;10/15/2014  08:03
 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**218,350,499**;Dec 17, 1997;Build 165
 Q
DUPVA ;DUPLICATE VA#'S REPORT
 ;REP IS HANDLED BY REPORTS^ORDEA01
 N DISINC,DIV,SAVE
 W !!,"This report identifies all users with similar VA numbers. To identify",!
 W "similar numbers, the software builds a temporary index. First, it removes all",!
 W "non-alphanumeric characters (such as punctuation and spaces) from the user's",!
 W "VA number, then changes all letters to uppercase, and finally adds the VA",!
 W "number to the temporary index. It then uses that index to build a list of",!
 W "similar or duplicate numbers. For example, kc123, KC 123, and KC-123 are",!
 W "considered similar.",!
 S DISINC=$$DISPRMPT^ORDEA01()
 Q:DISINC=U
 S SAVE("DISINC")=""
 D DEVICE^ORUTL($P(REP(REP),";",3),"OR "_$$UP^XLFSTR($P(REP(REP),";")),"Q",.SAVE)
 Q
DUPVAQ ;TASKMAN ENTRY POINT
 ;CBUFFER IS HANDLED BY DEVICE^ORUTL OR TASKMAN
 N DOCS,ERROR,KEY,INDEX,NUMBER,DUPL,PGNUM,COL,STOP,OUTPUT
 ;RETRIEVE ALL USERS WITH A VA #
 S DOCS=$NA(^TMP($J,"ORDUPVA")),DUPL=$NA(^TMP($J,"ORDUPVA","DUPL"))
 K @DOCS
 D LIST^DIC(200,,"@;.01;53.3","PQ",,,,"PS2",,,DOCS,"ERROR")
 I $D(ERROR) D  Q
 .D FMERROR^ORUTL(.ERROR)
 .S:$D(ZTQUEUED) ZTREQ="@"
 ;ORDER THE RETURNED LIST BY VA #
 S INDEX=0 F  S INDEX=$O(@DOCS@("DILIST",INDEX)) Q:+$G(INDEX)=0  D
 .S NUMBER=$P(@DOCS@("DILIST",INDEX,0),U,3),KEY=$$UP^XLFSTR(NUMBER)
 .S KEY=$$STRIP(KEY)
 .Q:$G(KEY)=""
 .N ACCOUNT S ACCOUNT=$$ACTIVE^XUSER($P(@DOCS@("DILIST",INDEX,0),U))
 .I 'DISINC,(+ACCOUNT<1),($P(ACCOUNT,U,2)'="") Q
 .S ACCOUNT("TEXT")=$S($P(ACCOUNT,U,2)'="":$P(ACCOUNT,U,2),ACCOUNT=0:"CANNOT SIGN ON",1:"UNKNOWN")
 .S @DUPL@(KEY)=+$G(@DUPL@(KEY))+1
 .S @DUPL@(KEY,@DUPL@(KEY),NUMBER)=$$LJ^XLFSTR($P(@DOCS@("DILIST",INDEX,0),U,2),37," ")_ACCOUNT("TEXT")
 ;OUTPUT THE DUPLICATES
 S COL(1)=$$LJ^XLFSTR("VA#",12," ")_$$LJ^XLFSTR("NAME",37," ")_"ACCOUNT STATUS"
 S KEY="" F  S KEY=$O(@DUPL@(KEY)) Q:$G(KEY)=""!($G(STOP))  D
 .I @DUPL@(KEY)>1 D
 ..S OUTPUT=1
 ..I (@DUPL@(KEY)+$Y+CBUFFER)>IOSL!($Y=0) S STOP=$$HEADER^ORUTL("NON-UNIQUE VA NUMBERS REPORT",.PGNUM,.COL)
 ..Q:$G(STOP)
 ..S INDEX=0 F  S INDEX=$O(@DUPL@(KEY,INDEX)) Q:+$G(INDEX)=0  D
 ...S NUMBER=$O(@DUPL@(KEY,INDEX,""))
 ...W $$LJ^XLFSTR(NUMBER,12," ")_@DUPL@(KEY,INDEX,NUMBER)
 ...I ($Y+1)<IOSL W !
 ..W $$REPEAT^XLFSTR("=",60)
 ..I ($Y+1)<IOSL W !
 I '$G(STOP) D
 .I '$G(OUTPUT) D  Q:$G(STOP)
 ..S STOP=$$HEADER^ORUTL("NON-UNIQUE VA NUMBERS REPORT",.PGNUM,.COL)
 ..Q:STOP
 ..W !,$$CJ^XLFSTR("All VA Numbers are unique.",$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
 .I ($Y+2)>IOSL S STOP=$$HEADER^ORUTL("NON-UNIQUE VA NUMBERS REPORT",.PGNUM,.COL)
 .Q:$G(STOP)
 .W !,$$CJ^XLFSTR("[END OF REPORT]",$S(+$G(IOM)>0:(IOM-1),1:79)," ")
 S:$D(ZTQUEUED) ZTREQ="@"
 Q
STRIP(TEXT) ;REMOVE PUNCTUATION CHARACTERS AND SPACES
 N %
 F %=1:1:$L(TEXT) N CHR S CHR=$A($E(TEXT,%)) I CHR<48!(CHR>57&(CHR<65))!(CHR>90&(CHR<97))!(CHR>122) S TEXT=$TR(TEXT,$E(TEXT,%))
 Q TEXT
INCOMPL ;INCOMPLETE PROVIDER SETUP REPORT
 ;REP IS HANDLED BY REPORTS^ORDEA01
 W !!,"This report identifies all active providers who are unable to sign controlled",!
 W "substance orders. For the purposes of this report, a provider is a user who",!
 W "holds the ORES security key.",!
 W !,"By default, the report lists the prescribable schedules for each provider",!
 W "(including those providers that are properly configured).",!
 N INCLUDE,DISINC,DIV,DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,SAVE,ORCSV
 S DIR(0)="Y"_U,DIR("A")="Do you want to include prescribable schedules in the output"
 S DIR("B")="NO"
 S DIR("?",1)="By answering YES, the report will list the schedules each provider is able to"
 S DIR("?",2)="prescribe and will include those providers who are able to sign controlled"
 S DIR("?",3)="substance orders."
 S DIR("?",4)="By answering NO, the report will not list the prescribable schedules and will"
 S DIR("?",5)="only include those providers who are unable to sign controlled substance"
 S DIR("?")="orders."
 D ^DIR
 Q:$D(DIRUT)
 S INCLUDE=Y
 K X,Y,DTOUT,DUOUT,DIRUT,DIROUT
 W !
 S DISINC=$$DISPRMPT^ORDEA01()
 Q:DISINC=U
 W !
 S X=$$DIVPRMPT^ORUTL(.DIV)
 Q:X<1
 K X,Y,DIR,DTOUT,DUOUT,DIRUT,DIROUT
 S DIR(0)="Y"_U,DIR("A",1)="Do you want to generate the report in a delimited format suitable for import"
 S DIR("A")="into third-party applications"
 S DIR("?",1)="By answering YES, the report is generated in a comma-separated values (CSV)"
 S DIR("?",2)="format."
 S DIR("?")="By answering NO, the report is generated in a non-delimited format."
 W !
 D ^DIR
 Q:$D(DIRUT)
 S ORCSV=Y
 I ORCSV D
 .W !!,"To create a file on your computer for use in third-party applications, perform"
 .W !,"the following:",!
 .W !," 1. To queue the report, at the DEVICE: prompt, enter the letter Q."
 .W !," 2. At the DEVICE: prompt, select the appropriate spooler device."
 .W !," 3. Once the spooled document is ready, use option Download a Spool file entry"
 .W !,"    [XT-KERMIT SPOOL DL] to download the report to your computer."
 .W !,"    Note: Refer to your terminal emulator's documentation for instructions on"
 .W !,"          receiving files via the KERMIT protocol.",!
 S SAVE("INCLUDE")="",SAVE("DISINC")="",SAVE("DIV(")="",SAVE("ORCSV")=""
 D DEVICE^ORUTL($P(REP(REP),";",3),"OR "_$$UP^XLFSTR($P(REP(REP),";")),"Q",.SAVE)
 Q
INCOMPLQ ;TASKMAN ENTRY POINT
 ;CBUFFER IS HANDLED BY DEVICE^ORUTL OR TASKMAN
 N DATA,Y,INDENT,STOP,COUNT
 S DATA=$NA(^TMP($J,"ORDATA"))
 K @DATA
 S INDENT(0)=$$REPEAT^XLFSTR(" ",37),INDENT(1)=$$REPEAT^XLFSTR("-",34)
 ;IA #10076
 S Y=0 F  S Y=$O(^XUSEC("ORES",Y)) Q:+$G(Y)=0!($G(STOP))  D
 .N DIVISION S DIVISION=$$HASDIV^ORUTL(Y,.DIV)
 .Q:$G(DIVISION)=""
 .N ACCOUNT S ACCOUNT=$$ACTIVE^XUSER(Y)
 .I 'DISINC,(+ACCOUNT<1),($P(ACCOUNT,U,2)'="") Q
 .;INCLUDE USERS WHO CANNOT SIGN-ON IN ACTIVE LISTING
 .S ACCOUNT=$S(ACCOUNT=0:1,ACCOUNT="":-1,1:ACCOUNT)
 .N RETURN,STATUS
 .S STATUS=$$VDEA^XUSER(.RETURN,Y),COUNT=1+$G(COUNT)
 .S STATUS=$$CHKSWIT^ORDEA01(.RETURN,Y,STATUS)
 .I $D(RETURN)>9 D
 ..N REASON,NAME,INDEX
 ..S NAME=$$GET1^DIQ(200,Y_",",.01)
 ..I NAME="",ACCOUNT=-1 S NAME="ACCOUNT #"_Y
 ..S @DATA@(DIVISION,STATUS,+ACCOUNT,NAME)=$$GET1^DIQ(200,Y_",",8)
 ..S REASON="" F  S REASON=$O(RETURN(REASON)) Q:$G(REASON)=""  D
 ...N TEXT
 ...I '$G(INCLUDE),(REASON["Is permitted") Q
 ...I STATUS=1,(REASON'["Is permitted") D
 ....S TEXT=$$LOW^XLFSTR($E(REASON,1,1))_$E(REASON,2,$L(REASON))
 ....S TEXT="Can sign controlled substance orders, however, the provider "_TEXT
 ...S INDEX=1+$G(INDEX),@DATA@(DIVISION,STATUS,+ACCOUNT,NAME,INDEX)=$S($G(TEXT)'="":$G(TEXT),1:REASON)
 .I 'COUNT#100 S STOP=$$STOPTASK^ORUTL()
 I 'ORCSV D IREPORT
 I ORCSV D IEXPORT
 K @DATA
 S:$D(ZTQUEUED) ZTREQ="@"
 Q
IREPORT ;CREATE NON-CSV FORMAT
 N DIVISION,NAME,LINE,STATUS,TEXT,OUTPUT,ACCOUNT,COL,PGNUM
 S DIVISION="" F  S DIVISION=$O(@DATA@(DIVISION)) Q:$G(DIVISION)=""!($G(STOP))  D
 .S COL(1)="DIVISION: "_DIVISION
 .F STATUS=0:1:1 D  Q:$G(STOP)
 ..I STATUS=1,('$G(INCLUDE)) Q
 ..Q:$D(@DATA@(DIVISION,STATUS))<10
 ..S TEXT=$S(STATUS=0:"un",1:"")_"able"
 ..S COL(2)=$$LJ^XLFSTR("PROVIDER NAME",37," ")
 ..S COL(3)=$$LJ^XLFSTR(" TITLE",37," ")_$S(TEXT="unable":"DEFICIENCY",1:"")
 ..S COL(3)=COL(3)_$S(TEXT="unable"&INCLUDE=1:"/",1:"")_$S(INCLUDE=1:"PRESCRIBABLE SCHEDULES",1:"")
 ..S STOP=$$HEADER^ORUTL("PROVIDER INCOMPLETE CONFIGURATION REPORT",.PGNUM,.COL)
 ..Q:$G(STOP)
 ..F ACCOUNT=1:-1:-1 D  Q:$G(STOP)
 ...Q:$D(@DATA@(DIVISION,STATUS,ACCOUNT))<10
 ...N BUFFER S BUFFER=@DATA@(DIVISION,STATUS,ACCOUNT,$O(@DATA@(DIVISION,STATUS,ACCOUNT,"")))
 ...S BUFFER=BUFFER+$S(ACCOUNT=0&($Y>4):3,ACCOUNT=0:2,1:0)
 ...I (BUFFER+$Y+CBUFFER)>IOSL!($Y=0) D  Q:$G(STOP)
 ....S STOP=$$HEADER^ORUTL("PROVIDER INCOMPLETE CONFIGURATION REPORT",.PGNUM,.COL)
 ...I ACCOUNT=0 D
 ....W:$Y>4 !
 ....W $$CJ^XLFSTR("*** DISUSERED/TERMINATED USERS ***",$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
 ....W $$CJ^XLFSTR(INDENT(1),$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
 ...S NAME="" F  S NAME=$O(@DATA@(DIVISION,STATUS,ACCOUNT,NAME)) Q:$G(NAME)=""!($G(STOP))  D
 ....N BODY
 ....S INDEX=0 F  S INDEX=$O(@DATA@(DIVISION,STATUS,ACCOUNT,NAME,INDEX)) Q:'INDEX  D
 .....D WRAP^ORUTL(INDENT(0)_@DATA@(DIVISION,STATUS,ACCOUNT,NAME,INDEX),"BODY")
 ....S BODY(1)=$$LJ^XLFSTR(NAME,37," ")_$E($G(BODY(1)),38,$S(+$G(IOM)>0:IOM,1:80))
 ....S BODY(2)=$$LJ^XLFSTR(" "_@DATA@(DIVISION,STATUS,ACCOUNT,NAME),37," ")_$E($G(BODY(2)),38,$S(+$G(IOM)>0:IOM,1:80))
 ....S:BODY<2 BODY=2
 ....I (BODY+$Y+CBUFFER)>IOSL D  Q:$G(STOP)
 .....S STOP=$$HEADER^ORUTL("PROVIDER INCOMPLETE CONFIGURATION REPORT",.PGNUM,.COL)
 ....F LINE=1:1:BODY  D
 .....W BODY(LINE)
 .....I ($Y+1)<IOSL W !
 .....S OUTPUT=1
 ....I LINE>0,(($Y+1)<IOSL) W !
 I '$G(STOP) D
 .I '$G(OUTPUT) D  Q:$G(STOP)
 ..S STOP=$$HEADER^ORUTL("PROVIDER INCOMPLETE CONFIGURATION REPORT",.PGNUM,.COL)
 ..Q:STOP
 ..N TEXT,BODY
 ..S TEXT="All providers are able to sign controlled substance orders"
 ..I $D(DIV) D
 ...N IDX,STATIONS
 ...S IDX="" F  S IDX=$O(DIV(IDX)) Q:$G(IDX)=""  D
 ....N DELIMIT
 ....S DELIMIT=$S($O(DIV(IDX))'="":", ",1:" and ")
 ....S STATIONS=$S($G(STATIONS)'="":STATIONS_DELIMIT,1:"")_DIV(IDX)
 ...S TEXT=TEXT_" in "_STATIONS
 ..D WRAP^ORUTL(TEXT_".","BODY")
 ..S BODY=0 F  S BODY=$O(BODY(BODY)) Q:'BODY  W BODY(BODY),!
 .I ($Y+2)>IOSL S STOP=$$HEADER^ORUTL("PROVIDER INCOMPLETE CONFIGURATION REPORT",.PGNUM,.COL)
 .Q:$G(STOP)
 .W !,$$CJ^XLFSTR("[END OF REPORT]",$S(+$G(IOM)>0:(IOM-1),1:79)," ")
 Q
IEXPORT ;CREATE CSV FORMAT
 N DIVISION,STATUS,ACCOUNT,NAME,Q,QCQ,LINE,XTKDIC,XTKMODE,XTKFILE
 S Q=$C(34),QCQ=Q_","_Q
 W Q_"DIVISION"_QCQ_"PROVIDER NAME"_QCQ_"TITLE"_QCQ_"DEFICIENCY"
 W $S(INCLUDE=1:"/PRESCRIBABLE SCHEDULES",1:"")_Q,!
 S DIVISION="" F  S DIVISION=$O(@DATA@(DIVISION)) Q:$G(DIVISION)=""  D
 .F STATUS=0:1:1 D
 ..I STATUS=1,('$G(INCLUDE)) Q
 ..F ACCOUNT=1:-1:0 D
 ...S NAME="" F  S NAME=$O(@DATA@(DIVISION,STATUS,ACCOUNT,NAME)) Q:$G(NAME)=""  D
 ....S INDEX=0 F  S INDEX=$O(@DATA@(DIVISION,STATUS,ACCOUNT,NAME,INDEX)) Q:$G(INDEX)=""  D
 .....W Q_DIVISION_QCQ_NAME_QCQ_@DATA@(DIVISION,STATUS,ACCOUNT,NAME)_QCQ
 .....W @DATA@(DIVISION,STATUS,ACCOUNT,NAME,INDEX)_Q,!
 Q
DETOX ;DETOX/MAINTENANCE ID Report
 ;REP IS HANDLED BY REPORTS^ORDEA01
 N DISINC
 W !!,"This report identifies all users who have a DETOX/MAINTENANCE ID number",!
 W "in the NEW PERSON FILE (#200).",!
 S DISINC=$$DISPRMPT^ORDEA01()
 Q:DISINC=U
 S SAVE("DISINC")=""
 D DEVICE^ORUTL($P(REP(REP),";",3),"OR "_$$UP^XLFSTR($P(REP(REP),";")),"Q",.SAVE)
 Q
DETOXQ ;TASKMAN ENTRY POINT
 ;CBUFFER IS HANDLED BY DEVICE^ORUTL OR TASKMAN
 N DOCS,DATA,ERROR,INDEX,PGNUM,COL,STOP,ACCOUNT,OUTPUT
 ;RETRIEVE ALL USERS WITH A DETOX/MAINTENANCE ID NUMBER
 S DOCS=$NA(^TMP($J,"ORDETOX")),DATA=$NA(^TMP($J,"ORDETOXDATA"))
 K @DOCS,@DATA
 S COL(1)="                                     DETOX/MAINTENANCE"
 S COL(2)="NAME                                 ID NUMBER          ACCOUNT STATUS"
 ;*499
 D LIST^DIC(200,,"@;.01;9001","PQ",,,,,"I ($L($$DETOX^XUSER(Y)))",,DOCS,"ERROR")
 I $D(ERROR) D  Q
 .D FMERROR^ORUTL(.ERROR)
 .S:$D(ZTQUEUED) ZTREQ="@"
 .K @DOCS
 S INDEX=0 F  S INDEX=$O(@DOCS@("DILIST",INDEX)) Q:+$G(INDEX)=0  D
 .N ACCOUNT S ACCOUNT=$$ACTIVE^XUSER($P(@DOCS@("DILIST",INDEX,0),U))
 .I 'DISINC,(+ACCOUNT<1),($P(ACCOUNT,U,2)'="") Q
 .S ACCOUNT("TEXT")=$S($P(ACCOUNT,U,2)'="":$P(ACCOUNT,U,2),ACCOUNT=0:"CANNOT SIGN ON",1:"UNKNOWN")
 .;INCLUDE USERS WHO CANNOT SIGN-ON IN ACTIVE LISTING
 .I ACCOUNT=0 S ACCOUNT=1
 .S @DATA@(+ACCOUNT,$P(@DOCS@("DILIST",INDEX,0),U,2))=$$LJ^XLFSTR($P(@DOCS@("DILIST",INDEX,0),U,3),19,"  ")_ACCOUNT("TEXT")
 F ACCOUNT=1:-1:0  D  Q:$G(STOP)
 .Q:'$D(@DATA@(ACCOUNT))
 .I ACCOUNT=0 D
 ..I ($Y+CBUFFER+4)>IOSL!($Y=0) D  Q:$G(STOP)
 ...S STOP=$$HEADER^ORUTL("PROVIDERS WITH A DETOX/MAINTENANCE ID",.PGNUM,.COL)
 ..W !,$$CJ^XLFSTR("*** DISUSERED/TERMINATED USERS ***",$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
 ..W $$CJ^XLFSTR($$REPEAT^XLFSTR("-",34),$S(+$G(IOM)>0:IOM,1:80)," "),!
 .S NAME="" F  S NAME=$O(@DATA@(ACCOUNT,NAME)) Q:NAME=""!($G(STOP))  D
 ..I ($Y+CBUFFER)>IOSL!($Y=0) D  Q:$G(STOP)
 ...S STOP=$$HEADER^ORUTL("PROVIDERS WITH A DETOX/MAINTENANCE ID",.PGNUM,.COL)
 ..W $$LJ^XLFSTR(NAME,37," ")_@DATA@(ACCOUNT,NAME)
 ..I ($Y+1)<IOSL W !
 ..S OUTPUT=1
 I '$G(STOP) D
 .I '$G(OUTPUT) D  Q:$G(STOP)
 ..S STOP=$$HEADER^ORUTL("PROVIDERS WITH A DETOX/MAINTENANCE ID",.PGNUM,.COL)
 ..Q:STOP
 ..W !,$$CJ^XLFSTR("0 PROVIDERS FOUND",$S(+$G(IOM)>0:(IOM-1),1:79)," "),!
 .I ($Y+2)>IOSL S STOP=$$HEADER^ORUTL("PROVIDERS WITH A DETOX/MAINTENANCE ID",.PGNUM,.COL)
 .Q:$G(STOP)
 .W !,$$CJ^XLFSTR("[END OF REPORT]",$S(+$G(IOM)>0:(IOM-1),1:79)," ")
 K @DOCS,@DATA
 S:$D(ZTQUEUED) ZTREQ="@"
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HORDEA01A   12843     printed  Sep 23, 2025@20:06:12                                                                                                                                                                                                   Page 2
ORDEA01A  ;ISP/RFR - DEA REPORTS 01;10/15/2014  08:03
 +1       ;;3.0;ORDER ENTRY/RESULTS REPORTING;**218,350,499**;Dec 17, 1997;Build 165
 +2        QUIT 
DUPVA     ;DUPLICATE VA#'S REPORT
 +1       ;REP IS HANDLED BY REPORTS^ORDEA01
 +2        NEW DISINC,DIV,SAVE
 +3        WRITE !!,"This report identifies all users with similar VA numbers. To identify",!
 +4        WRITE "similar numbers, the software builds a temporary index. First, it removes all",!
 +5        WRITE "non-alphanumeric characters (such as punctuation and spaces) from the user's",!
 +6        WRITE "VA number, then changes all letters to uppercase, and finally adds the VA",!
 +7        WRITE "number to the temporary index. It then uses that index to build a list of",!
 +8        WRITE "similar or duplicate numbers. For example, kc123, KC 123, and KC-123 are",!
 +9        WRITE "considered similar.",!
 +10       SET DISINC=$$DISPRMPT^ORDEA01()
 +11       if DISINC=U
               QUIT 
 +12       SET SAVE("DISINC")=""
 +13       DO DEVICE^ORUTL($PIECE(REP(REP),";",3),"OR "_$$UP^XLFSTR($PIECE(REP(REP),";")),"Q",.SAVE)
 +14       QUIT 
DUPVAQ    ;TASKMAN ENTRY POINT
 +1       ;CBUFFER IS HANDLED BY DEVICE^ORUTL OR TASKMAN
 +2        NEW DOCS,ERROR,KEY,INDEX,NUMBER,DUPL,PGNUM,COL,STOP,OUTPUT
 +3       ;RETRIEVE ALL USERS WITH A VA #
 +4        SET DOCS=$NAME(^TMP($JOB,"ORDUPVA"))
           SET DUPL=$NAME(^TMP($JOB,"ORDUPVA","DUPL"))
 +5        KILL @DOCS
 +6        DO LIST^DIC(200,,"@;.01;53.3","PQ",,,,"PS2",,,DOCS,"ERROR")
 +7        IF $DATA(ERROR)
               Begin DoDot:1
 +8                DO FMERROR^ORUTL(.ERROR)
 +9                if $DATA(ZTQUEUED)
                       SET ZTREQ="@"
               End DoDot:1
               QUIT 
 +10      ;ORDER THE RETURNED LIST BY VA #
 +11       SET INDEX=0
           FOR 
               SET INDEX=$ORDER(@DOCS@("DILIST",INDEX))
               if +$GET(INDEX)=0
                   QUIT 
               Begin DoDot:1
 +12               SET NUMBER=$PIECE(@DOCS@("DILIST",INDEX,0),U,3)
                   SET KEY=$$UP^XLFSTR(NUMBER)
 +13               SET KEY=$$STRIP(KEY)
 +14               if $GET(KEY)=""
                       QUIT 
 +15               NEW ACCOUNT
                   SET ACCOUNT=$$ACTIVE^XUSER($PIECE(@DOCS@("DILIST",INDEX,0),U))
 +16               IF 'DISINC
                       IF (+ACCOUNT<1)
                           IF ($PIECE(ACCOUNT,U,2)'="")
                               QUIT 
 +17               SET ACCOUNT("TEXT")=$SELECT($PIECE(ACCOUNT,U,2)'="":$PIECE(ACCOUNT,U,2),ACCOUNT=0:"CANNOT SIGN ON",1:"UNKNOWN")
 +18               SET @DUPL@(KEY)=+$GET(@DUPL@(KEY))+1
 +19               SET @DUPL@(KEY,@DUPL@(KEY),NUMBER)=$$LJ^XLFSTR($PIECE(@DOCS@("DILIST",INDEX,0),U,2),37," ")_ACCOUNT("TEXT")
               End DoDot:1
 +20      ;OUTPUT THE DUPLICATES
 +21       SET COL(1)=$$LJ^XLFSTR("VA#",12," ")_$$LJ^XLFSTR("NAME",37," ")_"ACCOUNT STATUS"
 +22       SET KEY=""
           FOR 
               SET KEY=$ORDER(@DUPL@(KEY))
               if $GET(KEY)=""!($GET(STOP))
                   QUIT 
               Begin DoDot:1
 +23               IF @DUPL@(KEY)>1
                       Begin DoDot:2
 +24                       SET OUTPUT=1
 +25                       IF (@DUPL@(KEY)+$Y+CBUFFER)>IOSL!($Y=0)
                               SET STOP=$$HEADER^ORUTL("NON-UNIQUE VA NUMBERS REPORT",.PGNUM,.COL)
 +26                       if $GET(STOP)
                               QUIT 
 +27                       SET INDEX=0
                           FOR 
                               SET INDEX=$ORDER(@DUPL@(KEY,INDEX))
                               if +$GET(INDEX)=0
                                   QUIT 
                               Begin DoDot:3
 +28                               SET NUMBER=$ORDER(@DUPL@(KEY,INDEX,""))
 +29                               WRITE $$LJ^XLFSTR(NUMBER,12," ")_@DUPL@(KEY,INDEX,NUMBER)
 +30                               IF ($Y+1)<IOSL
                                       WRITE !
                               End DoDot:3
 +31                       WRITE $$REPEAT^XLFSTR("=",60)
 +32                       IF ($Y+1)<IOSL
                               WRITE !
                       End DoDot:2
               End DoDot:1
 +33       IF '$GET(STOP)
               Begin DoDot:1
 +34               IF '$GET(OUTPUT)
                       Begin DoDot:2
 +35                       SET STOP=$$HEADER^ORUTL("NON-UNIQUE VA NUMBERS REPORT",.PGNUM,.COL)
 +36                       if STOP
                               QUIT 
 +37                       WRITE !,$$CJ^XLFSTR("All VA Numbers are unique.",$SELECT(+$GET(IOM)>0:(IOM-1),1:79)," "),!
                       End DoDot:2
                       if $GET(STOP)
                           QUIT 
 +38               IF ($Y+2)>IOSL
                       SET STOP=$$HEADER^ORUTL("NON-UNIQUE VA NUMBERS REPORT",.PGNUM,.COL)
 +39               if $GET(STOP)
                       QUIT 
 +40               WRITE !,$$CJ^XLFSTR("[END OF REPORT]",$SELECT(+$GET(IOM)>0:(IOM-1),1:79)," ")
               End DoDot:1
 +41       if $DATA(ZTQUEUED)
               SET ZTREQ="@"
 +42       QUIT 
STRIP(TEXT) ;REMOVE PUNCTUATION CHARACTERS AND SPACES
 +1        NEW %
 +2        FOR %=1:1:$LENGTH(TEXT)
               NEW CHR
               SET CHR=$ASCII($EXTRACT(TEXT,%))
               IF CHR<48!(CHR>57&(CHR<65))!(CHR>90&(CHR<97))!(CHR>122)
                   SET TEXT=$TRANSLATE(TEXT,$EXTRACT(TEXT,%))
 +3        QUIT TEXT
INCOMPL   ;INCOMPLETE PROVIDER SETUP REPORT
 +1       ;REP IS HANDLED BY REPORTS^ORDEA01
 +2        WRITE !!,"This report identifies all active providers who are unable to sign controlled",!
 +3        WRITE "substance orders. For the purposes of this report, a provider is a user who",!
 +4        WRITE "holds the ORES security key.",!
 +5        WRITE !,"By default, the report lists the prescribable schedules for each provider",!
 +6        WRITE "(including those providers that are properly configured).",!
 +7        NEW INCLUDE,DISINC,DIV,DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,SAVE,ORCSV
 +8        SET DIR(0)="Y"_U
           SET DIR("A")="Do you want to include prescribable schedules in the output"
 +9        SET DIR("B")="NO"
 +10       SET DIR("?",1)="By answering YES, the report will list the schedules each provider is able to"
 +11       SET DIR("?",2)="prescribe and will include those providers who are able to sign controlled"
 +12       SET DIR("?",3)="substance orders."
 +13       SET DIR("?",4)="By answering NO, the report will not list the prescribable schedules and will"
 +14       SET DIR("?",5)="only include those providers who are unable to sign controlled substance"
 +15       SET DIR("?")="orders."
 +16       DO ^DIR
 +17       if $DATA(DIRUT)
               QUIT 
 +18       SET INCLUDE=Y
 +19       KILL X,Y,DTOUT,DUOUT,DIRUT,DIROUT
 +20       WRITE !
 +21       SET DISINC=$$DISPRMPT^ORDEA01()
 +22       if DISINC=U
               QUIT 
 +23       WRITE !
 +24       SET X=$$DIVPRMPT^ORUTL(.DIV)
 +25       if X<1
               QUIT 
 +26       KILL X,Y,DIR,DTOUT,DUOUT,DIRUT,DIROUT
 +27       SET DIR(0)="Y"_U
           SET DIR("A",1)="Do you want to generate the report in a delimited format suitable for import"
 +28       SET DIR("A")="into third-party applications"
 +29       SET DIR("?",1)="By answering YES, the report is generated in a comma-separated values (CSV)"
 +30       SET DIR("?",2)="format."
 +31       SET DIR("?")="By answering NO, the report is generated in a non-delimited format."
 +32       WRITE !
 +33       DO ^DIR
 +34       if $DATA(DIRUT)
               QUIT 
 +35       SET ORCSV=Y
 +36       IF ORCSV
               Begin DoDot:1
 +37               WRITE !!,"To create a file on your computer for use in third-party applications, perform"
 +38               WRITE !,"the following:",!
 +39               WRITE !," 1. To queue the report, at the DEVICE: prompt, enter the letter Q."
 +40               WRITE !," 2. At the DEVICE: prompt, select the appropriate spooler device."
 +41               WRITE !," 3. Once the spooled document is ready, use option Download a Spool file entry"
 +42               WRITE !,"    [XT-KERMIT SPOOL DL] to download the report to your computer."
 +43               WRITE !,"    Note: Refer to your terminal emulator's documentation for instructions on"
 +44               WRITE !,"          receiving files via the KERMIT protocol.",!
               End DoDot:1
 +45       SET SAVE("INCLUDE")=""
           SET SAVE("DISINC")=""
           SET SAVE("DIV(")=""
           SET SAVE("ORCSV")=""
 +46       DO DEVICE^ORUTL($PIECE(REP(REP),";",3),"OR "_$$UP^XLFSTR($PIECE(REP(REP),";")),"Q",.SAVE)
 +47       QUIT 
INCOMPLQ  ;TASKMAN ENTRY POINT
 +1       ;CBUFFER IS HANDLED BY DEVICE^ORUTL OR TASKMAN
 +2        NEW DATA,Y,INDENT,STOP,COUNT
 +3        SET DATA=$NAME(^TMP($JOB,"ORDATA"))
 +4        KILL @DATA
 +5        SET INDENT(0)=$$REPEAT^XLFSTR(" ",37)
           SET INDENT(1)=$$REPEAT^XLFSTR("-",34)
 +6       ;IA #10076
 +7        SET Y=0
           FOR 
               SET Y=$ORDER(^XUSEC("ORES",Y))
               if +$GET(Y)=0!($GET(STOP))
                   QUIT 
               Begin DoDot:1
 +8                NEW DIVISION
                   SET DIVISION=$$HASDIV^ORUTL(Y,.DIV)
 +9                if $GET(DIVISION)=""
                       QUIT 
 +10               NEW ACCOUNT
                   SET ACCOUNT=$$ACTIVE^XUSER(Y)
 +11               IF 'DISINC
                       IF (+ACCOUNT<1)
                           IF ($PIECE(ACCOUNT,U,2)'="")
                               QUIT 
 +12      ;INCLUDE USERS WHO CANNOT SIGN-ON IN ACTIVE LISTING
 +13               SET ACCOUNT=$SELECT(ACCOUNT=0:1,ACCOUNT="":-1,1:ACCOUNT)
 +14               NEW RETURN,STATUS
 +15               SET STATUS=$$VDEA^XUSER(.RETURN,Y)
                   SET COUNT=1+$GET(COUNT)
 +16               SET STATUS=$$CHKSWIT^ORDEA01(.RETURN,Y,STATUS)
 +17               IF $DATA(RETURN)>9
                       Begin DoDot:2
 +18                       NEW REASON,NAME,INDEX
 +19                       SET NAME=$$GET1^DIQ(200,Y_",",.01)
 +20                       IF NAME=""
                               IF ACCOUNT=-1
                                   SET NAME="ACCOUNT #"_Y
 +21                       SET @DATA@(DIVISION,STATUS,+ACCOUNT,NAME)=$$GET1^DIQ(200,Y_",",8)
 +22                       SET REASON=""
                           FOR 
                               SET REASON=$ORDER(RETURN(REASON))
                               if $GET(REASON)=""
                                   QUIT 
                               Begin DoDot:3
 +23                               NEW TEXT
 +24                               IF '$GET(INCLUDE)
                                       IF (REASON["Is permitted")
                                           QUIT 
 +25                               IF STATUS=1
                                       IF (REASON'["Is permitted")
                                           Begin DoDot:4
 +26                                           SET TEXT=$$LOW^XLFSTR($EXTRACT(REASON,1,1))_$EXTRACT(REASON,2,$LENGTH(REASON))
 +27                                           SET TEXT="Can sign controlled substance orders, however, the provider "_TEXT
                                           End DoDot:4
 +28                               SET INDEX=1+$GET(INDEX)
                                   SET @DATA@(DIVISION,STATUS,+ACCOUNT,NAME,INDEX)=$SELECT($GET(TEXT)'="":$GET(TEXT),1:REASON)
                               End DoDot:3
                       End DoDot:2
 +29               IF 'COUNT#100
                       SET STOP=$$STOPTASK^ORUTL()
               End DoDot:1
 +30       IF 'ORCSV
               DO IREPORT
 +31       IF ORCSV
               DO IEXPORT
 +32       KILL @DATA
 +33       if $DATA(ZTQUEUED)
               SET ZTREQ="@"
 +34       QUIT 
IREPORT   ;CREATE NON-CSV FORMAT
 +1        NEW DIVISION,NAME,LINE,STATUS,TEXT,OUTPUT,ACCOUNT,COL,PGNUM
 +2        SET DIVISION=""
           FOR 
               SET DIVISION=$ORDER(@DATA@(DIVISION))
               if $GET(DIVISION)=""!($GET(STOP))
                   QUIT 
               Begin DoDot:1
 +3                SET COL(1)="DIVISION: "_DIVISION
 +4                FOR STATUS=0:1:1
                       Begin DoDot:2
 +5                        IF STATUS=1
                               IF ('$GET(INCLUDE))
                                   QUIT 
 +6                        if $DATA(@DATA@(DIVISION,STATUS))<10
                               QUIT 
 +7                        SET TEXT=$SELECT(STATUS=0:"un",1:"")_"able"
 +8                        SET COL(2)=$$LJ^XLFSTR("PROVIDER NAME",37," ")
 +9                        SET COL(3)=$$LJ^XLFSTR(" TITLE",37," ")_$SELECT(TEXT="unable":"DEFICIENCY",1:"")
 +10                       SET COL(3)=COL(3)_$SELECT(TEXT="unable"&INCLUDE=1:"/",1:"")_$SELECT(INCLUDE=1:"PRESCRIBABLE SCHEDULES",1:"")
 +11                       SET STOP=$$HEADER^ORUTL("PROVIDER INCOMPLETE CONFIGURATION REPORT",.PGNUM,.COL)
 +12                       if $GET(STOP)
                               QUIT 
 +13                       FOR ACCOUNT=1:-1:-1
                               Begin DoDot:3
 +14                               if $DATA(@DATA@(DIVISION,STATUS,ACCOUNT))<10
                                       QUIT 
 +15                               NEW BUFFER
                                   SET BUFFER=@DATA@(DIVISION,STATUS,ACCOUNT,$ORDER(@DATA@(DIVISION,STATUS,ACCOUNT,"")))
 +16                               SET BUFFER=BUFFER+$SELECT(ACCOUNT=0&($Y>4):3,ACCOUNT=0:2,1:0)
 +17                               IF (BUFFER+$Y+CBUFFER)>IOSL!($Y=0)
                                       Begin DoDot:4
 +18                                       SET STOP=$$HEADER^ORUTL("PROVIDER INCOMPLETE CONFIGURATION REPORT",.PGNUM,.COL)
                                       End DoDot:4
                                       if $GET(STOP)
                                           QUIT 
 +19                               IF ACCOUNT=0
                                       Begin DoDot:4
 +20                                       if $Y>4
                                               WRITE !
 +21                                       WRITE $$CJ^XLFSTR("*** DISUSERED/TERMINATED USERS ***",$SELECT(+$GET(IOM)>0:(IOM-1),1:79)," "),!
 +22                                       WRITE $$CJ^XLFSTR(INDENT(1),$SELECT(+$GET(IOM)>0:(IOM-1),1:79)," "),!
                                       End DoDot:4
 +23                               SET NAME=""
                                   FOR 
                                       SET NAME=$ORDER(@DATA@(DIVISION,STATUS,ACCOUNT,NAME))
                                       if $GET(NAME)=""!($GET(STOP))
                                           QUIT 
                                       Begin DoDot:4
 +24                                       NEW BODY
 +25                                       SET INDEX=0
                                           FOR 
                                               SET INDEX=$ORDER(@DATA@(DIVISION,STATUS,ACCOUNT,NAME,INDEX))
                                               if 'INDEX
                                                   QUIT 
                                               Begin DoDot:5
 +26                                               DO WRAP^ORUTL(INDENT(0)_@DATA@(DIVISION,STATUS,ACCOUNT,NAME,INDEX),"BODY")
                                               End DoDot:5
 +27                                       SET BODY(1)=$$LJ^XLFSTR(NAME,37," ")_$EXTRACT($GET(BODY(1)),38,$SELECT(+$GET(IOM)>0:IOM,1:80))
 +28                                       SET BODY(2)=$$LJ^XLFSTR(" "_@DATA@(DIVISION,STATUS,ACCOUNT,NAME),37," ")_$EXTRACT($GET(BODY(2)),38,$SELECT(+$GET(IOM)>0:IOM,1:80))
 +29                                       if BODY<2
                                               SET BODY=2
 +30                                       IF (BODY+$Y+CBUFFER)>IOSL
                                               Begin DoDot:5
 +31                                               SET STOP=$$HEADER^ORUTL("PROVIDER INCOMPLETE CONFIGURATION REPORT",.PGNUM,.COL)
                                               End DoDot:5
                                               if $GET(STOP)
                                                   QUIT 
 +32                                       FOR LINE=1:1:BODY
                                               Begin DoDot:5
 +33                                               WRITE BODY(LINE)
 +34                                               IF ($Y+1)<IOSL
                                                       WRITE !
 +35                                               SET OUTPUT=1
                                               End DoDot:5
 +36                                       IF LINE>0
                                               IF (($Y+1)<IOSL)
                                                   WRITE !
                                       End DoDot:4
                               End DoDot:3
                               if $GET(STOP)
                                   QUIT 
                       End DoDot:2
                       if $GET(STOP)
                           QUIT 
               End DoDot:1
 +37       IF '$GET(STOP)
               Begin DoDot:1
 +38               IF '$GET(OUTPUT)
                       Begin DoDot:2
 +39                       SET STOP=$$HEADER^ORUTL("PROVIDER INCOMPLETE CONFIGURATION REPORT",.PGNUM,.COL)
 +40                       if STOP
                               QUIT 
 +41                       NEW TEXT,BODY
 +42                       SET TEXT="All providers are able to sign controlled substance orders"
 +43                       IF $DATA(DIV)
                               Begin DoDot:3
 +44                               NEW IDX,STATIONS
 +45                               SET IDX=""
                                   FOR 
                                       SET IDX=$ORDER(DIV(IDX))
                                       if $GET(IDX)=""
                                           QUIT 
                                       Begin DoDot:4
 +46                                       NEW DELIMIT
 +47                                       SET DELIMIT=$SELECT($ORDER(DIV(IDX))'="":", ",1:" and ")
 +48                                       SET STATIONS=$SELECT($GET(STATIONS)'="":STATIONS_DELIMIT,1:"")_DIV(IDX)
                                       End DoDot:4
 +49                               SET TEXT=TEXT_" in "_STATIONS
                               End DoDot:3
 +50                       DO WRAP^ORUTL(TEXT_".","BODY")
 +51                       SET BODY=0
                           FOR 
                               SET BODY=$ORDER(BODY(BODY))
                               if 'BODY
                                   QUIT 
                               WRITE BODY(BODY),!
                       End DoDot:2
                       if $GET(STOP)
                           QUIT 
 +52               IF ($Y+2)>IOSL
                       SET STOP=$$HEADER^ORUTL("PROVIDER INCOMPLETE CONFIGURATION REPORT",.PGNUM,.COL)
 +53               if $GET(STOP)
                       QUIT 
 +54               WRITE !,$$CJ^XLFSTR("[END OF REPORT]",$SELECT(+$GET(IOM)>0:(IOM-1),1:79)," ")
               End DoDot:1
 +55       QUIT 
IEXPORT   ;CREATE CSV FORMAT
 +1        NEW DIVISION,STATUS,ACCOUNT,NAME,Q,QCQ,LINE,XTKDIC,XTKMODE,XTKFILE
 +2        SET Q=$CHAR(34)
           SET QCQ=Q_","_Q
 +3        WRITE Q_"DIVISION"_QCQ_"PROVIDER NAME"_QCQ_"TITLE"_QCQ_"DEFICIENCY"
 +4        WRITE $SELECT(INCLUDE=1:"/PRESCRIBABLE SCHEDULES",1:"")_Q,!
 +5        SET DIVISION=""
           FOR 
               SET DIVISION=$ORDER(@DATA@(DIVISION))
               if $GET(DIVISION)=""
                   QUIT 
               Begin DoDot:1
 +6                FOR STATUS=0:1:1
                       Begin DoDot:2
 +7                        IF STATUS=1
                               IF ('$GET(INCLUDE))
                                   QUIT 
 +8                        FOR ACCOUNT=1:-1:0
                               Begin DoDot:3
 +9                                SET NAME=""
                                   FOR 
                                       SET NAME=$ORDER(@DATA@(DIVISION,STATUS,ACCOUNT,NAME))
                                       if $GET(NAME)=""
                                           QUIT 
                                       Begin DoDot:4
 +10                                       SET INDEX=0
                                           FOR 
                                               SET INDEX=$ORDER(@DATA@(DIVISION,STATUS,ACCOUNT,NAME,INDEX))
                                               if $GET(INDEX)=""
                                                   QUIT 
                                               Begin DoDot:5
 +11                                               WRITE Q_DIVISION_QCQ_NAME_QCQ_@DATA@(DIVISION,STATUS,ACCOUNT,NAME)_QCQ
 +12                                               WRITE @DATA@(DIVISION,STATUS,ACCOUNT,NAME,INDEX)_Q,!
                                               End DoDot:5
                                       End DoDot:4
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +13       QUIT 
DETOX     ;DETOX/MAINTENANCE ID Report
 +1       ;REP IS HANDLED BY REPORTS^ORDEA01
 +2        NEW DISINC
 +3        WRITE !!,"This report identifies all users who have a DETOX/MAINTENANCE ID number",!
 +4        WRITE "in the NEW PERSON FILE (#200).",!
 +5        SET DISINC=$$DISPRMPT^ORDEA01()
 +6        if DISINC=U
               QUIT 
 +7        SET SAVE("DISINC")=""
 +8        DO DEVICE^ORUTL($PIECE(REP(REP),";",3),"OR "_$$UP^XLFSTR($PIECE(REP(REP),";")),"Q",.SAVE)
 +9        QUIT 
DETOXQ    ;TASKMAN ENTRY POINT
 +1       ;CBUFFER IS HANDLED BY DEVICE^ORUTL OR TASKMAN
 +2        NEW DOCS,DATA,ERROR,INDEX,PGNUM,COL,STOP,ACCOUNT,OUTPUT
 +3       ;RETRIEVE ALL USERS WITH A DETOX/MAINTENANCE ID NUMBER
 +4        SET DOCS=$NAME(^TMP($JOB,"ORDETOX"))
           SET DATA=$NAME(^TMP($JOB,"ORDETOXDATA"))
 +5        KILL @DOCS,@DATA
 +6        SET COL(1)="                                     DETOX/MAINTENANCE"
 +7        SET COL(2)="NAME                                 ID NUMBER          ACCOUNT STATUS"
 +8       ;*499
 +9        DO LIST^DIC(200,,"@;.01;9001","PQ",,,,,"I ($L($$DETOX^XUSER(Y)))",,DOCS,"ERROR")
 +10       IF $DATA(ERROR)
               Begin DoDot:1
 +11               DO FMERROR^ORUTL(.ERROR)
 +12               if $DATA(ZTQUEUED)
                       SET ZTREQ="@"
 +13               KILL @DOCS
               End DoDot:1
               QUIT 
 +14       SET INDEX=0
           FOR 
               SET INDEX=$ORDER(@DOCS@("DILIST",INDEX))
               if +$GET(INDEX)=0
                   QUIT 
               Begin DoDot:1
 +15               NEW ACCOUNT
                   SET ACCOUNT=$$ACTIVE^XUSER($PIECE(@DOCS@("DILIST",INDEX,0),U))
 +16               IF 'DISINC
                       IF (+ACCOUNT<1)
                           IF ($PIECE(ACCOUNT,U,2)'="")
                               QUIT 
 +17               SET ACCOUNT("TEXT")=$SELECT($PIECE(ACCOUNT,U,2)'="":$PIECE(ACCOUNT,U,2),ACCOUNT=0:"CANNOT SIGN ON",1:"UNKNOWN")
 +18      ;INCLUDE USERS WHO CANNOT SIGN-ON IN ACTIVE LISTING
 +19               IF ACCOUNT=0
                       SET ACCOUNT=1
 +20               SET @DATA@(+ACCOUNT,$PIECE(@DOCS@("DILIST",INDEX,0),U,2))=$$LJ^XLFSTR($PIECE(@DOCS@("DILIST",INDEX,0),U,3),19,"  ")_ACCOUNT("TEXT")
               End DoDot:1
 +21       FOR ACCOUNT=1:-1:0
               Begin DoDot:1
 +22               if '$DATA(@DATA@(ACCOUNT))
                       QUIT 
 +23               IF ACCOUNT=0
                       Begin DoDot:2
 +24                       IF ($Y+CBUFFER+4)>IOSL!($Y=0)
                               Begin DoDot:3
 +25                               SET STOP=$$HEADER^ORUTL("PROVIDERS WITH A DETOX/MAINTENANCE ID",.PGNUM,.COL)
                               End DoDot:3
                               if $GET(STOP)
                                   QUIT 
 +26                       WRITE !,$$CJ^XLFSTR("*** DISUSERED/TERMINATED USERS ***",$SELECT(+$GET(IOM)>0:(IOM-1),1:79)," "),!
 +27                       WRITE $$CJ^XLFSTR($$REPEAT^XLFSTR("-",34),$SELECT(+$GET(IOM)>0:IOM,1:80)," "),!
                       End DoDot:2
 +28               SET NAME=""
                   FOR 
                       SET NAME=$ORDER(@DATA@(ACCOUNT,NAME))
                       if NAME=""!($GET(STOP))
                           QUIT 
                       Begin DoDot:2
 +29                       IF ($Y+CBUFFER)>IOSL!($Y=0)
                               Begin DoDot:3
 +30                               SET STOP=$$HEADER^ORUTL("PROVIDERS WITH A DETOX/MAINTENANCE ID",.PGNUM,.COL)
                               End DoDot:3
                               if $GET(STOP)
                                   QUIT 
 +31                       WRITE $$LJ^XLFSTR(NAME,37," ")_@DATA@(ACCOUNT,NAME)
 +32                       IF ($Y+1)<IOSL
                               WRITE !
 +33                       SET OUTPUT=1
                       End DoDot:2
               End DoDot:1
               if $GET(STOP)
                   QUIT 
 +34       IF '$GET(STOP)
               Begin DoDot:1
 +35               IF '$GET(OUTPUT)
                       Begin DoDot:2
 +36                       SET STOP=$$HEADER^ORUTL("PROVIDERS WITH A DETOX/MAINTENANCE ID",.PGNUM,.COL)
 +37                       if STOP
                               QUIT 
 +38                       WRITE !,$$CJ^XLFSTR("0 PROVIDERS FOUND",$SELECT(+$GET(IOM)>0:(IOM-1),1:79)," "),!
                       End DoDot:2
                       if $GET(STOP)
                           QUIT 
 +39               IF ($Y+2)>IOSL
                       SET STOP=$$HEADER^ORUTL("PROVIDERS WITH A DETOX/MAINTENANCE ID",.PGNUM,.COL)
 +40               if $GET(STOP)
                       QUIT 
 +41               WRITE !,$$CJ^XLFSTR("[END OF REPORT]",$SELECT(+$GET(IOM)>0:(IOM-1),1:79)," ")
               End DoDot:1
 +42       KILL @DOCS,@DATA
 +43       if $DATA(ZTQUEUED)
               SET ZTREQ="@"
 +44       QUIT