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

VIABPCE4.m

Go to the documentation of this file.
  1. VIABPCE4 ;AITC/BWF - wrap calls to PCE and AICS ;2/12/16 15:13
  1. ;;1.0;VISTA INTEGRATION ADAPTER;**5**;06-FEB-2014;Build 8
  1. ;
  1. ; DBIA 2950 LOOK^LEXA ^TMP("LEXFND",$J)
  1. ; DBIA 1609 CONFIG^LEXSET ^TMP("LEXSCH",$J)
  1. ; DBIA 3991 $$STATCHK^ICDAPIU
  1. ;
  1. ; This is a clone of ORWPCE4.
  1. Q
  1. LEX(LST,X,APP,VIADATE,VIAXTND,VIAINSYN) ; return list after lexicon lookup
  1. ; Call with: X (Required) The search text entered by the user
  1. ; APP (Required) The Lexicon APP parameter (e.g., "GMPX"
  1. ; for Problem List Subset, "10D" for ICD-10-CM, etc.
  1. ; [VIADATE] (Optional) the date of interest (Defaults to TODAY - should
  1. ; be passed as DATE OF SERVICE if not TODAY)
  1. ; [VIAXTND] (Optional) Boolean flag specifying whether or not to
  1. ; use an extended search (Initial search is PL Subset
  1. ; of SCT, extended search is ICD (or 10D after impl.)
  1. ; (Defaults to 0 (FALSE))
  1. ; [VIAINSYN] (Optional) Boolean flag specifying whether or not to
  1. ; include synonyms for SNOMED CT Concepts
  1. ; (Defaults to 0 (FALSE))
  1. ;
  1. ; Returns: LST=local array name passed by ref, which contains search result set as:
  1. ; <lvn>(1..n)=LEXIEN^PREFTEXT^CODESYS^CONCEPTID^ICDVER^DESIGID^PARENTSUBSCRIPT
  1. ;
  1. N LEX,ILST,I,IEN,IMPLDT,SUBSET,FILTER
  1. S FILTER=""
  1. S IMPLDT=$$IMPDATE^LEXU("10D")
  1. S:APP="CPT" APP="CHP" ; LEX PATCH 10
  1. I APP="ICD",'+$G(VIAXTND) S APP=$S($E(X,1,3)?.1A2.3N:"ICD",1:"GMPX")
  1. S:'+$G(VIADATE) VIADATE=DT
  1. S VIAINSYN=+$G(VIAINSYN)
  1. I APP="ICD",(VIADATE'<IMPLDT) S APP="10D"
  1. S SUBSET=$S(APP="GMPX":$S(VIADATE<IMPLDT:"PLS",1:"CLF"),1:APP)
  1. ; call CONFIG^LEXSET to set-up the constraints of the Lexicon search
  1. D CONFIG^LEXSET(APP,SUBSET,VIADATE) ;DBIA 1609
  1. I APP="CHP" D
  1. . ; Set the filter for CPT only using CS APIs - format is the same as for DIC("S")
  1. . S ^TMP("LEXSCH",$J,"FIL",0)="I $L($$CPTONE^LEXU(+Y,$G(VIADATE)))!($L($$CPCONE^LEXU(+Y,$G(VIADATE))))" ;DBIA 1609
  1. . ; Set Applications Default Flag (Lexicon can not overwrite filter)
  1. . S ^TMP("LEXSCH",$J,"ADF",0)=1
  1. ; setup and/or search
  1. S X=$$UP^XLFSTR(X)
  1. ; execute the search
  1. D SRCH(.LST,X,APP,SUBSET,VIADATE,VIAINSYN)
  1. LEXX K ^TMP("LEXFND",$J),^TMP("LEXHIT",$J),^TMP("LEXSCH",$J),^TMP("LEXLE",$J)
  1. Q
  1. SRCH(LST,X,APP,SUBSET,VIADATE,VIAINSYN) ; call LOOK^LEXA to execute the search
  1. N LEX,I,IEN,ILST
  1. D LOOK^LEXA(X,APP,1,SUBSET,VIADATE)
  1. I '$D(LEX("LIST",1)) D G LEXX
  1. . S LST(1)="-1^No matches found.^"_APP
  1. S ILST=0
  1. S LEX("LIST",1)=$$LEXXFRM(LEX("LIST",1),VIADATE,APP)
  1. I $S(APP="GMPX":1,APP="ICD":1,1:0),($P(LEX("LIST",1),U,6)'="799.9") D I 1
  1. . I APP="ICD",($E($P(LEX("LIST",1),U,3),1,3)'="ICD") Q
  1. . S LST(1)=LEX("LIST",1),ILST=1
  1. E S LST(1)=LEX("LIST",1),ILST=1
  1. I APP="GMPX",+$G(VIAINSYN) D SYNONYMS(.LST,.ILST,"SCT",$P(LST(1),U,4),VIADATE)
  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,VIADATE,APP) Q:$S(APP="GMPX":1,APP="ICD":1,1:0)&($P(ELEMENT,U,6)="799.9")
  1. ..I APP="ICD",($E($P(ELEMENT,U,3),1,3)'="ICD") Q
  1. ..S ILST=ILST+1,LST(ILST)=ELEMENT
  1. ..I APP="GMPX",+$G(VIAINSYN) D SYNONYMS(.LST,.ILST,"SCT",$P(LST(ILST),U,4),VIADATE)
  1. I '$D(LST(1)) S LST(1)="-1^No matches found.^"_APP
  1. Q
  1. LEXXFRM(VIAX,VIADATE,VIAAPP) ; Transform text for SCT look-up
  1. N VIALEX,VIAY,VIAICD,VIASCT,VIATXT,VIACSYS,VIACCODE,VIADCODE
  1. S VIALEX=$P(VIAX,U),VIATXT=$P(VIAX,U,2),(VIACCODE,VIACSYS)=""
  1. I (VIATXT["("),(VIATXT[")") D
  1. . S VIACSYS=$RE($P($P($RE(VIATXT),"("),")",2))
  1. . S VIACCODE=$RE($P($RE(VIACSYS)," ")),VIACSYS=$RE($P($RE(VIACSYS)," ",2,99))
  1. . S VIATXT=$$TRIM^XLFSTR($RE($P($RE(VIATXT),"(",2,99)))
  1. S VIAY=$$SETELEM(VIALEX,VIATXT,VIACSYS,VIACCODE,VIADATE)
  1. Q VIAY
  1. SYNONYMS(LST,ILST,VIACSYS,VIACCODE,VIADT) ; Get synonyms fVIA expression
  1. N VIASYN,VIAI,VIADAD S VIADT=$G(VIADT,DT),VIADAD=ILST
  1. D GETSYN^LEXTRAN1(VIACSYS,VIACCODE,VIADT,"VIASYN",1)
  1. S VIAI=0 F S VIAI=$O(VIASYN("S",VIAI)) Q:+VIAI'>0 D
  1. . N ELEMENT,TXT,IEN,VIADCODE
  1. . S IEN=$P(VIASYN("S",VIAI),U,2),TXT=$P(VIASYN("S",VIAI),U)
  1. . S ELEMENT=$$SETELEM(IEN,TXT,"SNOMED CT",VIACCODE,VIADT)_U_VIADAD
  1. . S ILST=ILST+1,LST(ILST)=ELEMENT
  1. Q
  1. SETELEM(VIALEX,VIATXT,VIACSYS,VIACCODE,VIADATE) ; Set List Element
  1. ;LEXIEN^PREFTEXT^CODESYS^CONCEPTID^ICDVER^ICDCODE^DESIGID^PARENTSUBSCRIPT
  1. N VIAY,VIADCODE,VIAIMPDT,VIAICD
  1. S VIAIMPDT=$$IMPDATE^LEXU("10D")
  1. S VIAY=VIALEX_U_VIATXT_U_VIACSYS_U_VIACCODE
  1. I $S(VIACSYS["SNOMED":1,VIACSYS["VHAT":1,1:0) D
  1. .S VIAY=VIAY_U_$S(VIADATE<VIAIMPDT:"ICD-9-CM",1:""),VIAICD=""
  1. .S:VIADATE<VIAIMPDT VIAICD=$$GETDX(VIACCODE,VIACSYS,VIADATE)
  1. .S VIADCODE=$$GETDES^LEXTRAN1("SCT",VIATXT,VIADATE)
  1. .S VIADCODE=$S(+VIADCODE=1:$P(VIADCODE,U,2),1:"")
  1. .S VIAY=VIAY_U_VIAICD_U_VIADCODE
  1. E S VIAY=VIAY_U_U
  1. Q VIAY
  1. GETDX(CODE,SYS,VIAIDT) ; Get ICD associated with SNOMED CT VIA VHAT Code
  1. N LEX,VIAI,VIAY,VIAUH,IMPLDT,VIASYSPR
  1. S VIAIDT=$G(VIAIDT,DT)
  1. S VIAY=0,IMPLDT=$$IMPDATE^LEXU("10D")
  1. S VIAUH=$S(VIAIDT<IMPLDT:"799.9",1:"R69.")
  1. S VIASYSPR=$S(VIAIDT<IMPLDT:1,1:30)
  1. I SYS["VHAT" D I 1
  1. . I VIAIDT<IMPLDT S VIAY=$$GETASSN^LEXTRAN1(CODE,"VHAT2ICD") I 1
  1. . E S VIAY=0
  1. E D
  1. . I VIAIDT<IMPLDT S VIAY=$$GETASSN^LEXTRAN1(CODE,"SCT2ICD") I 1
  1. . E S VIAY=0
  1. I $S(+VIAY'>0:1,+$P(VIAY,U,2)'>0:1,+LEX'>0:1,1:0) S VIAY=VIAUH G GETDXX
  1. S VIAI=0,VIAY=""
  1. F S VIAI=$O(LEX(VIAI)) Q:+VIAI'>0 D
  1. . N ICD
  1. . S ICD=$O(LEX(VIAI,""))
  1. . S:'+$$STATCHK^ICDXCODE(VIASYSPR,ICD,VIAIDT) ICD=""
  1. . I ICD]"" S VIAY=$S(VIAY'="":VIAY_"/",1:"")_ICD
  1. I (VIAY]""),(VIAY'[".") S VIAY=VIAY_"."
  1. GETDXX Q VIAY