| 1 | SCAPMCU3 ;MJK/ALB - AUTOLINK API ; 8/10/99 4:09pm | 
|---|
| 2 | ;;5.3;Scheduling;**41,45,177,204**;AUG 13, 1993 | 
|---|
| 3 | ; | 
|---|
| 4 | GETREC(SCDATA,SCTEAM) ; -- get team record with autolink data | 
|---|
| 5 | ; input  :    SCTEAM := ien of team | 
|---|
| 6 | ; output : SCDATA is the return array | 
|---|
| 7 | ;          SCDATA(0) := 0th node of Team | 
|---|
| 8 | ;             (1..n) := autolink name ^ autolink type ^ ien of entity | 
|---|
| 9 | ; | 
|---|
| 10 | N SC,X | 
|---|
| 11 | ; -- get 0th node of team | 
|---|
| 12 | S X=$$GETEAM(SCTEAM) | 
|---|
| 13 | ; -- add to return array | 
|---|
| 14 | D SET(X,0,.SCDATA) | 
|---|
| 15 | ; -- find all autolinks for team | 
|---|
| 16 | D SCAN(SCTEAM,.SC) | 
|---|
| 17 | ; -- build autolink string and add to return array | 
|---|
| 18 | D BUILD(.SC,.SCDATA) | 
|---|
| 19 | Q | 
|---|
| 20 | ; | 
|---|
| 21 | BUILD(SC,SCDATA) ; -- build string to send and add to return array | 
|---|
| 22 | N SCLINK,SCINC,X,SCGLB,SCTYPE | 
|---|
| 23 | S SCINC=1 | 
|---|
| 24 | S SCLINK="" | 
|---|
| 25 | F  S SCLINK=$O(SC(SCLINK)) Q:SCLINK=""  D | 
|---|
| 26 | . S X=SCLINK | 
|---|
| 27 | . IF X["DIC(42," S SCGLB="^DIC(42)",SCTYPE="WARD" | 
|---|
| 28 | . IF X["DIC(45.7," S SCGLB="^DIC(45.7)",SCTYPE="SPECIALTY" | 
|---|
| 29 | . IF X["VA(200," S SCGLB="^VA(200)",SCTYPE="PRACTITIONER" | 
|---|
| 30 | . IF X["DG(405.4," S SCGLB="^DG(405.4)",SCTYPE="ROOM" | 
|---|
| 31 | . IF X["SC(" S SCGLB="^SC",SCTYPE="CLINIC" | 
|---|
| 32 | . ; - add data to return array | 
|---|
| 33 | . IF $D(@SCGLB@(+SCLINK,0)) D SET($P(^(0),U)_U_SCTYPE_U_+SCLINK,.SCINC,.SCDATA) | 
|---|
| 34 | Q | 
|---|
| 35 | ; | 
|---|
| 36 | SET(X,INC,SCDATA) ; -- set value in return array | 
|---|
| 37 | S INC=$G(INC)+1,SCDATA(INC)=X | 
|---|
| 38 | Q | 
|---|
| 39 | ; | 
|---|
| 40 | SETREC(SCOK,SCTEAM,SC) ; -- add/edit autolink data to Team record | 
|---|
| 41 | ; input  :    SCTEAM := ien of team | 
|---|
| 42 | ; output : SC is the input array | 
|---|
| 43 | ;           SC(1..n) := autolink name ^ autolink type ^ ien of entity | 
|---|
| 44 | ; | 
|---|
| 45 | N SCTYPE,SCROOT,SCGLB,SCLINK,SCLINKI,SCI,SCOLD,SCNEW | 
|---|
| 46 | ; -- build array of current autolink assignments | 
|---|
| 47 | D SCAN(SCTEAM,.SCOLD) | 
|---|
| 48 | ; | 
|---|
| 49 | ; -- compare current with input  and add autolinks if in | 
|---|
| 50 | ;    input array but not in current array | 
|---|
| 51 | S SCI=0 F  S SCI=$O(SC(SCI)) Q:'SCI  S SCX=SC(SCI) D | 
|---|
| 52 | . S SCTYPE=$P(SCX,U,2) | 
|---|
| 53 | . D ROOT(SCTYPE,.SCROOT,.SCGLB) | 
|---|
| 54 | . S SCLINK=+$P(SCX,U,3)_";"_SCROOT | 
|---|
| 55 | . S SCNEW(SCLINK)="" | 
|---|
| 56 | . IF '$D(SCOLD(SCLINK)),SCGLB]"",$D(@SCGLB@(+SCLINK,0)) D ADD(SCTEAM,SCLINK) | 
|---|
| 57 | ; | 
|---|
| 58 | ; -- compare current with input and delete autolinks if not | 
|---|
| 59 | ;    in input array but in current array | 
|---|
| 60 | S SCLINK="" | 
|---|
| 61 | F  S SCLINK=$O(SCOLD(SCLINK)) Q:'SCLINK  IF '$D(SCNEW(SCLINK)) D | 
|---|
| 62 | . S SCLINKI=+SCOLD(SCLINK) | 
|---|
| 63 | . IF SCLINKI D DELETE(SCLINKI) | 
|---|
| 64 | S SCOK=1 | 
|---|
| 65 | Q | 
|---|
| 66 | ; | 
|---|
| 67 | ADD(SCTEAM,SCLINK) ; -- add an autolink to a Team | 
|---|
| 68 | N DIC,DD,DO,DLAYGO | 
|---|
| 69 | S DIC="^SCTM(404.56,",DLAYGO=404.56,DIC(0)="L",X=SCTEAM,DIC("DR")=".02////^S X=SCLINK" | 
|---|
| 70 | D FILE^DICN | 
|---|
| 71 | Q | 
|---|
| 72 | ; | 
|---|
| 73 | DELETE(SCLINKI) ; -- delete an autolink from a Team | 
|---|
| 74 | N DIK,DA | 
|---|
| 75 | IF $D(^SCTM(404.56,SCLINKI,0)) D | 
|---|
| 76 | . S DIK="^SCTM(404.56,",DA=SCLINKI D ^DIK | 
|---|
| 77 | Q | 
|---|
| 78 | ; | 
|---|
| 79 | GETEAM(SCTEAM) ; -- retrieve Team demographics | 
|---|
| 80 | Q $G(^SCTM(404.51,+$G(SCTEAM),0)) | 
|---|
| 81 | ; | 
|---|
| 82 | SCAN(SCTEAM,SC) ; -- build an array of current autolink assignments | 
|---|
| 83 | N SCLINK | 
|---|
| 84 | S SCLINK="" | 
|---|
| 85 | F  S SCLINK=$O(^SCTM(404.56,"APRIMARY",+$G(SCTEAM),SCLINK)) Q:SCLINK=""  S SC(SCLINK)=+$O(^(SCLINK,0)) | 
|---|
| 86 | Q | 
|---|
| 87 | ; | 
|---|
| 88 | ROOT(SCTYPE,SCROOT,SCGLB) ; -- determine global root of autolink type | 
|---|
| 89 | S (SCROOT,SCGLB)="" | 
|---|
| 90 | IF SCTYPE="WARD" S SCROOT="DIC(42,",SCGLB="^DIC(42)" | 
|---|
| 91 | IF SCTYPE="SPECIALTY" S SCROOT="DIC(45.7,",SCGLB="^DIC(45.7)" | 
|---|
| 92 | IF SCTYPE="PRACTITIONER" S SCROOT="VA(200,",SCGLB="^VA(200)" | 
|---|
| 93 | IF SCTYPE="ROOM" S SCROOT="DG(405.4,",SCGLB="^DG(405.4)" | 
|---|
| 94 | IF SCTYPE="CLINIC" S SCROOT="SC(",SCGLB="^SC" | 
|---|
| 95 | Q | 
|---|
| 96 | ; | 
|---|
| 97 | GETLINK(SC,SCTYPE,SCIEN) ; -- get autolink entity data | 
|---|
| 98 | ;  input:  SCTYPE   := type of autolink (WARD, SPECIALTY, ectc.) | 
|---|
| 99 | ;          SCIEN    := ien of entity | 
|---|
| 100 | ; output:  SC(1..n) := list of Team names autolinked to entity | 
|---|
| 101 | ; | 
|---|
| 102 | ; | 
|---|
| 103 | N SCTEAM,SCROOT,SCGLB,SCINC,SCLINK | 
|---|
| 104 | ; -- deterine global root for autolink entity | 
|---|
| 105 | D ROOT(SCTYPE,.SCROOT,.SCGLB) | 
|---|
| 106 | ; -- set variable pointer value for autolink entity | 
|---|
| 107 | S SCLINK=+SCIEN_";"_$G(SCROOT) | 
|---|
| 108 | ; -- find Teams with autolinks to this entity | 
|---|
| 109 | S (SCINC,SCTEAM)=0 | 
|---|
| 110 | IF $O(^SCTM(404.56,"AC",SCLINK,SCTEAM)) D | 
|---|
| 111 | . F  S SCTEAM=$O(^SCTM(404.56,"AC",SCLINK,SCTEAM)) Q:'SCTEAM  D | 
|---|
| 112 | . . S SCINC=SCINC+1 | 
|---|
| 113 | . . S SC(SCINC)=$P($G(^SCTM(404.51,SCTEAM,0)),U) | 
|---|
| 114 | ELSE  D | 
|---|
| 115 | . S SCINC=SCINC+1 | 
|---|
| 116 | . S SC(SCINC)="No links found." | 
|---|
| 117 | Q | 
|---|
| 118 | ; | 
|---|
| 119 | PCPROV(SCTP,DATE,PCAP) ;returns ien & name of practitioner filling position | 
|---|
| 120 | ;Input: SCTP=team position ifn of primary care position assignment | 
|---|
| 121 | ;Input: DATE=relevant date | 
|---|
| 122 | ;Input: PCAP= '1' for pc provider | 
|---|
| 123 | ;             '2' for attending provider | 
|---|
| 124 | ;             '3' for pc associate provider | 
|---|
| 125 | ; | 
|---|
| 126 | ;   Returned [Error or None Found:"", Else: sc200^practname] | 
|---|
| 127 | ; | 
|---|
| 128 | N X,SCPRDTS,SCPR,SCPP,ERR,SCI,SCII,SCPRX,SCSUB,SCX,SCY | 
|---|
| 129 | S SCPP=0,DATE=$G(DATE,DT),SCPRDTS("INCL")=0 | 
|---|
| 130 | S (SCPRDTS("BEGIN"),SCPRDTS("END"))=DATE | 
|---|
| 131 | ;bp/cmf 204 original code next line [SCALLHIS param not needed] | 
|---|
| 132 | ;S X=$$PRTPC^SCAPMC(SCTP,"SCPRDTS","SCPR","ERR",1,0) | 
|---|
| 133 | ;bp/cmf 204 change code next line | 
|---|
| 134 | S X=$$PRTPC^SCAPMC(SCTP,"SCPRDTS","SCPR","ERR",0,0) | 
|---|
| 135 | ;regroup providers | 
|---|
| 136 | S SCI=0 F  S SCI=$O(SCPR(SCI)) Q:'SCI  D | 
|---|
| 137 | .S SCSUB="" F  S SCSUB=$O(SCPR(SCI,SCSUB)) Q:SCSUB=""  D | 
|---|
| 138 | ..I SCSUB="PREC" S SCPP=1 Q:PCAP=3  ;precepted position flag | 
|---|
| 139 | ..S SCII="" F  S SCII=$O(SCPR(SCI,SCSUB,SCII)) Q:SCII=""  D | 
|---|
| 140 | ...S SCX=$P(SCPR(SCI,SCSUB,SCII),U,1,2) Q:'SCX | 
|---|
| 141 | ...S SCY=$S(PCAP=2:$P(SCSUB,"-"),1:SCSUB) | 
|---|
| 142 | ...S SCPRX(SCY)=$G(SCPRX(SCY))+1,SCPRX(SCY,SCPRX(SCY))=SCX | 
|---|
| 143 | ...Q | 
|---|
| 144 | ..Q | 
|---|
| 145 | .Q | 
|---|
| 146 | ;return preceptor pc provider | 
|---|
| 147 | I PCAP=1,SCPP,$G(SCPRX("PREC"))=1 Q SCPRX("PREC",1) | 
|---|
| 148 | ;return non-preceptor pc provider | 
|---|
| 149 | I PCAP=1,'SCPP,$G(SCPRX("PROV-U"))=1 Q SCPRX("PROV-U",1) | 
|---|
| 150 | ;return attending provider | 
|---|
| 151 | I PCAP=2,$G(SCPRX("PROV"))=1 Q SCPRX("PROV",1) | 
|---|
| 152 | ;return associate provider | 
|---|
| 153 | I PCAP=3,SCPP,$G(SCPRX("PROV-P"))=1 Q SCPRX("PROV-P",1) | 
|---|
| 154 | ;bp/cmf 204 original code next line [-1 busts documented output] | 
|---|
| 155 | ;Q -1 | 
|---|
| 156 | ;bp/cmf 204 change code next line ["" is documented output] | 
|---|
| 157 | Q "" | 
|---|