[613] | 1 | SCRPO2 ;BP-CIOFO/KEITH - Historical Patient Position Assignment Listing (cont.) ;7/31/99 22:36
|
---|
| 2 | ;;5.3;Scheduling;**177**;AUG 13, 1993
|
---|
| 3 | ;
|
---|
| 4 | BPTPA(SCPASS,SCDIV,SCTEAM,SCPOS,SCLINIC,SCFMT) ;Evaluate patient team position assignment information
|
---|
| 5 | ;Input: SCPASS=patient team position assignment information
|
---|
| 6 | ; string from $$PTTP^SCAPMC
|
---|
| 7 | ;Input: SCDIV=division^ifn
|
---|
| 8 | ;Input: SCTEAM=team^ifn
|
---|
| 9 | ;Input: SCPOS=team position^ifn
|
---|
| 10 | ;Input: SCLINIC=associated clinic^ifn (if one exists)
|
---|
| 11 | ;Input: SCFMT=report format (detail or summary)
|
---|
| 12 | ;
|
---|
| 13 | ;evaluate assignment/gather data
|
---|
| 14 | N SCPTPA,SCPTPA0,SCPC,DFN,SCPT0,SCACT,SCINACT,SCDT,SCPROV,SCX,SDOE0
|
---|
| 15 | N SCS,SCI,SCY,SCATY,SCAGE,SCARR,SCENRP,SCGEND,SCLAPP,SCMTST,SCNAPP
|
---|
| 16 | N SCPAT,SCPELIG,SCPTYP,SCSSN,ERR
|
---|
| 17 | S SCPTPA=$P(SCPASS,U,3) Q:SCPTPA<1 ;patient team position assignment
|
---|
| 18 | S SCPTPA0=$G(^SCPT(404.43,+SCPTPA,0)) Q:'$L(SCPTPA0)
|
---|
| 19 | S SCACT=$P(SCPTPA0,U,3),SCINACT=$P(SCPTPA0,U,4) ;activation dates
|
---|
| 20 | ;adjust dates if necessary
|
---|
| 21 | S:SCACT<^TMP("SC",$J,"DTR","BEGIN") SCACT=$P(^TMP("SC",$J,"DTR","BEGIN"),U)
|
---|
| 22 | I 'SCINACT!(SCINACT>^TMP("SC",$J,"DTR","END")) S SCINACT=$P(^TMP("SC",$J,"DTR","END"),U)
|
---|
| 23 | S SCPC=$P(SCPTPA0,U,5) Q:'$$PCROLE(.SCPC) ;pc role?
|
---|
| 24 | I $O(^TMP("SC",$J,"PCP",0)),SCPC="NO" Q ;no pc providers here
|
---|
| 25 | S DFN=$P(SCPASS,U),SCPT0=$G(^DPT(+DFN,0)) Q:'$L(SCPT0) ;patient node
|
---|
| 26 | Q:'$$PTCL(DFN,.SCLINIC,SCACT,SCINACT) ;enrolled clinic
|
---|
| 27 | S SCDT("BEGIN")=SCACT,SCDT("END")=SCINACT,SCDT("INCL")=0,SCDT="SCDT"
|
---|
| 28 | S SCARR="^TMP(""SCARR"",$J,2)" K @SCARR
|
---|
| 29 | S SCI=$$PRTPC^SCAPMC($P(SCPOS,U,2),.SCDT,SCARR,"ERR",1,1)
|
---|
| 30 | Q:'$$PROV(.SCPROV,SCPC) ;providers
|
---|
| 31 | S SCPAT=$P(SCPT0,U)_U_DFN ;patient name^dfn
|
---|
| 32 | S SCSSN=$P(SCPT0,U,9) ;patient ssn
|
---|
| 33 | S SCGEND=$S($P(SCPT0,U,2)="M":"MALE",1:"FEMALE") ;patient gender
|
---|
| 34 | S SCAGE=$$AGEGR($P(SCPT0,U,3)) ;patient age group
|
---|
| 35 | S SCPELIG=$$ELIG^SCRPO(DFN) ;primary eligibility
|
---|
| 36 | S SCMTST=$P($$LST^DGMTU(DFN,SCINACT),U,3,4) ;mt status
|
---|
| 37 | S:'$L(SCMTST) SCMTST="(not applicable)^"
|
---|
| 38 | K SCX S SDOE0=$P(^TMP("SC",$J,"DTR","END"),U)_U_DFN
|
---|
| 39 | D ENEP^SCRPW24(.SCX,"H") S SCENRP=$P(SCX(1),U,2) ;enrollment priority
|
---|
| 40 | ;
|
---|
| 41 | ;Set data string
|
---|
| 42 | S SCX=$E($P(SCPAT,U),1,18)_U_$E(SCSSN,6,10)
|
---|
| 43 | S SCX=SCX_U_$P(SCPELIG,U,2)_U_$P(SCMTST,U,2)
|
---|
| 44 | S SCX=SCX_U_$E($P(SCTEAM,U),1,13)_U_U_$E($P(SCPOS,U),1,14)_U
|
---|
| 45 | S SCX=SCX_U_$E($P(SCLINIC,U),1,14)
|
---|
| 46 | ;
|
---|
| 47 | ;Set line for each provider
|
---|
| 48 | S SCN=0 F S SCN=$O(SCPROV(SCN)) Q:'SCN D
|
---|
| 49 | .S SCPROV=$P(SCPROV(SCN),U,1,2),SCPTYP=$P(SCPROV(SCN),U,3)
|
---|
| 50 | .S SCATY=$S($P(SCPROV(SCN),U,4)="P":"PRECEPTOR PROVIDER",1:"ASSIGNED PROVIDER")
|
---|
| 51 | .S $P(SCX,U,6)=$E($P(SCPROV,U),1,14),$P(SCX,U,8)=SCPTYP
|
---|
| 52 | .S $P(SCX,U,10)=$P(SCPROV(SCN),U,5,6)
|
---|
| 53 | .;
|
---|
| 54 | .;Set sort values
|
---|
| 55 | .I SCFMT="D" F SCI=1:1:6 S SCS=$P($G(^TMP("SC",$J,"SORT",SCI)),U,3) D
|
---|
| 56 | ..I $L(SCS) S SCY=@SCS S:'$L(SCY) SCY="~~~"
|
---|
| 57 | ..S:'$L(SCS) SCY="~~~" S SCS(SCI)=SCY
|
---|
| 58 | ..Q
|
---|
| 59 | .;Set report detail global
|
---|
| 60 | .I SCFMT="D" D LSET(.SCS,SCX)
|
---|
| 61 | .;
|
---|
| 62 | .;Set report statistics nodes
|
---|
| 63 | .S ^TMP("SCRPT",$J,0,SCATY,SCPROV)=$G(^TMP("SCRPT",$J,0,SCATY,SCPROV))+1
|
---|
| 64 | I $L(SCPELIG) S ^TMP("SCRPT",$J,0,"PRIMARY ELIGIBILITY",SCPELIG)=$G(^TMP("SCRPT",$J,0,"PRIMARY ELIGIBILITY",SCPELIG))+1
|
---|
| 65 | I $L(SCMTST) S ^TMP("SCRPT",$J,0,"MEANS TEST CATEGORY",SCMTST)=$G(^TMP("SCRPT",$J,0,"MEANS TEST CATEGORY",SCMTST))+1
|
---|
| 66 | S ^TMP("SCRPT",$J,0,"GENDER",SCGEND)=$G(^TMP("SCRPT",$J,0,"GENDER",SCGEND))+1
|
---|
| 67 | S ^TMP("SCRPT",$J,0,"AGE GROUP",SCAGE)=$G(^TMP("SCRPT",$J,0,"AGE GROUP",SCAGE))+1
|
---|
| 68 | S ^TMP("SCRPT",$J,0,"NATIONAL ENROLLMENT PRIORITY",SCENRP)=$G(^TMP("SCRPT",$J,0,"NATIONAL ENROLLMENT PRIORITY",SCENRP))+1
|
---|
| 69 | S ^TMP("SCRPT",$J,0,"TEAM",SCTEAM)=$G(^TMP("SCRPT",$J,0,"TEAM",SCTEAM))+1
|
---|
| 70 | S ^TMP("SCRPT",$J,0,"PRIMARY CARE",SCPC)=$G(^TMP("SCRPT",$J,0,"PRIMARY CARE",SCPC))+1
|
---|
| 71 | S ^TMP("SCRPT",$J,0,"DIVISION",SCDIV)=$G(^TMP("SCRPT",$J,0,"DIVISION",SCDIV))+1
|
---|
| 72 | S ^TMP("SCRPT",$J,0,"ASSIGNMENTS")=$G(^TMP("SCRPT",$J,0,"ASSIGNMENTS"))+1
|
---|
| 73 | S ^TMP("SCRPT",$J,0,"UNIQUES",DFN)=""
|
---|
| 74 | Q
|
---|
| 75 | ;
|
---|
| 76 | LSET(SCS,SCX) ;Set report line
|
---|
| 77 | ;Input: SCS=array of sort values
|
---|
| 78 | ;Input: SCX=data string
|
---|
| 79 | N SCI,SCN,SCL
|
---|
| 80 | S SCN=$G(^TMP("SCRPT",$J,1,SCS(1),SCS(2),SCS(3))) I 'SCN D
|
---|
| 81 | .S ^TMP("SCRPT",$J,1)=$G(^TMP("SCRPT",$J,1))+1
|
---|
| 82 | .S SCN=^TMP("SCRPT",$J,1)
|
---|
| 83 | .S ^TMP("SCRPT",$J,1,SCS(1),SCS(2),SCS(3))=SCN
|
---|
| 84 | .Q
|
---|
| 85 | S ^TMP("SCRPT",$J,2)=$G(^TMP("SCRPT",$J,2))+1
|
---|
| 86 | S SCL=^TMP("SCRPT",$J,2)
|
---|
| 87 | S ^TMP("SCRPT",$J,2,SCN,SCS(4),SCS(5),SCS(6),SCL)=SCX
|
---|
| 88 | Q
|
---|
| 89 | ;
|
---|
| 90 | PROV(SCPROV,SCPC) ;evaluate providers
|
---|
| 91 | ;Input: SCPROV=variable to return array of provider^ifn^type
|
---|
| 92 | ;Input: SCPC=pc? yes/no
|
---|
| 93 | ;Output: '1' if successful, '0' otherwise
|
---|
| 94 | ;
|
---|
| 95 | N SCI,SCPCF,SCFOUND,SCFPC,SCFAS,SCPRD,SCN,SCSUB,SCLEV,SCR,SCPP
|
---|
| 96 | S SCFPC=$O(^TMP("SC",$J,"PCP",0))>0 ;find pc provider flag
|
---|
| 97 | S SCFAS=$O(^TMP("SC",$J,"ASPR",0))>0 ;find assigned provider flag
|
---|
| 98 | S SCPCF=$S(SCPC="NO":0,$D(^TMP("SCARR",$J,2,"PPROV")):2,1:1),SCN=0
|
---|
| 99 | S SCFOUND=$S(SCFPC!SCFAS:0,1:1) ;success indicator
|
---|
| 100 | S SCPP=0,SCR="" F S SCR=$O(^TMP("SCARR",$J,2,SCR)) Q:'SCR!SCPP D
|
---|
| 101 | .S:$D(^TMP("SCARR",$J,2,SCR,"PREC")) SCPP=1
|
---|
| 102 | .Q ;Preceptor position flag
|
---|
| 103 | I SCFAS D ;Find selected assigned providers
|
---|
| 104 | .S SCR=""
|
---|
| 105 | .F S SCI=$O(^TMP("SCARR",$J,2,SCR)) Q:SCR="" D
|
---|
| 106 | ..S SCI=""
|
---|
| 107 | ..F S SCI=$O(^TMP("SCARR",$J,2,SCR,"PROV-P",SCI)) Q:SCI="" D
|
---|
| 108 | ...S SCPRD=^TMP("SCARR",$J,2,SCR,"PROV-P",SCI)
|
---|
| 109 | ...I $D(^TMP("SC",$J,"ASPR",+SCPRD)) D PSET(SCPRD,SCPC,1,.SCN,"A",SCPP) S SCFOUND=1
|
---|
| 110 | ...Q
|
---|
| 111 | ..Q
|
---|
| 112 | .S SCR=""
|
---|
| 113 | .F S SCI=$O(^TMP("SCARR",$J,2,SCR)) Q:SCR="" D
|
---|
| 114 | ..S SCI=""
|
---|
| 115 | ..F S SCI=$O(^TMP("SCARR",$J,2,SCR,"PROV-U",SCI)) Q:SCI="" D
|
---|
| 116 | ...S SCPRD=^TMP("SCARR",$J,2,SCR,"PROV-U",SCI)
|
---|
| 117 | ...I $D(^TMP("SC",$J,"ASPR",+SCPRD)) D PSET(SCPRD,SCPC,1,.SCN,"A",0) S SCFOUND=1
|
---|
| 118 | ...Q
|
---|
| 119 | ..Q
|
---|
| 120 | .Q
|
---|
| 121 | I SCFPC,'SCPP D ;Find selected pc providers in top level
|
---|
| 122 | .S SCR=""
|
---|
| 123 | .F S SCI=$O(^TMP("SCARR",$J,2,SCR)) Q:SCR="" D
|
---|
| 124 | ..S SCI=""
|
---|
| 125 | ..F S SCI=$O(^TMP("SCARR",$J,2,SCR,"PROV-U",SCI)) Q:SCI="" D
|
---|
| 126 | ...S SCPRD=^TMP("SCARR",$J,2,SCR,"PROV-U",SCI)
|
---|
| 127 | ...I $D(^TMP("SC",$J,"PCP",+SCPRD)) D PSET(SCPRD,SCPC,1,.SCN,"A",SCPP) S SCFOUND=1
|
---|
| 128 | ...Q
|
---|
| 129 | ..Q
|
---|
| 130 | .Q
|
---|
| 131 | I SCFPC,SCPP D ;Find selected pc providers in preceptor level
|
---|
| 132 | .S SCR=""
|
---|
| 133 | .F S SCI=$O(^TMP("SCARR",$J,2,SCR)) Q:SCR="" D
|
---|
| 134 | ..S SCI=""
|
---|
| 135 | ..F S SCI=$O(^TMP("SCARR",$J,2,SCR,"PREC",SCI)) Q:SCI="" D
|
---|
| 136 | ...S SCPRD=^TMP("SCARR",$J,2,SCR,"PREC",SCI)
|
---|
| 137 | ...I $D(^TMP("SC",$J,"PCP",+SCPRD)) D PSET(SCPRD,SCPC,2,.SCN,"P",SCPP) S SCFOUND=1
|
---|
| 138 | ...Q
|
---|
| 139 | ..Q
|
---|
| 140 | .Q
|
---|
| 141 | I SCFAS!SCFPC Q SCFOUND
|
---|
| 142 | ;Get all providers
|
---|
| 143 | S SCR="" F S SCR=$O(^TMP("SCARR",$J,2,SCR)) Q:SCR="" D
|
---|
| 144 | .F SCSUB="PROV-P","PROV-U","PREC" S SCI="" D
|
---|
| 145 | ..Q:SCPC="NO"&(SCSUB="PREC") ;no preceptors for non-pc
|
---|
| 146 | ..S SCLEV=$S(SCSUB="PREC":2,1:1)
|
---|
| 147 | ..F S SCI=$O(^TMP("SCARR",$J,2,SCR,SCSUB,SCI)) Q:SCI="" D
|
---|
| 148 | ...S SCPRD=^TMP("SCARR",$J,2,SCR,SCSUB,SCI)
|
---|
| 149 | ...D PSET(SCPRD,SCPC,SCLEV,.SCN,$S(SCSUB="PREC":"P",1:"A"),$S(SCSUB="PROV-U":0,1:SCPP))
|
---|
| 150 | ...Q
|
---|
| 151 | ..Q
|
---|
| 152 | .Q
|
---|
| 153 | I '$O(SCPROV(0)) S SCPROV(1)="[not assigned]"_U_U_$S(SCPCF=0:"NPC",SCPCF=2:" AP",1:"PCP")
|
---|
| 154 | Q SCFOUND
|
---|
| 155 | ;
|
---|
| 156 | PSET(SCPRD,SCPC,SCLEV,SCN,SCATY,SCPP) ;Set local provider array
|
---|
| 157 | ;Input: SCRPD=provider data from PRTPC^SCAPMC
|
---|
| 158 | ;Input: SCPC=pc? yes/no
|
---|
| 159 | ;Input: SCLEV='1' for assigned position, '2' for preceptor position
|
---|
| 160 | ;Input: SCN=array incrementing number
|
---|
| 161 | ;Input: SCPTY='A' for assigned provider, 'P' for preceptor provider
|
---|
| 162 | ;Input: SCPP='1' if preceptor position exists, '0' otherwise
|
---|
| 163 | N SCPRTY
|
---|
| 164 | S SCPRTY=$S(SCPC="NO":"NPC",SCLEV=1&SCPP:" AP",1:"PCP")
|
---|
| 165 | I SCATY="P",$P(SCPRD,U,14)>$P(SCPRD,U,9) D
|
---|
| 166 | .S $P(SCPRD,U,9)=$P(SCPRD,U,14),$P(SCPRD,U,10)=$P(SCPRD,U,15)
|
---|
| 167 | .Q
|
---|
| 168 | S SCN=SCN+1
|
---|
| 169 | S SCPROV(SCN)=$S($P(SCPRD,U,2)="":"[not assigned]",1:$P(SCPRD,U,2))
|
---|
| 170 | S SCPROV(SCN)=SCPROV(SCN)_U_+SCPRD_U_SCPRTY_U_SCATY_U
|
---|
| 171 | S SCPROV(SCN)=SCPROV(SCN)_$$DT($P(SCPRD,U,9))_U_$$DT($P(SCPRD,U,10))
|
---|
| 172 | Q
|
---|
| 173 | ;
|
---|
| 174 | DT(X) ;Transform date
|
---|
| 175 | S X=$E(X,1,7) Q:X'?7N ""
|
---|
| 176 | Q $E(X,4,5)_"/"_$E(X,6,7)_"/"_(17+$E(X))_$E(X,2,3)
|
---|
| 177 | ;
|
---|
| 178 | PCROLE(SCPC) ;Determine PC? y/n
|
---|
| 179 | ;Input: SCPC=pc role from file #404.43 (output as 'yes' or 'no' if successful)
|
---|
| 180 | ;Output: '1' if successful, '0' otherwise
|
---|
| 181 | ;
|
---|
| 182 | I $E(^TMP("SC",$J,"ATYPE"))="P",SCPC<1 Q 0
|
---|
| 183 | I $E(^TMP("SC",$J,"ATYPE"))="N",SCPC>0 Q 0
|
---|
| 184 | S SCPC=$S(SCPC>0:"YES",1:"NO")
|
---|
| 185 | Q 1
|
---|
| 186 | ;
|
---|
| 187 | PTCL(DFN,SCLINIC,SCACT,SCINACT) ;evaluate enrolled clinic
|
---|
| 188 | ;Input: DFN=patient ifn
|
---|
| 189 | ;Input: SCLINIC=team position associated clinic
|
---|
| 190 | ; (returned if successful and enrolled, null otherwise)
|
---|
| 191 | ;Output: '1' if successful, '0' otherwise
|
---|
| 192 | ;
|
---|
| 193 | N SCIFN,SCPE,ENR,SCPED,SCPED0
|
---|
| 194 | S SCIFN=$P(SCLINIC,U,2) Q:'SCIFN 1 ;not required, no associated clinic
|
---|
| 195 | I $D(^TMP("SC",$J,"CLINIC",SCIFN)),'$D(^DPT(DFN,"DE","B",SCIFN)) Q 0
|
---|
| 196 | ;required, never enrolled
|
---|
| 197 | S (ENR,SCPE)=0
|
---|
| 198 | F S SCPE=$O(^DPT(DFN,"DE","B",SCIFN,SCPE)) Q:'SCPE!ENR D
|
---|
| 199 | .S SCPED=0 F S SCPED=$O(^DPT(DFN,"DE",SCPE,1,SCPED)) Q:'SCPED!ENR D
|
---|
| 200 | ..S SCPED0=$G(^DPT(DFN,"DE",SCPE,1,SCPED,0)) Q:'+SCPED0
|
---|
| 201 | ..I $P(SCPED0,U,3),$P(SCPED0,U,3)'<SCACT,+SCPED0'>SCINACT S ENR=1 Q
|
---|
| 202 | ..I '$P(SCPED0,U,3),+SCPED0'>SCINACT S ENR=1
|
---|
| 203 | ..Q
|
---|
| 204 | .Q
|
---|
| 205 | I $D(^TMP("SC",$J,"CLINIC",SCIFN)),'ENR S SCLINIC="" Q 0
|
---|
| 206 | I '$D(^TMP("SC",$J,"CLINIC",SCIFN)),'ENR S SCLINIC="" Q 1
|
---|
| 207 | Q 1
|
---|
| 208 | ;
|
---|
| 209 | AGEGR(SCDT) ;Calculate age group
|
---|
| 210 | ;Input: SCDT=patient birth date
|
---|
| 211 | N X,Y,X1,X2
|
---|
| 212 | S X1=DT,X2=SCDT D ^%DTC Q:X<0 "unknown"
|
---|
| 213 | S X=X\365.4 Q:X<5 "0 - 4"
|
---|
| 214 | S Y=X\5 S:'(Y#2) Y=Y-1
|
---|
| 215 | Q (Y*5)_" - "_(Y*5+9)
|
---|