| 1 | ACKQASU5 ;HCIOFO/AG - New/Edit Visit Utilities  ;  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 | SETDIAG(ACKVIEN,ACKICD,ACKDPRIM) ; add ICD9 code to A&SP Clinic Visit
 | 
|---|
| 6 |  ; inputs: ACKVIEN  - A&SP visit ien
 | 
|---|
| 7 |  ;         ACKICD   - ICD9 Diagnosis ien from ICD9 file
 | 
|---|
| 8 |  ;         ACKDPRIM - Primary Diag. flag 
 | 
|---|
| 9 |  ; outputs: 1^ - everything ok
 | 
|---|
| 10 |  ;          0^xxxxxxx - update failed (reason=xxxxxx)
 | 
|---|
| 11 |  ; NB. This function checks the Stop Code for the visit against the 
 | 
|---|
| 12 |  ; valid stop codes for the Diagnosis. It therefore assumes that the
 | 
|---|
| 13 |  ; visit stop code has already been filed.
 | 
|---|
| 14 |  N ACKDIAG,ACKICDN,ACKE,ACKARR,ACKSTAT,ACKVSC,ACKDSC
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  S ACKDIAG=""
 | 
|---|
| 17 |  ; find the ICD code on the QUASAR file
 | 
|---|
| 18 |  S ACKICDN=$$FIND1^DIC(509850.1,",","Q",ACKICD,"","","")
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  ; if not found then set error message and exit
 | 
|---|
| 21 |  I 'ACKICDN D  G SETDIAGX
 | 
|---|
| 22 |  . S ACKDIAG="0^Diagnosis not valid for Audiology and Speech Pathology"
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  ; if found, get status (active/inactive)
 | 
|---|
| 25 |  S ACKSTAT=$$GET1^DIQ(509850.1,ACKICDN_",",.06,"I")
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ; if inactive then set error message and exit
 | 
|---|
| 28 |  I ACKSTAT'=1 D  G SETDIAGX
 | 
|---|
| 29 |  . S ACKDIAG="0^Diagnosis not Active"
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  ; get the stop code for the visit and the stop code for the Diagnosis
 | 
|---|
| 32 |  S ACKVSC=$$GET1^DIQ(509850.6,ACKVIEN_",",4,"I")
 | 
|---|
| 33 |  S ACKDSC=$$GET1^DIQ(509850.1,ACKICDN_",",.04,"I")
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  ; if diagnosis is for different stop code then set error and exit
 | 
|---|
| 36 |  I ACKDSC="S",(ACKVSC="A")!(ACKVSC="AT") D  G SETDIAGX
 | 
|---|
| 37 |  . S ACKDIAG="0^Diagnosis is not valid for an Audiology Visit"
 | 
|---|
| 38 |  I ACKDSC="A",(ACKVSC="S")!(ACKVSC="ST") D  G SETDIAGX
 | 
|---|
| 39 |  . S ACKDIAG="0^Diagnosis is not valid for a Speech Pathology Visit"
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  ; see if the code already exists on the visit
 | 
|---|
| 42 |  S ACKE=$$FIND1^DIC(509850.63,","_ACKVIEN_",","Q",ACKICDN,"","","")
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  ; if it does already exist on the visit then set error message and exit
 | 
|---|
| 45 |  ;  (null value also is an error as this means an error occurred in the lookup)
 | 
|---|
| 46 |  I ACKE'=0 D  G SETDIAGX
 | 
|---|
| 47 |  . S ACKDIAG="0^Duplicate Diagnosis"
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  ; all ok, then add the diagnosis to the visit
 | 
|---|
| 50 |  S ACKARR(509850.63,"+1,"_ACKVIEN_",",.01)=ACKICDN
 | 
|---|
| 51 |  I ACKDPRIM S ACKARR(509850.63,"+1,"_ACKVIEN_",",.12)=1
 | 
|---|
| 52 |  D UPDATE^DIE("","ACKARR","","")
 | 
|---|
| 53 |  S ACKDIAG="1^"  ; set return flag to OK
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | SETDIAGX ; exit point
 | 
|---|
| 56 |  Q ACKDIAG
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 | SETPROC(ACKVIEN,ACKCPT,ACKQTY,ACKPPRV) ; add CPT code to A&SP Clinic Visit
 | 
|---|
| 59 |  ; inputs: ACKVIEN - A&SP visit ien
 | 
|---|
| 60 |  ;         ACKCPT - CPT Procedure ien from ICPT file
 | 
|---|
| 61 |  ;         ACKQTY - number of time procedure was performed (opt)
 | 
|---|
| 62 |  ;         ACKPPRV - Procedure Provider
 | 
