Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: SCRPMPSP

SCRPMPSP.m

Go to the documentation of this file.
SCRPMPSP        ;ALB/PDR - Team APIs:ACPTTP ; AUG 1998
 ;;5.3;Scheduling;**148,157,169,177**;AUG 13, 1993
 ;
ACPTTP(DFN,SCTP,SCFIELDA,SCACT,FASIEN,SCERR,SCYESTM,SCMAINA) ;add/edit a patient to a position (pt TP assgn - #404.43
 ; input:
 ;  DFN     = pointer to PATIENT file (#2)
 ;  SCTP    = pointer to TEAM POSTION file (#404.57) (DESTINATION POSITION)
 ;  SCFIELDA= array of extra field entries - scfielda('fld#')=value for 404.43
 ;  SCACT   = date to activate [default=DT]
 ;  FASIEN  = "FROM" position assignment IEN
 ;  SCERR = array NAME to store error messages.
 ;          [ex. ^TMP("ORXX",$J)]
 ;  SCYESTM = Should team assignment be made, if none active now?[1=YES]
 ;  SCMAINA= array of extra field entries for 404.42
 ;
 ; Output:
 ;  Returned = ien of 404.43^new?^404.42 ien (new entries only)^new?^Message
 ;  SCERR()  = Array of DIALOG file messages(errors) .
 ;             Foramt:
 ;               Subscript: Sequential # from 1 to n
 ;               Piece     Description
 ;                 1       IEN of DIALOG file
 N SCESEQ,SCPARM,SCIEN,SC,HISTPTTP,SCFLD,SCTM,SCPTTMA,SCST,PATH
 N SCPTTPA,SCTMFLDA,SCNEWTP,SCNEWTM,SCAPTDT,SCAPTTPO,SCAPTTPE,SCMESS
 N SCLOCK,SCXLOCK,SCX
 ;
 ;
 I '$$OKDATA D ERROR(1,FASIEN,5) G APTTPQ
 ;
 I '$D(^XTMP("SCMC POS REASGN")) D
 . S ^XTMP("SCMC POS REASGN",0)=DT_U_DT_U_"POS REASGN PROCESS LOCK"
 . Q
 ;
 S SCXLOCK=0
 S SCLOCK="^XTMP(""SCMC POS REASGN"",DFN)"
 I $D(@SCLOCK) D ERROR(10,FASIEN,7) G APTTPQ
 S @SCLOCK=""
 S SCXLOCK=1
 H 1
 ;
        ;
 D INITVARS
 I '$$GETPLST D ERROR(2,FASIEN,10) G APTTPQ
 ;
 ;bp/cmf 177 new begin
 S SCX=$$OKPREC5^SCMCLK(SCTP,SCACT)
 I SCX<1 D ERROR($P(SCX,U,2),FASIEN,11) G APTTPQ
 ;bp/cmf 177 new end
 ;
 ; Business rule processing
 ;
 ; case 1
 I $$POSEXIST(.SCTM,SCTP,.SCPTTPA,.SCPTTMA) D  D SETP(1) G APTTPQ
 . ; destin pos asgn exists
 . I '$$PCPCASN^SCRPM21U(FASIEN,SCTP) D  D SETP(1.1) Q
 .. ; not PC to PC pos reasgn
 .. ;
 .. ; update pos asgn
 .. D UPDATPOS^SCRPM21U(.SCPTTPA,SCERR)
 .. I 'SCPTTPA D ERROR(3,SCPTTPA,12) Q
 .. ;
 .. ; update tm asgn
 .. I $$FUTMASN^SCRPM21U(SCPTTMA,SCACT)!$$FUTTMDIS^SCRPM21U(.SCPTTMA,SCACT) D  Q:'SCPTTMA
 ... D TMACTIV^SCRPM21U(.SCPTTMA,$$PCPOS)
 ... I 'SCPTTMA D ERROR(4,SCPTTMA,20)
 ... Q
 .. ;
 .. ; dschrg source pos
 .. D DISPOS^SCRPM21U(FASIEN,.SCPTTPA)
 .. I 'SCPTTPA D ERROR(5,SCPTTPA,30)
 .. Q
 . ;
 . ;  PC to PC pos reasgn
 . N SCFLAG
 . S SCFLAG=0
 . N SCY
 . S SCY=0
 . F  S SCY=$O(SCAPTTPO("SCTP",SCTM,SCTP,SCY)) Q:'SCY!(SCFLAG)  D
 .. S SCPTTPA=SCY
 .. S SCPTTMA=$$GETPOSTM^SCRPM21U(SCPTTPA)
 .. I '$D(^SCPT(404.43,SCPTTPA)) Q
 .. S SCFLAG=$$DPOSPROB^SCRPM21U(SCPTTPA,SCACT)
 .. I SCFLAG Q
 .. I '$D(^SCPT(404.42,SCPTTMA)) Q
 .. S SCFLAG=$$DTMPROB^SCRPM21U(SCPTTMA,SCACT)
 .. Q
 . Q:SCFLAG
 . ;
 . ; create new destin tm, pos asgns
 . D CREATETM^SCRPM21U(DFN,$$DSTTEAM,SCACT,.SCPTTMA)
 . I 'SCPTTMA D ERROR(6,SCPTTMA,40) Q
 . D CREATPOS^SCRPM21U(.SCPTTPA,SCPTTMA)
 . I 'SCPTTPA D ERROR(7,SCPTTPA,50) Q
 . ;
 . ; take care of source bookkeeping
 . D XALLPOS^SCRPM21U(FASIEN,.SCPTTPA)
 . I 'SCPTTMA D ERROR(8,SCPTTMA,60) Q
 . D DISTEAM^SCRPM21U($$SRCTEAM)
 . I 'SCPTTPA D ERROR(9,SCST,70) Q
 . Q
 ;
 ; case 2
 I $$TMEXIST^SCRPM21U(DFN,SCTM,SCACT,.SCPTTMA) D  D SETP(2) G APTTPQ
 . ; destin tm asgn exists
 . I $$PCPCASN^SCRPM21U(FASIEN,SCTP) D  D SETP(2.1) Q
 .. ; PC to PC tm reassgn
 .. ;
 .. ; take care of destin bookkeeping
 .. Q:$$DTMPROB^SCRPM21U(SCPTTMA,SCACT)
 .. ;
 .. ; create new destin tm, pos asgns
 .. D CREATETM^SCRPM21U(DFN,$$DSTTEAM,SCACT,.SCPTTMA)
 .. I 'SCPTTMA D ERROR(6,SCPTTMA,80) Q
 .. D CREATPOS^SCRPM21U(.SCPTTPA,.SCPTTMA)
 .. I 'SCPTTPA D ERROR(7,SCPTTPA,100) Q
 .. ;
 .. ; take care of source bookkeeping
 .. D XALLPOS^SCRPM21U(FASIEN,.SCPTTPA)
 .. I 'SCPTTMA D ERROR(8,SCPTTMA,105) Q
 .. D DISTEAM^SCRPM21U($$SRCTEAM)
 .. I 'SCPTTPA D ERROR(9,SCST,107) Q
 .. Q
 . ;
 . ;not PC to PC tm reassgn
 . ; update tm asgn 
 . I $$FUTMASN^SCRPM21U(.SCPTTMA,SCACT)!$$FUTTMDIS^SCRPM21U(.SCPTTMA,SCACT) D  Q:'SCPTTMA
 .. D TMACTIV^SCRPM21U(.SCPTTMA,$$PCPOS)
 .. I 'SCPTTMA D ERROR(4,SCPTTMA,120)
 .. Q
 . ;
 . ; create pos asgn
 . D CREATPOS^SCRPM21U(.SCPTTPA,.SCPTTMA)
 . I 'SCPTTPA D ERROR(7,SCPTTPA,130)
 . ;
 . ; dschrg source pos
 . D DISPOS^SCRPM21U(FASIEN,.SCPTTPA)
 . I 'SCPTTPA D ERROR(5,SCPTTPA,135)
 . Q
 ;
 ; case 3 
 ; no destin asgn
 I $$PCPCASN^SCRPM21U(FASIEN,SCTP) D  D SETP(3.1) G APTTPQ
 . ; PC to PC reasgn
 . ;
 . ; create new destin tm, pos asgns
 . D CREATETM^SCRPM21U(DFN,$$DSTTEAM,SCACT,.SCPTTMA)
 . I 'SCPTTMA D ERROR(6,SCPTTMA,140) Q
 . D CREATPOS^SCRPM21U(.SCPTTPA,SCPTTMA)
 . I 'SCPTTPA D ERROR(7,SCPTTPA,160)  Q
 . ;
 . ; take care of source bookkeeping
 . D XALLPOS^SCRPM21U(FASIEN,.SCPTTPA)
 . I 'SCPTTPA D ERROR(8,SCPTTMA,180) Q
 . D DISTEAM^SCRPM21U($$SRCTEAM)
 . I 'SCPTTPA D ERROR(9,SCST,185) Q
 . Q
 ;
 D SETP(3)
 ; not PC to PC reasgn
 ;
 ; create new destin tm, pos asgns
 D CREATETM^SCRPM21U(DFN,$$DSTTEAM,SCACT,.SCPTTMA)
 I 'SCPTTMA D ERROR(6,SCPTTMA,187) G APTTPQ
 D CREATPOS^SCRPM21U(.SCPTTPA,SCPTTMA)
 I 'SCPTTPA D ERROR(7,SCPTTPA,190) G APTTPQ
 ;
 ; dschrg source pos
 D DISPOS^SCRPM21U(FASIEN,.SCPTTPA)
 I 'SCPTTPA D ERROR(5,SCPTTPA,200)
 ;
APTTPQ ; All done
 D SAVPARMS
 I SCXLOCK=1 K @SCLOCK
 Q +$G(SCPTTPA)_U_+$G(SCNEWTP)_U_+$G(SCPTTMA)_U_+$P($G(SCPTTMA),U,2)_U_$G(SCMESS)
 ;
 ;
OKDATA()        ;setup/check variables
 N SCOK
 S SCOK=1
 D INIT^SCAPMCU1(.SCOK)
 IF '$D(^DPT(DFN,0))!('$D(^SCTM(404.57,SCTPTO,0))) D  S SCOK=0
 . S SCPARM("PATIENT")=DFN
 . S SCPARM("POSITION")=SCTPTO
 . D ERR^SCAPMCU1(SCESEQ,4045101,.SCPARM,"",SCERR)
 S:'$G(SCACT) SCACT=DT
 S:'$D(SCMAINA) SCMAINA="SC40443A"
 Q SCOK
 ;
INITVARS        ; INITIALIZE LOCAL VARIABLES
 S SCTM=$P($G(^SCTM(404.57,SCTP,0)),U,2) ; destin tm ien
 S SCAPTDT("BEGIN")=SCACT
 S SCAPTDT("END")=3990101
 S SCAPTDT("INCL")=0
 S SCST=$$GETPOSTM^SCRPM21U(FASIEN) ; source tm ien
 S SCPTTMA=""
 S SCMESS=""
 K @SCERR
 Q
 ;
GETPLST() ; get patient position list
 Q $$TPPT^SCAPMC(DFN,"SCAPTDT",,,,,0,"SCAPTTPO","SCAPTTPE")
 ;
POSEXIST(SCTM,SCTP,POSAIEN,TMIEN) ;
 ; if active pos asgn, return ien
 N DISDT,SCX,SCY,SCFLAG
 S TMIEN=""
 S SCTM=+$P($G(^SCTM(404.57,SCTP,0)),U,2)  ;ptr to 404.51
 ;
 S SCFLAG=0
 S POSAIEN=0
 ;
 S SCX=0
 F  S SCX=$O(SCAPTTPO("SCTP",SCTM,SCTP,SCX)) Q:'SCX!(SCFLAG)  D
 . S SCY=$O(SCAPTTPO("SCTP",SCTM,SCTP,SCX,0))
 . S DISDT=$P(SCAPTTPO(SCY),U,6)
 . I DISDT=SCACT Q  ;pos is discharged
 . S TMIEN=$$GETPOSTM^SCRPM21U(SCX) ; tm asgn ien
 . S DISDT=$P($G(^SCPT(404.42,TMIEN,0)),U,9)
 . I DISDT,DISDT'>SCACT Q  ;tm is discharged
 . S SCFLAG=1
 . S POSAIEN=SCX
 . Q
 ;
 I SCFLAG Q POSAIEN
 Q 0_U_$O(SCAPTTPO("SCTP",SCTM,SCTP,0))
 ;
ERROR(TXT,IEN,ENUM)     ; HANDLE ERRORS FOR REPORTING
 I +TXT S TXT=$P($T(T+TXT),";;",2)
 S SCMESS=" "_TXT_" [E#"_ENUM_"]"
 ; NVS - use below for more detailed ien and path data
 ;I $P(IEN,U,1)=0 S IEN=$P(IEN,U,2)
 ;S SCMESS=TXT_" [(IEN="_IEN_") E#"_ENUM_" PTH:"_$G(PATH)_"]"
 ;S ^TMP("PDR",$J,"POSREASGN",$H,DFN)=SCMESS
 Q
 ;
T ;;
1 ;;Data Integrity error.;;
2 ;;Unable to get positions list.;;
3 ;;Unable to activate existing position.;;
4 ;;Unable to activate existing team.;;
5 ;;Unable to discharge source position.;;
6 ;;Unable to create destination team.;;
7 ;;Unable to create destination position.;;
8 ;;Unable to discharge all positions for PC source team.;;
9 ;;Unable to discharge PC source team.;;
10 ;;Patient is being reassigned by another PCMM process.;;
 ;;
 ;
SAVPARMS ; save params for debugging
 ; NVS - comment out the quit to save path/variable data
 Q
 N S,F,NVP
 S S=""
 S S=$O(^TMP("PDR",S),-1)+1 ; get next occurence
 S ^TMP("PDR",S,$J,"INIT")=DFN_U_SCTP_U_SCACT_U_FASIEN_U_SCYESTM ; initial params passed in
 S F="",NVP=""
 F  S F=$O(@SCFIELDA@(F)) Q:F=""  S NVP=NVP_F_"="_@SCFIELDA@(F)_U  ; Get the params passed in for new pos
 S ^TMP("PDR",S,$J,"NPOS")=NVP
 S F="",NVP=""
 F  S F=$O(@SCMAINA@(F)) Q:F=""  S NVP=NVP_F_"="_@SCFIELDA@(F)_U  ; Get the params passed in for new TEAM
 S ^TMP("PDR",S,$J,"NTEAM")=NVP
 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
 Q
 ;
SETP(BR) ; SET PATH INDICATOR FOR DEBUGGING
 ; NVS - comment out the quit to save path/variable data
 Q
 S PATH=$G(PATH)_BR_"-"
 Q
 ;
SRCTEAM()       ; return source tm ien
 ; value set in INITVARS
 Q SCST
 ;
DSTTEAM()       ; return destin tm ien
 Q SCTM
 ;
PCPOS() ; IS THIS A PC POSITION?
 Q $G(@SCFIELDA@(.05),0)
 ;