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

BKMIXX.m

Go to the documentation of this file.
  1. BKMIXX ;PRXM/HC/CLT - TAXONOMY ACCESS UTILITIES ; 11 Mar 2005 12:26 PM
  1. ;;2.2;HIV MANAGEMENT SYSTEM;**2**;Apr 01, 2015;Build 3
  1. ; Generic Taxonomy Utilities
  1. ; Checks V-Files for patients that meet a Taxonomy's criteria, within
  1. ; a specific date range.
  1. ;
  1. ;**************NOTE***********************
  1. ; Input for all entry points are the same
  1. ;*****************************************
  1. ;
  1. ; Input:
  1. ; DFN = IEN from Patient file (#90000001)
  1. ; (required)
  1. ; TAX = Name of Taxonomy (From Lab Taxonomy ^ATXLAB or ICD Taxonomy ^ATXAX)
  1. ; (required)
  1. ; EDATE = End date of the report. The default is "Today"
  1. ; (optional)
  1. ; SDATE = Start date of the report.
  1. ; (optional)
  1. ; TARGET = Target root (global or local) for collection of data
  1. ; (optional)
  1. ; Example: ^TMP("RTN NAME",$J,"DESC",DFN,VSTDT,VISIT) or TEMP(VSTDT,VISIT)
  1. ; Output:
  1. ; LDATE = Last date found in the selected date range
  1. ; (optional - pass by reference)
  1. ; LIEN = Last IEN found in the selected date range
  1. ; (optional - pass by reference)
  1. ; CNT = Count of number of records found in selected date range
  1. ; (optional - pass by reference)
  1. ;
  1. Q
  1. LABTAX(DFN,TAX,EDATE,SDATE,TARGET,LDATE,LIEN,CNT) ; PEP
  1. ; Lab Taxonomy Check
  1. ;
  1. N TXIEN,TEST,VISIT,VSTDT,RESULT,LAB,COLDTM
  1. I DFN="" Q
  1. I TAX="" Q
  1. S TXIEN=$O(^ATXLAB("B",TAX,""))
  1. I TXIEN="" Q
  1. S TEST="",CNT=0,LDATE=$G(LDATE,""),LIEN=$G(LIEN,"")
  1. F S TEST=$O(^AUPNVLAB("AC",DFN,TEST),-1) Q:TEST="" D
  1. .S LAB=$$GET1^DIQ(9000010.09,TEST,.01,"I")
  1. .I LAB="" Q
  1. .I '$D(^ATXLAB(TXIEN,21,"B",LAB)) Q
  1. .S VISIT=$$GET1^DIQ(9000010.09,TEST,.03,"I") I VISIT="" Q
  1. .S VSTDT=$$GET1^DIQ(9000010,VISIT_",",.01,"I") I VSTDT="" Q
  1. .I $$GET1^DIQ(9000010,VISIT_",",.11,"I")=1 Q
  1. .; Get collection date/time
  1. .S COLDTM=$P($G(^AUPNVLAB(TEST,12)),U,1)\1
  1. .;S COLDTM=$$GET1^DIQ(9000010.09,TEST,1201,"I")\1
  1. .I COLDTM'=0 S VSTDT=COLDTM
  1. .I $G(SDATE)'="",(VSTDT<SDATE) Q
  1. .I $G(EDATE)'="",(VSTDT\1>EDATE) Q
  1. .I VSTDT>LDATE S LDATE=VSTDT,LIEN=TEST
  1. .I VSTDT=LDATE,TEST>LIEN S LDATE=VSTDT,LIEN=TEST
  1. .S RESULT=$$GET1^DIQ(9000010.09,TEST,.04,"I")
  1. .S CNT=CNT+1
  1. .I $G(TARGET)]"" S @TARGET=RESULT
  1. Q
  1. ;
  1. CPTTAX(DFN,TAX,EDATE,SDATE,TARGET,LDATE,LIEN,CNT) ; PEP
  1. ; CPT Taxonomy Check
  1. ;
  1. NEW I,TEST,PRM,CNTR,ARRAY
  1. I DFN="" Q
  1. I $TR(TAX,$C(29))="" Q
  1. ;
  1. S CNT=0,LDATE=$G(LDATE,""),LIEN=$G(LIEN,"")
  1. ;Parse out input parameters into array
  1. F I=1:1:$L(TAX,$C(29)) D
  1. .N TX,TXN,EDT,SDT,TGT,LDT,LIN
  1. .S TX=$P(TAX,$C(29),I) Q:TX=""
  1. .S TXN=$O(^ATXAX("B",TX,"")) Q:TXN=""
  1. .S EDT=$P(EDATE,$C(29),I)
  1. .S SDT=$P(SDATE,$C(29),I)
  1. .;S TGT=$P(TARGET,$C(29),I) Q:TGT=""
  1. .S TGT=$P(TARGET,$C(29),I)
  1. .S LDT=$P(LDATE,$C(29),I)
  1. .S LIN=$P(LIEN,$C(29),I)
  1. .S PRM(TX_$C(29)_TXN_$C(29)_SDT_$C(29)_EDT_$C(29)_TGT_$C(29)_LDT_$C(29)_LIN)=I
  1. ;
  1. S TEST="",CNT=0
  1. F S TEST=$O(^AUPNVCPT("AC",DFN,TEST)) Q:TEST="" D
  1. .;S CPT=$$GET1^DIQ(9000010.18,TEST,.01,"I") I CPT="" Q
  1. .S CPT=$P($G(^AUPNVCPT(TEST,0)),"^",1) I CPT="" Q
  1. .;
  1. .S TXN="" F S TXN=$O(PRM(TXN)) Q:TXN="" D
  1. ..;N TAX,EDATE,SDATE,TARGET,LDATE,LIEN,TXIEN,VISIT,VSTDT,RESULT,CT,EXIST
  1. ..;N TAX,EDATE,SDATE,TARGET,LIEN,TXIEN,VISIT,VSTDT,RESULT,CT,EXIST
  1. ..N TAX,EDATE,SDATE,TARGET,TXIEN,VISIT,VSTDT,RESULT,CT,EXIST
  1. ..S TAX=$P(TXN,$C(29))
  1. ..S TXIEN=$P(TXN,$C(29),2)
  1. ..S SDATE=$P(TXN,$C(29),3)
  1. ..S EDATE=$P(TXN,$C(29),4)
  1. ..S TARGET=$P(TXN,$C(29),5)
  1. ..S LDATE=$P(TXN,$C(29),6)
  1. ..S LIEN=$P(TXN,$C(29),7)
  1. ..S CT=$G(PRM(TXN))
  1. ..;
  1. ..I $$PATCH^XPDUTL("ATX*5.1*11") S EXIST=$$ICD^ATXAPI(CPT,TXIEN,1)
  1. ..E S EXIST=$$ICD^BKMIXX5(CPT,TXIEN,1)
  1. ..I EXIST=0 Q
  1. ..S VISIT=$P($G(^AUPNVCPT(TEST,0)),"^",3) I VISIT="" Q
  1. ..;S VISIT=$$GET1^DIQ(9000010.18,TEST,.03,"I") I VISIT="" Q
  1. ..;S VSTDT=$$GET1^DIQ(9000010,VISIT_",",.01,"I")\1 I VSTDT="" Q
  1. ..S VSTDT=$P($G(^AUPNVSIT(VISIT,0)),"^",1) I VSTDT="" Q
  1. ..S VSTDT=VSTDT\1
  1. ..I $$GET1^DIQ(9000010,VISIT_",",.11,"I")=1 Q
  1. ..I $G(SDATE)'="",(VSTDT\1<SDATE) Q
  1. ..I $G(EDATE)'="",(VSTDT\1>EDATE) Q
  1. ..I VSTDT>LDATE S LDATE=VSTDT\1,LIEN=TEST
  1. ..I VSTDT=LDATE,TEST>LIEN S LDATE=VSTDT,LIEN=TEST
  1. ..;S RESULT=$$GET1^DIQ(9000010.18,TEST,.04,"E")
  1. ..S RESULT=$P(^AUPNVCPT(TEST,0),"^",4),ARRAY(VSTDT,TEST)=RESULT
  1. ..;S RESULT=$S($P(N0,U,4)]"":$P($G(^AUTNPOV($P(N0,U,4),0)),U),1:"")
  1. ..S CNTR(CT)=$G(CNTR(CT))+1
  1. ..I $G(TARGET)]"" S @TARGET=RESULT
  1. ;
  1. ;Handle Single/Multiple Counts
  1. I $L(TAX,$C(29))=1 S CNT=$G(CNTR(1))
  1. E M CNT=CNTR
  1. I $G(LDATE)="" D
  1. .S LDATE=$O(ARRAY(""),-1) I LDATE="" Q
  1. .S LIEN=$O(ARRAY(LDATE,""),-1)
  1. .I $G(TARGET)="" Q
  1. .S VSTDT=LDATE,TEST=LIEN
  1. .I VSTDT["." K @TARGET S VSTDT=VSTDT\1,@TARGET="",LDATE=VSTDT
  1. Q
  1. ;
  1. LOINC(DFN,TAX,EDATE,SDATE,TARGET,LDATE,LIEN,CNT) ; PEP
  1. ; LOINC Taxonomy Check
  1. ;
  1. N TXIEN,TEST,VISIT,VSTDT,RESULT,LOINC
  1. I DFN="" Q
  1. I TAX="" Q
  1. S TXIEN=$O(^ATXAX("B",TAX,""))
  1. I TXIEN="" Q
  1. S TEST="",CNT=0,LDATE=$G(LDATE,""),LIEN=$G(LIEN,"")
  1. F S TEST=$O(^AUPNVLAB("AC",DFN,TEST)) Q:TEST="" D
  1. .S LOINC=$$GET1^DIQ(9000010.09,TEST,1113,"E")
  1. .I LOINC="" Q
  1. .I '$D(^ATXAX(TXIEN,21,"B",LOINC)) Q
  1. .S VISIT=$$GET1^DIQ(9000010.09,TEST,.03,"I") I VISIT="" Q
  1. .S VSTDT=$$GET1^DIQ(9000010,VISIT_",",.01,"I") I VSTDT="" Q
  1. .I $$GET1^DIQ(9000010,VISIT_",",.11,"I")=1 Q
  1. .; Get collection date/time
  1. .S COLDTM=$P($G(^AUPNVLAB(TEST,12)),U,1)\1
  1. .;S COLDTM=$$GET1^DIQ(9000010.09,TEST,1201,"I")\1
  1. .I COLDTM'=0 S VSTDT=COLDTM
  1. .I $G(SDATE)'="",(VSTDT<SDATE) Q
  1. .I $G(EDATE)'="",(VSTDT\1>EDATE) Q
  1. .I VSTDT>LDATE S LDATE=VSTDT,LIEN=TEST
  1. .I VSTDT=LDATE,TEST>LIEN S LDATE=VSTDT,LIEN=TEST
  1. .S RESULT=$$GET1^DIQ(9000010.09,TEST,.04,"I")
  1. .S CNT=CNT+1
  1. .I $G(TARGET)]"" S @TARGET=RESULT
  1. Q
  1. ;
  1. HFTAX(DFN,TAX,EDATE,SDATE,TARGET,LDATE,LIEN,CNT) ; PEP
  1. ; Health Factors Taxonomy Check (includes health factor)
  1. ;
  1. N TXIEN,TEST,VISIT,VSTDT,RESULT,HF,CODE
  1. I DFN="" Q
  1. I TAX="" Q
  1. S TXIEN=$O(^ATXAX("B",TAX,""))
  1. I TXIEN="" Q
  1. S TEST="",CNT=0,LDATE=$G(LDATE,""),LIEN=$G(LIEN,"")
  1. F S TEST=$O(^AUPNVHF("AC",DFN,TEST)) Q:TEST="" D
  1. .S HF=$$GET1^DIQ(9000010.23,TEST,.01,"E")
  1. .I HF="" Q
  1. .I '$D(^ATXAX(TXIEN,21,"B",HF)) Q
  1. .S VISIT=$$GET1^DIQ(9000010.23,TEST,.03,"I") I VISIT="" Q
  1. .S VSTDT=$$GET1^DIQ(9000010,VISIT_",",.01,"I") I VSTDT="" Q
  1. .I $$GET1^DIQ(9000010,VISIT_",",.11,"I")=1 Q
  1. .I $G(SDATE)'="",(VSTDT<SDATE) Q
  1. .I $G(EDATE)'="",(VSTDT\1>EDATE) Q
  1. .I VSTDT>LDATE S LDATE=VSTDT,LIEN=TEST
  1. .I VSTDT=LDATE,TEST>LIEN S LDATE=VSTDT,LIEN=TEST
  1. .S RESULT=$$GET1^DIQ(9000010.23,TEST,.04,"E")
  1. .S CODE=$$GET1^DIQ(9000010.23,TEST,.01,"E")
  1. .S CNT=CNT+1
  1. .I $G(TARGET)]"" S @TARGET=RESULT_U_CODE
  1. Q
  1. ;
  1. PRBTAX(DFN,TAX,EDATE,SDATE,TARGET,LDATE,LIEN,CNT) ; PEP
  1. ; ICD Taxonomy Check (using PROBLEM file)
  1. ;
  1. N TXIEN,TEST,VISIT,VSTDT,RESULT,PROB,EXIST
  1. I DFN="" Q
  1. I TAX="" Q
  1. S TXIEN=$O(^ATXAX("B",TAX,""))
  1. I TXIEN="" Q
  1. S TEST="",CNT=0,LDATE=$G(LDATE,""),LIEN=$G(LIEN,"")
  1. F S TEST=$O(^AUPNPROB("AC",DFN,TEST)) Q:TEST="" D
  1. .S PROB=$$GET1^DIQ(9000011,TEST,.01,"I")
  1. .I PROB="" Q
  1. .I $$PATCH^XPDUTL("ATX*5.1*11") S EXIST=$$ICD^ATXAPI(PROB,TXIEN,9)
  1. .E S EXIST=$$ICD^BKMIXX5(PROB,TXIEN,9)
  1. .I EXIST=0 Q
  1. .; Not related to Visit File (#9000010)
  1. .S VISIT="N/A"
  1. .; Problem does not connect to a visit so VSTDT is calculated differently.
  1. .S VSTDT=$$PROB^BKMVUTL(TEST)
  1. .I $G(SDATE)'="",(VSTDT<SDATE) Q
  1. .I $G(EDATE)'="",(VSTDT\1>EDATE) Q
  1. .I VSTDT>LDATE S LDATE=VSTDT,LIEN=TEST
  1. .I VSTDT=LDATE,TEST>LIEN S LDATE=VSTDT,LIEN=TEST
  1. .S RESULT=$$GET1^DIQ(9000011,TEST,.05,"E")
  1. .S CNT=CNT+1
  1. .I $G(TARGET)]"" S @TARGET=RESULT
  1. Q
  1. ;
  1. MEDTAX(DFN,TAX,EDATE,SDATE,TARGET,LDATE,LIEN,CNT) ; PEP
  1. ; Medication Taxonomy Check (using Medication IEN)
  1. ;
  1. N TXIEN,TEST,VISIT,VSTDT,RESULT,DRGPTR,SIG,QTY,DAY
  1. I DFN="" Q
  1. I TAX="" Q
  1. S TXIEN=$O(^ATXAX("B",TAX,""))
  1. I TXIEN="" Q
  1. S TEST="",CNT=0,LDATE=$G(LDATE,""),LIEN=$G(LIEN,"")
  1. F S TEST=$O(^AUPNVMED("AC",DFN,TEST)) Q:TEST="" D
  1. .S DRGPTR=$$GET1^DIQ(9000010.14,TEST,.01,"I")
  1. .I DRGPTR="" Q
  1. .I '$D(^ATXAX(TXIEN,21,"B",DRGPTR)) Q
  1. .S VISIT=$$GET1^DIQ(9000010.14,TEST,.03,"I") I VISIT="" Q
  1. .S VSTDT=$$GET1^DIQ(9000010,VISIT_",",.01,"I") I VSTDT="" Q
  1. .I $$GET1^DIQ(9000010,VISIT_",",.11,"I")=1 Q
  1. .I $G(SDATE)'="",(VSTDT<SDATE) Q
  1. .I $G(EDATE)'="",(VSTDT\1>EDATE) Q
  1. .I VSTDT>LDATE S LDATE=VSTDT,LIEN=TEST
  1. .I VSTDT=LDATE,TEST>LIEN S LDATE=VSTDT,LIEN=TEST
  1. .S SIG=$$GET1^DIQ(9000010.14,TEST,.05,"E")
  1. .S QTY=$$GET1^DIQ(9000010.14,TEST,.06,"E")
  1. .S DAY=$$GET1^DIQ(9000010.14,TEST,.07,"E")
  1. .S RESULT=$$GET1^DIQ(9000010.14,TEST,.01,"E")
  1. .S CNT=CNT+1
  1. .I $G(TARGET)]"" S @TARGET=RESULT_U_SIG_U_QTY_U_DAY
  1. Q
  1. ;
  1. ADATAX(DFN,TAX,EDATE,SDATE,TARGET,LDATE,LIEN,CNT) ; PEP
  1. ; ADA Code Taxonomy Check (using ADA Code)
  1. ;
  1. N TXIEN,TEST,VISIT,VSTDT,RESULT,ADA
  1. I DFN="" Q
  1. I TAX="" Q
  1. S TXIEN=$O(^ATXAX("B",TAX,""))
  1. I TXIEN="" Q
  1. S TEST="",CNT=0,LDATE=$G(LDATE,""),LIEN=$G(LIEN,"")
  1. F S TEST=$O(^AUPNVDEN("AC",DFN,TEST)) Q:TEST="" D
  1. .S ADA=$$GET1^DIQ(9000010.05,TEST,.01,"E")
  1. .I ADA="" Q
  1. .I '$D(^ATXAX(TXIEN,21,"B",ADA)) Q
  1. .S VISIT=$$GET1^DIQ(9000010.05,TEST,.03,"I") I VISIT="" Q
  1. .S VSTDT=$$GET1^DIQ(9000010,VISIT_",",.01,"I") I VSTDT="" Q
  1. .I $$GET1^DIQ(9000010,VISIT_",",.11,"I")=1 Q
  1. .I $G(SDATE)'="",(VSTDT<SDATE) Q
  1. .I $G(EDATE)'="",(VSTDT\1>EDATE) Q
  1. .I VSTDT>LDATE S LDATE=VSTDT,LIEN=TEST
  1. .I VSTDT=LDATE,TEST>LIEN S LDATE=VSTDT,LIEN=TEST
  1. .;Nothing identified in file as a 'RESULT'. Using "N/A" for now for consistency with other functions.
  1. .;S RESULT=$$GET1^DIQ(9000010.05,TEST,.04,"I")
  1. .S RESULT="N/A"
  1. .S CNT=CNT+1
  1. .I $G(TARGET)]"" S @TARGET=RESULT
  1. Q
  1. ;
  1. ; For this entry point only:
  1. ;
  1. ; Input:
  1. ; TAX = PATIENT EDUCATION TOPIC CODE LIST to search for
  1. ; (required)
  1. ;
  1. ; Example: "CD-,-CD,AOD-,-AOD"
  1. ; Example: "*BGP HIV/AIDS DXS"
  1. ;
  1. ; Returns items where the MNEMONIC field for the Patient
  1. ; Education entry contains one of the listed values.
  1. ;
  1. ; Second example shows an ICD taxonomy name.
  1. ; If used, will search for any Patient Education entry
  1. ; containing one of the values in that Taxonomy.
  1. ;
  1. ; The data in this file is too volatile to use Taxonomies for most entries.
  1. ; Variables are still named the same for consistency with other functions.
  1. ;
  1. PTEDTAX(DFN,TAX,EDATE,SDATE,TARGET,LDATE,LIEN,CNT,SVTX) ; PEP
  1. ; Patient Education Taxonomy check (by Education Code List) (includes topic)
  1. ; PTEDTAX^BKMIXX1 does this by Taxonomy
  1. ;
  1. N TXIEN,TEST,VISIT,VSTDT,RESULT,PTED,CODE
  1. I DFN="" Q
  1. I TAX="" Q
  1. ;Not really needed, but set to maintain same variable list as other functions.
  1. S TXIEN=TAX
  1. I TXIEN="" Q
  1. ;Build a list of Education Code Entries based on the code list supplied.
  1. I $D(SVTX(TAX)) M TXIEN=SVTX(TAX)
  1. E D BLDTAX1^BKMIXX5(TAX,"TXIEN") M SVTX(TAX)=TXIEN
  1. S TEST="",CNT=0,LDATE=$G(LDATE,""),LIEN=$G(LIEN,"")
  1. F S TEST=$O(^AUPNVPED("AC",DFN,TEST)) Q:TEST="" D
  1. .S PTED=$$GET1^DIQ(9000010.16,TEST,.01,"I")
  1. .I PTED="" Q
  1. .I '$D(TXIEN(PTED)) Q
  1. .S VISIT=$$GET1^DIQ(9000010.16,TEST,.03,"I") I VISIT="" Q
  1. .S VSTDT=$$GET1^DIQ(9000010,VISIT_",",.01,"I") I VISIT="" Q
  1. .I $$GET1^DIQ(9000010,VISIT_",",.11,"I")=1 Q
  1. .I $G(SDATE)'="",(VSTDT<SDATE) Q
  1. .I $G(EDATE)'="",(VSTDT\1>EDATE) Q
  1. .I VSTDT>LDATE S LDATE=VSTDT,LIEN=TEST
  1. .I VSTDT=LDATE,TEST>LIEN S LDATE=VSTDT,LIEN=TEST
  1. .S RESULT=$$GET1^DIQ(9000010.16,TEST,.04,"E")
  1. .S CODE=$$GET1^DIQ(9000010.16,TEST,.01,"E")
  1. .S CNT=CNT+1
  1. .I $G(TARGET)]"" S @TARGET=RESULT_U_CODE
  1. Q