| 1 | PSOTALK2 ;BIR/EJW - SCRIPTALK ENROLLMENT FUNCTIONS ;3-28-02
 | 
|---|
| 2 |  ;;7.0;OUTPATIENT PHARMACY;**135,182**;DEC 1997
 | 
|---|
| 3 |  ;External reference ^PS(55 supported by DBIA 2228
 | 
|---|
| 4 |  ;External reference ^TMP("TIUP", ^TIUPNAPI, ^TIU(8925.1 supported by DBIA 1911
 | 
|---|
| 5 | ENROLL ;
 | 
|---|
| 6 |  N PSOSTEN,PSOIND,PSOLAST,DFN
 | 
|---|
| 7 |  S PSOIND=""
 | 
|---|
| 8 |  I '$G(PSOFIRST) D INSTR S PSOFIRST=1
 | 
|---|
| 9 |  W !
 | 
|---|
| 10 |  K DIC W ! S DIC="^DPT(",DIC(0)="QEAM",DIC("A")="Select PATIENT: " D ^DIC K DIC I Y<1!($D(DUOUT))!($D(DTOUT)) D CLEAN Q
 | 
|---|
| 11 |  S PSOPT=+Y
 | 
|---|
| 12 |  S DFN=PSOPT D DEM^VADPT I +$G(VADM(6)) W !,"Patient is deceased",! G ENROLL
 | 
|---|
| 13 |  I '$D(^PS(55,PSOPT)) D
 | 
|---|
| 14 |  .S DIC="^PS(55,",DLAYGO=55
 | 
|---|
| 15 |  .K DD,DO S DIC(0)="L",(DINUM,X)=PSOPT D FILE^DICN D:Y<1  K DIC,DA,DR,DD,DO
 | 
|---|
| 16 |  ..S $P(^PS(55,PSOPT,0),"^")=PSOPT K DIK S DA=PSOPT,DIK="^PS(55,",DIK(1)=.01 D EN^DIK K DIK
 | 
|---|
| 17 |  S PSOSTEN=$G(^PS(55,"ASTALK",PSOPT))
 | 
|---|
| 18 |  S DIR(0)="Y",DIR("A")="SCRIPTALK PATIENT" S DIR("B")=$S(PSOSTEN:"Y",1:"N") D ^DIR K DIR
 | 
|---|
| 19 |  S PSOSTEN=Y
 | 
|---|
| 20 |  I PSOSTEN D MAIL,GETIND
 | 
|---|
| 21 |  D SET55
 | 
|---|
| 22 |  D NOTE(PSOPT)
 | 
|---|
| 23 |  K PSOIND,PSOPT,PSOSTEN,PSOLAST,X,Y
 | 
|---|
| 24 |  G ENROLL
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 | SET55 ; SET MULTIPLE FOR SCRIPTALK ENROLLMENT AUDIT
 | 
|---|
| 27 |  N PSODA,PSOERR,PSOIEN,PSOSTDT
 | 
|---|
| 28 |  I PSOPT="" Q
 | 
|---|
| 29 |  S PSOSTDT=$$NOW^XLFDT
 | 
|---|
| 30 |  S PSODA(55.0108,"+1,"_PSOPT_",",.01)=PSOSTDT
 | 
|---|
| 31 |  S PSODA(55.0108,"+1,"_PSOPT_",",1)=PSOSTEN
 | 
|---|
| 32 |  S PSODA(55.0108,"+1,"_PSOPT_",",2)=PSOIND
 | 
|---|
| 33 |  S PSODA(55.0108,"+1,"_PSOPT_",",3)=$G(DUZ)
 | 
|---|
| 34 |  D UPDATE^DIE("","PSODA","PSOIEN","PSOERR")
 | 
|---|
| 35 |  Q
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 | GETIND ; GET INDICATION FOR ENROLLMENT
 | 
|---|
| 38 |  S PSOLAST=$P($G(^PS(55,PSOPT,"SCTALK",0)),"^",4) I PSOLAST'="" S PSOIND=$P($G(^PS(55,PSOPT,"SCTALK",PSOLAST,0)),"^",3) ; IF PRIOR ANSWER WAS 'Y' - GET PRIOR INDICATION
 | 
|---|
| 39 |  S DIR(0)="S^B:BLIND VETERAN;L:LOW VISION",DIR("A")="INDICATION" S DIR("B")=PSOIND D ^DIR K DIR
 | 
|---|
| 40 |  S PSOIND=$G(Y)
 | 
|---|
| 41 |  Q
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | INSTR ;
 | 
|---|
| 44 |  W @IOF
 | 
|---|
| 45 |  I $O(^TIU(8925.1,"B","SCRIPTALK ENROLLMENT",0))="" Q
 | 
|---|
| 46 |  W !
 | 
|---|
| 47 |  W !?3,"At the conclusion of this enrollment option, you will be given"
 | 
|---|
| 48 |  W !?3,"the opportunity to sign a progress note recording the enrollment"
 | 
|---|
| 49 |  W !?3,"of new ScripTalk patients. If you modify the record of a patient"
 | 
|---|
| 50 |  W !?3,"that was previously enrolled, and they remain enrolled, you may"
 | 
|---|
| 51 |  W !?3,"wish to either delete or edit the text of the generated note."
 | 
|---|
| 52 |  W !!
 | 
|---|
| 53 |  K PSOSQ,PSOTT,PSOSTP
 | 
|---|
| 54 |  Q
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 | NOTE(PSOPT) ;CREATE A PROGRESS NOTE FOR PATIENT 'PSOPT' ABOUT ENROLLMENT
 | 
|---|
| 57 |  Q:'+$G(^PS(55,"ASTALK",PSOPT))  ; IF THIS PTS ENROLLMENT ISN'T ACTIVE
 | 
|---|
| 58 |  S PSOTITL=$O(^TIU(8925.1,"B","SCRIPTALK ENROLLMENT",0))
 | 
|---|
| 59 |  Q:'+PSOTITL  ;IF NO TITLE ON SYSTEM
 | 
|---|
| 60 |  S PSOPTNM=$P($G(^DPT(PSOPT,0)),U,1)
 | 
|---|
| 61 |  S PSOLINE=1
 | 
|---|
| 62 |  S ^TMP("TIUP",$J,PSOLINE,0)=PSOPTNM_" was enrolled in ScripTalk today, and is now eligible to receive"
 | 
|---|
| 63 |  S PSOLINE=PSOLINE+1
 | 
|---|
| 64 |  S ^TMP("TIUP",$J,PSOLINE,0)="prescriptions with encoded speech-capable labels."
 | 
|---|
| 65 |  S ^TMP("TIUP",$J,0)=U_U_PSOLINE_PSOLINE_U_DT_U
 | 
|---|
| 66 | INSTALL K TIUDA
 | 
|---|
| 67 |  D NEW^TIUPNAPI(.TIUDA,PSOPT,DUZ,$$NOW^XLFDT,PSOTITL)
 | 
|---|
| 68 |  Q
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 | CLEAN K PSOLINE,PSOPTNM,PSOTITL,PSOSTP,PSOPT,PSOFIRST
 | 
|---|
| 71 |  K ^TMP("TIUP",$J)
 | 
|---|
| 72 |  Q
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 | AUDREP ;
 | 
|---|
| 75 |  K DIC W ! S DIC="^DPT(",DIC(0)="QEAM",DIC("A")="Select PATIENT: " D ^DIC K DIC I Y<1!($D(DUOUT))!($D(DTOUT)) Q
 | 
|---|
| 76 |  S PSOPT=+Y
 | 
|---|
| 77 |  S ZTSAVE("*")=""
 | 
|---|
| 78 |  W !!,"You may queue the report to print, if you wish.",!
 | 
|---|
| 79 |  K %ZIS,POP,IOP S %ZIS="QM" D ^%ZIS I $G(POP) W !!,"Nothing queued to print.",! G DONE
 | 
|---|
| 80 |  I $D(IO("Q")) S ZTRTN="AUDRQ^PSOTALK2",ZTDESC="Report of ScripTalk Enrollment",ZTSAVE("*")="" D ^%ZTLOAD K %ZSI W !,"Report queued to print.",! G DONE
 | 
|---|
| 81 | AUDRQ ;
 | 
|---|
| 82 |  U IO
 | 
|---|
| 83 |  S PSOOUT=0,PSODV=$S($E(IOST)="C":"C",1:"P")
 | 
|---|
| 84 |  S PSOPGCT=1
 | 
|---|
| 85 |  D TITLEA I PSOOUT G DONE
 | 
|---|
| 86 |  S PSOAUD=0 F  S PSOAUD=$O(^PS(55,PSOPT,"SCTALK",PSOAUD)) Q:PSOAUD=""  D  I PSOOUT Q
 | 
|---|
| 87 |  .S PSONODE=$G(^PS(55,PSOPT,"SCTALK",PSOAUD,0))
 | 
|---|
| 88 |  .S PSOSTAT=$P(PSONODE,"^",2)
 | 
|---|
| 89 |  .S PSOTIME=$$FMTE^XLFDT($P(PSONODE,U,1)),PSOTIME=$P(PSOTIME,"@")_"  "_$P(PSOTIME,"@",2)
 | 
|---|
| 90 |  .S PSOTIME=$P(PSOTIME,":",1,2)
 | 
|---|
| 91 |  .I ($Y+5)>IOSL&('$G(PSOOUT)) D TITLEA I PSOOUT Q
 | 
|---|
| 92 |  .W !,?2,PSOTIME
 | 
|---|
| 93 |  .W ?25,$S(PSOSTAT:"YES",PSOSTAT=0:"NO",1:" ")
 | 
|---|
| 94 |  .S PSOIND=$P(PSONODE,"^",3)
 | 
|---|
| 95 |  .I 'PSOSTAT S PSOIND=""
 | 
|---|
| 96 |  .W ?35,$S(PSOIND="B":"BLIND VETERAN",PSOIND="L":"LOW VISION",1:"")
 | 
|---|
| 97 |  .I $P(PSONODE,"^",4)'="" D  W ?52,$E(PSODUZ,1,27)
 | 
|---|
| 98 |  ..K DIC,X,Y S DIC="^VA(200,",DIC(0)="M",X="`"_+$P(PSONODE,"^",4) D ^DIC S PSODUZ=$S(+Y:$P(Y,"^",2),1:"UNKNOWN") K DIC,X,Y
 | 
|---|
| 99 |  I PSOOUT G DONE
 | 
|---|
| 100 | END ;
 | 
|---|
| 101 |  I '$G(PSOOUT),$G(PSODV)="C" W !!,"** End of Report **" K DIR S DIR(0)="E",DIR("A")="Press Return to continue" D ^DIR K DIR
 | 
|---|
| 102 |  I $G(PSODV)="C" W !
 | 
|---|
| 103 |  E  W @IOF
 | 
|---|
| 104 | DONE K PSOPT,PSOAUD,PSONODE,PSOIND,PSOSTAT,PSOPGCT,Y,IOP,POP,IO("Q"),DIRUT,DUOUT,DTOUT,PSODV,PSOOUT
 | 
|---|
| 105 |  K PSODFN,PSOIND,PSOSSN,PSOPRINT,PSONM,^TMP($J,"PSOTALK2")
 | 
|---|
| 106 |  D ^%ZISC S:$D(ZTQUEUED) ZTREQ="@"
 | 
|---|
| 107 |  Q
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 | TITLEA ;
 | 
|---|
| 110 |  I $G(PSODV)="C",$G(PSOPGCT)'=1 W ! K DIR S DIR(0)="E" D ^DIR K DIR I 'Y S PSOOUT=1 Q
 | 
|---|
| 111 |  W @IOF
 | 
|---|
| 112 |  W !,"SCRIPTALK AUDIT HISTORY" S Y=DT X ^DD("DD") W ?40,"Date printed: ",Y,?70,"Page: ",PSOPGCT,!!
 | 
|---|
| 113 |  S PSOPGCT=PSOPGCT+1
 | 
|---|
| 114 |  W !,"Name: ",$E($P(^DPT(PSOPT,0),"^"),1,25),"    Currently enrolled: ",$S($G(^PS(55,"ASTALK",PSOPT)):"YES",1:"NO"),!!
 | 
|---|
| 115 |  W !?24,"Previous",?35,"Previous"
 | 
|---|
| 116 |  W !,?2,"Date-Time Set",?25,"Status",?35,"Indication",?52,"Entered by"
 | 
|---|
| 117 |  W !,?2,"-------------------",?24,"--------",?35,"-------------",?52,"--------------------",!
 | 
|---|
| 118 |  Q
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 | ENQ ;
 | 
|---|
| 121 |  W ! K DIR S DIR(0)="Y",DIR("B")="Y",DIR("A")="Do you want to report only active enrollees" D ^DIR K DIR D:$D(DIRUT) MESS G:Y["^"!($D(DIRUT)) DONE S PSOPRINT=$S(Y:1,1:0)
 | 
|---|
| 122 |  W !!,"You may queue the report to print, if you wish.",!
 | 
|---|
| 123 |  K %ZIS,POP,IOP S %ZIS="QM" D ^%ZIS I $G(POP) W !!,"Nothing queued to print.",! G DONE
 | 
|---|
| 124 |  I $D(IO("Q")) S ZTRTN="RPENROLL^PSOTALK2",ZTDESC="Report of ScripTalk Enrollment",ZTSAVE("*")="" D ^%ZTLOAD K %ZSI W !,"Report queued to print.",! G DONE
 | 
|---|
| 125 | RPENROLL ;
 | 
|---|
| 126 |  U IO
 | 
|---|
| 127 |  S PSOOUT=0,PSODV=$S($E(IOST)="C":"C",1:"P")
 | 
|---|
| 128 |  S PSOPGCT=1
 | 
|---|
| 129 |  D TITLEE I PSOOUT G DONE
 | 
|---|
| 130 |  K ^TMP($J,"PSOTALK2")
 | 
|---|
| 131 |  D GETDFN
 | 
|---|
| 132 |  I '$D(^TMP($J,"PSOTALK2")) W !!,"No patients to report!",!! G DONE
 | 
|---|
| 133 |  S PSONM="" F  S PSONM=$O(^TMP($J,"PSOTALK2",PSONM)) Q:PSONM=""  S PSOSSN="" F  S PSOSSN=$O(^TMP($J,"PSOTALK2",PSONM,PSOSSN)) Q:PSOSSN=""  D  I PSOOUT G DONE
 | 
|---|
| 134 |  .S PSOIND=^TMP($J,"PSOTALK2",PSONM,PSOSSN)
 | 
|---|
| 135 |  .I ($Y+5)>IOSL&('$G(PSOOUT)) D TITLEE I PSOOUT Q
 | 
|---|
| 136 |  .W !,PSONM,?25," ",PSOSSN I 'PSOPRINT W ?43,$S(+$P(PSOIND,"^",3):"YES",1:"NO")
 | 
|---|
| 137 |  .W !,?3,$S($P(PSOIND,"^",2)="B":"BLIND VETERAN",$P(PSOIND,"^",2)="L":"LOW VISION",1:" ")
 | 
|---|
| 138 |  .W ?58,$$FMTE^XLFDT($P(PSOIND,"^")),!
 | 
|---|
| 139 |  G END
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 | TITLEE ;
 | 
|---|
| 142 |  I $G(PSODV)="C",$G(PSOPGCT)'=1 W ! K DIR S DIR(0)="E" D ^DIR K DIR I 'Y S PSOOUT=1 Q
 | 
|---|
| 143 |  W @IOF
 | 
|---|
| 144 |  W !,"Report of ScripTalk Enrollment",?40,"Date printed: "_$$FMTE^XLFDT(DT),?70,"Page: ",PSOPGCT,!!
 | 
|---|
| 145 |  S PSOPGCT=PSOPGCT+1
 | 
|---|
| 146 |  W !,"Patient name",?25," SSN" I 'PSOPRINT W ?40,"Active enrollee?"
 | 
|---|
| 147 |  W !?3,"Indication",?57,"Enrollment last updated"
 | 
|---|
| 148 |  W !,"--------------",?25,"-----------" W:'PSOPRINT ?40,"-------------" W ?57,"-----------------------",!
 | 
|---|
| 149 |  Q
 | 
|---|
| 150 |  ;
 | 
|---|
| 151 | GETDFN ;
 | 
|---|
| 152 |  N DFN
 | 
|---|
| 153 |  S PSODFN=0 F  S PSODFN=$O(^PS(55,"ASTALK",PSODFN)) Q:PSODFN=""  D
 | 
|---|
| 154 |  .I PSOPRINT I '$G(^PS(55,"ASTALK",PSODFN)) Q
 | 
|---|
| 155 |  .S DFN=PSODFN D DEM^VADPT I +$G(VADM(6)) Q  ; DECEASED
 | 
|---|
| 156 |  .S PSOSEQ=$P($G(^PS(55,DFN,"SCTALK",0)),"^",4)
 | 
|---|
| 157 |  .S PSOAUD=""
 | 
|---|
| 158 |  .I PSOSEQ'="" S PSOAUD=$G(^PS(55,DFN,"SCTALK",PSOSEQ,0))
 | 
|---|
| 159 |  .I $G(VA("PID"))="" S VA("PID")=" "
 | 
|---|
| 160 |  .S ^TMP($J,"PSOTALK2",VADM(1),VA("PID"))=$P(PSOAUD,"^")_"^"_$P(PSOAUD,"^",3)_"^"_$G(^PS(55,"ASTALK",PSODFN))
 | 
|---|
| 161 |  Q
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 | MESS W !!,"No report printed!",!!
 | 
|---|
| 164 |  Q
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 | MAIL ; MAKE SURE MAIL STATUS IS COMPATIBLE WITH SCRIPTALK PATIENT
 | 
|---|
| 167 |  N MAIL
 | 
|---|
| 168 |  S MAIL=$G(^PS(55,PSOPT,0)) I $P(MAIL,"^",3)>1 Q
 | 
|---|
| 169 | MAILP W !!,"REMINDER: CMOP does not fill ScripTalk prescriptions.Please select mail"
 | 
|---|
| 170 |  W !,"status:  2 (DO NOT MAIL), 3 (LOCAL REGULAR MAIL) or 4 (LOCAL CERTFIED MAIL)."
 | 
|---|
| 171 |  R !,"MAIL: ",MAIL:120
 | 
|---|
| 172 |  I MAIL?1"^".E Q
 | 
|---|
| 173 |  I MAIL<2!(MAIL>4) W !,"INVALID MAIL SETTING - ENTER 2,3, OR 4" G MAILP
 | 
|---|
| 174 |  W "  ",$S(MAIL=2:"DO NOT MAIL",MAIL=3:"LOCAL REGULAR MAIL",1:"LOCAL CERTIFIED MAIL")
 | 
|---|
| 175 |  S $P(^PS(55,PSOPT,0),"^",3)=MAIL
 | 
|---|
| 176 |  Q
 | 
|---|