| 1 | SCMCLK ;bp/cmf - Preceptor History Functions ; Sep 1999
 | 
|---|
| 2 |  ;;5.3;Scheduling;**177,204**;AUG 13, 1993
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; - $$OKPREC functions
 | 
|---|
| 5 |  ;        - input variables (required)
 | 
|---|
| 6 |  ;               scien    := pointer to 404.57 (precepted ien)
 | 
|---|
| 7 |  ;               scpien   := pointer to 404.57 (preceptor ien)
 | 
|---|
| 8 |  ;               sclnkdt  := date to test
 | 
|---|
| 9 |  ;        - output        
 | 
|---|
| 10 |  ;               $p1      := 1=assignment ok
 | 
|---|
| 11 |  ;                           0=not
 | 
|---|
| 12 |  ;               $p2      := if not, reason code
 | 
|---|
| 13 |  ;               $p3      := if not, reason
 | 
|---|
| 14 |  ; 
 | 
|---|
| 15 | OKPREC(SCIEN,SCPIEN,SCLNKDT) ;
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  S SCIEN=+$G(SCIEN,0)
 | 
|---|
| 18 |  S SCPIEN=+$G(SCPIEN,0)
 | 
|---|
| 19 |  S SCLNKDT=+$G(SCLNKDT,0)
 | 
|---|
| 20 |  I (SCIEN<1)!(SCPIEN<1)!(SCLNKDT<1) Q $$S(8)
 | 
|---|
| 21 |  ; 
 | 
|---|
| 22 |  I SCIEN=SCPIEN Q $$S(1)
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 |  N SCX,SCY,SCPAH,SCPAHA
 | 
|---|
| 25 |  I '$D(^SCTM(404.57,SCIEN,0)) Q $$S(8)
 | 
|---|
| 26 |  S SCX=$G(^SCTM(404.57,SCIEN,0))
 | 
|---|
| 27 |  I '$D(^SCTM(404.57,SCPIEN,0)) Q $$S(8)
 | 
|---|
| 28 |  S SCY=^SCTM(404.57,SCPIEN,0)
 | 
|---|
| 29 |  I $P(SCX,U,2)'=$P(SCY,U,2) Q $$S(2)
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  D DTARY(0)
 | 
|---|
| 32 |  S SCPAH=$$VALHIST^SCAPMCU5(404.53,SCPIEN,"SCPAHA")
 | 
|---|
| 33 |  I $$ACTHIST^SCAPMCU5("SCPAHA","SCLNKDT") Q $$S(3)
 | 
|---|
| 34 |  ;I $$ACTHIST^SCAPMCU2(404.53,SCPIEN,"SCLNKDT") Q $$S(3)
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  I '+$P(SCY,U,12) Q $$S(4)
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 |  I +$P(SCX,U,4),'+$P(SCY,U,4) Q $$S(5)
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  I $$ACTHIST^SCAPMCU2(404.59,SCPIEN,"SCLNKDT")<1 Q $$S(6)
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  I $$CHKPRTP() Q $$S(9)
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  Q 1
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 | OKPREC1(SCPIEN,SCLNKDT) ;
 | 
|---|
| 47 |  ;               ; prevent preceptor assignment danglers
 | 
|---|
| 48 |  ;               ; should also return array of danglers, if any,
 | 
|---|
| 49 |  ;               ; for a cleanup function, but not asked for yet
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  S SCPIEN=+$G(SCPIEN,0)
 | 
|---|
| 53 |  S SCLNKDT=+$G(SCLNKDT,0)
 | 
|---|
| 54 |  I (SCPIEN<1)!(SCLNKDT<1) Q $$S(8)
 | 
|---|
| 55 |  I '$D(^SCTM(404.53,"AD",SCPIEN)) Q 1
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  N SCX,SCN
 | 
|---|
| 58 |  D DTARY(1)
 | 
|---|
| 59 |  K ^TMP("SCPHIS",$J)
 | 
|---|
| 60 |  S SCX=$$PRECHIS(SCPIEN,"SCLNKDT","^TMP(""SCPHIS"",$J)")
 | 
|---|
| 61 |  K ^TMP("SCPHIS",$J)
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  Q $S(SCX>0:$$S(7),1:1)
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 | OKPREC2(SCIEN,SCLNKDT) ; return preceptor ien^name, if any
 | 
|---|
| 66 |  ;               ; used for computed field 306 of file 404.57
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  S SCIEN=+$G(SCIEN,0)
 | 
|---|
| 70 |  S SCLNKDT=+$G(SCLNKDT,0)
 | 
|---|
| 71 |  I (SCIEN<1)!(SCLNKDT<1) Q $$S(8)
 | 
