OR628P ;NA/AJB - Patient Updater for PACT Act ;Nov 06, 2024@12:58:46
 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**628**;Dec 17, 1997;Build 13
 ;
 ; Reference to ^DIC in ICR #10006
 ; Reference to FIND1^DIC in ICR #2051
 ; Reference to UPDATE^DIE in ICR #2053
 ; Reference to ^DIR in ICR #10026
 ; Reference to FMTE^XLFDT in ICR #10103
 ; Reference to $$NOW^XLFDT in ICR #10103
 ; Reference to $$PROD^XUPROD in ICR #4440
 ;
 Q
PATIENT ; update patient data for PACT Act
 ; testing only/non-production accounts only
 I +$$PROD^XUPROD Q
 N DFN S DFN=$$GPT Q:DFN'>0
 N DATA S DATA=$G(^DPT(+DFN,.321))
 N PGI,DLU S PGI=$P(DATA,U,17),DLU=$P(DATA,U,18)
 W !!,$P(DFN,U,2)
 W !!,"Old Value:  ",$S(PGI="":"<no data>",1:PGI),?25,"Last Updated:  ",$S(DLU="":"<no data>",1:$$FMTE^XLFDT(DLU))
 S $P(^DPT(+DFN,.321),U,17)=$S('PGI:1,1:0),$P(^DPT(+DFN,.321),U,18)=$$NOW^XLFDT
 S DATA=$G(^DPT(+DFN,.321))
 S PGI=$P(DATA,U,17),DLU=$P(DATA,U,18)
 W !,"New Value:  ",$S(PGI="":"<no data>",1:PGI),?25,"Last Updated:  ",$S(DLU="":"<no data>",1:$$FMTE^XLFDT(DLU)),!
 D
 . N JOB S JOB=0 F  S JOB=$O(^TMP(JOB)) Q:'JOB  I $D(^TMP(JOB,"SVC",+DFN)) K ^TMP(JOB,"SVC",+DFN)
 I $$FMR("EA","Press <Enter> to continue.")
 Q
POST ; add option for test accounts only
 I +$$PROD^XUPROD Q
 I +$$LU^OR628P(19,"OR PACT ACT") Q
 N ERROR,OPT
 S OPT(19,"+1,",.01)="OR PACT ACT"
 S OPT(19,"+1,",1)="PACT Act Patient Updater"
 S OPT(19,"+1,",3.6)=DUZ
 S OPT(19,"+1,",4)="R"
 S OPT(19,"+1,",10.1)="Patient Updater"
 S OPT(19,"+1,",20)="W @IOF"
 S OPT(19,"+1,",25)="PATIENT^OR628P"
 D UPDATE^DIE("","OPT","","ERROR") I $D(ERROR) X "ZW ERROR"
 Q
FMR(DIR,PRM,DEF,HLP,SCR) ;
 N DILN,DILOCKTM,DISYS
 N DIROUT,DIRUT,DTOUT,DUOUT,X,Y
 S DIR(0)=DIR S:$G(PRM)'="" DIR("A")=PRM S:$G(DEF)'="" DIR("B")=DEF S:$G(SCR)'="" DIR("S")=SCR
 S X=+DIR("A"),Y=$P(DIR("A"),";",2) S:+X DIR("A")=$$SETSTR(Y,"",X,$L(Y))
 I $G(HLP)'="" S DIR("?")=HLP
 I $D(HLP)>1 M DIR=HLP
 D ^DIR
 Q $S(X="@":X,$D(DTOUT):U,$D(DUOUT):U,$D(DIROUT):U,$D(DIRUT):"",1:Y)
GPT() ; ask user for patient
 N %H,%I,DIC,DILOCKTM,DISYS,DTOUT,DUOUT,X,Y
 S DIC=2,DIC(0)="AEIMQ",DIC("A")=" Select PATIENT NAME: " W ! D ^DIC
 Q Y
LU(FILE,NAME,FLAGS,SCREEN,INDEXES) ;
 Q $$FIND1^DIC(FILE,"",$G(FLAGS),NAME,$G(INDEXES),$G(SCREEN))
SETSTR(S,V,X,L) ;
 Q $E(V_$J("",X-1),1,X-1)_$E(S_$J("",L),1,L)_$E(V,X+L,999)
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HOR628P   2353     printed  Sep 23, 2025@20:03:05                                                                                                                                                                                                      Page 2
OR628P    ;NA/AJB - Patient Updater for PACT Act ;Nov 06, 2024@12:58:46
 +1       ;;3.0;ORDER ENTRY/RESULTS REPORTING;**628**;Dec 17, 1997;Build 13
 +2       ;
 +3       ; Reference to ^DIC in ICR #10006
 +4       ; Reference to FIND1^DIC in ICR #2051
 +5       ; Reference to UPDATE^DIE in ICR #2053
 +6       ; Reference to ^DIR in ICR #10026
 +7       ; Reference to FMTE^XLFDT in ICR #10103
 +8       ; Reference to $$NOW^XLFDT in ICR #10103
 +9       ; Reference to $$PROD^XUPROD in ICR #4440
 +10      ;
 +11       QUIT 
PATIENT   ; update patient data for PACT Act
 +1       ; testing only/non-production accounts only
 +2        IF +$$PROD^XUPROD
               QUIT 
 +3        NEW DFN
           SET DFN=$$GPT
           if DFN'>0
               QUIT 
 +4        NEW DATA
           SET DATA=$GET(^DPT(+DFN,.321))
 +5        NEW PGI,DLU
           SET PGI=$PIECE(DATA,U,17)
           SET DLU=$PIECE(DATA,U,18)
 +6        WRITE !!,$PIECE(DFN,U,2)
 +7        WRITE !!,"Old Value:  ",$SELECT(PGI="":"<no data>",1:PGI),?25,"Last Updated:  ",$SELECT(DLU="":"<no data>",1:$$FMTE^XLFDT(DLU))
 +8        SET $PIECE(^DPT(+DFN,.321),U,17)=$SELECT('PGI:1,1:0)
           SET $PIECE(^DPT(+DFN,.321),U,18)=$$NOW^XLFDT
 +9        SET DATA=$GET(^DPT(+DFN,.321))
 +10       SET PGI=$PIECE(DATA,U,17)
           SET DLU=$PIECE(DATA,U,18)
 +11       WRITE !,"New Value:  ",$SELECT(PGI="":"<no data>",1:PGI),?25,"Last Updated:  ",$SELECT(DLU="":"<no data>",1:$$FMTE^XLFDT(DLU)),!
 +12       Begin DoDot:1
 +13           NEW JOB
               SET JOB=0
               FOR 
                   SET JOB=$ORDER(^TMP(JOB))
                   if 'JOB
                       QUIT 
                   IF $DATA(^TMP(JOB,"SVC",+DFN))
                       KILL ^TMP(JOB,"SVC",+DFN)
           End DoDot:1
 +14       IF $$FMR("EA","Press <Enter> to continue.")
 +15       QUIT 
POST      ; add option for test accounts only
 +1        IF +$$PROD^XUPROD
               QUIT 
 +2        IF +$$LU^OR628P(19,"OR PACT ACT")
               QUIT 
 +3        NEW ERROR,OPT
 +4        SET OPT(19,"+1,",.01)="OR PACT ACT"
 +5        SET OPT(19,"+1,",1)="PACT Act Patient Updater"
 +6        SET OPT(19,"+1,",3.6)=DUZ
 +7        SET OPT(19,"+1,",4)="R"
 +8        SET OPT(19,"+1,",10.1)="Patient Updater"
 +9        SET OPT(19,"+1,",20)="W @IOF"
 +10       SET OPT(19,"+1,",25)="PATIENT^OR628P"
 +11       DO UPDATE^DIE("","OPT","","ERROR")
           IF $DATA(ERROR)
               XECUTE "ZW ERROR"
 +12       QUIT 
FMR(DIR,PRM,DEF,HLP,SCR) ;
 +1        NEW DILN,DILOCKTM,DISYS
 +2        NEW DIROUT,DIRUT,DTOUT,DUOUT,X,Y
 +3        SET DIR(0)=DIR
           if $GET(PRM)'=""
               SET DIR("A")=PRM
           if $GET(DEF)'=""
               SET DIR("B")=DEF
           if $GET(SCR)'=""
               SET DIR("S")=SCR
 +4        SET X=+DIR("A")
           SET Y=$PIECE(DIR("A"),";",2)
           if +X
               SET DIR("A")=$$SETSTR(Y,"",X,$LENGTH(Y))
 +5        IF $GET(HLP)'=""
               SET DIR("?")=HLP
 +6        IF $DATA(HLP)>1
               MERGE DIR=HLP
 +7        DO ^DIR
 +8        QUIT $SELECT(X="@":X,$DATA(DTOUT):U,$DATA(DUOUT):U,$DATA(DIROUT):U,$DATA(DIRUT):"",1:Y)
GPT()     ; ask user for patient
 +1        NEW %H,%I,DIC,DILOCKTM,DISYS,DTOUT,DUOUT,X,Y
 +2        SET DIC=2
           SET DIC(0)="AEIMQ"
           SET DIC("A")=" Select PATIENT NAME: "
           WRITE !
           DO ^DIC
 +3        QUIT Y
LU(FILE,NAME,FLAGS,SCREEN,INDEXES) ;
 +1        QUIT $$FIND1^DIC(FILE,"",$GET(FLAGS),NAME,$GET(INDEXES),$GET(SCREEN))
SETSTR(S,V,X,L) ;
 +1        QUIT $EXTRACT(V_$JUSTIFY("",X-1),1,X-1)_$EXTRACT(S_$JUSTIFY("",L),1,L)_$EXTRACT(V,X+L,999)