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