|---|
| 72 |  N SCX,SCP2,SCP3,SCPIEN,SCLNKLI,SCLNKER,SCPAH,SCPAHA
 | 
|---|
| 73 |  D DTARY(0)
 | 
|---|
| 74 |  S SCPAH=$$VALHIST^SCAPMCU5(404.53,SCIEN,"SCPAHA")
 | 
|---|
| 75 |  S SCX=$$ACTHIST^SCAPMCU5("SCPAHA","SCLNKDT")
 | 
|---|
| 76 |  ;S SCX=$$ACTHIST^SCAPMCU2(404.53,SCIEN,"SCLNKDT")
 | 
|---|
| 77 |  I +SCX<1 Q ""
 | 
|---|
| 78 |  S SCP2=$P(SCX,U,2)
 | 
|---|
| 79 |  I +SCP2<1 Q ""
 | 
|---|
| 80 |  S SCP3=$P(SCX,U,3)
 | 
|---|
| 81 |  I '$D(^SCTM(404.53,SCP3,0)) Q $$S(8)
 | 
|---|
| 82 |  S SCPIEN=$P(^SCTM(404.53,SCP3,0),U,6)
 | 
|---|
| 83 |  Q $$GETPRTP^SCAPMCU2(SCPIEN,SCLNKDT)
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 | OKPREC3(SCIEN,SCLNKDT) ; return preceptor position ien^name, if any
 | 
|---|
| 86 |  ;               ; used for computed field 305 of file 404.57
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  S SCIEN=+$G(SCIEN,0)
 | 
|---|
| 90 |  S SCLNKDT=+$G(SCLNKDT,0)
 | 
|---|
| 91 |  I (SCIEN<1)!(SCLNKDT<1) Q $$S(8)
 | 
|---|
| 92 |  N SCX,SCP2,SCP3,SCPIEN,SCLNKER,SCPAH,SCPAHA
 | 
|---|
| 93 |  D DTARY(0)
 | 
|---|
| 94 |  S SCPAH=$$VALHIST^SCAPMCU5(404.53,SCIEN,"SCPAHA")
 | 
|---|
| 95 |  S SCX=$$ACTHIST^SCAPMCU5("SCPAHA","SCLNKDT")
 | 
|---|
| 96 |  ;S SCX=$$ACTHIST^SCAPMCU2(404.53,SCIEN,"SCLNKDT")
 | 
|---|
| 97 |  I +SCX<1 Q ""
 | 
|---|
| 98 |  S SCP2=$P(SCX,U,2)
 | 
|---|
| 99 |  I +SCP2<1 Q ""
 | 
|---|
| 100 |  S SCP3=$P(SCX,U,3)
 | 
|---|
| 101 |  I '$D(^SCTM(404.53,SCP3,0)) Q $$S(8)
 | 
|---|
| 102 |  S SCPIEN=$P(^SCTM(404.53,SCP3,0),U,6)
 | 
|---|
| 103 |  Q SCPIEN_U_$$EXT^SCAPMCU2(404.53,SCPIEN)
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 | OKPREC4(SCIEN) ; return if precepted position can be un-precepted
 | 
|---|
| 106 |  ;       ; if patient assign after 1st preceptment date, NO
 | 
|---|
| 107 |  ;       ; used by computed field #400 of file 404.57
 | 
|---|
| 108 |  S SCIEN=$G(SCIEN,0)
 | 
