1 | SCAPMCU1 ;ALB/REW - TEAM API UTILITIES ; 7/12/99 9:33am
|
---|
2 | ;;5.3;Scheduling;**41,45,48,177**;AUG 13, 1993
|
---|
3 | ;;1.0
|
---|
4 | INIT(SCOK) ; setup date array & error arrays if none passed in
|
---|
5 | ; VARIABLES SET:
|
---|
6 | ; SCOK - SET TO 0 IF ERROR
|
---|
7 | ;
|
---|
8 | ; Makes sure the following are defined:
|
---|
9 | ; scbegin,scend,scincl,@scdates('begin'),@scdates@('end'),@scdates@('incl') - defaults are today & inclusive
|
---|
10 | ;
|
---|
11 | ; Note: you should NEW the above just before making this call
|
---|
12 | ; ---
|
---|
13 | S (SCN,SCESEQ,SCLSEQ)=0
|
---|
14 | IF '$L($G(SCERR)) K ^TMP("SCERR",$J) S SCERR="^TMP(""SCERR"",$J)"
|
---|
15 | IF '$L($G(SCLIST)) S SCLIST="^TMP(""SC TMP LIST"",$J)" K ^TMP("SC TMP LIST",$J)
|
---|
16 | IF (SCERR="SCERR")!(SCERR="SCLIST")!((SCERR'?1A1.7AN)&(SCERR'?1"^"1A.20E)) D S SCOK=0
|
---|
17 | . S SCPARM("ERROR ARRAY")=$G(SCERR,"Undefined")
|
---|
18 | . D ERR^SCAPMCU1(.SCESEQ,4045101,.SCPARM,"",.SCERR)
|
---|
19 | IF SCLIST="SCERR"!(SCLIST="SCLIST")!((SCLIST'?1A1.7AN.1"(".60E)&(SCLIST'?1"^"1A1.7AN.1"(".60E)) S SCOK=0 D S SCOK=0
|
---|
20 | . S SCPARM("OUTPUT ARRAY")=$G(SCLIST,"Undefined")
|
---|
21 | . D ERR^SCAPMCU1(.SCESEQ,4045101,.SCPARM,"",.SCERR)
|
---|
22 | S:'$D(SCDATES)!($G(SCDATES)="") SCDATES="SCDTS"
|
---|
23 | S SCBEGIN=$G(@SCDATES@("BEGIN"),DT),SCBEGIN=$S(SCBEGIN:SCBEGIN,1:DT)
|
---|
24 | S SCEND=$G(@SCDATES@("END"),DT),SCEND=$S(SCEND:SCEND,1:DT)
|
---|
25 | S SCINCL=$G(@SCDATES@("INCL"),1)
|
---|
26 | S (SCN,SCESEQ,SCLSEQ)=0
|
---|
27 | S:'$D(@SCDATES@("BEGIN")) @SCDATES@("BEGIN")=SCBEGIN
|
---|
28 | S:'$D(@SCDATES@("END")) @SCDATES@("END")=SCEND
|
---|
29 | S:'$D(@SCDATES@("INCL")) @SCDATES@("INCL")=SCINCL
|
---|
30 | Q
|
---|
31 | ;
|
---|
32 | ; bp/cmf 177 - added SCFUTURE input param, used at PCPOSCNT+17
|
---|
33 | ;;bp/cmf 177; orig entry call; PCPOSCNT(SCTP,SCDATE,SCPCONLY);this is a more efficient count of PC patients assigned to position
|
---|
34 | PCPOSCNT(SCTP,SCDATE,SCPCONLY,SCFUTURE) ;this is a more efficient count of PC patients assigned to position
|
---|
35 | ; Input: SCTP - ien to 404.57
|
---|
36 | ; SCDATE - date of concern, default=DT
|
---|
37 | ; SCPCONLY - 1= must be pc, 0=all assignments 1=DEFAULT
|
---|
38 | ; SCFUTURE - 1= include future, 0=current 0=DEFAULT ;;bp/cmf 177
|
---|
39 | ;returns count of patient assignments or -1 if error
|
---|
40 | N SCPTPA,SCCNT,SCHSTIEN,SCNODE
|
---|
41 | Q:'$G(SCTP) -1
|
---|
42 | S SCDATE=$G(SCDATE,DT)
|
---|
43 | S:'$L($G(SCPCONLY)) SCPCONLY=1
|
---|
44 | S:'$L($G(SCFUTURE)) SCFUTURE=0 ;;bp/cmf 177 add
|
---|
45 | S (SCPTPA,SCCNT)=0
|
---|
46 | F S SCPTPA=$O(^SCPT(404.43,"APTPA",SCTP,SCPTPA)) Q:'SCPTPA D
|
---|
47 | .S SCHSTIEN=0
|
---|
48 | .F S SCHSTIEN=$O(^SCPT(404.43,"APTPA",SCTP,SCPTPA,SCHSTIEN)) Q:'SCHSTIEN D
|
---|
49 | ..S SCNODE=$G(^SCPT(404.43,SCHSTIEN,0))
|
---|
50 | ..Q:$P(SCNODE,U,4)&($P(SCNODE,U,4)<SCDATE)
|
---|
51 | ..;;bp/cmf 177;orig code;;Q:$P(SCNODE,U,3)>SCDATE
|
---|
52 | ..Q:('SCFUTURE)&($P(SCNODE,U,3)>SCDATE) ;;bp/cmf 177 mod-use scfuture
|
---|
53 | ..Q:SCPCONLY&('$P(SCNODE,U,5)) ;pc role is not 1 or 2
|
---|
54 | ..S SCCNT=SCCNT+1
|
---|
55 | Q SCCNT
|
---|
56 | ;
|
---|
57 | TEAMCNT(SCTM,DATE) ;this is a more efficient version of the count
|
---|
58 | N DFN,SCCNT,SCNODE,HISTIEN
|
---|
59 | Q:'$G(SCTM) 0
|
---|
60 | S DATE=$G(DATE,DT)
|
---|
61 | S (DFN,SCCNT)=0
|
---|
62 | F S DFN=$O(^SCPT(404.42,"ATMPT",SCTM,DFN)) Q:'DFN D
|
---|
63 | .S HISTIEN=0
|
---|
64 | .F S HISTIEN=$O(^SCPT(404.42,"ATMPT",SCTM,DFN,HISTIEN)) Q:'HISTIEN D
|
---|
65 | ..S SCNODE=$G(^SCPT(404.42,HISTIEN,0))
|
---|
66 | ..Q:$P(SCNODE,U,9)&($P(SCNODE,U,9)<DATE)
|
---|
67 | ..Q:$P(SCNODE,U,2)>DATE
|
---|
68 | ..S SCCNT=SCCNT+1
|
---|
69 | Q SCCNT
|
---|
70 | ;
|
---|
71 | TEAMCNT2(SCTM,DATE) ;this is the count of patients assigned to the team on a date
|
---|
72 | ; Input: SCTM - ien to 404.51
|
---|
73 | ; DATE - date of concern, default=DT
|
---|
74 | N SCX,SCDATES,SCTEAMS,SCERR,X
|
---|
75 | S SCDATES("BEGIN")=$G(DATE,DT)
|
---|
76 | S SCDATES("END")=SCDATES("BEGIN")
|
---|
77 | S SCX=$$PTTM^SCAPMC(SCTM,"SCDATES","^TMP(""SCTEAMS"",$J,""CNT"")","SCERRX")
|
---|
78 | IF 'SCX S X=-SCX
|
---|
79 | ELSE D
|
---|
80 | .S DFN=0
|
---|
81 | .F X=0:1 S DFN=$O(^TMP("SCTEAMS",$J,"CNT","SCPTA",DFN)) Q:'DFN
|
---|
82 | K ^TMP("SCTEAMS",$J,"CNT")
|
---|
83 | Q X
|
---|
84 | ACTHISTB(FILE,IEN) ;boolean active function
|
---|
85 | ;MOVED TO SCAPMCU2
|
---|
86 | Q $$ACTHISTB^SCAPMCU2(.FILE,.IEN)
|
---|
87 | ACTHIST(FILE,IEN,SCDATES,SCERR) ;is entry active for a time period?
|
---|
88 | ;MOVED TO SCAPMCU2
|
---|
89 | Q $$ACTHIST^SCAPMCU2(.FILE,.IEN,.SCDATES,.SCERR)
|
---|
90 | ;
|
---|
91 | LASTDATE(FILE,IEN) ;gets last date for team or position from 404.52,404.58,404.59 - uses DATES function below
|
---|
92 | ; Input Parameters:
|
---|
93 | ; File = either 404.52 or 404.58 or 404.59
|
---|
94 | ; IEN = pointer to team(404.51) or team position(404.57)
|
---|
95 | ; Returned:
|
---|
96 | ; -1 if error,o/w latest date defined 0=no historical dates
|
---|
97 | N SCX
|
---|
98 | S SCX=$$DATES(.FILE,.IEN,3990101) ; gets dates as of 1/1/2999
|
---|
99 | Q $S($P(SCX,U,1)<0:-1,$P(SCX,U,3):$P(SCX,U,3),1:+$P(SCX,U,2))
|
---|
100 | ;
|
---|
101 | DATES(FILE,IEN,DATE) ;used to return latest activation & inactivation date
|
---|
102 | ; Input Parameters:
|
---|
103 | ; File = either 404.52, 404.53, 404.58, or 404.59
|
---|
104 | ; IEN = pointer to team(404.51) or team position(404.57)
|
---|
105 | ; DATE = default=DT
|
---|
106 | ; Returned:
|
---|
107 | ; status^actdate^inactdate^scien^first actdate? [1=yes/null=no]
|
---|
108 | ST N ROOT,EFFDT,STATUS,ACTDT,INACTDT,X,FUTURE,PREVDT,SCTODAY,PREVST,SCSTAT,SCIEN,SCLAST
|
---|
109 | S:'$G(DATE) DATE=DT
|
---|
110 | S STATUS=-1,SCTODAY=0
|
---|
111 | S SCSTAT=1
|
---|
112 | ;bp/cmf - 177 change begin
|
---|
113 | G:('$G(FILE))!("^404.52^404.53^404.58^404.59^"'[$G(FILE))!('$G(IEN)) QTDATES
|
---|
114 | ;orig;G:('$G(FILE))!("^404.52^404.58^404.59^"'[$G(FILE))!('$G(IEN)) QTDATES
|
---|
115 | ;bp/cmf - 177 change begin
|
---|
116 | S ROOT="^SCTM("_FILE_",""AIDT"",IEN,SCSTAT"
|
---|
117 | S EFFDT=-DATE
|
---|
118 | S X=ROOT_")"
|
---|
119 | ;if there is an active x-ref
|
---|
120 | IF $D(@X) D
|
---|
121 | .;if today is an activation date
|
---|
122 | .IF $D(@X@(EFFDT)) S ACTDT=-EFFDT
|
---|
123 | .;if today is not an activation date get previous one
|
---|
124 | .ELSE D
|
---|
125 | ..S ACTDT=-$O(@X@(EFFDT))
|
---|
126 | .;if no activation in past get one in future
|
---|
127 | .S:'$G(ACTDT) ACTDT=-$O(@X@(EFFDT),-1),FUTURE=1
|
---|
128 | .S SCSTAT=0
|
---|
129 | .S INACTDT=$O(@X@(-(ACTDT-.000001)),-1),INACTDT=$S(INACTDT:-INACTDT,1:INACTDT)
|
---|
130 | .S STATUS=$$DTCHK^SCAPU1(DATE,DATE,0,ACTDT,INACTDT)
|
---|
131 | .S SCSTAT=STATUS
|
---|
132 | .S X=ROOT_","_$S(SCSTAT:-ACTDT,1:-INACTDT)_")"
|
---|
133 | .S SCIEN=$O(@X@(0))
|
---|
134 | ELSE D
|
---|
135 | .S STATUS=0
|
---|
136 | QTDATES Q STATUS_U_$G(ACTDT)_U_$G(INACTDT)_U_$G(SCIEN)_U_$G(FUTURE)
|
---|
137 | ;
|
---|
138 | ERR(SEQ,ERNUM,PARMS,OUTPUT,SCER) ;-- process errors
|
---|
139 | ;if no dialog entry 4040000 will be processed
|
---|
140 | S ERNUM=$G(ERNUM,4040000)
|
---|
141 | S:'$$GET1^DIQ(.84,$G(ERNUM)_",",.01) ERNUM=4040000
|
---|
142 | IF SCER]"" D
|
---|
143 | . S SEQ=$G(SEQ,0)+1
|
---|
144 | . S SCER(SEQ)=ERNUM
|
---|
145 | . ;S @SCER@(0)=$G(@SCER@(0))+1 ;bp/djb 7/12/99
|
---|
146 | . S SCER(0)=$G(SCER(0))+1
|
---|
147 | . ;D BLD^DIALOG(.ERNUM,.PARMS,.OUTPUT,.SCER) ;bp/djb 7/12/99
|
---|
148 | . D BLD^DIALOG(.ERNUM,.PARMS,.OUTPUT,"SCER")
|
---|
149 | Q
|
---|
150 | ;
|
---|
151 | OKTMPOS(TEAM,POSITION,DATE) ;validate legitimate position in a team for a dt
|
---|
152 | ; used in screen for pc practitioner position of patient team assngt
|
---|
153 | ;
|
---|
154 | ; TEAM - ien of team file
|
---|
155 | ; POSITION - ien of team position file
|
---|
156 | ; DATE - date of interest
|
---|
157 | ; return 1 if ok, 0 ow
|
---|
158 | ;
|
---|
159 | CHK ;
|
---|
160 | N SCTP,SCOK,SCPOS0
|
---|
161 | S SCOK=0
|
---|
162 | S:'$L($G(SCERR)) SCERR="^TMP(""SCERR"",$J)"
|
---|
163 | IF '$D(^SCTM(404.51,+$G(TEAM),0)) D G QTOKTP
|
---|
164 | . S SCPARM("TEAM")=$G(TEAM,"Undefined")
|
---|
165 | . D ERR^SCAPMCU1(.SCESEQ,4045101,.SCPARM,"",.SCERR)
|
---|
166 | IF '$D(^SCTM(404.57,+$G(POSITION),0)) D G QTOKTP
|
---|
167 | . S SCPARM("POSITION")=$G(POSITION,"Undefined")
|
---|
168 | . D ERR^SCAPMCU1(.SCESEQ,4045101,.SCPARM,"",.SCERR)
|
---|
169 | IF '$G(DATE) D G QTOKTP
|
---|
170 | . S SCPARM("DATE")=$G(DATE,"Undefined")
|
---|
171 | . D ERR^SCAPMCU1(.SCESEQ,4045101,.SCPARM,"",.SCERR)
|
---|
172 | S SCPOS0=$G(^SCTM(404.57,POSITION,0))
|
---|
173 | ;if position not linked to team
|
---|
174 | G QTOKTP:$P(SCPOS0,U,2)'=TEAM
|
---|
175 | ;if not active position
|
---|
176 | G QTOKTP:'$$DATES(404.59,POSITION,DATE)
|
---|
177 | S SCOK=1
|
---|
178 | QTOKTP Q SCOK
|
---|
179 | RSNDICS(EVCODE) ; -- called by input transform and screen logic for type of reason
|
---|
180 | ; Input: EVCODE = event code (e.g. ZM1)
|
---|
181 | ; Used to check for fields that point to Scheduling Reason File
|
---|
182 | ; Piece = Piece number of zero node of
|
---|
183 | Q $P(^SD(403.43,$P(^(0),U,2),0),U,1)=EVCODE
|
---|
184 | ;
|
---|
185 | OKPREC(TEAM) ; - called by screen logic for preceptor position file (#.1) of team position (#404.57) file
|
---|
186 | ; Input; TEAM = Pointer to team file (#404.51) for team position with preceptor
|
---|
187 | ; requires position being assigned to be a possible preceptor position
|
---|
188 | ; AND that position is from the same team as the supervised position
|
---|
189 | Q ($P(^SCTM(404.57,Y,0),U,12))&($P(^SCTM(404.57,Y,0),U,2)=TEAM)
|
---|