Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: ORQQPL4

ORQQPL4.m

Go to the documentation of this file.
  1. ORQQPL4 ; ISL/JER/TC - Lexicon Look-up w/Synonyms ;07/30/15 08:25
  1. ;;3.0;ORDER ENTRY/RESULTS REPORTING;**306,361,350,401**;Dec 17, 1997;Build 11
  1. ;
  1. ; DBIA 2950 LOOK^LEXA ^TMP("LEXFND",$J)
  1. ; DBIA 1609 CONFIG^LEXSET ^TMP("LEXSCH",$J)
  1. ; ICR 5699 $$ICDDATA^ICDXCODE
  1. ;
  1. Q
  1. LEX(LST,X,VIEW,ORDATE,ORINCSYN) ; return list after lexicon lookup
  1. ; Call with: X (Required) The search text entered by the user
  1. ; [VIEW] (Optional) The Lexicon VIEW parameter (Defaults to
  1. ; Problem List Subset (i.e., "PLS")
  1. ; [ORDATE] (Optional) the date of interest (Defaults to TODAY)
  1. ; [ORINCSYN] (Optional) Boolean flag specifying whether or not to
  1. ; include synonyms for SNOMED CT Concepts
  1. ; (Defaults to 0 (FALSE))
  1. ;
  1. ; Returns: LST=gvn of ^TMP("ORLEX",$J), which contains search result set as:
  1. ; ^TMP("ORLEX",$J,1..n)=LEXIEN^PREFTEXT^ICDCODE(S)^ICDIEN^CODESYS^CONCEPTID^DESIGID^ICDVER^PARENTSUBSCRIPT
  1. ; ^TMP("ORLEX",$J,n+1)="<n> matches found"
  1. ;
  1. N LEX,ILST,I,IEN,APP
  1. N DIC ; p401 if an erroneous DIC("S") is left in memory it causes issues in LOOK^LEXA
  1. S APP="GMPX",LST=$NA(^TMP("ORLEX",$J)) K @LST
  1. S:'+$G(ORDATE) ORDATE=DT
  1. S:'$L($G(VIEW)) VIEW="PLS"
  1. S ORINCSYN=+$G(ORINCSYN)
  1. I $S(X?.1A2.3N.1".".2N:1,X?.1A2.3N1"+":1,1:0) D Q
  1. . S @LST@(1)="icd^Searching by code on the Problems Tab supports SNOMED CT, but not ICD."
  1. . S @LST@(2)="Please try a different search"
  1. D CONFIG^LEXSET(APP,VIEW,ORDATE)
  1. ; call LOOK^LEXA to execute the search as defined by the call to CONFIG^LEXSET
  1. D LOOK^LEXA(X,,1,,ORDATE)
  1. I '$D(LEX("LIST",1)) D G LEXX
  1. . S:X?.N @LST@(1)="Code search failed"
  1. S ILST=0
  1. S @LST@(1)=$$LEXXFRM(LEX("LIST",1),ORDATE,APP),ILST=1
  1. D:ORINCSYN SYNONYMS(.LST,.ILST,"SCT",$P(@LST@(1),U,6),ORDATE)
  1. S (I,IEN)=""
  1. F S I=$O(^TMP("LEXFND",$J,I)) Q:I="" D ;DBIA 2950
  1. .F S IEN=$O(^TMP("LEXFND",$J,I,IEN)) Q:IEN="" D
  1. ..N TXT,ELEMENT S TXT=^TMP("LEXFND",$J,I,IEN)
  1. ..S ELEMENT=IEN_U_TXT
  1. ..S ELEMENT=$$LEXXFRM(ELEMENT,ORDATE,APP)
  1. ..S ILST=ILST+1,@LST@(ILST)=ELEMENT
  1. ..D:ORINCSYN SYNONYMS(.LST,.ILST,"SCT",$P(ELEMENT,U,6),ORDATE)
  1. I '$D(@LST@(1)) S @LST@(1)="No matches found"
  1. E S @LST@(ILST+1)=ILST_$S(ILST=1:" match",1:" matches")_" found"
  1. LEXX K ^TMP("LEXFND",$J),^TMP("LEXHIT",$J),^TMP("LEXSCH",$J),^TMP("LEXLE",$J)
  1. Q
  1. LEXXFRM(ORX,ORDATE,ORAPP) ; Transform text for SCT look-up
  1. N ORLEX,ORY,ORICD,ORSCT,ORTXT,ORCODSYS,ORCCODE,ORDCODE
  1. S ORLEX=$P(ORX,U),ORTXT=$P(ORX,U,2),(ORCCODE,ORCODSYS)=""
  1. I ORTXT["*" S ORTXT=$$STRIP^XLFSTR(ORTXT,"*")
  1. I (ORTXT["("),(ORTXT[")") D
  1. . S ORCODSYS=$RE($P($P($RE(ORTXT),"("),")",2))
  1. . S ORCCODE=$$ONE^LEXU(+ORLEX,ORDATE,"SCT"),ORCODSYS=$RE($P($RE(ORCODSYS)," ",2,99))
  1. . S ORTXT=$$TRIM^XLFSTR($RE($P($RE(ORTXT),"(",2,99)))
  1. S ORY=$$SETELEM(ORLEX,ORTXT,ORCODSYS,ORCCODE,ORDATE)
  1. Q ORY
  1. SYNONYMS(LST,ILST,ORCSYS,ORCCODE,ORDT) ; Get synonyms for expression
  1. N ORSYN,ORI,ORDAD S ORDT=$G(ORDT,DT),ORDAD=ILST
  1. D GETSYN^LEXTRAN1(ORCSYS,ORCCODE,ORDT,"ORSYN",1,1)
  1. S ORI=0 F S ORI=$O(ORSYN("S",ORI)) Q:+ORI'>0 D
  1. . N ELEMENT,TXT,IEN,ORDCODE
  1. . S IEN=$P(ORSYN("S",ORI),U,2),TXT=$P(ORSYN("S",ORI),U),ORDCODE=$P(ORSYN("S",ORI),U,3)
  1. . S ELEMENT=$$SETELEM(IEN,TXT,"SNOMED CT",ORCCODE,ORDT,ORDCODE)_U_ORDAD
  1. . S ILST=ILST+1,@LST@(ILST)=ELEMENT
  1. Q
  1. SETELEM(ORLEX,ORTXT,ORCODSYS,ORCCODE,ORDATE,ORDCODE) ; Set List Element
  1. N ORY,ORIMPDT,ORICD,ORICDID,ORSYN,ORTYP,ORQT,ORNUM
  1. S ORIMPDT=$$IMPDATE^LEXU("10D"),(ORTYP,ORQT,ORNUM)=""
  1. I '$D(ORDCODE) D
  1. . S ORDCODE=$$GETSYN^LEXTRAN1("SCT",ORCCODE,ORDATE,"ORSYN",1,1)
  1. . I $P(ORDCODE,U)'=1 S ORDCODE="" Q
  1. . F S ORTYP=$O(ORSYN(ORTYP)) Q:ORTYP="S"!(ORQT) D
  1. . . I $P(ORSYN(ORTYP),U)=ORTXT S ORDCODE=$P(ORSYN(ORTYP),U,3),ORQT=1 Q
  1. . I ORTYP="S" F S ORNUM=$O(ORSYN(ORTYP,ORNUM)) Q:ORNUM=""!(ORQT) D
  1. . . I $P(ORSYN(ORTYP,ORNUM),U)=ORTXT S ORDCODE=$P(ORSYN(ORTYP,ORNUM),U,3),ORQT=1 Q
  1. I ORDCODE["^" S ORDCODE=""
  1. S ORICD=$$GETDX^ORQQPL1(ORCCODE,ORCODSYS,ORDATE)
  1. S ORICDID=+$$ICDDATA^ICDXCODE("DIAG",$P(ORICD,"/"),ORDATE,"E")
  1. S ORY=ORLEX_U_ORTXT_U_ORICD_U_ORICDID_U_ORCODSYS_U_ORCCODE_U_ORDCODE
  1. I (ORCODSYS["SNOMED")!(ORCODSYS["VHAT") D
  1. .S ORY=ORY_U_$S(ORDATE<ORIMPDT:"ICD-9-CM",1:"ICD-10-CM")
  1. Q ORY