| 1 | SCAPMCA1 ;BP-CIOFO/KEITH - Get all assignment info. (cont.) ; 30 Jul 99  3:29 PM
 | 
|---|
| 2 |  ;;5.3;Scheduling;**177**;AUG 13, 1993
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | GETDAT ;Get assignment data
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | GETTM ;Get team information
 | 
|---|
| 7 |  S SCI=$$TMPT^SCAPMC(DFN,.SCDT,,SCRATCH1)
 | 
|---|
| 8 |  S SCI=0 F  S SCI=$O(^TMP("SCRATCH1",$J,SCI)) Q:'SCI  D
 | 
|---|
| 9 |  .S SCTMD=^TMP("SCRATCH1",$J,SCI),SCTM=+SCTMD,SCPTA=+$P(SCTMD,U,3)
 | 
|---|
| 10 |  .Q:SCTM'>0  ;invalid TEAM ifn
 | 
|---|
| 11 |  .Q:SCPTA'>0  ;invalid PATIENT TEAM ASSIGNMENT ifn
 | 
|---|
| 12 |  .S @SCARR@(DFN,"TM",SCTM,SCPTA)=SCTMD
 | 
|---|
| 13 |  .Q
 | 
|---|
| 14 |  K @SCRATCH1
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 | GETPOS ;Get position information
 | 
|---|
| 17 |  S SCI=$$TPPT^SCAPMC(DFN,.SCDT,,,,,,SCRATCH1)
 | 
|---|
| 18 |  S SCI=0 F  S SCI=$O(^TMP("SCRATCH1",$J,SCI)) Q:'SCI  D
 | 
|---|
| 19 |  .S SCPOSD=^TMP("SCRATCH1",$J,SCI)
 | 
|---|
| 20 |  .S SCTM=$P(SCPOSD,U,3),SCPTPA=$P(SCPOSD,U,4),SCPOS=+SCPOSD
 | 
|---|
| 21 |  .Q:SCPOS'>0  ;invalid TEAM POSITION ifn
 | 
|---|
| 22 |  .Q:SCTM'>0  ;invalid TEAM ifn
 | 
|---|
| 23 |  .Q:SCPTPA'>0  ;invalid PATIENT TEAM POSITION ASSIGNMENT ifn
 | 
|---|
| 24 |  .S SCPTPA0=$G(^SCPT(404.43,SCPTPA,0))
 | 
|---|
| 25 |  .S SCPTA=+SCPTPA0,SCPCPOSF=$P(SCPTPA0,U,5)
 | 
|---|
| 26 |  .Q:SCPTA'>0  ;invalid PATIENT TEAM ASSIGNMENT ifn
 | 
|---|
| 27 |  .S @SCARR@(DFN,"TM",SCTM,SCPTA,"POS",SCPTPA)=SCPOSD
 | 
|---|
| 28 |  .D SETF(SCPCPOSF,"POS",SCPOSD)
 | 
|---|
| 29 |  .S SCADT=$P(SCPOSD,U,5)  ;position activate date
 | 
|---|
| 30 |  .S:'SCADT SCADT=SCDT("BEGIN")
 | 
|---|
| 31 |  .S SCIDT=$P(SCPOSD,U,6)  ;position inactivate date
 | 
|---|
| 32 |  .S:'SCIDT SCIDT=SCDT("END")
 | 
|---|
| 33 |  .;xref team pc position assignments
 | 
|---|
| 34 |  .I SCPCPOSF S @SCARR@(DFN,"TM",SCTM,SCPTA,"PC",SCADT,SCIDT)=""
 | 
|---|
| 35 |  .K SCDT2 D DTRADJ(SCADT,SCIDT,.SCDT,.SCDT2)
 | 
|---|
| 36 |  .;
 | 
|---|
| 37 |  .;Get provider information
 | 
|---|
| 38 |  .K @SCRATCH2
 | 
|---|
| 39 |  .S SCII=$$PRTPC^SCAPMC(SCPOS,.SCDT2,SCRATCH2,"ERR",1,1),SCII=0
 | 
|---|
| 40 |  .F  S SCII=$O(^TMP("SCRATCH2",$J,SCII)) Q:'SCII  D
 | 
