PSOSPML2 ;BIRM/MFR - View/Process Export Batch Listman Driver ;10/7/20  16:12
 ;;7.0;OUTPATIENT PHARMACY;**408,451,625**;DEC 1997;Build 42
 ;
 N BATCHIEN,DIR,DIRUT,DTOUT,DUOUT,X,DIC,VALM,VALMCNT,VALMHDR,VALMBCK,VALMSG,PSOLSTLN
 ;
BAT ; Single Batch Selection
 W ! K DIC S DIC("A")="Export Batch #: ",DIC="^PS(58.42,",DIC(0)="QEAM"
 K BATCHIEN D ^DIC I X="^"!$D(DUOUT)!$D(DTOUT)!(Y<0) G EXIT
 S BATCHIEN=+Y
 ;
 D EN(BATCHIEN)
 ;
 G BAT
 ;
EN(BATCHIEN) ; Entry point
 D EN^VALM("PSO SPMP VIEW/EXPORT BATCH")
 D FULL^VALM1
 Q
 ;
HDR ; - Builds the Header section
 K VALMHDR
 S VALMHDR(1)="Batch #: "_$$GET1^DIQ(58.42,BATCHIEN,.01),$E(VALMHDR(1),17)="State: "_$$GET1^DIQ(58.42,BATCHIEN,1)
 S $E(VALMHDR(1),47)="Type: "_$$GET1^DIQ(58.42,BATCHIEN,2)
 S $E(VALMHDR(1),68)="Exported? "_$S($$GET1^DIQ(58.42,BATCHIEN,9,"I"):"YES",1:"NO")
 S VALMHDR(2)="Created on: "_$$GET1^DIQ(58.42,BATCHIEN,8)
 S $E(VALMHDR(2),47)="Exported on: "_$$GET1^DIQ(58.42,BATCHIEN,9)
 S VALMHDR(3)="File: "_$$GET1^DIQ(58.42,BATCHIEN,6)
 N LASTDR,LASTST
 S LASTDR=$O(^PS(58.42,BATCHIEN,"DR",99999),-1) I LASTDR D
 . S LASTST=$P($G(^PS(58.42,BATCHIEN,"DR",LASTDR,0)),"^")
 . I $D(LASTST),LASTST'="<blank>" S $E(VALMHDR(3),43)="Debug Reason: "_$E($P($G(^PS(58.42,BATCHIEN,"DR",LASTDR,0)),"^"),1,30)
 S VALMHDR(4)="Created by: "_$$GET1^DIQ(58.42,BATCHIEN,10,"E") ; PSO*7*625:PSU-14
 D SETHDR()
 Q
 ;
SETHDR() ; - Displays the Header Line
 N HDR,ORD,POS
 ;
 S HDR="   #",$E(HDR,6)="Rx#",$E(HDR,21)="FILL",$E(HDR,27)="DRUG",$E(HDR,70)="SCH",$E(HDR,74)="TYPE"
 S $E(HDR,81)="" D INSTR^VALM1(IORVON_HDR_IOINORM,1,6) ; PSO*7*625:PSU-14 Add line to Y coordinate for VOID Created By
 Q
 ;
