| 1 | ACKQASU1 ;HCIOFO/BH-Quasar New Visit Utilities routine ; 04/01/99 | 
|---|
| 2 | ;;3.0;QUASAR;;Feb 11, 2000 | 
|---|
| 3 | ;Per VHA Directive 10-93-142, this routine SHOULD NOT be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | CLIN(ACKDIV,ACKOPT) ; prompt for clinic | 
|---|
| 6 | ; inputs: - ACKDIV - selected Division | 
|---|
| 7 | ;           ACKOPT - set to U to force uppercase entry | 
|---|
| 8 | ; returns:  0 - if no valid clinics to select from | 
|---|
| 9 | ;          null - if no clinic selected | 
|---|
| 10 | ;          or X^Y^ where | 
|---|
| 11 | ;                 X - ien of selected clinic | 
|---|
| 12 | ;               & Y - clinic name | 
|---|
| 13 | ; | 
|---|
| 14 | N ACKIEN,ACKDEF,ACKCLINN,ACKC,ACKCLIN,ACKDFLT | 
|---|
| 15 | ; | 
|---|
| 16 | ; get the clinics for the selected Division | 
|---|
| 17 | D GETCLIN(ACKDIV,.CLINVARR,$G(ACKOPT)) | 
|---|
| 18 | ; | 
|---|
| 19 | ; if no valid clinics then exit | 
|---|
| 20 | I CLINVARR=0 S ACKCLIN=0 G CLINX | 
|---|
| 21 | ; | 
|---|
| 22 | ; only one clinic exists, select it then exit | 
|---|
| 23 | I CLINVARR=1 D  G CLINX | 
|---|
| 24 | . S ACKCLIN=$P(CLINVARR(1,1),U,1,2)_U | 
|---|
| 25 | ; | 
|---|
| 26 | ; find users last clinic selection | 
|---|
| 27 | S ACKDEF=$$FIND1^DIC(509850.831,","_ACKDIV_",1,",""," ") | 
|---|
| 28 | S ACKDEF=$S(ACKDEF:$$EXTERNAL^DILFD(509850.831,".01","",ACKDEF),1:"") | 
|---|
| 29 | ; | 
|---|
| 30 | ; ensure users last selection is valid | 
|---|
| 31 | S ACKDEF=$$UP("U",ACKDEF) ; convert to uppercase | 
|---|
| 32 | I ACKDEF'="",'$D(CLINVARR(2,ACKDEF)) S ACKDEF="" | 
|---|
| 33 | S ACKDFLT=$S(ACKDEF="":"",1:"2^"_ACKDEF)  ; passed to input fnctn as default | 
|---|
| 34 | ; | 
|---|
| 35 | ; multiple clinics exist, only one required. | 
|---|
| 36 | I CLINVARR>1 D  G CLINX | 
|---|
| 37 | . D SELECT^ACKQSEL(1,"CLINVARR(2)","CLINVARR(4)","CLINIC^35","D CLINHLP^ACKQASU1",ACKDFLT) | 
|---|
| 38 | . ; get CLINIC IEN | 
|---|
| 39 | . I $O(CLINVARR(4,""))="" S ACKCLIN="" Q  ; quit or timed out | 
|---|
| 40 | . S ACKCLINN=$O(CLINVARR(4,"")),ACKC=CLINVARR(2,ACKCLINN) | 
|---|
| 41 | . S ACKIEN=$P(CLINVARR(1,ACKC),U,1) | 
|---|
| 42 | . D RECALL^DILFD(509850.831,ACKIEN_","_ACKDIV_",1,",DUZ) | 
|---|
| 43 | . S ACKCLIN=$P(CLINVARR(1,ACKC),U,1,2)_U | 
|---|
| 44 | ; | 
|---|
| 45 | CLINX ; end | 
|---|
| 46 | Q ACKCLIN | 
|---|
| 47 | ; | 
|---|
| 48 | CLINHLP ; displays help text for the clinic prompt | 
|---|
| 49 | N X,DIWL,DIWR,DIWF | 
|---|
| 50 | S DIWL=1,DIWR=80,DIWF="" | 
|---|
| 51 | ; | 
|---|
| 52 | S X="     " D ^DIWP | 
|---|
| 53 | S X="    Enter the name of a Clinic from the A&SP Site Parameters File." D ^DIWP | 
|---|
| 54 | S X="    Enter '??' to see a list of the available Clinics, '^' to exit." D ^DIWP | 
|---|
| 55 | D ^DIWW | 
|---|
| 56 | Q | 
|---|
| 57 | ; | 
|---|
| 58 | ; | 
|---|
| 59 | GETCLIN(ACKDIV,CLINVARR,ACKOPT) ; get all the valid clinics and put them in CLINVARR | 
|---|
| 60 | ; | 
|---|
| 61 | ;   INPUT:   ACKDIV - the selected Division | 
|---|
| 62 | ;            CLINVARR - array used to return clinics (passed by reference) | 
|---|
| 63 | ;            ACKOPT - set to U for Uppercase entry only | 
|---|
| 64 | ;   RETURNS: CLINVARR= number found (n) | 
|---|
| 65 | ;            CLINVARR(1,n)=x^name | 
|---|
| 66 | ;            CLINVARR(2,name)=n | 
|---|
| 67 | ;        and CLINVARR(3,x)=n | 
|---|
| 68 | ;              where x=IEN of clinic from parameters file | 
|---|
| 69 | ;                and name=the clinic name | 
|---|
| 70 | ; | 
|---|
| 71 | N ACKTGT,ACKMSG,ACKSCRN,ACK,CLIN,CLINNAME | 
|---|
| 72 | K CLINVARR | 
|---|
| 73 | D LIST^DIC(509850.831,","_ACKDIV_",1,",".01","I","*","","","","","","ACKTGT","ACKMSG") | 
|---|
| 74 | ; now transfer to output array | 
|---|
| 75 | S CLINVARR=$P(ACKTGT("DILIST",0),U,1) | 
|---|
| 76 | FOR ACK=1:1:CLINVARR D | 
|---|
| 77 | . S CLIN=ACKTGT("DILIST",1,ACK) | 
|---|
| 78 | . S CLINNAME=$$GET1^DIQ(44,CLIN,.01) | 
|---|
| 79 | . S CLINVARR(1,ACK)=CLIN_U_CLINNAME | 
|---|
| 80 | . S CLINVARR(2,$$UP($G(ACKOPT),CLINNAME))=ACK | 
|---|
| 81 | . S CLINVARR(3,CLIN)=ACK | 
|---|
| 82 | Q | 
|---|
| 83 | ; | 
|---|
| 84 | UP(ACKOPT,X) ;   Convert X to uppercase (if requested) | 
|---|
| 85 | I ACKOPT["U" Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") | 
|---|
| 86 | Q X | 
|---|
| 87 | ; | 
|---|
| 88 | DUPCHK(ACKPAT,ACKVD) ; Check for Duplicate Visit by this patient on this Date | 
|---|
| 89 | ;  this function will determine if the patient has another visit on | 
|---|
| 90 | ;  the selected date. If so the user may choose to select an | 
|---|
| 91 | ;  existing visit, or confirm that they are entering a new visit. | 
|---|
| 92 | ;  inputs: ACKPAT - patient DFN | 
|---|
| 93 | ;          ACKVD - visit date | 
|---|
| 94 | ;  returns:   -1 if user quit or timed out | 
|---|
| 95 | ;              0 create a new visit | 
|---|
| 96 | ;                (ie either no duplicates or user did not select | 
|---|
| 97 | ;                 a duplicate) | 
|---|
| 98 | ;             >0 ien of selected visit | 
|---|
| 99 | ; | 
|---|
| 100 | N ACKVIEN,ACKTGT,ACKCP,ACKCLN,ACKVSC,ACKTIME,ACKCT,ACKVSEL,ACKSEL | 
|---|
| 101 | N X,Y,%,DIR,ACKSEQ,ACKTIME,ACKVSEL | 
|---|
| 102 | S ACKVSEL=0 ; return variable | 
|---|
| 103 | ; | 
|---|
| 104 | ; initialise temp file for data storage | 
|---|
| 105 | K ^TMP("ACKQASU1",$J,"DUPCHK") | 
|---|
| 106 | ; | 
|---|
| 107 | ; get all visits for patient on given date, create array in time order | 
|---|
| 108 | S ACKVIEN=0,ACKCT=0 | 
|---|
| 109 | F  S ACKVIEN=$O(^ACK(509850.6,"APD",ACKPAT,ACKVD,ACKVIEN)) Q:'ACKVIEN  D | 
|---|
| 110 | . K ACKTGT S ACKCT=ACKCT+1 | 
|---|
| 111 | . D GETS^DIQ(509850.6,ACKVIEN_",","2.5;2.6;4;55","I","ACKTGT") | 
|---|
| 112 | . S ACKCP=ACKTGT(509850.6,ACKVIEN_",",2.5,"I")   ; is this C&P? | 
|---|
| 113 | . S ACKCLN=ACKTGT(509850.6,ACKVIEN_",",2.6,"I")  ; clinic | 
|---|
| 114 | . S ACKVSC=ACKTGT(509850.6,ACKVIEN_",",4,"I")    ; visit stop code | 
|---|
| 115 | . S ACKTM=+ACKTGT(509850.6,ACKVIEN_",",55,"I")   ; appointment time | 
|---|
| 116 | . S ^TMP("ACKQASU1",$J,"DUPCHK",1,ACKTM,ACKVIEN)="" | 
|---|
| 117 | . S ^TMP("ACKQASU1",$J,"DUPCHK",2,ACKVIEN)=ACKVD_U_ACKCP_U_ACKCLN_U_ACKVSC_U_ACKTM_U | 
|---|
| 118 | ; | 
|---|
| 119 | ; if no duplicate visits found then exit | 
|---|
| 120 | I 'ACKCT S ACKVSEL=0 G DUPCHKX | 
|---|
| 121 | ; | 
|---|
| 122 | ;  Display duplicates for this patient today | 
|---|
| 123 | W !,$S(ACKCT=1:"One visit has ",1:ACKCT_" visits have ")_"already been entered for this date and patient.",! | 
|---|
| 124 | ; | 
|---|
| 125 | ; run down the visits in time order, allocate sequence number and display | 
|---|
| 126 | S ACKTM="",ACKSEQ=0 | 
|---|
| 127 | F  S ACKTM=$O(^TMP("ACKQASU1",$J,"DUPCHK",1,ACKTM)) Q:ACKTM=""  D | 
|---|
| 128 | . S ACKVIEN="" | 
|---|
| 129 | . F  S ACKVIEN=$O(^TMP("ACKQASU1",$J,"DUPCHK",1,ACKTM,ACKVIEN)) Q:ACKVIEN=""  D | 
|---|
| 130 | . . S ACKSEQ=ACKSEQ+1 | 
|---|
| 131 | . . S $P(^TMP("ACKQASU1",$J,"DUPCHK",3,ACKSEQ),U,1)=ACKVIEN | 
|---|
| 132 | . . S TMP=^TMP("ACKQASU1",$J,"DUPCHK",2,ACKVIEN) | 
|---|
| 133 | . . S ACKTIME=$$FMT^ACKQUTL6(ACKTM,1) | 
|---|
| 134 | . . S ACKVD=$P(TMP,U,1) | 
|---|
| 135 | . . S ACKCANDP=$S($P(TMP,U,2):"C&P EXAM",1:"") | 
|---|
| 136 | . . S ACKCLN=$P(TMP,U,3),ACKCLNNM=$S(+ACKCLN=0:"",1:$$GET1^DIQ(44,ACKCLN_",",.01,"E")) ; clinic name | 
|---|
| 137 | . . S ACKVSC=$P(TMP,U,4),ACKSTOP=$$ACKSTOP(ACKVSC)  ; visit stop code | 
|---|
| 138 | . . ; display visits | 
|---|
| 139 | . . W !,$J(ACKSEQ,3),". ",$$DATE(ACKVD) | 
|---|
| 140 | . . W ?20,ACKTIME,?32,$E(ACKCLNNM,1,30),?64,ACKSTOP,?70,ACKCANDP | 
|---|
| 141 | ; | 
|---|
| 142 | ASK1 ; ask if one of the displayed visits is the one to be edited | 
|---|
| 143 | W !!,"Is "_$S(ACKCT=1:"the appointment",1:"one of the appointments") | 
|---|
| 144 | W " shown here the one you wish to edit" | 
|---|
| 145 | S %=2 D YN^DICN | 
|---|
| 146 | I %=-1,%Y?1"^"1.E W !,"Jumping not allowed." G ASK1 | 
|---|
| 147 | ; | 
|---|
| 148 | ; if user does not want an existing visit then exit | 
|---|
| 149 | I %=2 D  S ACKVSEL=0 G DUPCHKX | 
|---|
| 150 | . W !!,"Ok, adding another visit for this patient/date.",!! | 
|---|
| 151 | ; if user quit or timed out then exit | 
|---|
| 152 | I %="-1" S ACKVSEL=-1 G DUPCHKX | 
|---|
| 153 | ; if any value other than YES, display help and re-prompt | 
|---|
| 154 | I %'=1 S ACKQHLP=2 D ^ACKQHLP G ASK1 | 
|---|
| 155 | ; | 
|---|
| 156 | ; if the user answered YES and there is only one visit then exit | 
|---|
| 157 | I ACKCT=1 S ACKVSEL=$P(^TMP("ACKQASU1",$J,"DUPCHK",3,1),U,1) G DUPCHKX | 
|---|
| 158 | ; | 
|---|
| 159 | SELECT ; prompt for which visit | 
|---|
| 160 | S DIR(0)="N^1:"_ACKSEQ | 
|---|
| 161 | S DIR("A")="Select by number" | 
|---|
| 162 | S DIR("?")="Select the appointment you wish to edit from the above list" | 
|---|
| 163 | D ^DIR K DIR | 
|---|
| 164 | I $D(DIRUT) S ACKVSEL=-1 G DUPCHKX   ; quit or timed out | 
|---|
| 165 | S ACKSEL=+Y | 
|---|
| 166 | ; get selected Visit ien | 
|---|
| 167 | S ACKVSEL=$P(^TMP("ACKQASU1",$J,"DUPCHK",3,ACKSEL),U,1) | 
|---|
| 168 | ; | 
|---|
| 169 | DUPCHKX ; exit point | 
|---|
| 170 | K ^TMP("ACKQASU1",$J,"DUPCHK") | 
|---|
| 171 | Q ACKVSEL | 
|---|
| 172 | ; | 
|---|
| 173 | ACKSTOP(ACKVSC) ; translate visit stop code for display | 
|---|
| 174 | I ACKVSC="A" Q "AUD" | 
|---|
| 175 | I ACKVSC="S" Q "SPE" | 
|---|
| 176 | I ACKVSC="AT" Q "TEL" | 
|---|
| 177 | I ACKVSC="ST" Q "TEL" | 
|---|
| 178 | Q "" | 
|---|
| 179 | ; | 
|---|
| 180 | DATE(Y) ; convert date portion of Y to external format | 
|---|
| 181 | S Y=Y\1 D DD^%DT | 
|---|
| 182 | Q Y | 
|---|
| 183 | ; | 
|---|
| 184 | ; | 
|---|
| 185 | PCEVST1(ACKVD,ACKPAT,ACKCLIN) ; Checks to see if patients has a PCE visit for | 
|---|
| 186 | ;    selected clinic on visit date | 
|---|
| 187 | ; | 
|---|
| 188 | N ACKDATE,ACK,ACKPASS,ACKPIEN | 
|---|
| 189 | S ACKPASS=0 | 
|---|
| 190 | S X1=ACKVD,X2="-1" D C^%DTC S X=X_".99" | 
|---|
| 191 | F  S X=$O(^AUPNVSIT("AET",ACKPAT,X)) Q:X=""!($P(X,".",1)>ACKVD)!(ACKPASS)  D | 
|---|
| 192 | . I $D(^AUPNVSIT("AET",ACKPAT,X,ACKCLIN)) S ACKPASS=1 | 
|---|
| 193 | Q ACKPASS | 
|---|
| 194 | ; | 
|---|
| 195 | ; | 
|---|
| 196 | EXCEPT ;  Displays Error message explaining that the visit has previously been | 
|---|
| 197 | ;  sent to PCE and that the PCE interface is now off.  The changes | 
|---|
| 198 | ;  made here in Quasar will therefore not be sent to PCE thus causing | 
|---|
| 199 | ;  a data disparity between the two systems. | 
|---|
| 200 | W !!,"WARNING" | 
|---|
| 201 | W !!,"This visit has Previously been sent to PCE." | 
|---|
| 202 | W !,"The edited visit will not be sent to PCE because (within the Site Parameters)" | 
|---|
| 203 | W !,"either the INTERFACE WITH PCE field is set to off, the SEND TO PCE field for" | 
|---|
| 204 | W !,"this Division is set to off or this visits Visit Date is before the PCE" | 
|---|
| 205 | W !,"INTERFACE START DATE." | 
|---|
| 206 | W !!,"Data will now be different between the Quasar and the PCE visit." | 
|---|
| 207 | W !,"Please take the appropriate corrective action.",! | 
|---|
| 208 | W ! K DIR S DIR(0)="E",DIR("A")="Press RETURN to continue" W ! D ^DIR | 
|---|
| 209 | Q | 
|---|