|---|
| 41 |  ..F SCSUB="PROV-U","PROV-P" S SCIII="" D
 | 
|---|
| 42 |  ...F  S SCIII=$O(^TMP("SCRATCH2",$J,SCII,SCSUB,SCIII)) Q:SCIII=""  D
 | 
|---|
| 43 |  ....S SCPRD=^TMP("SCRATCH2",$J,SCII,SCSUB,SCIII)
 | 
|---|
| 44 |  ....S SCPAH=+$P(SCPRD,U,11)  ;position assignment history ifn
 | 
|---|
| 45 |  ....S @SCARR@(DFN,"TM",SCTM,SCPTA,"POS",SCPTPA,"PROV",SCPAH)=SCPRD
 | 
|---|
| 46 |  ....D SETF(SCPCPOSF,$S(SCSUB="PROV-P"&SCPCPOSF:"AP",1:"PR"),SCPRD)
 | 
|---|
| 47 |  ....Q
 | 
|---|
| 48 |  ...Q
 | 
|---|
| 49 |  ..S SCIII=""
 | 
|---|
| 50 |  ..F  S SCIII=$O(^TMP("SCRATCH2",$J,SCII,"PREC",SCIII)) Q:SCIII=""  D
 | 
|---|
| 51 |  ...S SCPRD=^TMP("SCRATCH2",$J,SCII,"PREC",SCIII)
 | 
|---|
| 52 |  ...S SCPPOS=+$P(SCPRD,U,3),SCPPOSD=$$PPOS(SCPRD,SCPPOS)
 | 
|---|
| 53 |  ...S @SCARR@(DFN,"TM",SCTM,SCPTA,"POS",SCPTPA,"PPOS",SCPPOS)=SCPPOSD
 | 
|---|
| 54 |  ...D SETF(SCPCPOSF,"PPOS",SCPPOSD) S SCPAH=+$P(SCPRD,U,11)
 | 
|---|
| 55 |  ...S @SCARR@(DFN,"TM",SCTM,SCPTA,"POS",SCPTPA,"PPOS",SCPPOS,"PPROV",SCPAH)=SCPRD
 | 
|---|
| 56 |  ...D SETF(SCPCPOSF,$S(SCPCPOSF:"PR",1:"PPR"),SCPRD)
 | 
|---|
| 57 |  ...Q
 | 
|---|
| 58 |  ..Q
 | 
|---|
| 59 |  .Q
 | 
|---|
| 60 |  ;Set team "flat" nodes
 | 
|---|
| 61 |  S SCTM=0 F  S SCTM=$O(@SCARR@(DFN,"TM",SCTM)) Q:'SCTM  S SCPTA=0 D
 | 
|---|
| 62 |  .F  S SCPTA=$O(@SCARR@(DFN,"TM",SCTM,SCPTA)) Q:'SCPTA  D
 | 
|---|
| 63 |  ..S SCTMD=$G(@SCARR@(DFN,"TM",SCTM,SCPTA)) Q:'$L(SCTMD)
 | 
|---|
| 64 |  ..D SETF($P(SCTMD,U,8)=1,"TM",SCTMD)
 | 
|---|
| 65 |  ..Q
 | 
|---|
| 66 |  .Q
 | 
|---|
| 67 |  Q
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 | GAP(SCTAC,SCTINAC,SCADT,SCIDT) ;Determine if a gap exists in pc assignments
 | 
|---|
| 70 |  N GAP
 | 
|---|
| 71 |  S GAP=0 D G1(SCADT,SCIDT)
 | 
|---|
| 72 |  Q GAP
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 | G1(SCADT,SCIDT) ;Loop through position assignments
 | 
|---|
| 75 |  N X1,X2,X
 | 
|---|
| 76 |  S SCADT=$O(@SCARR@(DFN,"TM",SCTM,SCPTA,"PC",SCIDT-1))
 | 
|---|
| 77 |  I 'SCADT S GAP=(SCIDT<SCTINAC) Q
 | 
|---|
| 78 |  S X1=SCADT,X2=SCIDT D ^%DTC I X>1 S GAP=1 Q
 | 
|---|
| 79 |  S SCIDT=$O(@SCARR@(DFN,"TM",SCTM,SCPTA,"PC",SCADT,""),-1)
 | 