INIT ; Builds the Body section
 N RXIEN,RXNUM,I,LINE,TYPE,NODE0,RX,COUNT,DRUGIEN,DRUGNAM,DRUGDEA,DSPLINE,FILL,RXNFLL,BATRXIEN
 ;
 K ^TMP("PSOSPSRT",$J)
 S BATRXIEN=0
 F  S BATRXIEN=$O(^PS(58.42,BATCHIEN,"RX",BATRXIEN)) Q:'BATRXIEN  D
 . S NODE0=$G(^PS(58.42,BATCHIEN,"RX",BATRXIEN,0))
 . S RXIEN=+NODE0,FILL=$P(NODE0,"^",2)
 . S ^TMP("PSOSPSRT",$J,$$GET1^DIQ(52,RXIEN,.01)_"^"_FILL)=BATRXIEN
 ;
 K ^TMP("PSOSPML2",$J) S VALMCNT=0,LINE=0
 S RXNFLL="",COUNT=0
 F  S RXNFLL=$O(^TMP("PSOSPSRT",$J,RXNFLL)) Q:RXNFLL=""  D
 . S BATRXIEN=+$G(^TMP("PSOSPSRT",$J,RXNFLL))
 . S NODE0=$G(^PS(58.42,BATCHIEN,"RX",BATRXIEN,0))
 . S RXIEN=+NODE0,FILL=$P(NODE0,"^",2),TYPE=$P(NODE0,"^",3)
 . S RXNUM=$$GET1^DIQ(52,RXIEN,.01)
 . S DRUGIEN=$$GET1^DIQ(52,RXIEN,6,"I")
 . S DRUGNAM=$E($$GET1^DIQ(50,DRUGIEN,.01),1,45)
 . S DRUGDEA=+$$GET1^DIQ(50,DRUGIEN,3)
 . S COUNT=COUNT+1
 . S DSPLINE=$J(COUNT,4)_" "_RXNUM,$E(DSPLINE,22)=$J(FILL,3)_"  "_DRUGNAM
 . S $E(DSPLINE,70)=$J(DRUGDEA,3)
 . S $E(DSPLINE,74)=$S(TYPE="N":"NEW",TYPE="R":"REVISE",TYPE="V":"VOID",1:"")
 . D SETLN^PSOSPMU1("PSOSPML2",DSPLINE,0,0,0)
 . S ^TMP("PSOSPML2",$J,LINE,"RX")=RXIEN_"^"_FILL_"^"_TYPE
 S VALMCNT=LINE
 Q
 ;
SEL ;Process selection of one entry
 N PSOSEL,XQORM,ORD,PSOTITLE,RXINFO,LINE
 S PSOSEL=+$P(XQORNOD(0),"=",2) I 'PSOSEL S VALMSG="Invalid selection!",VALMBCK="R" Q
 S RXINFO=$G(^TMP("PSOSPML2",$J,PSOSEL,"RX"))
 I 'RXINFO S VALMSG="Invalid selection!",VALMBCK="R" Q
 S PSOTITLE=VALM("TITLE")
 D  ; DO command used to preserve variables PSOTITLE and LINE
 . N PSOTITLE,LINE D EN^PSOSPML4(+RXINFO,$P(RXINFO,"^",2),$P(RXINFO,"^",3))
 S VALMBCK="R",VALM("TITLE")=$G(PSOTITLE)
 D INIT,HDR
 Q
 ;