|---|
| 63 |  ; outputs: n^ - everything ok (n=cpt ien on visit)
 | 
|---|
| 64 |  ;          0^xxxxxxx - update failed (reason=xxxxxx)
 | 
|---|
| 65 |  ; NB. This function checks the Stop Code for the visit against the 
 | 
|---|
| 66 |  ; valid stop codes for the procedure. It therefore assumes that the
 | 
|---|
| 67 |  ; visit stop code has already been filed.
 | 
|---|
| 68 |  N ACKPROC,ACKCPTN,ACKE,ACKARR,ACKSTAT,ACKVSC,ACKPSC,ACKIEN
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  ; initialise return variable and procedure quantity
 | 
|---|
| 71 |  S ACKPROC="",ACKQTY=$S(+$G(ACKQTY)=0:1,1:ACKQTY)
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  ; find the ICD code on the QUASAR file
 | 
|---|
| 74 |  S ACKCPTN=$$FIND1^DIC(509850.4,",","Q",ACKCPT,"","","")
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  ; if not found then set error message and exit
 | 
|---|
| 77 |  I 'ACKCPTN D  G SETPROCX
 | 
|---|
| 78 |  . S ACKPROC="0^Procedure not valid for Audiology and Speech Pathology"
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  ; if found, get status (active/inactive)
 | 
|---|
| 81 |  S ACKSTAT=$$GET1^DIQ(509850.4,ACKCPTN_",",.04,"I")
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 |  ; if inactive then set error message and exit
 | 
|---|
| 84 |  I ACKSTAT'=1 D  G SETPROCX
 | 
|---|
| 85 |  . S ACKPROC="0^Procedure not Active"
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ; get the stop code for the visit and the stop code for the Procedure
 | 
|---|
| 88 |  S ACKVSC=$$GET1^DIQ(509850.6,ACKVIEN_",",4,"I")
 | 
|---|
| 89 |  S ACKPSC=$$GET1^DIQ(509850.4,ACKCPTN_",",.02,"I")
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  ; if procedure is for different stop code then set error and exit
 | 
|---|
| 92 |  I ACKPSC="S",(ACKVSC="A")!(ACKVSC="AT") D  G SETPROCX
 | 
|---|
| 93 |  . S ACKPROC="0^Procedure is not valid for an Audiology Visit"
 | 
|---|
| 94 |  I ACKPSC="A",(ACKVSC="S")!(ACKVSC="ST") D  G SETPROCX
 | 
|---|
| 95 |  . S ACKPROC="0^Procedure is not valid for a Speech Pathology Visit"
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  ; all ok, then add the procedure to the visit
 | 
|---|
| 98 |  S ACKARR(509850.61,"+1,"_ACKVIEN_",",.01)=ACKCPTN
 | 
|---|
| 99 |  S ACKARR(509850.61,"+1,"_ACKVIEN_",",.03)=ACKQTY
 | 
|---|
| 100 |  S ACKARR(509850.61,"+1,"_ACKVIEN_",",.05)=ACKPPRV
 | 
|---|
| 101 |  K ACKIEN
 | 
|---|
| 102 |  D UPDATE^DIE("","ACKARR","ACKIEN","")
 | 
|---|
| 103 |  S ACKPROC=+$G(ACKIEN(1))_"^"  ; set return flag to OK
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 | SETPROCX ; exit point
 | 
|---|
| 106 |  Q ACKPROC
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 | SETMDFR(ACKVIEN,ACKPIEN,ACKMOD) ; add modifier to A&SP Clinic Visit
 | 
|---|
| 109 |  ; inputs: ACKVIEN - A&SP visit ien
 | 
|---|
| 110 |  ;         ACKPIEN - Procedure ien from visit file
 | 
|---|
| 111 |  ;         ACKMOD - modifier (ien from file 81.3)
 | 
|---|
| 112 |  ; outputs: 1^ - everything ok
 | 
|---|
| 113 |  ;          0^xxxxxxx - update failed (reason=xxxxxx)
 | 
|---|
| 114 |  N ACKMDFR,ACKMODN,ACKARR,ACKSTAT
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  ; initialise return variable 
 | 
|---|
| 117 |  S ACKMDFR=""
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 |  ; find the modifier code on the QUASAR file
 | 
|---|
| 120 |  S ACKMODN=$$FIND1^DIC(509850.5,",","Q",ACKMOD,"","","")
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 |  ; if not found then set error message and exit
 | 
|---|
| 123 |  I 'ACKMODN D  G SETMODX
 | 
