routines for testing SNOMED code retrieval
This commit is contained in:
parent
18aabb439d
commit
4da5eec12c
|
@ -0,0 +1,171 @@
|
|||
GPLSNOA ; CCDCCR/GPL - SNOMED CT ANALYSIS ROUTINES; 10/14/08
|
||||
;;0.1;CCDCCR;nopatch;noreleasedate
|
||||
;Copyright 2008 WorldVistA. Licensed under the terms of the GNU
|
||||
;General Public License See attached copy of the License.
|
||||
;
|
||||
;This program is free software; you can redistribute it and/or modify
|
||||
;it under the terms of the GNU General Public License as published by
|
||||
;the Free Software Foundation; either version 2 of the License, or
|
||||
;(at your option) any later version.
|
||||
;
|
||||
;This program is distributed in the hope that it will be useful,
|
||||
;but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;GNU General Public License for more details.
|
||||
;
|
||||
;You should have received a copy of the GNU General Public License along
|
||||
;with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
;
|
||||
; THESE ROUTINES ANALYZE THE POTENTIAL RETRIEVAL OF SNOMED CT CODES
|
||||
; FOR PATIENT DRUG ALLERGIES FOR INCLUSION IN THE CCR OR CCD
|
||||
; USING THE VISTA LEXICON ^LEX
|
||||
;
|
||||
ANALYZE(BEGIEN,IENCNT) ; SNOMED RETRIEVAL ANALYSIS ROUTINE
|
||||
; BEGINS AT BEGIEN AND GOES FOR IENCNT DRUGS IN GMRD
|
||||
; TO RESUME AT NEXT DRUG, USE BEGIEN=""
|
||||
; USE RESET^GPLSNOA TO RESET TO TOP OF DRUG LIST
|
||||
;
|
||||
N SNOARY,SNOTMP,SNOI,SNOIEN,RATTR
|
||||
N CCRGLO
|
||||
D ASETUP ; SET UP VARIABLES AND GLOBALS
|
||||
D AINIT ; INITIALIZE ATTRIBUTE VALUE TABLE
|
||||
I '$D(@SNOBASE@("RESUME")) S @SNOBASE@("RESUME")=$O(@GMRBASE@(1)) ;1ST TME
|
||||
S RESUME=@SNOBASE@("RESUME") ; WHERE WE LEFT OFF LAST RUN
|
||||
S SNOIEN=BEGIEN ; BEGIN WITH THE BEGIEN RECORD
|
||||
I SNOIEN="" S SNOIEN=RESUME
|
||||
I +SNOIEN=0 D Q ; AT THE END OF THE ALLERGY LIST
|
||||
. W "END OF DRUG LIST, CALL RESET^GPLSNOA",!
|
||||
F SNOI=1:1:IENCNT D Q:+SNOIEN=0 ; FOR IENCNT NUMBER OF PATIENTS OR END
|
||||
. ;D CCRRPC^GPLCCR(.CCRGLO,SNOIEN,"CCR","","","") ;PROCESS THE CCR
|
||||
. W SNOIEN,@GMRBASE@(SNOIEN,0),!
|
||||
. N SNORTN ; RETURN ARRAY
|
||||
. D TEXTRPC(.SNORTN,$P(@GMRBASE@(SNOIEN,0),"^",1))
|
||||
. W SNORTN(1),!
|
||||
. K @SNOBASE@("VARS",SNOIEN) ; CLEAR OUT OLD VARS
|
||||
. ;
|
||||
. ; EVALUATE THE VARIABLES AND CREATE AN ATTRIBUTE MAP
|
||||
. ;
|
||||
. S RATTR=$$SETATTR(SNOIEN) ; SET THE ATTRIBUTE STRING BASED ON THE VARS
|
||||
. S @SNOBASE@("ATTR",SNOIEN)=RATTR ; SAVE THE ATRIBUTES FOR THIS DRUG
|
||||
. ;
|
||||
. N CATNAME,CATTBL
|
||||
. S CATNAME=""
|
||||
. D CPUSH(.CATNAME,SNOBASE,"SNOTBL",SNOIEN,RATTR) ; ADD TO CATEGORY
|
||||
. ; W "CATEGORY NAME: ",CATNAME,!
|
||||
. ;
|
||||
. S SNOIEN=$O(@GMRBASE@(SNOIEN)) ; NEXT RECORD
|
||||
. S @SNOBASE@("RESUME")=SNOIEN ; WHERE WE ARE LEAVING OFF THIS RUN
|
||||
; D PARY^GPLXPATH(@SNOBASE@("ATTRTBL"))
|
||||
Q
|
||||
;
|
||||
TEXTRPC(ORTN,ITEXT) ; CALL THE LEXICON WITH ITEXT AND RETURN RESULTS IN ORTN
|
||||
;
|
||||
W ITEXT,!
|
||||
W $$TEXT^LEXTRAN(ITEXT,"","","SCT",.ORTN)
|
||||
Q
|
||||
;
|
||||
ASETUP ; SET UP GLOBALS AND VARS SNOBASE AND SNOTBL
|
||||
I '$D(SNOBASE) S SNOBASE=$NA(^TMP("GPLSNO"))
|
||||
I '$D(@SNOBASE) S @SNOBASE=""
|
||||
I '$D(GMRBASE) S GMRBASE=$NA(^GMRD(120.82))
|
||||
I '$D(SNOTBL) S SNOTBL=$NA(^TMP("GPLSNO","SNOTBL","TABLE")) ; ATTR TABLE
|
||||
S ^TMP("GPLSNO","TABLES","SNOTBL")=SNOTBL ; TABLE OF TABLES
|
||||
Q
|
||||
;
|
||||
AINIT ; INITIALIZE ATTRIBUTE TABLE
|
||||
I '$D(SNOBASE) D ASETUP ; FOR COMMAND LINE CALLS
|
||||
K @SNOTBL
|
||||
D APUSH^GPLRIMA(SNOTBL,"CODE")
|
||||
D APUSH^GPLRIMA(SNOTBL,"NOCODE")
|
||||
D APUSH^GPLRIMA(SNOTBL,"MULTICODE")
|
||||
D APUSH^GPLRIMA(SNOTBL,"SUBMULTI")
|
||||
D APUSH^GPLRIMA(SNOTBL,"DONE")
|
||||
Q
|
||||
APOST(PRSLT,PTBL,PVAL) ; POST AN ATTRIBUTE PVAL TO PRSLT USING PTBL
|
||||
; PSRLT AND PTBL ARE PASSED BY NAME. PVAL IS A STRING
|
||||
; PTBL IS THE NAME OF A TABLE IN @SNOBASE@("TABLES") - "SNOTBL"=ALL VALUES
|
||||
; PVAL WILL BE PLACED IN THE STRING PRSLT AT $P(X,U,@PTBL@(PVAL))
|
||||
I '$D(SNOBASE) D ASETUP ; FOR COMMANDLINE PROCESSING
|
||||
N USETBL
|
||||
I '$D(@SNOBASE@("TABLES",PTBL)) D Q ; NO TABLE
|
||||
. W "ERROR NO SUCH TABLE",!
|
||||
S USETBL=@SNOBASE@("TABLES",PTBL)
|
||||
S $P(@PRSLT,U,@USETBL@(PVAL))=PVAL
|
||||
Q
|
||||
SETATTR(SDFN) ; SET ATTRIBUTES BASED ON VARS
|
||||
N SBASE,SATTR
|
||||
S SBASE=$NA(@SNOBASE@("VARS",SDFN))
|
||||
D APOST("SATTR","SNOTBL","DONE")
|
||||
Q SATTR ; GPL
|
||||
I $D(@SBASE@("PROBLEMS",1)) D ;
|
||||
. D APOST("SATTR","SNOTBL","PROBLEMS")
|
||||
. ; W "POSTING PROBLEMS",!
|
||||
I $D(@SBASE@("VITALS",1)) D APOST("SATTR","SNOTBL","VITALS")
|
||||
I $D(@SBASE@("MEDS",1)) D ; IF THE PATIENT HAS MEDS VARIABLES
|
||||
. D APOST("SATTR","SNOTBL","MEDS")
|
||||
. N ZR,ZI
|
||||
. D GETPA^GPLRIMA(.ZR,SDFN,"MEDS","MEDPRODUCTNAMECODEVALUE") ;CHECK FOR MED CODES
|
||||
. I ZR(0)>0 D ; VAR LOOKUP WAS GOOD, CHECK FOR NON=NULL RETURN
|
||||
. . F ZI=1:1:ZR(0) D ; LOOP THROUGH RETURNED VAR^VALUE PAIRS
|
||||
. . . I $P(ZR(ZI),"^",2)'="" D APOST("SATTR","SNOTBL","MEDSCODE") ;CODES
|
||||
. ; D PATD^GPLSNOA(2,"MEDS","MEDPRODUCTNAMECODEVALUE") CHECK FOR MED CODES
|
||||
D APOST("SATTR","SNOTBL","NOTEXTRACTED") ; OUTPUT NOT YET PRODUCED
|
||||
; W "ATTRIBUTES: ",SATTR,!
|
||||
Q SATTR
|
||||
;
|
||||
RESET ; KILL RESUME INDICATOR TO START OVER. ALSO KILL SNO TMP VALUES
|
||||
K ^TMP("GPLSNO","RESUME")
|
||||
K ^TMP("GPLSNO")
|
||||
Q
|
||||
;
|
||||
CLIST ; LIST THE CATEGORIES
|
||||
;
|
||||
I '$D(SNOBASE) D ASETUP ; FOR COMMAND LINE CALLS
|
||||
N CLBASE,CLNUM,ZI,CLIDX
|
||||
S CLBASE=$NA(@SNOBASE@("SNOTBL","CATS"))
|
||||
S CLNUM=@CLBASE@(0)
|
||||
F ZI=1:1:CLNUM D ; LOOP THROUGH THE CATEGORIES
|
||||
. S CLIDX=@CLBASE@(ZI)
|
||||
. W "(",$P(@CLBASE@(CLIDX),"^",1)
|
||||
. W ":",$P(@CLBASE@(CLIDX),"^",2),") "
|
||||
. W CLIDX,!
|
||||
; D PARY^GPLXPATH(CLBASE)
|
||||
Q
|
||||
;
|
||||
CPUSH(CATRTN,CBASE,CTBL,CDFN,CATTR) ; ADD PATIENTS TO CATEGORIES
|
||||
; AND PASS BACK THE NAME OF THE CATEGORY TO WHICH THE PATIENT
|
||||
; WAS ADDED IN CATRTN, WHICH IS PASSED BY REFERENCE
|
||||
; CBASE IS WHERE TO PUT THE CATEGORIES PASSED BY NAME
|
||||
; CTBL IS THE NAME OF THE TABLE USED TO CREATE THE ATTRIBUTES,
|
||||
; PASSED BY NAME AND USED TO CREATE CATEGORY NAMES IE "@CTBL_X"
|
||||
; WHERE X IS THE CATEGORY NUMBER. CTBL(0) IS THE NUMBER OF CATEGORIES
|
||||
; CATBL(X)=CATTR STORES THE ATTRIBUTE IN THE CATEGORY
|
||||
; CDFN IS THE PATIENT DFN, CATTR IS THE ATTRIBUTE STRING
|
||||
; THE LIST OF PATIENTS IN A CATEGORY IS STORED INDEXED BY CATEGORY
|
||||
; NUMBER IE CTBL_X(CDFN)=""
|
||||
;
|
||||
; N CCTBL,CENTRY,CNUM,CCOUNT,CPATLIST
|
||||
S CCTBL=$NA(@CBASE@(CTBL,"CATS"))
|
||||
; W "CBASE: ",CCTBL,!
|
||||
;
|
||||
I '$D(@CCTBL@(CATTR)) D ; FIRST PATIENT IN THIS CATEGORY
|
||||
. D PUSH^GPLXPATH(CCTBL,CATTR) ; ADD THE CATEGORY TO THE ARRAY
|
||||
. S CNUM=@CCTBL@(0) ; ARRAY ENTRY NUMBER FOR THIS CATEGORY
|
||||
. S CENTRY=CTBL_"_"_CNUM_U_0 ; TABLE ENTRY DEFAULT
|
||||
. S @CCTBL@(CATTR)=CENTRY ; DEFAULT NON INCREMENTED TABLE ENTRY
|
||||
. ; NOTE THAT P1 IS THE CATEGORY NAME MADE UP OF THE TABLE NAME
|
||||
. ; AND CATGORY ARRAY NUMBER. P2 IS THE COUNT WHICH IS INITIALLY 0
|
||||
;
|
||||
S CCOUNT=$P(@CCTBL@(CATTR),U,2) ; COUNT OF PATIENTS IN THIS CATEGORY
|
||||
S CCOUNT=CCOUNT+1 ; INCREMENT THE COUNT
|
||||
S $P(@CCTBL@(CATTR),U,2)=CCOUNT ; PUT IT BACK
|
||||
;
|
||||
S CATRTN=$P(@CCTBL@(CATTR),U,1) ; THE CATEGORY NAME WHICH IS RETURNED
|
||||
;
|
||||
S CPATLIST=$NA(@CBASE@(CTBL,"IENS",CATRTN)) ; BASE OF PAT LIST FOR THIS CAT
|
||||
; W "IENS BASE: ",CPATLIST,!
|
||||
S @CPATLIST@(CDFN)="" ; ADD THIS PATIENT TO THE CAT PAT LIST
|
||||
;
|
||||
Q
|
||||
;
|
Loading…
Reference in New Issue