|---|
| 109 |  I (SCIEN<1)!('$D(^SCTM(404.57,SCIEN))) Q $$S(8)
 | 
|---|
| 110 |  I '$D(^SCTM(404.53,"B",SCIEN)) Q 1
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  N SCVALHIS,SCDT,SCX
 | 
|---|
| 113 |  S SCDT=$P($$VALHIST^SCAPMCU5(404.53,SCIEN,"SCVALHIS"),U,2)
 | 
|---|
| 114 |  I SCDT=0 Q 1
 | 
|---|
| 115 |  S SCX=$$PCPOSCNT^SCAPMCU1(SCIEN,SCDT,0,1)
 | 
|---|
| 116 |  Q $S(SCX>0:$$S(10),1:1)
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 | OKPREC5(SCIEN,SCLNKDT) ; if position has a preceptor,
 | 
|---|
| 119 |  ;               ; is preceptor link valid?
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 |  S SCIEN=$G(SCIEN,0)
 | 
|---|
| 122 |  S SCLNKDT=$G(SCLNKDT,DT)
 | 
|---|
| 123 |  I (SCIEN<1)!(SCLNKDT<1) Q $$S(8)
 | 
|---|
| 124 |  N SCPIEN
 | 
|---|
| 125 |  S SCPIEN=+$$OKPREC3(SCIEN,SCLNKDT)
 | 
|---|
| 126 |  I SCPIEN<1 Q 1
 | 
|---|
| 127 |  Q $$OKPREC(SCIEN,SCPIEN,SCLNKDT)
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | PRECHIS(SCPIEN,SCDATES,SCLIST) ;return precepted positions for preceptor
 | 
|---|
| 130 |  ; input
 | 
|---|
| 131 |  ;    SCPIEN := preceptor pos ien (404.57) (required)
 | 
|---|
| 132 |  ;    SCDATES := standard PCMM date array  (required)
 | 
|---|
| 133 |  ;    SCDATES(begin) := start date [default = DT]
 | 
|---|
| 134 |  ;    SCDATES(end)   := end date   [default = DT]
 | 
|---|
| 135 |  ;    SCDATES(incl)  := always set to 0
 | 
|---|
| 136 |  ;    SCLIST := output array (required)
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 |  ; output
 | 
|---|
| 139 |  ;    @SCLIST@(scn)
 | 
|---|
| 140 |  ;     format := 
 | 
|---|
| 141 |  ;      pieces 1-13:  same as SCLIST(scn,) node of $$prtp^scapmc8
 | 
|---|
| 142 |  ;      pieces 14-16: same as SCLIST(scn,'PR',) node of $$prtp^scapmc8
 | 
|---|
| 143 |  ;    @SCLIST@('SCPR',precepted team posn ien (404.57) +
 | 
|---|
| 144 |  ;                   ,preceptor start date +
 | 
|---|
| 145 |  ;                   ,preceptor asgn ien, +
 | 
|---|
| 146 |  ;                   ,precepted posn asgn ien,scn)
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 |  S SCPIEN=+$G(SCPIEN,0)
 | 
|---|
| 149 |  S SCDATES=$G(SCDATES)
 | 
|---|
| 150 |  S SCLIST=$G(SCLIST)
 | 
|---|
| 151 |  I (SCPIEN<1)!(SCDATES']"")!(SCLIST']"") Q $$S(8)
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 |  N SCN,SCPVAL,SCPN,SCIEN,SCX,SCXP,SCXPR,SCXARY,SCXDT
 | 
|---|
| 154 |  N SCPTP,SCPTPN,SCBEGIN,SCEND,SCESEQ,SCLSEQ
 | 
|---|
| 155 |  N SCP1P11,SCP12,SCP13,SCP14,SCP15,SCP16,SCR
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 |  S (@SCDATES@("BEGIN"),SCBEGIN)=$G(@SCDATES@("BEGIN"),DT)
 | 
|---|
| 158 |  S (@SCDATES@("END"),SCEND)=$G(@SCDATES@("END"),DT)
 | 
|---|
| 159 |  S @SCDATES@("INCL")=0
 | 
|---|
| 160 |  ;
 | 
|---|
| 161 |  I '$D(^SCTM(404.53,"D",SCPIEN)) Q 0
 | 
|---|
| 162 |  I '$D(^SCTM(404.53,"AD",SCPIEN)) Q 0
 | 
|---|
| 163 |  S SCPN=0                              ; incrementor
 | 
|---|
| 164 |  S @SCLIST@(0)=0
 | 
|---|
| 165 |  S SCIEN=0
 | 
|---|
| 166 |  F  S SCIEN=$O(^SCTM(404.53,"AD",SCPIEN,SCIEN)) Q:'SCIEN  D
 | 
|---|
| 167 |  . ;K SCXPR
 | 
|---|
| 168 |  . ;S SCX=$$ACTHIST^SCAPMCU2(404.53,SCIEN,.SCDATES,"SCXER","SCXPR")
 | 
|---|
| 169 |  . ;Q:+SCX<1
 | 
|---|
| 170 |  . K SCPVAL(SCIEN)
 | 
|---|
| 171 |  . S SCX=$$VALHIST^SCAPMCU5(404.53,SCIEN,"SCPVAL("_SCIEN_")")
 | 
|---|
| 172 |  . Q:'$D(SCPVAL(SCIEN))
 | 
|---|
| 173 |  . S SCX=$$ACTHIST^SCAPMCU5("SCPVAL("_SCIEN_")",.SCDATES)
 | 
|---|
| 174 |  . Q:+SCX<1
 | 
|---|
| 175 |  . ;
 | 
|---|
| 176 |  . S SCX=0
 | 
|---|
| 177 |  . F  S SCX=$O(^SCTM(404.53,"AD",SCPIEN,SCIEN,1,SCX)) Q:'SCX  D
 | 
|---|
| 178 |  . . Q:'$D(SCPVAL(SCIEN,"I",SCX))
 | 
|---|
| 179 |  . . S SCXARY=$O(SCPVAL(SCIEN,"I",SCX,0))
 | 
