| 1 | ORQQPL ; slc/CLA/REV - Functions which return patient problem list data ;12/15/97  [ 23-APR-1999 11:02:10 ]
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**9,10,85,173**;Dec 17, 1997
 | 
|---|
| 3 | LIST(ORPY,DFN,STATUS)  ;return pt's problem list in format: ien^description^
 | 
|---|
| 4 |  ; ICD^onset^last modified^SC^SpExp
 | 
|---|
| 5 |  ; STATUS = status of problems to return: (A)CTIVE, (I)NACTIVE, ("")ALL 
 | 
|---|
| 6 |  Q:'DFN
 | 
|---|
| 7 |  N ORGMPL,I,DETAIL,ORICD186
 | 
|---|
| 8 |  S ORICD186=$$PATCH^XPDUTL("ICD*18.0*6")
 | 
|---|
| 9 |  I $L($T(LIST^GMPLUTL2))>0 D
 | 
|---|
| 10 |  .D LIST^GMPLUTL2(.ORGMPL,DFN,STATUS)
 | 
|---|
| 11 |  .Q:'$D(ORGMPL(0))
 | 
|---|
| 12 |  .S DETAIL=$$DETAIL^ORWCV1(10)
 | 
|---|
| 13 |  .F I=1:1:ORGMPL(0) D
 | 
|---|
| 14 |  ..S X=ORGMPL(I),ORPY(I)=$P(X,U)_U_$P(X,U,3)_U_$P(X,U,2)_U_$P(X,U,4)_U_$P(X,U,5)_U_$P(X,U,6)_U_$P(X,U,7)_U_$P(X,U,8)_U_$P(X,U,10)_U_$P(X,U,9)_U_U_DETAIL
 | 
|---|
| 15 |  ..I +ORICD186,'+$$STATCHK^ICDAPIU($P(ORPY(I),U,4),DT) D
 | 
|---|
| 16 |  ...S $P(ORPY(I),U,13)="#",$P(ORPY(I),U,9)="#"
 | 
|---|
| 17 |  .S:+$G(ORPY(1))<1 ORPY(1)="^No problems found."
 | 
|---|
| 18 |  I $L($T(LIST^GMPLUTL2))<1 S ORPY(1)="^Problem list not available.^"
 | 
|---|
| 19 |  K X
 | 
|---|
| 20 |  Q
 | 
|---|
| 21 | DETAIL(Y,DFN,PROBIEN,ID)  ; RETURN DETAILED PROBLEM DATA
 | 
|---|
| 22 |  N ORGMPL,GMPDT
 | 
|---|
| 23 |  I $L($T(DETAIL^GMPLUTL2))>0 D
 | 
|---|
| 24 |  .D DETAIL^GMPLUTL2(PROBIEN,.ORGMPL)
 | 
|---|
| 25 |  .N CR,I,J S CR=$CHAR(13),I=1
 | 
|---|
| 26 |  .S Y(I)=ORGMPL("NARRATIVE")_" ("_ORGMPL("DIAGNOSIS")_")",I=I+1
 | 
|---|
| 27 |  .I $$PATCH^XPDUTL("ICD*18.0*6"),'+$$STATCHK^ICDAPIU(ORGMPL("DIAGNOSIS"),DT) D
 | 
|---|
| 28 |  ..S Y(I)="*** The ICD code "_ORGMPL("DIAGNOSIS")_" is currently inactive. ***",I=I+1
 | 
|---|
| 29 |  .S Y(I)=" ",I=I+1
 | 
|---|
| 30 |  .S Y(I)="   Onset: "_ORGMPL("ONSET"),I=I+1
 | 
|---|
| 31 |  .S Y(I)="  Status: "_ORGMPL("STATUS")
 | 
|---|
| 32 |  .S Y(I)=Y(I)_$S(ORGMPL("PRIORITY")="ACUTE":"/ACUTE",ORGMPL("PRIORITY")="CHRONIC":"/CHRONIC",1:""),I=I+1
 | 
|---|
| 33 |  .S Y(I)=" SC Cond: "_ORGMPL("SC"),I=I+1
 | 
|---|
| 34 |  .S Y(I)="Exposure: "_$S($G(ORGMPL("EXPOSURE"))>0:ORGMPL("EXPOSURE",1),1:"None"),I=I+1
 | 
|---|
| 35 |  .I $G(ORGMPL("EXPOSURE"))>1 F J=2:1:ORGMPL("EXPOSURE")  D
 | 
|---|
| 36 |  ..S Y(I)="          "_ORGMPL("EXPOSURE",J),I=I+1
 | 
|---|
| 37 |  .S Y(I)=" ",I=I+1
 | 
|---|
| 38 |  .S Y(I)="Provider: "_ORGMPL("PROVIDER"),I=I+1
 | 
|---|
| 39 |  .S Y(I)="  Clinic: "_ORGMPL("CLINIC"),I=I+1
 | 
|---|
| 40 |  .S Y(I)=" ",I=I+1
 | 
|---|
| 41 |  .S Y(I)="Recorded: "_$P(ORGMPL("RECORDED"),U)_", by "_$P(ORGMPL("RECORDED"),U,2),I=I+1
 | 
|---|
| 42 |  .S Y(I)=" Entered: "_$P(ORGMPL("ENTERED"),U)_", by "_$P(ORGMPL("ENTERED"),U,2),I=I+1
 | 
