[613] | 1 | DGRRLU0 ;alb/GAH - DG Replacement and Rehosting RPC for VADPT ;10/10/05 09:53
|
---|
| 2 | ;;5.3;Registration;**538,725**;Aug 13, 1993;Build 12
|
---|
| 3 | ;
|
---|
| 4 | SET X="You Can't Enter DGRRLU0 at top of routine!"
|
---|
| 5 | QUIT
|
---|
| 6 | ;
|
---|
| 7 | BYFILTER(FILTER,FILTERV,BDATE,EDATE,SEARCH,VALUE,DELIM) ; -- search type by clinic, provider, or ward.
|
---|
| 8 | NEW PCNT,OKAY,VAL
|
---|
| 9 | K ^TMP("DGPTLKUP",$J)
|
---|
| 10 | SET (OKAY,PCNT)=0
|
---|
| 11 | ;
|
---|
| 12 | DO ADD^DGRRUTL("<record count='0'>")
|
---|
| 13 | SET LINENO=DGRRLINE
|
---|
| 14 | FOR I=1:1 S VAL=$P(FILTERV,DELIM,I) QUIT:VAL="" DO Q:$$STOP^XOBVLIB()
|
---|
| 15 | . IF FILTER="WARD" DO WARDPTS(VAL) S OKAY=1 Q
|
---|
| 16 | . IF FILTER="CLINIC" DO CLINPTS(VAL,BDATE,EDATE) S OKAY=2 Q
|
---|
| 17 | . IF FILTER="PROVIDER" D PROVPTS(VAL) S OKAY=3 Q
|
---|
| 18 | . IF FILTER="SPECIALTY" D SPECPTS(VAL) S OKAY=4 Q
|
---|
| 19 | ;
|
---|
| 20 | IF OKAY<1 DO ADD^DGRRUTL("<error message='Filter not correctly specified'></error>")
|
---|
| 21 | ;
|
---|
| 22 | ; -- update the record count
|
---|
| 23 | DO ADDPTS()
|
---|
| 24 | SET @DGRRESLT@(LINENO)="<record count='"_PCNT_"'>"
|
---|
| 25 | IF ($G(MAXSIZRE)<1) DO ADD^DGRRUTL("<maximum message=''></maximum>")
|
---|
| 26 | DO ADD^DGRRUTL("<error message=''></error>")
|
---|
| 27 | QUIT
|
---|
| 28 | ;
|
---|
| 29 | FILTCHK(DFN,TYPE,VALUE) ; -- Filter search -
|
---|
| 30 | ; -- check patients to match search type and search value for filter searches
|
---|
| 31 | ; -- returns 1 if matches, 0 if no match
|
---|
| 32 | ;
|
---|
| 33 | SET VALUE=$$UP^XLFSTR(VALUE)
|
---|
| 34 | Q:($G(VALUE)="")!($G(VALUE)="*") 1
|
---|
| 35 | Q:($G(TYPE)="") 1
|
---|
| 36 | Q:($G(DFN)<1) 0
|
---|
| 37 | ;
|
---|
| 38 | NEW I,J,OKAY,CHKVAL
|
---|
| 39 | SET OKAY=0
|
---|
| 40 | IF TYPE="NAME" DO
|
---|
| 41 | . IF VALUE[", " SET VALUE=$P(VALUE,", ")_","_$P(VALUE,", ",2) ; REMOVE FIRST SPACE line added sgg 070104
|
---|
| 42 | . SET CHKVAL=$P($G(^DPT(DFN,0)),"^",1)
|
---|
| 43 | . IF $E(CHKVAL,1,$LENGTH(VALUE))=VALUE SET OKAY=1
|
---|
| 44 | IF TYPE="SSN" DO
|
---|
| 45 | . SET CHKVAL=$P($G(^DPT(DFN,0)),"^",9)
|
---|
| 46 | . SET VALUE=$TR(VALUE," -","") ; REMOVE DASHES AND SPACES line added sgg 070104
|
---|
| 47 | . IF $E(CHKVAL,1,$LENGTH(VALUE))=VALUE SET OKAY=1
|
---|
| 48 | IF TYPE="ICN" DO
|
---|
| 49 | . ;SET CHKVAL=$P($G(^DPT(DFN,"MPI")),"^",1)
|
---|
| 50 | . S CHKVAL=+$$GETICN^MPIF001(DFN)
|
---|
| 51 | . IF $E(CHKVAL,1,$LENGTH(VALUE))=VALUE SET OKAY=1
|
---|
| 52 | IF TYPE="SSN4" DO
|
---|
| 53 | . SET CHKVAL=$E($P($G(^DPT(DFN,0)),"^",1),1)_$E($P($G(^DPT(DFN,0)),"^",9),6,9)
|
---|
| 54 | . IF $E(CHKVAL,1,$LENGTH(VALUE))=VALUE SET OKAY=1
|
---|
| 55 | QUIT OKAY
|
---|
| 56 | ;
|
---|
| 57 | WARDPTS(WARD) ; RETURN LIST OF PATIENTS IN A WARD
|
---|
| 58 | ; Based on ORQPTQ2
|
---|
| 59 | Q:+$G(WARD)<1
|
---|
| 60 | N DFN
|
---|
| 61 | S DFN=0
|
---|
| 62 | S WARD=$P(^DIC(42,WARD,0),"^") ;GET WARD NAME FOR "CN" LOOKUP
|
---|
| 63 | Q:WARD=""
|
---|
| 64 | F D Q:DFN'>0 Q:$$STOP^XOBVLIB()
|
---|
| 65 | . S DFN=$O(^DPT("CN",WARD,DFN)) Q:DFN'>0
|
---|
| 66 | . Q:'$$FILTCHK(DFN,SEARCH,VALUE)
|
---|
| 67 | . S ^TMP("DGPTLKUP",$J,$P($G(^DPT(DFN,0)),"^",1),DFN)=""
|
---|
| 68 | Q
|
---|
| 69 | ;
|
---|
| 70 | PROVPTS(PROV) ; RETURN LIST OF PATIENTS LINKED TO A PRIMARY PROVIDER
|
---|
| 71 | ; Based on ORQPTQ2
|
---|
| 72 | ; "APR" xref is on field PROVIDER in file 2 (2;.104)
|
---|
| 73 | ; "AAP" xref is on field ATTENDING PHYSICIAN in file 2 (2;.1041)
|
---|
| 74 | ;
|
---|
| 75 | Q:+$G(PROV)<1
|
---|
| 76 | ;
|
---|
| 77 | N DFN,XREF
|
---|
| 78 | S DFN=0
|
---|
| 79 | F XREF="AAP","APR" DO
|
---|
| 80 | . F S DFN=$O(^DPT(XREF,PROV,DFN)) Q:DFN'>0 D Q:$$STOP^XOBVLIB()
|
---|
| 81 | .. Q:'$$FILTCHK(DFN,SEARCH,VALUE)
|
---|
| 82 | .. S ^TMP("DGPTLKUP",$J,$P($G(^DPT(DFN,0)),"^",1),DFN)=""
|
---|
| 83 | Q
|
---|
| 84 | ;
|
---|
| 85 | CLINPTS(CLIN,BDATE,EDATE) ; RETURN LIST OF PTS W/CLINIC APPT W/IN BEGINNING AND END DATES
|
---|
| 86 | Q:+$G(CLIN)<1
|
---|
| 87 | ;
|
---|
| 88 | N DFN,NAME,I,J,X,Y,ORJ,ORSRV,ORNOWDT,CHKX,CHKIN,MAXAPPTS,ORC,CLNAM,NOWDT
|
---|
| 89 | S MAXAPPTS=200
|
---|
| 90 | S NOWDT=$$NOW^XLFDT
|
---|
| 91 | ;
|
---|
| 92 | S DFN=0,I=1
|
---|
| 93 | IF $G(BDATE)="" S BDATE="T"
|
---|
| 94 | IF $G(EDATE)="" S EDATE="T+1"
|
---|
| 95 | ;CONVERT BDATE AND EDATE INTO FILEMAN DATE/TIME
|
---|
| 96 | D DT^DILF("T",BDATE,.BDATE,"","")
|
---|
| 97 | D DT^DILF("T",EDATE,.EDATE,"","")
|
---|
| 98 | I (BDATE=-1)!(EDATE=-1) S Y(1)="^Error in date range." Q
|
---|
| 99 | S EDATE=$P(EDATE,".")_.5 ;ADD 1/2 DAY TO END DATE
|
---|
| 100 | ;
|
---|
| 101 | D CLINPT2(+CLIN,BDATE,EDATE)
|
---|
| 102 | QUIT
|
---|
| 103 | ;
|
---|
| 104 | CLINPT2(CLIN,BEGIN,END) ; -- Use scheduling rehosting API from patches SD*5.3*253 and SD*5.3*275
|
---|
| 105 | ; -- GETPLIST^SDAMA202(SDIEN,SDFIELDS,SDAPSTAT,SDSTART,SDEND,.SDRESULT,SDIOSTAT)
|
---|
| 106 | ;
|
---|
| 107 | K ^TMP($J,"SDAMA202","GETPLIST")
|
---|
| 108 | NEW I,X,APPTS,APPTDT SET APPTS=""
|
---|
| 109 | ;
|
---|
| 110 | ; -- get appointment date/time, patient status, patient ien & name,
|
---|
| 111 | ; only get appointment status = "R" for scheduled or kept appointments.
|
---|
| 112 | DO GETPLIST^SDAMA202(+CLIN,"1;3;4","R",BEGIN,END,.APPTS)
|
---|
| 113 | ;
|
---|
| 114 | ; -- check number of appointments
|
---|
| 115 | I APPTS<1 K ^TMP($J,"SDAMA202","GETPLIST") Q
|
---|
| 116 | ;
|
---|
| 117 | ; -- check for an error, may need to pass message up.
|
---|
| 118 | I $D(^TMP($J,"SDAMA202","GETPTLIST","ERROR")) QUIT
|
---|
| 119 | ;
|
---|
| 120 | ; -- move list of appointments to list of patients, ordered by name, dfn
|
---|
| 121 | S (I,X)=""
|
---|
| 122 | F SET I=$O(^TMP($J,"SDAMA202","GETPLIST",I)) Q:I<1 S X=^(I,4) DO
|
---|
| 123 | . Q:'$$FILTCHK(+X,SEARCH,VALUE) ;check if meets search criteria
|
---|
| 124 | . S APPTDT=$G(^TMP($J,"SDAMA202","GETPLIST",I,1))
|
---|
| 125 | . S ^TMP("DGPTLKUP",$J,$P(X,"^",2),+X,+APPTDT)=""
|
---|
| 126 | K ^TMP($J,"SDAMA202","GETPLIST")
|
---|
| 127 | QUIT
|
---|
| 128 | ;
|
---|
| 129 | SPECPTS(SPEC) ;Returns a list of patients associated with a specialty
|
---|
| 130 | ; "ATR" cross reference is on the Treating Specialty (#.103) field
|
---|
| 131 | ; in the Patient (#2) file and is a pointer to the Facility
|
---|
| 132 | ; Treating Specialty (#45.7) file.
|
---|
| 133 | ;
|
---|
| 134 | Q:+$G(SPEC)<1
|
---|
| 135 | N DFN
|
---|
| 136 | S DFN=0
|
---|
| 137 | F S DFN=$O(^DPT("ATR",+SPEC,DFN)) Q:DFN'>0 D Q:$$STOP^XOBVLIB()
|
---|
| 138 | .Q:'$$FILTCHK(DFN,SEARCH,VALUE)
|
---|
| 139 | .S ^TMP("DGPTLKUP",$J,$P($G(^DPT(DFN,0)),U),DFN)=""
|
---|
| 140 | Q
|
---|
| 141 | ;
|
---|
| 142 | ADDPTS() ;
|
---|
| 143 | N NAME,DFN,DGRRFLG,DGRRAPTS,DGRRCTR
|
---|
| 144 | S NAME=""
|
---|
| 145 | S (DGRRFLG,DGRRCTR)=0
|
---|
| 146 | S DGRRAPTS=$S(FILTER="CLINIC":1,1:0)
|
---|
| 147 | FOR SET NAME=$O(^TMP("DGPTLKUP",$J,NAME)) Q:NAME=""!(DGRRFLG=1) DO
|
---|
| 148 | . S DFN="" FOR SET DFN=$O(^TMP("DGPTLKUP",$J,NAME,DFN)) Q:DFN<1!(DGRRFLG=1) DO
|
---|
| 149 | .. S DGRRCTR=DGRRCTR+1
|
---|
| 150 | .. I DGRRCTR>MAXSIZE S DGRRFLG=1 Q
|
---|
| 151 | .. DO PTDATA^DGRRLUA(DFN,.PCNT)
|
---|
| 152 | .. I FILTER'="CLINIC" Q
|
---|
| 153 | .. D ADD^DGRRUTL("<appointments>")
|
---|
| 154 | .. N APPTDT
|
---|
| 155 | .. S APPTDT=""
|
---|
| 156 | .. F S APPTDT=$O(^TMP("DGPTLKUP",$J,NAME,DFN,APPTDT)) Q:'APPTDT D
|
---|
| 157 | ...D ADD^DGRRUTL("<appointmentTime>"_APPTDT_"</appointmentTime>")
|
---|
| 158 | .. D ADD^DGRRUTL("</appointments>")
|
---|
| 159 | .. D ADD^DGRRUTL("</patient>")
|
---|
| 160 | I DGRRCTR>MAXSIZE D
|
---|
| 161 | .IF $G(MAXSIZRE)<1 DO ADD^DGRRLU("<maximum message='Too many patients found (more than "_MAXSIZE_"). Please Limit Search.'></maximum>")
|
---|
| 162 | .SET MAXSIZRE=1
|
---|
| 163 | K ^TMP("DGPTLKUP",$J)
|
---|
| 164 | ;IF ($G(MAXSIZRE)<1) DO ADD^DGRRUTL("<maximum message=''></maximum>")
|
---|
| 165 | Q
|
---|
| 166 | ;
|
---|
| 167 | NAMECOMP(DFN,DGRRCNT) ; ENTRY IS +$P($G(^DPT(DFN,"NAME")),"^",1)
|
---|
| 168 | ;
|
---|
| 169 | N LN,FN,MI,PR,SU,DE,DGA,DGNMC
|
---|
| 170 | S DGA=+$P($G(^DPT(DFN,"NAME")),U)_","
|
---|
| 171 | D GETS^DIQ(20,+DGA,"1:6","","DGNMC")
|
---|
| 172 | S LN=$$CHARCHK^DGRRUTL($G(DGNMC(20,DGA,1)))
|
---|
| 173 | S FN=$$CHARCHK^DGRRUTL($G(DGNMC(20,DGA,2)))
|
---|
| 174 | S MI=$$CHARCHK^DGRRUTL($G(DGNMC(20,DGA,3)))
|
---|
| 175 | S PR=$$CHARCHK^DGRRUTL($G(DGNMC(20,DGA,4)))
|
---|
| 176 | S SU=$$CHARCHK^DGRRUTL($G(DGNMC(20,DGA,5)))
|
---|
| 177 | S DE=$$CHARCHK^DGRRUTL($G(DGNMC(20,DGA,6)))
|
---|
| 178 | DO ADD^DGRRUTL("<namecomp number='"_DGRRCNT_"' last='"_LN_"' first='"_FN_"' middle='"_MI_"' prefix='"_PR_"' suffix='"_SU_"' degree='"_DE_"' ></namecomp>")
|
---|
| 179 | ;
|
---|