|---|
| 180 |  . . S SCP14=$O(SCPVAL(SCIEN,SCXARY,0))              ;precept start dt
 | 
|---|
| 181 |  . . S SCP16=$O(SCPVAL(SCIEN,SCXARY,SCP14,0))        ;precept start ien
 | 
|---|
| 182 |  . . S SCP15=$P(SCPVAL(SCIEN,SCXARY,SCP14,SCP16),U)
 | 
|---|
| 183 |  . . S SCP15=$S(+SCP15>1:SCP15,1:9999999)            ;precept end dt
 | 
|---|
| 184 |  . . Q:'$$DTCHK^SCAPU1(SCBEGIN,SCEND,0,SCP14,SCP15)
 | 
|---|
| 185 |  . . K SCPTP
 | 
|---|
| 186 |  . . K SCXDT
 | 
|---|
| 187 |  . . S SCXDT("BEGIN")=SCP14
 | 
|---|
| 188 |  . . S SCXDT("END")=SCP15
 | 
|---|
| 189 |  . . S SCXDT("INCL")=0
 | 
|---|
| 190 |  . . S SCXP=$$PRTP^SCAPMC8(SCIEN,"SCXDT","SCPTP","SCPTPE")
 | 
|---|
| 191 |  . . Q:+$G(SCPTP(0))<1
 | 
|---|
| 192 |  . . F SCXP=1:1:SCPTP(0) D
 | 
|---|
| 193 |  . . . S SCPN=SCPN+1
 | 
|---|
| 194 |  . . . S SCP1P11=$P(SCPTP(SCXP),U,1,11)
 | 
|---|
| 195 |  . . . S SCP12=$P(SCPTP(SCXP),U,12)
 | 
|---|
| 196 |  . . . S SCP13=$P(SCPTP(SCXP),U,13)
 | 
|---|
| 197 |  . . . S SCR=SCP1P11_U_SCP12_U_SCP13_U_SCP14_U_SCP15_U_SCP16
 | 
|---|
| 198 |  . . . S @SCLIST@(0)=SCPN
 | 
|---|
| 199 |  . . . S @SCLIST@(SCPN)=SCR
 | 
|---|
| 200 |  . . . S @SCLIST@("SCPR",SCIEN,SCP14,SCP16,$P(SCR,U,11),SCPN)=""
 | 
|---|
| 201 |  . . . Q
 | 
|---|
| 202 |  . . Q
 | 
|---|
| 203 |  . K SCPVAL(SCIEN)
 | 
|---|
| 204 |  . Q
 | 
|---|
| 205 |  ;
 | 
|---|
| 206 | PRECQ Q @SCLIST@(0)>0
 | 
|---|
| 207 |  ;
 | 
|---|
| 208 | DTARY(SCX) ;
 | 
|---|
| 209 |  S SCLNKDT("BEGIN")=SCLNKDT
 | 
|---|
| 210 |  S SCLNKDT("END")=$S(SCX=1:9999999,1:SCLNKDT)
 | 
|---|
| 211 |  S SCLNKDT("INCL")=0
 | 
|---|
| 212 |  ;I $G(SCLIST)]"" S SCLNKDT("END")=$G(SCLNKDT0,9999999)
 | 
|---|
| 213 |  Q
 | 
|---|
| 214 |  ;
 | 
|---|
| 215 | CHKPRTP() ;
 | 
|---|
| 216 |  Q $$GETPRTP^SCAPMCU2(SCIEN,SCLNKDT)=$$GETPRTP^SCAPMCU2(SCPIEN,SCLNKDT)
 | 
|---|
| 217 |  ;
 | 
|---|
| 218 | S(SCX) Q 0_U_SCX_U_$P($T(T+SCX),";;",2)_"."
 | 
|---|
| 219 |  ;
 | 
|---|
| 220 | T ;;
 | 
|---|
| 221 | 1 ;;Position can't precept itself;;
 | 
|---|
| 222 | 2 ;;Preceptor and precepted must be on same team;;
 | 
|---|
| 223 | 3 ;;Preceptor can't have a preceptor on assignment date;;
 | 
|---|
| 224 | 4 ;;Preceptor must be able to act as a preceptor;;
 | 
|---|
| 225 | 5 ;;Preceptor must be PC if precepted is PC;;
 | 
|---|
| 226 | 6 ;;Preceptor must be active on assignment date;;
 | 
|---|
| 227 | 7 ;;Active or future precepted position(s);;
 | 
|---|
| 228 | 8 ;;Invalid Parameter
 | 
|---|
| 229 | 9 ;;Preceptor/Precepted Staff can't be the same;;
 | 
|---|
| 230 | 10 ;;Position has patient assignments after precepted date;;
 | 
|---|
| 231 |  ;
 | 
|---|