| 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 | 
|---|