|---|
| 80 |  I SCIDT'<SCTINAC Q
 | 
|---|
| 81 |  D G1(SCADT,SCIDT) Q
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 | PPOS(SCSTR,SCPPOS) ;Get preceptor position information
 | 
|---|
| 84 |  ;Input: SCSTR=preceptor data string from PRTP^SCAPMC
 | 
|---|
| 85 |  ;Input: SCPPOS=preceptor TEAM POSITION ifn
 | 
|---|
| 86 |  ;Output: position information data string as defined in ^SCAPMCA
 | 
|---|
| 87 |  ;
 | 
|---|
| 88 |  N SCX,SCI,SCPPOS0
 | 
|---|
| 89 |  S SCPPOS0=$G(^SCTM(404.57,+SCPPOS,0))
 | 
|---|
| 90 |  Q:'$L(SCPPOS0) ""
 | 
|---|
| 91 |  S SCX(1)=SCPPOS  ;position ifn
 | 
|---|
| 92 |  S SCX(2)=$P(SCPPOS0,U)  ;position name
 | 
|---|
| 93 |  S SCX(3)=$P(SCPPOS0,U,2)  ;team ifn
 | 
|---|
| 94 |  S SCX(4)=$P(SCPOSD,U,4)  ;patient team position assignment ifn
 | 
|---|
| 95 |  S SCX(5)=$P(SCSTR,U,5)  ;effective date
 | 
|---|
| 96 |  S SCX(6)=$P(SCSTR,U,6)  ;inactive date
 | 
|---|
| 97 |  S SCX(7)=$P(SCPPOS0,U,3)  ;role ifn
 | 
|---|
| 98 |  S SCX(8)=$P($G(^SD(403.46,+SCX(7),0)),U)  ;role name
 | 
|---|
| 99 |  S SCX(9)=$P(SCPPOS0,U,13)  ;user class ifn
 | 
|---|
| 100 |  S SCX(10)=$P($G(^USR(8930,+SCX(9),0)),U)  ;user class name
 | 
|---|
| 101 |  S SCX(11)=$P(SCPOSD,U,11)  ;patient team assignment ifn
 | 
|---|
| 102 |  S SCX(12)=""  ;preceptor position
 | 
|---|
| 103 |  S SCX="" F SCI=1:1:12 S $P(SCX,U,SCI)=SCX(SCI)
 | 
|---|
| 104 |  Q SCX
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | DTRADJ(ADT,IDT,SCDT,SCDT2) ;Adjust dates for provider information
 | 
|---|
| 107 |  ;Input: ADT=activate date for patient team position assignment
 | 
|---|
| 108 |  ;Input: IDT=inactivate date for patient team position assignment
 | 
|---|
| 109 |  ;Input: SCDT=array of dates from calling program (pass by reference)
 | 
|---|
| 110 |  ;Input: SCDT2=array to return adjusted dates (pass by reference)
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  S SCDT2("BEGIN")=$S(SCADT>SCDT("BEGIN"):SCADT,1:SCDT("BEGIN"))
 | 
|---|
| 113 |  S SCDT2("END")=$S('SCIDT:SCDT("END"),SCIDT<SCDT("END"):SCIDT,1:SCDT("END"))
 | 
|---|
| 114 |  S SCDT2("INCL")=SCDT("INCL"),SCDT2="SCDT2"
 | 
|---|
| 115 |  Q
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 | SETF(SCPC,SUB,DATA) ;Set "flat" array node
 | 
|---|
| 118 |  ;Input: SCPC=PC/NPC flag
 | 
|---|
| 119 |  ;Input: SUB=subscript value
 | 
|---|
| 120 |  ;Input: DATA=data string
 | 
|---|
| 121 |  N X,CT
 | 
|---|
| 122 |  S X=$S(SCPC>0:"PC",1:"NPC"),SUB=X_SUB
 | 
|---|
| 123 |  S @SCARR@(DFN,SUB,0)=@SCARR@(DFN,SUB,0)+1
 | 
|---|
| 124 |  S CT=@SCARR@(DFN,SUB,0),@SCARR@(DFN,SUB,CT)=DATA
 | 
|---|
| 125 |  Q
 | 
|---|