| 1 | SCRPMPSP        ;ALB/PDR - Team APIs:ACPTTP ; AUG 1998 | 
|---|
| 2 | ;;5.3;Scheduling;**148,157,169,177**;AUG 13, 1993 | 
|---|
| 3 | ; | 
|---|
| 4 | ACPTTP(DFN,SCTP,SCFIELDA,SCACT,FASIEN,SCERR,SCYESTM,SCMAINA) ;add/edit a patient to a position (pt TP assgn - #404.43 | 
|---|
| 5 | ; input: | 
|---|
| 6 | ;  DFN     = pointer to PATIENT file (#2) | 
|---|
| 7 | ;  SCTP    = pointer to TEAM POSTION file (#404.57) (DESTINATION POSITION) | 
|---|
| 8 | ;  SCFIELDA= array of extra field entries - scfielda('fld#')=value for 404.43 | 
|---|
| 9 | ;  SCACT   = date to activate [default=DT] | 
|---|
| 10 | ;  FASIEN  = "FROM" position assignment IEN | 
|---|
| 11 | ;  SCERR = array NAME to store error messages. | 
|---|
| 12 | ;          [ex. ^TMP("ORXX",$J)] | 
|---|
| 13 | ;  SCYESTM = Should team assignment be made, if none active now?[1=YES] | 
|---|
| 14 | ;  SCMAINA= array of extra field entries for 404.42 | 
|---|
| 15 | ; | 
|---|
| 16 | ; Output: | 
|---|
| 17 | ;  Returned = ien of 404.43^new?^404.42 ien (new entries only)^new?^Message | 
|---|
| 18 | ;  SCERR()  = Array of DIALOG file messages(errors) . | 
|---|
| 19 | ;             Foramt: | 
|---|
| 20 | ;               Subscript: Sequential # from 1 to n | 
|---|
| 21 | ;               Piece     Description | 
|---|
| 22 | ;                 1       IEN of DIALOG file | 
|---|
| 23 | N SCESEQ,SCPARM,SCIEN,SC,HISTPTTP,SCFLD,SCTM,SCPTTMA,SCST,PATH | 
|---|
| 24 | N SCPTTPA,SCTMFLDA,SCNEWTP,SCNEWTM,SCAPTDT,SCAPTTPO,SCAPTTPE,SCMESS | 
|---|
| 25 | N SCLOCK,SCXLOCK,SCX | 
|---|
| 26 | ; | 
|---|
| 27 | ; | 
|---|
| 28 | I '$$OKDATA D ERROR(1,FASIEN,5) G APTTPQ | 
|---|
| 29 | ; | 
|---|
| 30 | I '$D(^XTMP("SCMC POS REASGN")) D | 
|---|
| 31 | . S ^XTMP("SCMC POS REASGN",0)=DT_U_DT_U_"POS REASGN PROCESS LOCK" | 
|---|
| 32 | . Q | 
|---|
| 33 | ; | 
|---|
| 34 | S SCXLOCK=0 | 
|---|
| 35 | S SCLOCK="^XTMP(""SCMC POS REASGN"",DFN)" | 
|---|
| 36 | I $D(@SCLOCK) D ERROR(10,FASIEN,7) G APTTPQ | 
|---|
| 37 | S @SCLOCK="" | 
|---|
| 38 | S SCXLOCK=1 | 
|---|
| 39 | H 1 | 
|---|
| 40 | ; | 
|---|
| 41 | ; | 
|---|
| 42 | D INITVARS | 
|---|
| 43 | I '$$GETPLST D ERROR(2,FASIEN,10) G APTTPQ | 
|---|
| 44 | ; | 
|---|
| 45 | ;bp/cmf 177 new begin | 
|---|
| 46 | S SCX=$$OKPREC5^SCMCLK(SCTP,SCACT) | 
|---|
| 47 | I SCX<1 D ERROR($P(SCX,U,2),FASIEN,11) G APTTPQ | 
|---|
| 48 | ;bp/cmf 177 new end | 
|---|
| 49 | ; | 
|---|
| 50 | ; Business rule processing | 
|---|
| 51 | ; | 
|---|
| 52 | ; case 1 | 
|---|
| 53 | I $$POSEXIST(.SCTM,SCTP,.SCPTTPA,.SCPTTMA) D  D SETP(1) G APTTPQ | 
|---|
| 54 | . ; destin pos asgn exists | 
|---|
| 55 | . I '$$PCPCASN^SCRPM21U(FASIEN,SCTP) D  D SETP(1.1) Q | 
|---|
| 56 | .. ; not PC to PC pos reasgn | 
|---|
| 57 | .. ; | 
|---|
| 58 | .. ; update pos asgn | 
|---|
| 59 | .. D UPDATPOS^SCRPM21U(.SCPTTPA,SCERR) | 
|---|
| 60 | .. I 'SCPTTPA D ERROR(3,SCPTTPA,12) Q | 
|---|
| 61 | .. ; | 
|---|
| 62 | .. ; update tm asgn | 
|---|
| 63 | .. I $$FUTMASN^SCRPM21U(SCPTTMA,SCACT)!$$FUTTMDIS^SCRPM21U(.SCPTTMA,SCACT) D  Q:'SCPTTMA | 
|---|
| 64 | ... D TMACTIV^SCRPM21U(.SCPTTMA,$$PCPOS) | 
|---|
| 65 | ... I 'SCPTTMA D ERROR(4,SCPTTMA,20) | 
|---|
| 66 | ... Q | 
|---|
| 67 | .. ; | 
|---|
| 68 | .. ; dschrg source pos | 
|---|
| 69 | .. D DISPOS^SCRPM21U(FASIEN,.SCPTTPA) | 
|---|
| 70 | .. I 'SCPTTPA D ERROR(5,SCPTTPA,30) | 
|---|
| 71 | .. Q | 
|---|
| 72 | . ; | 
|---|
| 73 | . ;  PC to PC pos reasgn | 
|---|
| 74 | . N SCFLAG | 
|---|
| 75 | . S SCFLAG=0 | 
|---|
| 76 | . N SCY | 
|---|
| 77 | . S SCY=0 | 
|---|
| 78 | . F  S SCY=$O(SCAPTTPO("SCTP",SCTM,SCTP,SCY)) Q:'SCY!(SCFLAG)  D | 
|---|
| 79 | .. S SCPTTPA=SCY | 
|---|
| 80 | .. S SCPTTMA=$$GETPOSTM^SCRPM21U(SCPTTPA) | 
|---|
| 81 | .. I '$D(^SCPT(404.43,SCPTTPA)) Q | 
|---|
| 82 | .. S SCFLAG=$$DPOSPROB^SCRPM21U(SCPTTPA,SCACT) | 
|---|
| 83 | .. I SCFLAG Q | 
|---|
| 84 | .. I '$D(^SCPT(404.42,SCPTTMA)) Q | 
|---|
| 85 | .. S SCFLAG=$$DTMPROB^SCRPM21U(SCPTTMA,SCACT) | 
|---|
| 86 | .. Q | 
|---|
| 87 | . Q:SCFLAG | 
|---|
| 88 | . ; | 
|---|
| 89 | . ; create new destin tm, pos asgns | 
|---|
| 90 | . D CREATETM^SCRPM21U(DFN,$$DSTTEAM,SCACT,.SCPTTMA) | 
|---|
| 91 | . I 'SCPTTMA D ERROR(6,SCPTTMA,40) Q | 
|---|
| 92 | . D CREATPOS^SCRPM21U(.SCPTTPA,SCPTTMA) | 
|---|
| 93 | . I 'SCPTTPA D ERROR(7,SCPTTPA,50) Q | 
|---|
| 94 | . ; | 
|---|
| 95 | . ; take care of source bookkeeping | 
|---|
| 96 | . D XALLPOS^SCRPM21U(FASIEN,.SCPTTPA) | 
|---|
| 97 | . I 'SCPTTMA D ERROR(8,SCPTTMA,60) Q | 
|---|
| 98 | . D DISTEAM^SCRPM21U($$SRCTEAM) | 
|---|
| 99 | . I 'SCPTTPA D ERROR(9,SCST,70) Q | 
|---|
| 100 | . Q | 
|---|
| 101 | ; | 
|---|
| 102 | ; case 2 | 
|---|
| 103 | I $$TMEXIST^SCRPM21U(DFN,SCTM,SCACT,.SCPTTMA) D  D SETP(2) G APTTPQ | 
|---|
| 104 | . ; destin tm asgn exists | 
|---|
| 105 | . I $$PCPCASN^SCRPM21U(FASIEN,SCTP) D  D SETP(2.1) Q | 
|---|
| 106 | .. ; PC to PC tm reassgn | 
|---|
| 107 | .. ; | 
|---|
| 108 | .. ; take care of destin bookkeeping | 
|---|
| 109 | .. Q:$$DTMPROB^SCRPM21U(SCPTTMA,SCACT) | 
|---|
| 110 | .. ; | 
|---|
| 111 | .. ; create new destin tm, pos asgns | 
|---|
| 112 | .. D CREATETM^SCRPM21U(DFN,$$DSTTEAM,SCACT,.SCPTTMA) | 
|---|
| 113 | .. I 'SCPTTMA D ERROR(6,SCPTTMA,80) Q | 
|---|
| 114 | .. D CREATPOS^SCRPM21U(.SCPTTPA,.SCPTTMA) | 
|---|
| 115 | .. I 'SCPTTPA D ERROR(7,SCPTTPA,100) Q | 
|---|
| 116 | .. ; | 
|---|
| 117 | .. ; take care of source bookkeeping | 
|---|
| 118 | .. D XALLPOS^SCRPM21U(FASIEN,.SCPTTPA) | 
|---|
| 119 | .. I 'SCPTTMA D ERROR(8,SCPTTMA,105) Q | 
|---|
| 120 | .. D DISTEAM^SCRPM21U($$SRCTEAM) | 
|---|
| 121 | .. I 'SCPTTPA D ERROR(9,SCST,107) Q | 
|---|
| 122 | .. Q | 
|---|
| 123 | . ; | 
|---|
| 124 | . ;not PC to PC tm reassgn | 
|---|
| 125 | . ; update tm asgn | 
|---|
| 126 | . I $$FUTMASN^SCRPM21U(.SCPTTMA,SCACT)!$$FUTTMDIS^SCRPM21U(.SCPTTMA,SCACT) D  Q:'SCPTTMA | 
|---|
| 127 | .. D TMACTIV^SCRPM21U(.SCPTTMA,$$PCPOS) | 
|---|
| 128 | .. I 'SCPTTMA D ERROR(4,SCPTTMA,120) | 
|---|
| 129 | .. Q | 
|---|
| 130 | . ; | 
|---|
| 131 | . ; create pos asgn | 
|---|
| 132 | . D CREATPOS^SCRPM21U(.SCPTTPA,.SCPTTMA) | 
|---|
| 133 | . I 'SCPTTPA D ERROR(7,SCPTTPA,130) | 
|---|
| 134 | . ; | 
|---|
| 135 | . ; dschrg source pos | 
|---|
| 136 | . D DISPOS^SCRPM21U(FASIEN,.SCPTTPA) | 
|---|
| 137 | . I 'SCPTTPA D ERROR(5,SCPTTPA,135) | 
|---|
| 138 | . Q | 
|---|
| 139 | ; | 
|---|
| 140 | ; case 3 | 
|---|
| 141 | ; no destin asgn | 
|---|
| 142 | I $$PCPCASN^SCRPM21U(FASIEN,SCTP) D  D SETP(3.1) G APTTPQ | 
|---|
| 143 | . ; PC to PC reasgn | 
|---|
| 144 | . ; | 
|---|
| 145 | . ; create new destin tm, pos asgns | 
|---|
| 146 | . D CREATETM^SCRPM21U(DFN,$$DSTTEAM,SCACT,.SCPTTMA) | 
|---|
| 147 | . I 'SCPTTMA D ERROR(6,SCPTTMA,140) Q | 
|---|
| 148 | . D CREATPOS^SCRPM21U(.SCPTTPA,SCPTTMA) | 
|---|
| 149 | . I 'SCPTTPA D ERROR(7,SCPTTPA,160)  Q | 
|---|
| 150 | . ; | 
|---|
| 151 | . ; take care of source bookkeeping | 
|---|
| 152 | . D XALLPOS^SCRPM21U(FASIEN,.SCPTTPA) | 
|---|
| 153 | . I 'SCPTTPA D ERROR(8,SCPTTMA,180) Q | 
|---|
| 154 | . D DISTEAM^SCRPM21U($$SRCTEAM) | 
|---|
| 155 | . I 'SCPTTPA D ERROR(9,SCST,185) Q | 
|---|
| 156 | . Q | 
|---|
| 157 | ; | 
|---|
| 158 | D SETP(3) | 
|---|
| 159 | ; not PC to PC reasgn | 
|---|
| 160 | ; | 
|---|
| 161 | ; create new destin tm, pos asgns | 
|---|
| 162 | D CREATETM^SCRPM21U(DFN,$$DSTTEAM,SCACT,.SCPTTMA) | 
|---|
| 163 | I 'SCPTTMA D ERROR(6,SCPTTMA,187) G APTTPQ | 
|---|
| 164 | D CREATPOS^SCRPM21U(.SCPTTPA,SCPTTMA) | 
|---|
| 165 | I 'SCPTTPA D ERROR(7,SCPTTPA,190) G APTTPQ | 
|---|
| 166 | ; | 
|---|
| 167 | ; dschrg source pos | 
|---|
| 168 | D DISPOS^SCRPM21U(FASIEN,.SCPTTPA) | 
|---|
| 169 | I 'SCPTTPA D ERROR(5,SCPTTPA,200) | 
|---|
| 170 | ; | 
|---|
| 171 | APTTPQ ; All done | 
|---|
| 172 | D SAVPARMS | 
|---|
| 173 | I SCXLOCK=1 K @SCLOCK | 
|---|
| 174 | Q +$G(SCPTTPA)_U_+$G(SCNEWTP)_U_+$G(SCPTTMA)_U_+$P($G(SCPTTMA),U,2)_U_$G(SCMESS) | 
|---|
| 175 | ; | 
|---|
| 176 | ; | 
|---|
| 177 | OKDATA()        ;setup/check variables | 
|---|
| 178 | N SCOK | 
|---|
| 179 | S SCOK=1 | 
|---|
| 180 | D INIT^SCAPMCU1(.SCOK) | 
|---|
| 181 | IF '$D(^DPT(DFN,0))!('$D(^SCTM(404.57,SCTPTO,0))) D  S SCOK=0 | 
|---|
| 182 | . S SCPARM("PATIENT")=DFN | 
|---|
| 183 | . S SCPARM("POSITION")=SCTPTO | 
|---|
| 184 | . D ERR^SCAPMCU1(SCESEQ,4045101,.SCPARM,"",SCERR) | 
|---|
| 185 | S:'$G(SCACT) SCACT=DT | 
|---|
| 186 | S:'$D(SCMAINA) SCMAINA="SC40443A" | 
|---|
| 187 | Q SCOK | 
|---|
| 188 | ; | 
|---|
| 189 | INITVARS        ; INITIALIZE LOCAL VARIABLES | 
|---|
| 190 | S SCTM=$P($G(^SCTM(404.57,SCTP,0)),U,2) ; destin tm ien | 
|---|
| 191 | S SCAPTDT("BEGIN")=SCACT | 
|---|
| 192 | S SCAPTDT("END")=3990101 | 
|---|
| 193 | S SCAPTDT("INCL")=0 | 
|---|
| 194 | S SCST=$$GETPOSTM^SCRPM21U(FASIEN) ; source tm ien | 
|---|
| 195 | S SCPTTMA="" | 
|---|
| 196 | S SCMESS="" | 
|---|
| 197 | K @SCERR | 
|---|
| 198 | Q | 
|---|
| 199 | ; | 
|---|
| 200 | GETPLST() ; get patient position list | 
|---|
| 201 | Q $$TPPT^SCAPMC(DFN,"SCAPTDT",,,,,0,"SCAPTTPO","SCAPTTPE") | 
|---|
| 202 | ; | 
|---|
| 203 | POSEXIST(SCTM,SCTP,POSAIEN,TMIEN) ; | 
|---|
| 204 | ; if active pos asgn, return ien | 
|---|
| 205 | N DISDT,SCX,SCY,SCFLAG | 
|---|
| 206 | S TMIEN="" | 
|---|
| 207 | S SCTM=+$P($G(^SCTM(404.57,SCTP,0)),U,2)  ;ptr to 404.51 | 
|---|
| 208 | ; | 
|---|
| 209 | S SCFLAG=0 | 
|---|
| 210 | S POSAIEN=0 | 
|---|
| 211 | ; | 
|---|
| 212 | S SCX=0 | 
|---|
| 213 | F  S SCX=$O(SCAPTTPO("SCTP",SCTM,SCTP,SCX)) Q:'SCX!(SCFLAG)  D | 
|---|
| 214 | . S SCY=$O(SCAPTTPO("SCTP",SCTM,SCTP,SCX,0)) | 
|---|
| 215 | . S DISDT=$P(SCAPTTPO(SCY),U,6) | 
|---|
| 216 | . I DISDT=SCACT Q  ;pos is discharged | 
|---|
| 217 | . S TMIEN=$$GETPOSTM^SCRPM21U(SCX) ; tm asgn ien | 
|---|
| 218 | . S DISDT=$P($G(^SCPT(404.42,TMIEN,0)),U,9) | 
|---|
| 219 | . I DISDT,DISDT'>SCACT Q  ;tm is discharged | 
|---|
| 220 | . S SCFLAG=1 | 
|---|
| 221 | . S POSAIEN=SCX | 
|---|
| 222 | . Q | 
|---|
| 223 | ; | 
|---|
| 224 | I SCFLAG Q POSAIEN | 
|---|
| 225 | Q 0_U_$O(SCAPTTPO("SCTP",SCTM,SCTP,0)) | 
|---|
| 226 | ; | 
|---|
| 227 | ERROR(TXT,IEN,ENUM)     ; HANDLE ERRORS FOR REPORTING | 
|---|
| 228 | I +TXT S TXT=$P($T(T+TXT),";;",2) | 
|---|
| 229 | S SCMESS=" "_TXT_" [E#"_ENUM_"]" | 
|---|
| 230 | ; NVS - use below for more detailed ien and path data | 
|---|
| 231 | ;I $P(IEN,U,1)=0 S IEN=$P(IEN,U,2) | 
|---|
| 232 | ;S SCMESS=TXT_" [(IEN="_IEN_") E#"_ENUM_" PTH:"_$G(PATH)_"]" | 
|---|
| 233 | ;S ^TMP("PDR",$J,"POSREASGN",$H,DFN)=SCMESS | 
|---|
| 234 | Q | 
|---|
| 235 | ; | 
|---|
| 236 | T ;; | 
|---|
| 237 | 1 ;;Data Integrity error.;; | 
|---|
| 238 | 2 ;;Unable to get positions list.;; | 
|---|
| 239 | 3 ;;Unable to activate existing position.;; | 
|---|
| 240 | 4 ;;Unable to activate existing team.;; | 
|---|
| 241 | 5 ;;Unable to discharge source position.;; | 
|---|
| 242 | 6 ;;Unable to create destination team.;; | 
|---|
| 243 | 7 ;;Unable to create destination position.;; | 
|---|
| 244 | 8 ;;Unable to discharge all positions for PC source team.;; | 
|---|
| 245 | 9 ;;Unable to discharge PC source team.;; | 
|---|
| 246 | 10 ;;Patient is being reassigned by another PCMM process.;; | 
|---|
| 247 | ;; | 
|---|
| 248 | ; | 
|---|
| 249 | SAVPARMS ; save params for debugging | 
|---|
| 250 | ; NVS - comment out the quit to save path/variable data | 
|---|
| 251 | Q | 
|---|
| 252 | N S,F,NVP | 
|---|
| 253 | S S="" | 
|---|
| 254 | S S=$O(^TMP("PDR",S),-1)+1 ; get next occurence | 
|---|
| 255 | S ^TMP("PDR",S,$J,"INIT")=DFN_U_SCTP_U_SCACT_U_FASIEN_U_SCYESTM ; initial params passed in | 
|---|
| 256 | S F="",NVP="" | 
|---|
| 257 | F  S F=$O(@SCFIELDA@(F)) Q:F=""  S NVP=NVP_F_"="_@SCFIELDA@(F)_U  ; Get the params passed in for new pos | 
|---|
| 258 | S ^TMP("PDR",S,$J,"NPOS")=NVP | 
|---|
| 259 | S F="",NVP="" | 
|---|
| 260 | F  S F=$O(@SCMAINA@(F)) Q:F=""  S NVP=NVP_F_"="_@SCFIELDA@(F)_U  ; Get the params passed in for new TEAM | 
|---|
| 261 | S ^TMP("PDR",S,$J,"NTEAM")=NVP | 
|---|
| 262 | S ^TMP("PDR",S,$J,"NASSGN")=$G(SCPTTPA)_U_$G(SCPTTMA)_U_$G(PATH)_U_$G(SCMESS)_U_$H ; conserve new pos and team assigns if present | 
|---|
| 263 | Q | 
|---|
| 264 | ; | 
|---|
| 265 | SETP(BR) ; SET PATH INDICATOR FOR DEBUGGING | 
|---|
| 266 | ; NVS - comment out the quit to save path/variable data | 
|---|
| 267 | Q | 
|---|
| 268 | S PATH=$G(PATH)_BR_"-" | 
|---|
| 269 | Q | 
|---|
| 270 | ; | 
|---|
| 271 | SRCTEAM()       ; return source tm ien | 
|---|
| 272 | ; value set in INITVARS | 
|---|
| 273 | Q SCST | 
|---|
| 274 | ; | 
|---|
| 275 | DSTTEAM()       ; return destin tm ien | 
|---|
| 276 | Q SCTM | 
|---|
| 277 | ; | 
|---|
| 278 | PCPOS() ; IS THIS A PC POSITION? | 
|---|
| 279 | Q $G(@SCFIELDA@(.05),0) | 
|---|
| 280 | ; | 
|---|