| 1 | SCAPMCU5 ;bp/cmf - TEAM API UTILITIES ; 2 june 1999
 | 
|---|
| 2 |  ;;5.3;Scheduling;**177**;AUG 13, 1993
 | 
|---|
| 3 |  ;;1.0
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | VALHIST(SCFILE,SCTPIEN,SCVAL) ; returns valid act/inact ien pairs in SCVAL
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  S SCFILE=$G(SCFILE,0)
 | 
|---|
| 8 |  I "^404.58^404.59^404.52^404.53^"'[SCFILE Q $$S(1)
 | 
|---|
| 9 |  S SCTPIEN=+$G(SCTPIEN,0)
 | 
|---|
| 10 |  I SCTPIEN<1!('$D(^SCTM(404.57,SCTPIEN))) Q $$S(2)
 | 
|---|
| 11 |  S SCVAL=$G(SCVAL,"")
 | 
|---|
| 12 |  I SCVAL']"" Q $$S(3)
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  N SCCNT,SCTOP,SCX,SCACT,SCACT1,SCINACT,SCINACT1,SCFIRST,SCSTOP
 | 
|---|
| 15 |  M SCX(1)=^SCTM(SCFILE,"AIDT",SCTPIEN,1)
 | 
|---|
| 16 |  M SCX(0)=^SCTM(SCFILE,"AIDT",SCTPIEN,0)
 | 
|---|
| 17 |  S SCCNT=0
 | 
|---|
| 18 |  S SCTOP=0
 | 
|---|
| 19 |  S SCACT=-9999999                                  ;act dt
 | 
|---|
| 20 |  F  S SCACT=$O(SCX(1,SCACT)) Q:'SCACT  D
 | 
|---|
| 21 |  . S SCACT1=""                                     ;act ien
 | 
|---|
| 22 |  . F  S SCACT1=$O(SCX(1,SCACT,SCACT1),-1) Q:'SCACT1  D
 | 
|---|
| 23 |  . . S SCINACT=SCACT                               ;inact dt
 | 
|---|
| 24 |  . . I $D(SCX(0,SCINACT)) Q:$$INACT()
 | 
|---|
| 25 |  . . S SCINACT=$O(SCX(0,SCINACT),-1)               ;next? inact dt
 | 
|---|
| 26 |  . . I SCINACT="" D  Q                             ;current asgn
 | 
|---|
| 27 |  . . . Q:SCTOP
 | 
|---|
| 28 |  . . . D VALID
 | 
|---|
| 29 |  . . . S SCTOP=1
 | 
|---|
| 30 |  . . . Q
 | 
|---|
| 31 |  . . S SCX=$$INACT()
 | 
|---|
| 32 |  . . Q
 | 
|---|
| 33 |  . Q
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  S SCFIRST=0_U_0
 | 
|---|
| 36 |  I $G(@SCVAL@(0))>0 D
 | 
|---|
| 37 |  . S SCCNT=@SCVAL@(0)
 | 
|---|
| 38 |  . S SCACT=$O(@SCVAL@(SCCNT,0))
 | 
|---|
| 39 |  . S SCACT1=$O(@SCVAL@(SCCNT,SCACT,0))
 | 
|---|
| 40 |  . S SCFIRST=SCACT_U_SCACT1
 | 
|---|
| 41 |  . Q
 | 
|---|
| 42 |  Q ($D(SCX(1)))!($D(SCX(0)))_U_SCFIRST
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 | INACT() S SCSTOP=0
 | 
|---|
| 45 |  S SCINACT1=SCACT1                             ;inact ien
 | 
|---|
| 46 |  F  S SCINACT1=$O(SCX(0,SCINACT,SCINACT1)) Q:'SCINACT1!(SCSTOP)  D
 | 
|---|
| 47 |  . I "^404.58^404.59^"[SCFILE D VALID Q
 | 
|---|
| 48 |  . I SCFILE=404.52,$$CP(3) D VALID Q
 | 
|---|
| 49 |  . I SCFILE=404.53,$$CP(6) D VALID Q
 | 
|---|
| 50 |  . Q
 | 
|---|
| 51 |  Q SCSTOP
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 | VALID S SCCNT=SCCNT+1
 | 
|---|
| 54 |  S SCX=$S(+$G(SCINACT):-SCINACT,1:"")_U_$S(+$G(SCINACT1):SCINACT1,1:"")
 | 
|---|
| 55 |  I SCX=U,SCCNT>1 S SCCNT=SCCNT-1 Q  ;latest entry ONLY should have empty inact data
 | 
|---|
| 56 |  S @SCVAL@(SCCNT,-SCACT,SCACT1)=SCX
 | 
|---|
| 57 |  S @SCVAL@(0)=SCCNT
 | 
|---|
| 58 |  S @SCVAL@("I",SCACT1,SCCNT)=""
 | 
|---|
| 59 |  K SCX(1,SCACT,SCACT1)
 | 
|---|
| 60 |  I SCINACT'="",SCINACT1'="" K SCX(0,SCINACT,SCINACT1)
 | 
|---|
| 61 |  S SCSTOP=1
 | 
|---|
| 62 |  Q
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 | CP(SCX) ; if 404.52, practitioner (.03)s must match
 | 
|---|
| 65 |  ; if 404.53, preceptor (.06)s must match
 | 
|---|
| 66 |  Q $P(^SCTM(SCFILE,SCACT1,0),U,SCX)=$P(^SCTM(SCFILE,SCINACT1,0),U,SCX)
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 | ACTHIST(SCVAL,SCDATES) ;given val hist array, prior active?
 | 
|---|
| 70 |  ; input:  scval   = scval array produced by $$valhist call, above
 | 
|---|
| 71 |  ;         scdates = standard PCMM date array
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  ; output:      p1 = prior activation: 1=yes, 0=no
 | 
|---|
| 74 |  ;              p2 = active as of end date: 1=yes, 0=no
 | 
|---|
| 75 |  ;              p3 = if p2=1, activation ien, else inactivation ien
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 |  N SCX,SCX1,SCX2,SCA,SCDATE,SCP1,SCP2
 | 
|---|
| 78 |  I '$D(@SCVAL)!($G(@SCVAL@(0))<1) Q $$S(4)
 | 
|---|
| 79 |  I '$D(@SCDATES) Q $$S(5)
 | 
|---|
| 80 |  S SCDATE=$G(@SCDATES@("END"),DT)+.000001
 | 
|---|
| 81 |  ; arrange scval by assign date
 | 
|---|
| 82 |  F SCX=1:1:@SCVAL@(0) D
 | 
|---|
| 83 |  . S SCX1=$O(@SCVAL@(SCX,0))
 | 
|---|
| 84 |  . S SCX2=$O(@SCVAL@(SCX,SCX1,0))
 | 
|---|
| 85 |  . S SCA(SCX1,SCX2)=@SCVAL@(SCX,SCX1,SCX2)
 | 
|---|
| 86 |  . Q
 | 
|---|
| 87 |  S SCX1=+$O(SCA(SCDATE),-1)
 | 
|---|
| 88 |  S SCP1=(SCX1>0)
 | 
|---|
| 89 |  S (SCP2,SCP3)=0
 | 
|---|
| 90 |  I +SCP1 D
 | 
|---|
| 91 |  . S SCX2=$O(SCA(SCX1,""),-1)
 | 
|---|
| 92 |  . S SCX=$P(SCA(SCX1,SCX2),U)
 | 
|---|
| 93 |  . S SCDATE=SCDATE-.000001
 | 
|---|
| 94 |  . I (SCX="")!(SCX'<SCDATE) S SCP2=1
 | 
|---|
| 95 |  . S SCP3=$S(SCP2=1:SCX2,1:$P(SCA(SCX1,SCX2),U,2))
 | 
|---|
| 96 |  Q SCP1_U_SCP2_U_SCP3
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 | S(SCX) Q "Invalid "_$P($T(T+SCX),";;",2)
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 | T ;
 | 
|---|
| 101 |  ;;File Number;;
 | 
|---|
| 102 |  ;;Team Position Ien;;
 | 
|---|
| 103 |  ;;(null) Result Array;;
 | 
|---|
| 104 |  ;;(null) History Array;;
 | 
|---|
| 105 |  ;;(null) Date Array;;
 | 
|---|
| 106 |  ;
 | 
|---|