|---|
| 124 |  . S ACKMOD="0^Modifier not valid for Audiology and Speech Pathology"
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  ; if found, get status (active/inactive)
 | 
|---|
| 127 |  S ACKSTAT=$$GET1^DIQ(509850.5,ACKMODN_",",1,"I")
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 |  ; if inactive then set error message and exit
 | 
|---|
| 130 |  I ACKSTAT'=1 D  G SETMODX
 | 
|---|
| 131 |  . S ACKMOD="0^Modifier not Active"
 | 
|---|
| 132 |  ;
 | 
|---|
| 133 |  ; all ok, then add the modifier to the visit and procedure
 | 
|---|
| 134 |  S ACKARR(509850.64,"+1,"_ACKPIEN_","_ACKVIEN_",",.01)=ACKMODN
 | 
|---|
| 135 |  D UPDATE^DIE("","ACKARR","","")
 | 
|---|
| 136 |  S ACKMOD="1^"  ; set return flag to OK
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 | SETMODX ; exit point
 | 
|---|
| 139 |  Q ACKMOD
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 | PRIMARY(ACKVIEN,ACKDD) ;  Does the visit contain a Primary Diagnosis
 | 
|---|
| 143 |  ;  Input  - Visit IEN
 | 
|---|
| 144 |  ;  Output - 1=Visit has a Primary Diagnosis 
 | 
|---|
| 145 |  ;           0=Visit Does not have a Primary Diagnosis
 | 
|---|
| 146 |  ;             or User editing diagnosis that is the Primary
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 |  I ACKDD'="",$$GET1^DIQ(509850.63,ACKDD_","_ACKVIEN_",",".12","I")=1 K ACKDD Q 0
 | 
|---|
| 149 |  N ACKFLAG,ACKK3
 | 
|---|
| 150 |  D LIST^DIC(509850.63,","_ACKVIEN_",",".12","I","*","","","","","","ACKDIAG")
 | 
|---|
| 151 |  S ACKK3=0,ACKFLAG=0
 | 
|---|
| 152 |  F  S ACKK3=$O(ACKDIAG("DILIST","ID",ACKK3)) Q:ACKK3=""!(ACKFLAG)  D
 | 
|---|
| 153 |  . I ACKDIAG("DILIST","ID",ACKK3,".12")=1 S ACKFLAG=1
 | 
|---|
| 154 |  K ACKDD
 | 
|---|
| 155 |  Q ACKFLAG
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 | POSTDIAG(ACKVIEN) ;  After Diagnosis codes have been entered check that
 | 
|---|
| 158 |  ;                  one is a Primary diagnosis.
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 |  ;     Input  - Visit IEN
 | 
|---|
| 161 |  ;     Output - 1=A primary has been entered
 | 
|---|
| 162 |  ;              0=A Primary needs to be entered
 | 
|---|
| 163 |  ;
 | 
|---|
| 164 |  I $$PRIMARY(ACKVIEN,"") Q 1
 | 
|---|
| 165 |  W !!,"One of the Diagnosis codes entered must be defined as the Primary Diagnosis."
 | 
|---|
| 166 |  Q 0
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 | TIMECHEK(ACKVIEN,ACKPARAM) ;  Prevet user from editing  a Visit Time
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 |  ;   Input ACKVIEN   - Visit IEN
 | 
|---|
| 171 |  ;         ACKPARMAM - 1=Called from Template
 | 
|---|
| 172 |  ;                     Null=Called from input Tranform of Visit Time
 | 
|---|
| 173 |  ;   Output 0=Visit has No Visit Time
 | 
|---|
| 174 |  ;          1=Visit has Visit Time
 | 
|---|
| 175 |  ;
 | 
|---|
| 176 |  N ACKQTME
 | 
|---|
| 177 |  S ACKQTME=$$GET1^DIQ(509850.6,ACKVIEN,55,"E")
 | 
|---|
| 178 |  I ACKQTME="" Q 0
 | 
|---|
| 179 |  I ACKPARAM=1 D
 | 
|---|
| 180 |  . W !,"APPOINTMENT TIME : "_ACKQTME_"   (Uneditable)"
 | 
|---|
| 181 |  K ACKPARAM
 | 
|---|
| 182 |  Q 1
 | 
|---|
| 183 |  ;
 | 
|---|
| 184 | TIMERR ;
 | 
|---|
| 185 |  W !,"     NOTE - Once entered this field cannot be edited."
 | 
|---|
| 186 |  W !,"     If you wish to edit the Visit Time use the Delete Visit option then",!
 | 
|---|
| 187 |  W "     re-enter the visit with the correct Visit Time.",!
 | 
|---|
| 188 |  ; 
 | 
|---|