|---|
| 43 |  .S Y(I)=" Updated: "_ORGMPL("MODIFIED"),I=I+1
 | 
|---|
| 44 |  .S Y(I)=" ",I=I+1
 | 
|---|
| 45 |  .;S Y(I)=" Comment: "_$S($G(ORGMPL("COMMENT"))>0:ORGMPL("COMMENT"),1:"")
 | 
|---|
| 46 |  .I $G(ORGMPL("COMMENT"))>0 D
 | 
|---|
| 47 |  ..S Y(I)="----------- Comments -----------",I=I+1
 | 
|---|
| 48 |  ..;F J=ORGMPL("COMMENT"):-1:1  D
 | 
|---|
| 49 |  ..;.S Y(I)=ORGMPL("COMMENT",J)
 | 
|---|
| 50 |  ..;.S Y(I)=$P(Y(I),U)_" by "_$P(Y(I),U,2)_": "_$P(Y(I),U,3),I=I+1
 | 
|---|
| 51 |  ..F J=1:1:ORGMPL("COMMENT")  D
 | 
|---|
| 52 |  ...S Y(I)=ORGMPL("COMMENT",J)
 | 
|---|
| 53 |  ...S Y(I)=$P(Y(I),U)_" by "_$P(Y(I),U,2)_": "_$P(Y(I),U,3),I=I+1
 | 
|---|
| 54 |  .S Y(I)=" ",I=I+1
 | 
|---|
| 55 |  .D HIST^ORQQPL2(.GMPDT,PROBIEN)
 | 
|---|
| 56 |  .I $G(GMPDT(0))>0 D
 | 
|---|
| 57 |  ..S Y(I)="----------- Audit History -----------",I=I+1
 | 
|---|
| 58 |  ..F J=1:1:GMPDT(0)  S Y(I)=$P(GMPDT(J),U)_":  "_$P(GMPDT(J),U,2),I=I+1
 | 
|---|
| 59 |  I $L($T(DETAIL^GMPLUTL2))<1 S Y(1)="Problem list not available."
 | 
|---|
| 60 |  Q
 | 
|---|
| 61 | HASPROB(ORDFN,ORPROB) ;extrinsic function returns 1^problem text;ICD9 if
 | 
|---|
| 62 |  ;pt has an active problem which contains any piece of ORPROB
 | 
|---|
| 63 |  ;ORDFN   patient DFN
 | 
|---|
| 64 |  ;ORPROB  problems to check vs. active prob list in format: PROB1TEXT;PROB1ICD^PROB2TEXT;PROB2ICD^PROB3...
 | 
|---|
| 65 |  ;if ICD includes "." an exact match will be sought
 | 
|---|
| 66 |  ;if not, a match of general ICD category will be sought
 | 
|---|
| 67 |  ;Note: All ICD codes passed must be preceded with ";"
 | 
|---|
| 68 |  Q:+$G(ORDFN)<1 "0^Patient not identified."
 | 
|---|
| 69 |  Q:'$L($G(ORPROB)) "0^Problem not identified."
 | 
|---|
| 70 |  N ORQAPL,ORQY,ORI,ORJ,ORCNT,ORQPL,ORQICD,ORQRSLT
 | 
|---|
| 71 |  D LIST(.ORQY,ORDFN,"A")
 | 
|---|
| 72 |  Q:$P(ORQY(1),U)="" "0^No active problems found."
 | 
|---|
| 73 |  S ORQRSLT="0^No matching problems found."
 | 
|---|
| 74 |  S ORCNT=$L(ORPROB,U)
 | 
|---|
| 75 |  S ORI=0 F  S ORI=$O(ORQY(ORI)) Q:ORI<1  D
 | 
|---|
| 76 |  .S ORQAPL=ORQY(ORI)
 | 
|---|
| 77 |  .F ORJ=1:1:ORCNT D
 | 
|---|
| 78 |  ..S ORQPL=$P($P(ORPROB,U,ORJ),";"),ORQICD=$P($P(ORPROB,U,ORJ),";",2)
 | 
|---|
| 79 |  ..;if problem text and pt's problem contains problem text passed:
 | 
|---|
| 80 |  ..I $L(ORQPL),($P(ORQAPL,U,2)[ORQPL) D
 | 
|---|
| 81 |  ...S ORQRSLT="1^"_$P(ORQAPL,U,2)_";"_$P(ORQAPL,U,4)
 | 
|---|
| 82 |  ..;
 | 
|---|
| 83 |  ..;if specific ICD (contains ".") and pt's ICD equals ICD passed:
 | 
|---|
| 84 |  ..I $L(ORQICD),(ORQICD["."),($P(ORQAPL,U,4)=ORQICD) D
 | 
|---|
| 85 |  ...S ORQRSLT="1^"_$P(ORQAPL,U,2)_";"_$P(ORQAPL,U,4)
 | 
|---|
| 86 |  ..;
 | 
|---|
| 87 |  ..;if non-specific ICD and pt's ICD category equals ICD category passed:
 | 
|---|
| 88 |  ..I $L(ORQICD),(ORQICD'["."),($P($P(ORQAPL,U,4),".")=ORQICD) D
 | 
|---|
| 89 |  ...S ORQRSLT="1^"_$P(ORQAPL,U,2)_";"_$P(ORQAPL,U,4)
 | 
|---|
| 90 |  Q ORQRSLT
 | 
|---|