EXP(MODE) ; Export Batch
 N DIR,Y,DUOUT,DIRUT,STATEIEN,PSOASVER,PSOTXRTS,QUIT,RUNMODE,LASTDR,LASTST,NEWR,FLUSH
 D FULL^VALM1 S VALMBCK="R"
 ;
 S STATEIEN=$$GET1^DIQ(58.42,BATCHIEN,1,"I")
 S PSOASVER=$$GET1^DIQ(58.41,STATEIEN,1,"I")
 S PSOTXRTS=+$$GET1^DIQ(58.41,STATEIEN,12,"I")
 ;
 S QUIT=0,RUNMODE="F"
 I MODE="EXPORT",($$GET1^DIQ(58.42,BATCHIEN,2,"I")'="VD"!PSOTXRTS) D  I QUIT Q
 . W ! K DIRUT,DUOUT,DIR
 . S DIR(0)="SA^B:Background;F:Foreground;D:Debug Mode (Foreground)"
 . S DIR("A",1)="Indicate whether the transmission should be queued to run on the Background"
 . S DIR("A",2)="via TaskMan, on the Foreground (Terminal Screen) or in Debug Mode (Foreground)"
 . S DIR("A",3)="which shows the sFTP (secure File Transfer) connection steps."
 . S DIR("A",3)=""
 . S DIR("A",4)="      Select one of the following:"
 . S DIR("A",5)=""
 . S DIR("A",6)="          B         Background"
 . S DIR("A",7)="          F         Foreground"
 . S DIR("A",8)="          D         Debug Mode (Foreground)"
 . S DIR("A",9)=""
 . S DIR("A")="Running Mode: ",DIR("B")="F",DIR("??")="^D RMHELP^PSOSPML2"
 . D ^DIR I $D(DTOUT)!$D(DIRUT) S QUIT=1 Q
 . S RUNMODE=Y
 . W ! K DIRUT,DUOUT,DIR
 . S DIR("A",1)="The Batch will be transmitted to the state of "_$$GET1^DIQ(58.42,BATCHIEN,1)_"."
 . S DIR("A",2)="",DIR("A")="Confirm",DIR(0)="Y",DIR("B")="N"
 . D ^DIR I $G(DTOUT)!$G(DUOUT)!'Y S QUIT=1 Q
 . I RUNMODE'="B" W ?40,"Please wait..."
 . I RUNMODE="D",($$GET1^DIQ(58.42,BATCHIEN,2,"I")'="RX") D DBUG(BATCHIEN) I QUIT=1 Q
 ;
 I (MODE="VIEW")!(($$GET1^DIQ(58.42,BATCHIEN,2,"I")="VD")&'PSOTXRTS) D  D ^%ZIS K %ZIS Q:POP  U IO
 . D EXMSG($S(MODE="VIEW":0,1:1)) W ! K %ZIS,IOP,POP,ZTSK S %ZIS="QM"
 ;
 ; If export batch type is VOID ONLY, and TRANSMIT RTS is OFF, just display for capture
 I (MODE="VIEW")!(($$GET1^DIQ(58.42,BATCHIEN,2,"I")="VD")&'PSOTXRTS) D
 . W ! D EXPORT^PSOSPMUT(BATCHIEN,"VIEW")
 . D ^%ZISC
 E  D
 . I RUNMODE="B" D  Q
 . . N ZTRTN,ZTIO,ZTDESC,ZTDTH,ZTSK
 . . S ZTRTN="EXPORT^PSOSPMUT("_BATCHIEN_",""EXPORT"",1,1)",ZTIO=""
 . . S ZTDESC="State Prescription Monitoring Program (SPMP) Transmission"
 . . S ZTDTH=$$NOW^XLFDT()
 . . D ^%ZTLOAD W:$D(ZTSK) !!,"Export Background Job Queued to Run.",$C(7),! K ZTSK
 . D EXPORT^PSOSPMUT(BATCHIEN,"EXPORT",0,$S(RUNMODE="D":1,1:0),$G(FLUSH))
 ;
 ; If exporting manually (web upload), update export fields (assumes user will upload file)
 I MODE="EXPORT",$$GET1^DIQ(58.42,BATCHIEN,2,"I")="VD",'PSOTXRTS D
 . D ^%ZISC N DIE,DA,DR S DIE="^PS(58.42,",DA=BATCHIEN
 . S DR="6///<Manual Web Upload>7////"_DUZ_";9///"_$$NOW^XLFDT()
 . D ^DIE
 ;
 K DIR S DIR("A")="Press Return to continue",DIR(0)="E" D ^DIR
 D HDR
 Q
 ;
EXIT ;
 K ^TMP("PSOSPML2",$J)
 Q
 ;
HELP ; Listman HELP entry-point
 Q
 ;
EXMSG(RTSONLY) ;
 W !!?5,"Before continuing, set up your terminal to capture the ASAP"
 W !?5,"formatted data. On some terminals, this can be done by clicking"
 W !?5,"on the 'File' menu above, then click on 'Logging...' and check"
 W !?5,"'Logging on' and 'Disk'."
 W !!?5,"Note: To avoid undesired wrapping of the data saved to the"
 W !?5,"      file, please enter '0;256;9999' at the 'DEVICE:' prompt."
 I '$G(RTSONLY) Q
 W !!?5,"*********************** IMPORTANT ******************************"
 W !?5,"When you upload this file to the state website, make sure to"
 W !?5,"select the correct import option, usually called ""Back Records"
 W !?5,"Out of the System"", to avoid reporting duplicate records for the"
 W !?5,"patients."
 W !?5,"*****************************************************************"
 Q
 ;
RMHELP ; Running Mode Help Text
 W !!?5,"Choose one of the following transmission modes:"
 W !!?5,"Background: Transmission runs in the background via Taskman. This option"
 W !?5,"            will help you simulate the same transmission mode used by the"
 W !?5,"            Scheduled Nightly Transmissions."
 W !!?5,"Foreground: Transmission runs and displays the steps to your terminal"
 W !?5,"            screen."
 W !!?5,"Debug Mode: This is similar to the Foreground mode. The difference is"
 W !?5,"            that the sFTP command used to transfer the file will be run"
 W !?5,"            in 'debug mode'. This option is useful when troubleshooting"
 W !?5,"            transmission problems."
 Q
 ;
DBUG(BATCH) ; flush and debug reason prompt
 I '$D(^XUSEC("PSO SPMP ADMIN",DUZ)) S FLUSH=0 Q
 S FLUSH=0
 K DIRUT,DUOUT,DIR
 W ! S DIR("A")="Do you want to flush the known hosts key",DIR(0)="Y",DIR("B")="N"
 D ^DIR I $G(DTOUT)!$G(DUOUT) S QUIT=1 Q
 S FLUSH=$S(Y:1,1:0) I 'FLUSH S NEWR="<blank>" D F102 Q
 W ! K DIRUT,DUOUT,DIR
 N DIR,DIC,DA,X,Y,DLAYGO,DO,DD
RD S DIR("A")="Reason for Debug",DIR(0)="58.42102,.01" D ^DIR K DIR I $D(DTOUT)!$D(DUOUT) S QUIT=1 Q
 I Y="" W !,$C(7),"This is a required response. Enter '^' to exit" G RD
 S NEWR=Y
 W !
F102 ; add new entry in the DEBUG REASON field #102
 S DLAYGO=58.42102,DIC(0)="L",X=NEWR,DA(1)=BATCHIEN,DIC="^PS(58.42,"_BATCHIEN_",""DR"",",DIC("DR")="1////"_DUZ_";3///"_$$NOW^XLFDT()
 D FILE^DICN K DIC,DLAYGO
 W !
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSOSPML2   8526     printed  Sep 23, 2025@20:11:30                                                                                                                                                                                                    Page 2
PSOSPML2  ;BIRM/MFR - View/Process Export Batch Listman Driver ;10/7/20  16:12
 +1       ;;7.0;OUTPATIENT PHARMACY;**408,451,625**;DEC 1997;Build 42
 +2       ;
 +3        NEW BATCHIEN,DIR,DIRUT,DTOUT,DUOUT,X,DIC,VALM,VALMCNT,VALMHDR,VALMBCK,VALMSG,PSOLSTLN
 +4       ;
BAT       ; Single Batch Selection
 +1        WRITE !
           KILL DIC
           SET DIC("A")="Export Batch #: "
           SET DIC="^PS(58.42,"
           SET DIC(0)="QEAM"
 +2        KILL BATCHIEN
           DO ^DIC
           IF X="^"!$DATA(DUOUT)!$DATA(DTOUT)!(Y<0)
               GOTO EXIT
 +3        SET BATCHIEN=+Y
 +4       ;
 +5        DO EN(BATCHIEN)
 +6       ;
 +7        GOTO BAT
 +8       ;
EN(BATCHIEN) ; Entry point
 +1        DO EN^VALM("PSO SPMP VIEW/EXPORT BATCH")
 +2        DO FULL^VALM1
 +3        QUIT 
 +4       ;
HDR       ; - Builds the Header section
 +1        KILL VALMHDR
 +2        SET VALMHDR(1)="Batch #: "_$$GET1^DIQ(58.42,BATCHIEN,.01)
           SET $EXTRACT(VALMHDR(1),17)="State: "_$$GET1^DIQ(58.42,BATCHIEN,1)
 +3        SET $EXTRACT(VALMHDR(1),47)="Type: "_$$GET1^DIQ(58.42,BATCHIEN,2)
 +4        SET $EXTRACT(VALMHDR(1),68)="Exported? "_$SELECT($$GET1^DIQ(58.42,BATCHIEN,9,"I"):"YES",1:"NO")
 +5        SET VALMHDR(2)="Created on: "_$$GET1^DIQ(58.42,BATCHIEN,8)
 +6        SET $EXTRACT(VALMHDR(2),47)="Exported on: "_$$GET1^DIQ(58.42,BATCHIEN,9)
 +7        SET VALMHDR(3)="File: "_$$GET1^DIQ(58.42,BATCHIEN,6)
 +8        NEW LASTDR,LASTST
 +9        SET LASTDR=$ORDER(^PS(58.42,BATCHIEN,"DR",99999),-1)
           IF LASTDR
               Begin DoDot:1
 +10               SET LASTST=$PIECE($GET(^PS(58.42,BATCHIEN,"DR",LASTDR,0)),"^")
 +11               IF $DATA(LASTST)
                       IF LASTST'="<blank>"
                           SET $EXTRACT(VALMHDR(3),43)="Debug Reason: "_$EXTRACT($PIECE($GET(^PS(58.42,BATCHIEN,"DR",LASTDR,0)),"^"),1,30)
               End DoDot:1
 +12      ; PSO*7*625:PSU-14
           SET VALMHDR(4)="Created by: "_$$GET1^DIQ(58.42,BATCHIEN,10,"E")
 +13       DO SETHDR()
 +14       QUIT 
 +15      ;
SETHDR()  ; - Displays the Header Line
 +1        NEW HDR,ORD,POS
 +2       ;
 +3        SET HDR="   #"
           SET $EXTRACT(HDR,6)="Rx#"
           SET $EXTRACT(HDR,21)="FILL"
           SET $EXTRACT(HDR,27)="DRUG"
           SET $EXTRACT(HDR,70)="SCH"
           SET $EXTRACT(HDR,74)="TYPE"
 +4       ; PSO*7*625:PSU-14 Add line to Y coordinate for VOID Created By
           SET $EXTRACT(HDR,81)=""
           DO INSTR^VALM1(IORVON_HDR_IOINORM,1,6)
 +5        QUIT 
 +6       ;
INIT      ; Builds the Body section
 +1        NEW RXIEN,RXNUM,I,LINE,TYPE,NODE0,RX,COUNT,DRUGIEN,DRUGNAM,DRUGDEA,DSPLINE,FILL,RXNFLL,BATRXIEN
 +2       ;
 +3        KILL ^TMP("PSOSPSRT",$JOB)
 +4        SET BATRXIEN=0
 +5        FOR 
               SET BATRXIEN=$ORDER(^PS(58.42,BATCHIEN,"RX",BATRXIEN))
               if 'BATRXIEN
                   QUIT 
               Begin DoDot:1
 +6                SET NODE0=$GET(^PS(58.42,BATCHIEN,"RX",BATRXIEN,0))
 +7                SET RXIEN=+NODE0
                   SET FILL=$PIECE(NODE0,"^",2)
 +8                SET ^TMP("PSOSPSRT",$JOB,$$GET1^DIQ(52,RXIEN,.01)_"^"_FILL)=BATRXIEN
               End DoDot:1
 +9       ;
 +10       KILL ^TMP("PSOSPML2",$JOB)
           SET VALMCNT=0
           SET LINE=0
 +11       SET RXNFLL=""
           SET COUNT=0
 +12       FOR 
               SET RXNFLL=$ORDER(^TMP("PSOSPSRT",$JOB,RXNFLL))
               if RXNFLL=""
                   QUIT 
               Begin DoDot:1
 +13               SET BATRXIEN=+$GET(^TMP("PSOSPSRT",$JOB,RXNFLL))
 +14               SET NODE0=$GET(^PS(58.42,BATCHIEN,"RX",BATRXIEN,0))
 +15               SET RXIEN=+NODE0
                   SET FILL=$PIECE(NODE0,"^",2)
                   SET TYPE=$PIECE(NODE0,"^",3)
 +16               SET RXNUM=$$GET1^DIQ(52,RXIEN,.01)
 +17               SET DRUGIEN=$$GET1^DIQ(52,RXIEN,6,"I")
 +18               SET DRUGNAM=$EXTRACT($$GET1^DIQ(50,DRUGIEN,.01),1,45)
 +19               SET DRUGDEA=+$$GET1^DIQ(50,DRUGIEN,3)
 +20               SET COUNT=COUNT+1
 +21               SET DSPLINE=$JUSTIFY(COUNT,4)_" "_RXNUM
                   SET $EXTRACT(DSPLINE,22)=$JUSTIFY(FILL,3)_"  "_DRUGNAM
 +22               SET $EXTRACT(DSPLINE,70)=$JUSTIFY(DRUGDEA,3)
 +23               SET $EXTRACT(DSPLINE,74)=$SELECT(TYPE="N":"NEW",TYPE="R":"REVISE",TYPE="V":"VOID",1:"")
 +24               DO SETLN^PSOSPMU1("PSOSPML2",DSPLINE,0,0,0)
 +25               SET ^TMP("PSOSPML2",$JOB,LINE,"RX")=RXIEN_"^"_FILL_"^"_TYPE
               End DoDot:1
 +26       SET VALMCNT=LINE
 +27       QUIT 
 +28      ;
SEL       ;Process selection of one entry
 +1        NEW PSOSEL,XQORM,ORD,PSOTITLE,RXINFO,LINE
 +2        SET PSOSEL=+$PIECE(XQORNOD(0),"=",2)
           IF 'PSOSEL
               SET VALMSG="Invalid selection!"
               SET VALMBCK="R"
               QUIT 
 +3        SET RXINFO=$GET(^TMP("PSOSPML2",$JOB,PSOSEL,"RX"))
 +4        IF 'RXINFO
               SET VALMSG="Invalid selection!"
               SET VALMBCK="R"
               QUIT 
 +5        SET PSOTITLE=VALM("TITLE")
 +6       ; DO command used to preserve variables PSOTITLE and LINE
           Begin DoDot:1
 +7            NEW PSOTITLE,LINE
               DO EN^PSOSPML4(+RXINFO,$PIECE(RXINFO,"^",2),$PIECE(RXINFO,"^",3))
           End DoDot:1
 +8        SET VALMBCK="R"
           SET VALM("TITLE")=$GET(PSOTITLE)
 +9        DO INIT
           DO HDR
 +10       QUIT 
 +11      ;
EXP(MODE) ; Export Batch
 +1        NEW DIR,Y,DUOUT,DIRUT,STATEIEN,PSOASVER,PSOTXRTS,QUIT,RUNMODE,LASTDR,LASTST,NEWR,FLUSH
 +2        DO FULL^VALM1
           SET VALMBCK="R"
 +3       ;
 +4        SET STATEIEN=$$GET1^DIQ(58.42,BATCHIEN,1,"I")
 +5        SET PSOASVER=$$GET1^DIQ(58.41,STATEIEN,1,"I")
 +6        SET PSOTXRTS=+$$GET1^DIQ(58.41,STATEIEN,12,"I")
 +7       ;
 +8        SET QUIT=0
           SET RUNMODE="F"
 +9        IF MODE="EXPORT"
               IF ($$GET1^DIQ(58.42,BATCHIEN,2,"I")'="VD"!PSOTXRTS)
                   Begin DoDot:1
 +10                   WRITE !
                       KILL DIRUT,DUOUT,DIR
 +11                   SET DIR(0)="SA^B:Background;F:Foreground;D:Debug Mode (Foreground)"
 +12                   SET DIR("A",1)="Indicate whether the transmission should be queued to run on the Background"
 +13                   SET DIR("A",2)="via TaskMan, on the Foreground (Terminal Screen) or in Debug Mode (Foreground)"
 +14                   SET DIR("A",3)="which shows the sFTP (secure File Transfer) connection steps."
 +15                   SET DIR("A",3)=""
 +16                   SET DIR("A",4)="      Select one of the following:"
 +17                   SET DIR("A",5)=""
 +18                   SET DIR("A",6)="          B         Background"
 +19                   SET DIR("A",7)="          F         Foreground"
 +20                   SET DIR("A",8)="          D         Debug Mode (Foreground)"
 +21                   SET DIR("A",9)=""
 +22                   SET DIR("A")="Running Mode: "
                       SET DIR("B")="F"
                       SET DIR("??")="^D RMHELP^PSOSPML2"
 +23                   DO ^DIR
                       IF $DATA(DTOUT)!$DATA(DIRUT)
                           SET QUIT=1
                           QUIT 
 +24                   SET RUNMODE=Y
 +25                   WRITE !
                       KILL DIRUT,DUOUT,DIR
 +26                   SET DIR("A",1)="The Batch will be transmitted to the state of "_$$GET1^DIQ(58.42,BATCHIEN,1)_"."
 +27                   SET DIR("A",2)=""
                       SET DIR("A")="Confirm"
                       SET DIR(0)="Y"
                       SET DIR("B")="N"
 +28                   DO ^DIR
                       IF $GET(DTOUT)!$GET(DUOUT)!'Y
                           SET QUIT=1
                           QUIT 
 +29                   IF RUNMODE'="B"
                           WRITE ?40,"Please wait..."
 +30                   IF RUNMODE="D"
                           IF ($$GET1^DIQ(58.42,BATCHIEN,2,"I")'="RX")
                               DO DBUG(BATCHIEN)
                               IF QUIT=1
                                   QUIT 
                   End DoDot:1
                   IF QUIT
                       QUIT 
 +31      ;
 +32       IF (MODE="VIEW")!(($$GET1^DIQ(58.42,BATCHIEN,2,"I")="VD")&'PSOTXRTS)
               Begin DoDot:1
 +33               DO EXMSG($SELECT(MODE="VIEW":0,1:1))
                   WRITE !
                   KILL %ZIS,IOP,POP,ZTSK
                   SET %ZIS="QM"
               End DoDot:1
               DO ^%ZIS
               KILL %ZIS
               if POP
                   QUIT 
               USE IO
 +34      ;
 +35      ; If export batch type is VOID ONLY, and TRANSMIT RTS is OFF, just display for capture
 +36       IF (MODE="VIEW")!(($$GET1^DIQ(58.42,BATCHIEN,2,"I")="VD")&'PSOTXRTS)
               Begin DoDot:1
 +37               WRITE !
                   DO EXPORT^PSOSPMUT(BATCHIEN,"VIEW")
 +38               DO ^%ZISC
               End DoDot:1
 +39      IF '$TEST
               Begin DoDot:1
 +40               IF RUNMODE="B"
                       Begin DoDot:2
 +41                       NEW ZTRTN,ZTIO,ZTDESC,ZTDTH,ZTSK
 +42                       SET ZTRTN="EXPORT^PSOSPMUT("_BATCHIEN_",""EXPORT"",1,1)"
                           SET ZTIO=""
 +43                       SET ZTDESC="State Prescription Monitoring Program (SPMP) Transmission"
 +44                       SET ZTDTH=$$NOW^XLFDT()
 +45                       DO ^%ZTLOAD
                           if $DATA(ZTSK)
                               WRITE !!,"Export Background Job Queued to Run.",$CHAR(7),!
                           KILL ZTSK
                       End DoDot:2
                       QUIT 
 +46               DO EXPORT^PSOSPMUT(BATCHIEN,"EXPORT",0,$SELECT(RUNMODE="D":1,1:0),$GET(FLUSH))
               End DoDot:1
 +47      ;
 +48      ; If exporting manually (web upload), update export fields (assumes user will upload file)
 +49       IF MODE="EXPORT"
               IF $$GET1^DIQ(58.42,BATCHIEN,2,"I")="VD"
                   IF 'PSOTXRTS
                       Begin DoDot:1
 +50                       DO ^%ZISC
                           NEW DIE,DA,DR
                           SET DIE="^PS(58.42,"
                           SET DA=BATCHIEN
 +51                       SET DR="6///<Manual Web Upload>7////"_DUZ_";9///"_$$NOW^XLFDT()
 +52                       DO ^DIE
                       End DoDot:1
 +53      ;
 +54       KILL DIR
           SET DIR("A")="Press Return to continue"
           SET DIR(0)="E"
           DO ^DIR
 +55       DO HDR
 +56       QUIT 
 +57      ;
EXIT      ;
 +1        KILL ^TMP("PSOSPML2",$JOB)
 +2        QUIT 
 +3       ;
HELP      ; Listman HELP entry-point
 +1        QUIT 
 +2       ;
EXMSG(RTSONLY) ;
 +1        WRITE !!?5,"Before continuing, set up your terminal to capture the ASAP"
 +2        WRITE !?5,"formatted data. On some terminals, this can be done by clicking"
 +3        WRITE !?5,"on the 'File' menu above, then click on 'Logging...' and check"
 +4        WRITE !?5,"'Logging on' and 'Disk'."
 +5        WRITE !!?5,"Note: To avoid undesired wrapping of the data saved to the"
 +6        WRITE !?5,"      file, please enter '0;256;9999' at the 'DEVICE:' prompt."
 +7        IF '$GET(RTSONLY)
               QUIT 
 +8        WRITE !!?5,"*********************** IMPORTANT ******************************"
 +9        WRITE !?5,"When you upload this file to the state website, make sure to"
 +10       WRITE !?5,"select the correct import option, usually called ""Back Records"
 +11       WRITE !?5,"Out of the System"", to avoid reporting duplicate records for the"
 +12       WRITE !?5,"patients."
 +13       WRITE !?5,"*****************************************************************"
 +14       QUIT 
 +15      ;
RMHELP    ; Running Mode Help Text
 +1        WRITE !!?5,"Choose one of the following transmission modes:"
 +2        WRITE !!?5,"Background: Transmission runs in the background via Taskman. This option"
 +3        WRITE !?5,"            will help you simulate the same transmission mode used by the"
 +4        WRITE !?5,"            Scheduled Nightly Transmissions."
 +5        WRITE !!?5,"Foreground: Transmission runs and displays the steps to your terminal"
 +6        WRITE !?5,"            screen."
 +7        WRITE !!?5,"Debug Mode: This is similar to the Foreground mode. The difference is"
 +8        WRITE !?5,"            that the sFTP command used to transfer the file will be run"
 +9        WRITE !?5,"            in 'debug mode'. This option is useful when troubleshooting"
 +10       WRITE !?5,"            transmission problems."
 +11       QUIT 
 +12      ;
DBUG(BATCH) ; flush and debug reason prompt
 +1        IF '$DATA(^XUSEC("PSO SPMP ADMIN",DUZ))
               SET FLUSH=0
               QUIT 
 +2        SET FLUSH=0
 +3        KILL DIRUT,DUOUT,DIR
 +4        WRITE !
           SET DIR("A")="Do you want to flush the known hosts key"
           SET DIR(0)="Y"
           SET DIR("B")="N"
 +5        DO ^DIR
           IF $GET(DTOUT)!$GET(DUOUT)
               SET QUIT=1
               QUIT 
 +6        SET FLUSH=$SELECT(Y:1,1:0)
           IF 'FLUSH
               SET NEWR="<blank>"
               DO F102
               QUIT 
 +7        WRITE !
           KILL DIRUT,DUOUT,DIR
 +8        NEW DIR,DIC,DA,X,Y,DLAYGO,DO,DD
RD         SET DIR("A")="Reason for Debug"
           SET DIR(0)="58.42102,.01"
           DO ^DIR
           KILL DIR
           IF $DATA(DTOUT)!$DATA(DUOUT)
               SET QUIT=1
               QUIT 
 +1        IF Y=""
               WRITE !,$CHAR(7),"This is a required response. Enter '^' to exit"
               GOTO RD
 +2        SET NEWR=Y
 +3        WRITE !
F102      ; add new entry in the DEBUG REASON field #102
 +1        SET DLAYGO=58.42102
           SET DIC(0)="L"
           SET X=NEWR
           SET DA(1)=BATCHIEN
           SET DIC="^PS(58.42,"_BATCHIEN_",""DR"","
           SET DIC("DR")="1////"_DUZ_";3///"_$$NOW^XLFDT()
 +2        DO FILE^DICN
           KILL DIC,DLAYGO
 +3        WRITE !
 +4        QUIT