SCRPMTA ;ALB/REW/PDR - Team Reassignment APIs:APPTTM ; AUG 1998
;;5.3;scheduling;**148,157**;aug 13, 1993
; Reassign patient Team, called from RPC ='SC FILE PAT TM REASGN' (PTFILE^SCMRBK - PTFILE^SCMRBK)
;
;;1.0
; MAKE A SINGLE PATIENT TEAM REASSIGNMENT
ACPTTM(DFN,SCTMTO,SCFIELDA,SCACT,FASIEN,SCERR) ;add a patient to a team (pt tmassgn - #404.42)
; input:
; DFN = pointer to PATIENT file (#2)
; SCTMTO = pointer to TEAM file (#404.51) "TO" Team
; SCFIELDA= array of additional fields to be added for 404.42
; SCACT = date to activate [default=DT]
; FASIEN = IEN of source team assignment
; SCERR = array NAME to store error messages.
; [ex. ^TMP("ORXX",$J)]
;
; Output:
; Returned = ien of 404.42 - 0 if none after^new?^Message
; SCERR() = Array of DIALOG file messages(errors) .
; Foramt:
; Subscript: Sequential # from 1 to n
; Piece Description
; 1 IEN of DIALOG file
N SCPTTM,SCESEQ,SCPARM,SCIEN,SC,SCFLD,SCNEWTM,SCDTPAR,SCMESS
;
;
I '$$OKDATA D G APTTMQ ;check/setup variables
. D ERROR("Failed initial data check","",10)
;
; PROCESS REASSIGNMENT
; get destination team assignment parameters if already existing assignment
I '$$GETTMPAR(DFN,SCTMTO,SCACT,.SCERR,.SCDTPAR,.SCPTTM) D G APTTMQ ; BAIL if error
. D ERROR("Unable to get list of team assignments for patient",FASIEN,20)
; Make sure this reassignment doesn't set up more than 1 primary care team for PT
I $$INVALMOV(SCPTTM,FASIEN,SCDTPAR) D G APTTMQ ; BAIL if error
. D ERROR("Patient already has a primary care assignment",FASIEN,30)
;
; check for currently active destination assignment and discharge if so
I $$ACTIVDES(SCDTPAR,SCACT) D G:SCPTTM APTTMQ ; BAIL OUT if discharge unsuccessfull
. I $$DISTMOK(DFN,SCPTTM,SCACT,DUZ,"Destination") S SCPTTM="" Q ; going to create a new team
. D ERROR("Unable to discharge current destination assignment",SCPTTM,40)
;
; discharge source team
I '$$DISTMOK(DFN,FASIEN,SCACT,DUZ,"Source") D G APTTMQ
. ; error messages setup within call to DISTMOK
. S SCPTTM=""
;
; Move the patient to destination team and create destination team if necessary
I '$$MOVPATOK(DFN,SCACT,SCTMTO,SCFIELDA,SCDTPAR,.SCPTTM,DUZ) D G APTTMQ
. D ERROR("Unable to move patient to destination team",FASIEN,50)
;
APTTMQ ;
;B
Q +$G(SCPTTM)_U_+$G(SCNEWTM)_U_$G(SCMESS)
;
;-------------------- SUBS -------------------------------
;
PTTMACT(DFN,SCTMTO,SCDT,SCERR) ;what is patient/team assignment on a given date-time into the future? Return 404.42 ien or 0
N SCTMLST,SCOK,SCPTTMDT
S SCOK=0
S SCPTTMDT("BEGIN")=SCDT,SCPTTMDT("END")=3990101,SCPTTMDT("INCL")=0
IF $$TMPT^SCAPMC3(DFN,"SCPTTMDT","","SCTMLST",.SCERR) S:$D(SCTMLST("SCTM",SCTMTO)) SCOK=$O(SCTMLST("SCTM",SCTMTO,0))
Q SCOK
;
OKDATA() ;setup/check variables
N SCOK
S SCOK=1
D INIT^SCAPMCU1(.SCOK)
IF '$D(^DPT(DFN,0))!('$D(^SCTM(404.51,SCTMTO,0))) D S SCOK=0
. S SCPARM("PATIENT")=DFN
. S SCPARM("TEAM")=SCTMTO
. D ERR^SCAPMCU1(SCESEQ,4045101,.SCPARM,"",.SCERR)
S:'$G(SCACT) SCACT=DT
Q SCOK
;
DISTMOK(DFN,TMIEN,SCACT,SCDUZ,SD) ; Discharge patient from Team Assignment
; DFN = pointer to patient
; TMIEN = Ptr to Team Assignment File 404.42 for Team being discharged
; SCAT = Discharge Date
; SCDUZ = DUZ of user making reassignment
; SD = text indicating "source" or "destination" team
N SC,SCTEC,DISDAT
;
Q:TMIEN="" TMIEN ; Don't try to update this record if don't get IEN
S DISDAT=SCACT ; init discharge date
; discharge for previous day if assignment date prior to today
I $P($G(^SCPT(404.42,TMIEN,0)),U,2)'>$$PREVDAY(SCACT) S DISDAT=$$PREVDAY(SCACT)
; Discharge Position assignments first, to prevent posibility of orphan positions
D DISCHPOS(DFN,TMIEN,DISDAT,SCERR,.SCTEC) ; Discharge from any position Assignments on this team
I SCTEC S SCTEC=$$INPTTM^SCAPMC(DFN,TMIEN,DISDAT,SCERR) ; Discharge from team Assignments
I 'SCTEC D ERROR("Unable to discharge "_SD_" team",FASIEN,500) Q 0 ; BAIL OUT
Q SCTEC
;
DISCHPOS(DFN,TMASGN,SCAT,SCERR,SCTEC) ;Discharge positition assignments
; DFN = ptr to patient
; TMASGN = ptr to team assignment
; SCAT = discharge date
N POSASGN,EM,GD,OK
S (EM,GD)=""
S OK=1
S SCTEC=1 ; initialize successfull pos discharge since may not be any pos to discharge
S POSASGN=0
F S POSASGN=$O(^SCPT(404.43,"B",TMASGN,POSASGN)) Q:POSASGN="" D
. S SCTEC=$$INPTTP^SCAPMC(DFN,POSASGN,SCAT,SCERR) ; discharge position
. I SCTEC S GD=GD_POSASGN_","
. I 'SCTEC D
.. S EM=EM_POSASGN_","
.. S OK=0
I 'OK D
. I GD'="" D ERROR("able to discharge these source positions: "_GD_" unable to discharge these: "_EM,POSASGN,300) Q
. D ERROR("unable to discharge any of the team positions: "_EM,POSASGN,400)
Q
;
PREVDAY(DAY) ; GET PREVIOUS DAY
; DAY = DATE IN FILEMAN FORMAT
N X,X1,X2
S X1=DAY,X2=-1
D C^%DTC
Q X
;
GETTMPAR(DFN,SCTMTO,SCDT,SCERR,SCTMPAR,SCPTTM) ; RETURN team parameters
; SCTMPAR is returned as:
; Piece Description
; 1 IEN of TEAM file entry
; 2 Name of team
; 3 IEN of file #404.42 (Pt Tm Assignment)
; 4 current effective date
; 5 current inactivate date (if any)
; 6 pointer to 403.47 (purpose)
; 7 Name of Purpose
; 8 Is this the pt's PC Team?
; 9 IEN of PC team assignment - added to record -PDR
N SCTMLST,SCPTTMDT,PCTM
S (SCPTTM,SCTMPAR,PCTM)="" ; initialize dest team IEN and dest team parameters
; get a list of active or future active teams for this patient
S SCPTTMDT("BEGIN")=SCDT,SCPTTMDT("END")=3990101,SCPTTMDT("INCL")=0
I $$TMPT^SCAPMC3(DFN,"SCPTTMDT","","SCTMLST",.SCERR) D
. S PCTM=$$GETPCTM(.SCTMLST) ; get the PC team if any for this patient
. S:$D(SCTMLST("SCTM",SCTMTO)) SCPTTM=$O(SCTMLST("SCTM",SCTMTO,0))
. I SCPTTM D ; get the team parameters
.. S SCN=$O(SCTMLST("SCTM",SCTMTO,SCPTTM,"")) ; ordered list
.. S SCTMPAR=$G(SCTMLST(SCN)) ; basic team parameters
S $P(SCTMPAR,U,9)=+PCTM ; add ien of PC team as 9th piece
Q '$D(@SCERR)
;
GETPCTM(TMLIST) ; FIND THE PC TEAM FOR THIS PATIENT
N SN,PT
S (PT,SN)=0
F S SN=$O(TMLIST(SN)) Q:'SN D Q:PT
. I $P(TMLIST(SN),U,8) S PT=$P(TMLIST(SN),U,3)
Q PT
;
FUASSN(SCDTPAR,SCDT) ; is there a future assignment?
Q $P(SCTMPAR,U,4)>SCDT
;
FUDISCHG(SCTMPAR,SCDT) ;IS THERE A FUTURE DISCHARGE?
Q $P(SCTMPAR,U,5)>SCDT
;
MOVPATOK(DFN,SCACT,SCTMTO,SCFIELDA,SCTMPAR,SCPTTM,SCDUZ) ; DID MOVE GO OK?
N SCFLD,SCED
S SCED=0
I SCPTTM D ; setup for edit of existing dest assignment record
. S SCPTTM=SCPTTM_"," ; IENS format
. I $$FUASSN(SCTMPAR,SCACT) S SCED=1 ; the new assign date wil be entered below
. I $$FUDISCHG(SCTMPAR,SCACT) D ; is there a future discharge for the dest team?
.. S SCED=1
.. S SC($J,404.42,SCPTTM,.09)="" ; remove discharge date
. I SCED D ; editing the existing assignment - setup edit documentation fields
.. S SC($J,404.42,SCPTTM,.13)=@SCFIELDA@(.11) ; last edited by set to entered by
.. S SC($J,404.42,SCPTTM,.14)=@SCFIELDA@(.12) ; last edit time set to enter date/time
.. K @SCFIELDA@(.11) ; dispose of entered by (SCFIELDA array is set in SCMRBK)
.. K @SCFIELDA@(.12) ; dispose of entry date/time
;
I '(+SCPTTM) S SCPTTM="+1," ; setup for new team
;
S SCFLD=0 ; add additional fields from workstation if any
F S SCFLD=$O(@SCFIELDA@(SCFLD)) Q:'SCFLD D
. S SC($J,404.42,SCPTTM,SCFLD)=@SCFIELDA@(SCFLD)
; core fields for new team assignment
S SC($J,404.42,SCPTTM,.01)=DFN
S SC($J,404.42,SCPTTM,.02)=SCACT
S SC($J,404.42,SCPTTM,.03)=SCTMTO
;
I 'SCED D UPDATE^DIE("","SC($J)","SCIEN","SCERR") ; new entry
I SCED D FILE^DIE("","SC($J)","SCERR") ; edit existing entry
;
IF $D(@SCERR) D
. K SCIEN
. S SCPTTM=""
ELSE D
. I SCPTTM'="+1," Q ; BAIL OUT - was edit to existing assignement record
. S SCPTTM=$G(SCIEN(1)) ; new assignment record set up
. S SCNEWTM=1
. D AFTERTM^SCMCDD1(SCPTTM)
Q '$D(@SCERR)
;
INVALMOV(DTMIEN,STMIEN,TMPAR) ; IS THIS A VALID REASSIGNMENT?
; can't have a pc team reassignment if patient has an existing PC team assignment
; and it is not
; 1: the src team (move from src to dest discharges src, result only 1 pc team) OR
; 2: the destination team (already existing assignment)
I $$PCASSGN,$$OTHPCTM(DTMIEN,STMIEN,TMPAR) Q 1
Q 0
;
PCASSGN() ; IS THE REASSIGNMENT DESTINATION TO BE PC?
Q @SCFIELDA@(.08)=1
;
OTHPCTM(DTMIEN,STMIEN,TMPAR) ; IS THERE ALREADY PC TEAM ASSIGNMENT?
I $P(TMPAR,U,9)=0 Q 0 ; no other primary care assignments
I 'DTMIEN Q $P(TMPAR,U,9)'=STMIEN ; true if PC team is not source team
Q $P(TMPAR,U,9)'=DTMIEN ; true if existing dest team assign is not pc team
;
ACTIVDES(SCDTPAR,SCACT) ; IS THE DESTINATION ASSIGNMENT ACTIVE?
; SCDTPAR = Destination Team assignment parameter string
N DISDT,ASNDT
S DISDT=$P(SCDTPAR,U,5)
I DISDT="" S DISDT=9999999
S ASNDT=$P(SCDTPAR,U,4)
; ACTIVE if assign date is not in future and
; there is no discharge date, or the discharge date is in the future
I (ASNDT'>SCACT)&(DISDT>SCACT) Q 1
Q 0
;
ERROR(TXT,ID,ERN) ; ERROR PROCESSOR
S SCMESS=TXT_" IEN="_ID_" (ER#="_ERN_")"
S SCPTTM=0 ; return no assignment ien
;S ^TMP("PDR",$J,$H,DFN)=SCMESS
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSCRPMTA 9534 printed Oct 16, 2024@18:43:14 Page 2
SCRPMTA ;ALB/REW/PDR - Team Reassignment APIs:APPTTM ; AUG 1998
+1 ;;5.3;scheduling;**148,157**;aug 13, 1993
+2 ; Reassign patient Team, called from RPC ='SC FILE PAT TM REASGN' (PTFILE^SCMRBK - PTFILE^SCMRBK)
+3 ;
+4 ;;1.0
+5 ; MAKE A SINGLE PATIENT TEAM REASSIGNMENT
ACPTTM(DFN,SCTMTO,SCFIELDA,SCACT,FASIEN,SCERR) ;add a patient to a team (pt tmassgn - #404.42)
+1 ; input:
+2 ; DFN = pointer to PATIENT file (#2)
+3 ; SCTMTO = pointer to TEAM file (#404.51) "TO" Team
+4 ; SCFIELDA= array of additional fields to be added for 404.42
+5 ; SCACT = date to activate [default=DT]
+6 ; FASIEN = IEN of source team assignment
+7 ; SCERR = array NAME to store error messages.
+8 ; [ex. ^TMP("ORXX",$J)]
+9 ;
+10 ; Output:
+11 ; Returned = ien of 404.42 - 0 if none after^new?^Message
+12 ; SCERR() = Array of DIALOG file messages(errors) .
+13 ; Foramt:
+14 ; Subscript: Sequential # from 1 to n
+15 ; Piece Description
+16 ; 1 IEN of DIALOG file
+17 NEW SCPTTM,SCESEQ,SCPARM,SCIEN,SC,SCFLD,SCNEWTM,SCDTPAR,SCMESS
+18 ;
+19 ;
+20 ;check/setup variables
IF '$$OKDATA
Begin DoDot:1
+21 DO ERROR("Failed initial data check","",10)
End DoDot:1
GOTO APTTMQ
+22 ;
+23 ; PROCESS REASSIGNMENT
+24 ; get destination team assignment parameters if already existing assignment
+25 ; BAIL if error
IF '$$GETTMPAR(DFN,SCTMTO,SCACT,.SCERR,.SCDTPAR,.SCPTTM)
Begin DoDot:1
+26 DO ERROR("Unable to get list of team assignments for patient",FASIEN,20)
End DoDot:1
GOTO APTTMQ
+27 ; Make sure this reassignment doesn't set up more than 1 primary care team for PT
+28 ; BAIL if error
IF $$INVALMOV(SCPTTM,FASIEN,SCDTPAR)
Begin DoDot:1
+29 DO ERROR("Patient already has a primary care assignment",FASIEN,30)
End DoDot:1
GOTO APTTMQ
+30 ;
+31 ; check for currently active destination assignment and discharge if so
+32 ; BAIL OUT if discharge unsuccessfull
IF $$ACTIVDES(SCDTPAR,SCACT)
Begin DoDot:1
+33 ; going to create a new team
IF $$DISTMOK(DFN,SCPTTM,SCACT,DUZ,"Destination")
SET SCPTTM=""
QUIT
+34 DO ERROR("Unable to discharge current destination assignment",SCPTTM,40)
End DoDot:1
if SCPTTM
GOTO APTTMQ
+35 ;
+36 ; discharge source team
+37 IF '$$DISTMOK(DFN,FASIEN,SCACT,DUZ,"Source")
Begin DoDot:1
+38 ; error messages setup within call to DISTMOK
+39 SET SCPTTM=""
End DoDot:1
GOTO APTTMQ
+40 ;
+41 ; Move the patient to destination team and create destination team if necessary
+42 IF '$$MOVPATOK(DFN,SCACT,SCTMTO,SCFIELDA,SCDTPAR,.SCPTTM,DUZ)
Begin DoDot:1
+43 DO ERROR("Unable to move patient to destination team",FASIEN,50)
End DoDot:1
GOTO APTTMQ
+44 ;
APTTMQ ;
+1 ;B
+2 QUIT +$GET(SCPTTM)_U_+$GET(SCNEWTM)_U_$GET(SCMESS)
+3 ;
+4 ;-------------------- SUBS -------------------------------
+5 ;
PTTMACT(DFN,SCTMTO,SCDT,SCERR) ;what is patient/team assignment on a given date-time into the future? Return 404.42 ien or 0
+1 NEW SCTMLST,SCOK,SCPTTMDT
+2 SET SCOK=0
+3 SET SCPTTMDT("BEGIN")=SCDT
SET SCPTTMDT("END")=3990101
SET SCPTTMDT("INCL")=0
+4 IF $$TMPT^SCAPMC3(DFN,"SCPTTMDT","","SCTMLST",.SCERR)
if $DATA(SCTMLST("SCTM",SCTMTO))
SET SCOK=$ORDER(SCTMLST("SCTM",SCTMTO,0))
+5 QUIT SCOK
+6 ;
OKDATA() ;setup/check variables
+1 NEW SCOK
+2 SET SCOK=1
+3 DO INIT^SCAPMCU1(.SCOK)
+4 IF '$DATA(^DPT(DFN,0))!('$DATA(^SCTM(404.51,SCTMTO,0)))
Begin DoDot:1
+5 SET SCPARM("PATIENT")=DFN
+6 SET SCPARM("TEAM")=SCTMTO
+7 DO ERR^SCAPMCU1(SCESEQ,4045101,.SCPARM,"",.SCERR)
End DoDot:1
SET SCOK=0
+8 if '$GET(SCACT)
SET SCACT=DT
+9 QUIT SCOK
+10 ;
DISTMOK(DFN,TMIEN,SCACT,SCDUZ,SD) ; Discharge patient from Team Assignment
+1 ; DFN = pointer to patient
+2 ; TMIEN = Ptr to Team Assignment File 404.42 for Team being discharged
+3 ; SCAT = Discharge Date
+4 ; SCDUZ = DUZ of user making reassignment
+5 ; SD = text indicating "source" or "destination" team
+6 NEW SC,SCTEC,DISDAT
+7 ;
+8 ; Don't try to update this record if don't get IEN
if TMIEN=""
QUIT TMIEN
+9 ; init discharge date
SET DISDAT=SCACT
+10 ; discharge for previous day if assignment date prior to today
+11 IF $PIECE($GET(^SCPT(404.42,TMIEN,0)),U,2)'>$$PREVDAY(SCACT)
SET DISDAT=$$PREVDAY(SCACT)
+12 ; Discharge Position assignments first, to prevent posibility of orphan positions
+13 ; Discharge from any position Assignments on this team
DO DISCHPOS(DFN,TMIEN,DISDAT,SCERR,.SCTEC)
+14 ; Discharge from team Assignments
IF SCTEC
SET SCTEC=$$INPTTM^SCAPMC(DFN,TMIEN,DISDAT,SCERR)
+15 ; BAIL OUT
IF 'SCTEC
DO ERROR("Unable to discharge "_SD_" team",FASIEN,500)
QUIT 0
+16 QUIT SCTEC
+17 ;
DISCHPOS(DFN,TMASGN,SCAT,SCERR,SCTEC) ;Discharge positition assignments
+1 ; DFN = ptr to patient
+2 ; TMASGN = ptr to team assignment
+3 ; SCAT = discharge date
+4 NEW POSASGN,EM,GD,OK
+5 SET (EM,GD)=""
+6 SET OK=1
+7 ; initialize successfull pos discharge since may not be any pos to discharge
SET SCTEC=1
+8 SET POSASGN=0
+9 FOR
SET POSASGN=$ORDER(^SCPT(404.43,"B",TMASGN,POSASGN))
if POSASGN=""
QUIT
Begin DoDot:1
+10 ; discharge position
SET SCTEC=$$INPTTP^SCAPMC(DFN,POSASGN,SCAT,SCERR)
+11 IF SCTEC
SET GD=GD_POSASGN_","
+12 IF 'SCTEC
Begin DoDot:2
+13 SET EM=EM_POSASGN_","
+14 SET OK=0
End DoDot:2
End DoDot:1
+15 IF 'OK
Begin DoDot:1
+16 IF GD'=""
DO ERROR("able to discharge these source positions: "_GD_" unable to discharge these: "_EM,POSASGN,300)
QUIT
+17 DO ERROR("unable to discharge any of the team positions: "_EM,POSASGN,400)
End DoDot:1
+18 QUIT
+19 ;
PREVDAY(DAY) ; GET PREVIOUS DAY
+1 ; DAY = DATE IN FILEMAN FORMAT
+2 NEW X,X1,X2
+3 SET X1=DAY
SET X2=-1
+4 DO C^%DTC
+5 QUIT X
+6 ;
GETTMPAR(DFN,SCTMTO,SCDT,SCERR,SCTMPAR,SCPTTM) ; RETURN team parameters
+1 ; SCTMPAR is returned as:
+2 ; Piece Description
+3 ; 1 IEN of TEAM file entry
+4 ; 2 Name of team
+5 ; 3 IEN of file #404.42 (Pt Tm Assignment)
+6 ; 4 current effective date
+7 ; 5 current inactivate date (if any)
+8 ; 6 pointer to 403.47 (purpose)
+9 ; 7 Name of Purpose
+10 ; 8 Is this the pt's PC Team?
+11 ; 9 IEN of PC team assignment - added to record -PDR
+12 NEW SCTMLST,SCPTTMDT,PCTM
+13 ; initialize dest team IEN and dest team parameters
SET (SCPTTM,SCTMPAR,PCTM)=""
+14 ; get a list of active or future active teams for this patient
+15 SET SCPTTMDT("BEGIN")=SCDT
SET SCPTTMDT("END")=3990101
SET SCPTTMDT("INCL")=0
+16 IF $$TMPT^SCAPMC3(DFN,"SCPTTMDT","","SCTMLST",.SCERR)
Begin DoDot:1
+17 ; get the PC team if any for this patient
SET PCTM=$$GETPCTM(.SCTMLST)
+18 if $DATA(SCTMLST("SCTM",SCTMTO))
SET SCPTTM=$ORDER(SCTMLST("SCTM",SCTMTO,0))
+19 ; get the team parameters
IF SCPTTM
Begin DoDot:2
+20 ; ordered list
SET SCN=$ORDER(SCTMLST("SCTM",SCTMTO,SCPTTM,""))
+21 ; basic team parameters
SET SCTMPAR=$GET(SCTMLST(SCN))
End DoDot:2
End DoDot:1
+22 ; add ien of PC team as 9th piece
SET $PIECE(SCTMPAR,U,9)=+PCTM
+23 QUIT '$DATA(@SCERR)
+24 ;
GETPCTM(TMLIST) ; FIND THE PC TEAM FOR THIS PATIENT
+1 NEW SN,PT
+2 SET (PT,SN)=0
+3 FOR
SET SN=$ORDER(TMLIST(SN))
if 'SN
QUIT
Begin DoDot:1
+4 IF $PIECE(TMLIST(SN),U,8)
SET PT=$PIECE(TMLIST(SN),U,3)
End DoDot:1
if PT
QUIT
+5 QUIT PT
+6 ;
FUASSN(SCDTPAR,SCDT) ; is there a future assignment?
+1 QUIT $PIECE(SCTMPAR,U,4)>SCDT
+2 ;
FUDISCHG(SCTMPAR,SCDT) ;IS THERE A FUTURE DISCHARGE?
+1 QUIT $PIECE(SCTMPAR,U,5)>SCDT
+2 ;
MOVPATOK(DFN,SCACT,SCTMTO,SCFIELDA,SCTMPAR,SCPTTM,SCDUZ) ; DID MOVE GO OK?
+1 NEW SCFLD,SCED
+2 SET SCED=0
+3 ; setup for edit of existing dest assignment record
IF SCPTTM
Begin DoDot:1
+4 ; IENS format
SET SCPTTM=SCPTTM_","
+5 ; the new assign date wil be entered below
IF $$FUASSN(SCTMPAR,SCACT)
SET SCED=1
+6 ; is there a future discharge for the dest team?
IF $$FUDISCHG(SCTMPAR,SCACT)
Begin DoDot:2
+7 SET SCED=1
+8 ; remove discharge date
SET SC($JOB,404.42,SCPTTM,.09)=""
End DoDot:2
+9 ; editing the existing assignment - setup edit documentation fields
IF SCED
Begin DoDot:2
+10 ; last edited by set to entered by
SET SC($JOB,404.42,SCPTTM,.13)=@SCFIELDA@(.11)
+11 ; last edit time set to enter date/time
SET SC($JOB,404.42,SCPTTM,.14)=@SCFIELDA@(.12)
+12 ; dispose of entered by (SCFIELDA array is set in SCMRBK)
KILL @SCFIELDA@(.11)
+13 ; dispose of entry date/time
KILL @SCFIELDA@(.12)
End DoDot:2
End DoDot:1
+14 ;
+15 ; setup for new team
IF '(+SCPTTM)
SET SCPTTM="+1,"
+16 ;
+17 ; add additional fields from workstation if any
SET SCFLD=0
+18 FOR
SET SCFLD=$ORDER(@SCFIELDA@(SCFLD))
if 'SCFLD
QUIT
Begin DoDot:1
+19 SET SC($JOB,404.42,SCPTTM,SCFLD)=@SCFIELDA@(SCFLD)
End DoDot:1
+20 ; core fields for new team assignment
+21 SET SC($JOB,404.42,SCPTTM,.01)=DFN
+22 SET SC($JOB,404.42,SCPTTM,.02)=SCACT
+23 SET SC($JOB,404.42,SCPTTM,.03)=SCTMTO
+24 ;
+25 ; new entry
IF 'SCED
DO UPDATE^DIE("","SC($J)","SCIEN","SCERR")
+26 ; edit existing entry
IF SCED
DO FILE^DIE("","SC($J)","SCERR")
+27 ;
+28 IF $DATA(@SCERR)
Begin DoDot:1
+29 KILL SCIEN
+30 SET SCPTTM=""
End DoDot:1
+31 IF '$TEST
Begin DoDot:1
+32 ; BAIL OUT - was edit to existing assignement record
IF SCPTTM'="+1,"
QUIT
+33 ; new assignment record set up
SET SCPTTM=$GET(SCIEN(1))
+34 SET SCNEWTM=1
+35 DO AFTERTM^SCMCDD1(SCPTTM)
End DoDot:1
+36 QUIT '$DATA(@SCERR)
+37 ;
INVALMOV(DTMIEN,STMIEN,TMPAR) ; IS THIS A VALID REASSIGNMENT?
+1 ; can't have a pc team reassignment if patient has an existing PC team assignment
+2 ; and it is not
+3 ; 1: the src team (move from src to dest discharges src, result only 1 pc team) OR
+4 ; 2: the destination team (already existing assignment)
+5 IF $$PCASSGN
IF $$OTHPCTM(DTMIEN,STMIEN,TMPAR)
QUIT 1
+6 QUIT 0
+7 ;
PCASSGN() ; IS THE REASSIGNMENT DESTINATION TO BE PC?
+1 QUIT @SCFIELDA@(.08)=1
+2 ;
OTHPCTM(DTMIEN,STMIEN,TMPAR) ; IS THERE ALREADY PC TEAM ASSIGNMENT?
+1 ; no other primary care assignments
IF $PIECE(TMPAR,U,9)=0
QUIT 0
+2 ; true if PC team is not source team
IF 'DTMIEN
QUIT $PIECE(TMPAR,U,9)'=STMIEN
+3 ; true if existing dest team assign is not pc team
QUIT $PIECE(TMPAR,U,9)'=DTMIEN
+4 ;
ACTIVDES(SCDTPAR,SCACT) ; IS THE DESTINATION ASSIGNMENT ACTIVE?
+1 ; SCDTPAR = Destination Team assignment parameter string
+2 NEW DISDT,ASNDT
+3 SET DISDT=$PIECE(SCDTPAR,U,5)
+4 IF DISDT=""
SET DISDT=9999999
+5 SET ASNDT=$PIECE(SCDTPAR,U,4)
+6 ; ACTIVE if assign date is not in future and
+7 ; there is no discharge date, or the discharge date is in the future
+8 IF (ASNDT'>SCACT)&(DISDT>SCACT)
QUIT 1
+9 QUIT 0
+10 ;
ERROR(TXT,ID,ERN) ; ERROR PROCESSOR
+1 SET SCMESS=TXT_" IEN="_ID_" (ER#="_ERN_")"
+2 ; return no assignment ien
SET SCPTTM=0
+3 ;S ^TMP("PDR",$J,$H,DFN)=SCMESS
+4 QUIT