HMPMDUTL ;DSS/BLJ,ASMR/RRB - FileMan JSON utilities for HMP;4 November 2015 @16:51:35
;;2.0;ENTERPRISE HEALTH MANAGEMENT PLATFORM;**;Sep 01, 2011;Build 63
;Per VA Directive 6402, this routine should not be modified.
;
;DE2818 SQA findings Newed HMPCNT, HMPFINI, HMPLAST, TERMCHLD, TERMUNIT, and TERMQUAL ASMR/RRB
;
Q
;
EN Q ; Only call via linetag.
TERM ; Retrieves list of terms
; NOTE: This tag will NOT support paged retrieves unless necessary.
; Do not expect them.
;
; DE2818 SQA findings HMPCNT, HMPFINI, HMPLAST
;
; Gets terminology.
N HMPFINI,TERMIENS,TERMCNT,X
D LIST^DIC("704.101",,,,,,,,"I $P(^(0),U,5)=1")
M TERMIENS=^TMP("DILIST",$J,2)
S TERMCNT=$P($G(^TMP("DILIST",$J,0)),U,1)
K ^TMP("DILIST",$J)
;
F X=0:0 S X=$O(TERMIENS(X)) Q:'X D
. N HMPCNT,HMPLAST,RESULT
. ; term
. D ONETERM($G(TERMIENS(X)),"RESULT")
. ;
. D ADD^HMPEF("RESULT")
. S HMPCNT=X,HMPLAST=X
I 'X S HMPFINI=1
Q
ONETERM(ID,TARGET) ; load one term
Q:+ID<1 ; Validate integer/id.
N $ES,$ET,ERRMSG
S ERRMSG=$$ERRMSG^HMPEF("CLiO Term",ID)
S $ET="D ERRHDLR^HMPDERRH"
N TERM,TRM,TERMTYPE
;
D GETS^DIQ("704.101",ID_",","*","IE","TERM")
N TRM S TRM=$NA(TERM(704.101,""_ID_","))
S @TARGET@("id")=$G(@TRM@(.01,"E"))
S @TARGET@("uid")="urn:va:clioterminology:"_$G(@TARGET@("id"))
S @TARGET@("term")=$$SANITIZE($G(@TRM@(.02,"E")))
S @TARGET@("abbreviation")=$$SANITIZE($G(@TRM@(.03,"E")))
S @TARGET@("displayName")=$$SANITIZE($G(@TRM@(.04,"E")))
; Get Term Type
S TERMTYPE=$$SANITIZE($G(@TRM@(.05,"I")))
D TERMTYPE(TERMTYPE,.TARGET)
;
S @TARGET@("dataType")=$$SANITIZE($G(@TRM@(.06,"I")))
S @TARGET@("valueType")=$$SANITIZE($G(@TRM@(.07,"I")))
S @TARGET@("active")=$$SANITIZE($G(@TRM@(.09,"E")))
S @TARGET@("description")=$$SANITIZE($G(@TRM@(.1,"E")))
S @TARGET@("helpText")=$$SANITIZE($G(@TRM@(.2,"E")))
S @TARGET@("booleanValueTrue")=$$SANITIZE($G(@TRM@(.31,"E")))
S @TARGET@("booleanValueFalse")=$$SANITIZE($G(@TRM@(.32,"E")))
S @TARGET@("multiSelectPicklist")=$$SANITIZE($G(@TRM@(.33,"E")))
S @TARGET@("VUID")="urn:va:vuid:"_$$SANITIZE($G(@TRM@(99.99,"E")))
; term -> child terms
;
; NOTE: As coded, the initial load is a function of DFN. But this load
; is a function of UID. May become normed either to UID or IFN.
;
D TERMCHLD($G(@TRM@(.01,"E")),.TARGET)
;
; term -> unit pair
D TERMUNIT($G(@TRM@(.01,"E")),.TARGET)
;
; term -> qualifier pair
;
D TERMQUAL($G(@TRM@(.01,"E")),.TARGET,ID)
;
; NOTE: As coded, term -> unit conversions are not retrieved.
; That will be part of future development.
;
K TERMTYPE,TRM
Q
;
TERMTYPE(ID,TARGET) ; Load term types.
;
; TARGET is passed by reference.
;
Q:+ID<1 ; Validate for direct IFN lookup.
N TERMTYPE
D GETS^DIQ("704.102",ID_",","*","E","TERMTYPE") ;ICR 5748 DE2818 ASF 11/25/15
N HMPNAME S HMPNAME=$T(TTFLDS+1)
;
N HMPEPLAC S HMPEPLAC("""")="\"""
S @TARGET@("termType",$P(HMPNAME,";",3))=ID
S @TARGET@("termType",$P(HMPNAME,";",4))=$$SANITIZE($$REPLACE^XLFSTR(TERMTYPE("704.102",ID_",",.01,"E"),.HMPEPLAC)) ;ICR 5748 DE2818 ASF 11/25/15
S @TARGET@("termType",$P(HMPNAME,";",5))=$$SANITIZE($$REPLACE^XLFSTR(TERMTYPE("704.102",ID_",",.02,"E"),.HMPEPLAC))
S @TARGET@("termType",$P(HMPNAME,";",6))=$$SANITIZE($$REPLACE^XLFSTR(TERMTYPE("704.102",ID_",",.03,"E"),.HMPEPLAC))
K TERMTYPE
Q
TERMCHLD(ID,TARGET) ;Loads child terms for a term
;
;DE2818 SQA findings Newed TERMCHLD
N MSGROOT,TERMCHLD
S MSGROOT="TERMCHLD("""_ID_""")"
D FIND^DIC("704.106",,".02E;.03I;.04I;.05E;.06E;.07E;.08E;.09E","M",ID,,,,,MSGROOT)
; Check to see if we actually have any children.
I +$P(TERMCHLD(ID,"DILIST",0),U,1)<1 K @MSGROOT Q
N X F X=0:0 S X=($O(TERMCHLD(ID,"DILIST","ID",X))) Q:'X D
. ; .01 is the Term ID
. S @TARGET@("termChild",X,"childOrder")=$$SANITIZE($G(TERMCHLD(ID,"DILIST","ID",X,.02)))
. ; .03 is the Child ID
. N CHILD S CHILD=$NA(@TARGET@("termChild",X,"childTerm"))
. D ONETERM($G(TERMCHLD(ID,"DILIST","ID",X,.03)),.CHILD)
. S @TARGET@("termChild",X,"valueType")=$$SANITIZE($G(TERMCHLD(ID,"DILIST","ID",X,.05)))
. S @TARGET@("termChild",X,"valueDelimiter")=$$SANITIZE($G(TERMCHLD(ID,"DILIST","ID",X,.06)))
. S @TARGET@("termChild",X,"valueStart")=$$SANITIZE($G(TERMCHLD(ID,"DILIST","ID",X,.07)))
. S @TARGET@("termChild",X,"valueStop")=$$SANITIZE($G(TERMCHLD(ID,"DILIST","ID",X,.08)))
. S @TARGET@("termChild",X,"description")=$$SANITIZE($G(TERMCHLD(ID,"DILIST","ID",X,.09)))
K @MSGROOT
Q
TERMUNIT(ID,TARGET) ;Loads Units for a term.
;
;DE2818 SQA findings Newed TERMUNIT
N MSGROOT,TERMUNIT
S MSGROOT="TERMUNIT("""_ID_""")"
D FIND^DIC("704.105",,".02I;.03E;.04E;.05E;.06E;.07E","M",ID,,,,,MSGROOT)
; Check to see if we actually have any children.
I +$P(TERMUNIT(ID,"DILIST",0),U,1)<1 K @MSGROOT Q
N X F X=0:0 S X=($O(TERMUNIT(ID,"DILIST","ID",X))) Q:'X D
. ; .01 is the Term ID
. ; .02 is the Unit ID
. N UNIT S UNIT=$NA(@TARGET@("units",X,"unitTerm"))
. D ONETERM($G(TERMUNIT(ID,"DILIST","ID",X,.02)),.UNIT)
. S @TARGET@("units",X,"minValue")=$$SANITIZE($G(TERMUNIT(ID,"DILIST","ID",X,.03)))
. S @TARGET@("units",X,"maxValue")=$$SANITIZE($G(TERMUNIT(ID,"DILIST","ID",X,.04)))
. S @TARGET@("units",X,"decPrecision")=$$SANITIZE($G(TERMUNIT(ID,"DILIST","ID",X,.05)))
. S @TARGET@("units",X,"refLow")=$$SANITIZE($G(TERMUNIT(ID,"DILIST","ID",X,.06)))
. S @TARGET@("units",X,"refHigh")=$$SANITIZE($G(TERMUNIT(ID,"DILIST","ID",X,.07)))
K @MSGROOT
Q
TERMQUAL(ID,TARGET,IFN) ;Loads Qualifiers for a term
;
;DE2818 SQA findings Newed TERQUAL
N MSGROOT,TERMQUAL
S MSGROOT="TERMQUAL("""_ID_""")"
D FIND^DIC("704.103",,".02E;.03I;.04E","M",ID,,,,,MSGROOT)
; Check to see if we actually have any qualifiers.
I +$P(TERMQUAL(ID,"DILIST",0),U,1)<1 K @MSGROOT Q
N X F X=0:0 S X=($O(TERMQUAL(ID,"DILIST","ID",X))) Q:'X D
. ; .01 is the Term ID
. ; .03 is the Qualifier ID
. N QUAL S QUAL=$NA(@TARGET@("qualifiers",X,"qualTerm"))
. ; blj 28 Feb 2014: bandaid to prevent recursive calls if someone has messed up the structure of the TERM_QUALIFIER file.
. I IFN'=$G(TERMQUAL(ID,"DILIST","ID",X,.03)) D ONETERM($G(TERMQUAL(ID,"DILIST","ID",X,.03)),.QUAL)
. S @TARGET@("qualifiers",X,"qualOrder")=$$SANITIZE($G(TERMQUAL(ID,"DILIST","ID",X,.02)))
. S @TARGET@("qualifiers",X,"ranking")=$$SANITIZE($G(TERMQUAL(ID,"DILIST","ID",X,.04)))
K @MSGROOT
Q
SANITIZE(VALUE) ; Makes sure values are formatted correctly.
I +VALUE'=VALUE Q VALUE
I VALUE?1".".N S VALUE="0"_VALUE
I VALUE?1"-.".N S VALUE="-0"_$E(VALUE,2,$LENGTH(VALUE))
Q VALUE
;
GENGUID() ;
N X,AB
S X="",AB=$R(4),AB=$S(AB=0:"8",AB=1:"9",AB=2:"A",1:"B")
F S X=X_$$BASE^XLFUTL($R(16),10,16) Q:$L(X)>31
S X="{"_$E(X,1,8)_"-"_$E(X,9,12)_"-"_"4"_$E(X,14,16)_"-"_AB_$E(X,18,20)_"-"_$E(X,21,32)_"}"
Q X
TRMFLDS ;Fields for terminology
;;.01;id
;;.02;term
;;.03;abbreviation
;;.04;displayName
;;.05;termType
;;.06;dataType
;;.07;valueType
;;.09;active
;;.1;description
;;.2;helpText;
;;.31;booleanValueTrue
;;.32;booleanValueFalse;
;;.33;multiSelectPicklist
;;99.99;VUID
;;***
TTFLDS ;Fields for Term Typea
;;id;type;xmlTag;VUID
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HHMPMDUTL 7367 printed Oct 16, 2024@17:54:49 Page 2
HMPMDUTL ;DSS/BLJ,ASMR/RRB - FileMan JSON utilities for HMP;4 November 2015 @16:51:35
+1 ;;2.0;ENTERPRISE HEALTH MANAGEMENT PLATFORM;**;Sep 01, 2011;Build 63
+2 ;Per VA Directive 6402, this routine should not be modified.
+3 ;
+4 ;DE2818 SQA findings Newed HMPCNT, HMPFINI, HMPLAST, TERMCHLD, TERMUNIT, and TERMQUAL ASMR/RRB
+5 ;
+6 QUIT
+7 ;
EN ; Only call via linetag.
QUIT
TERM ; Retrieves list of terms
+1 ; NOTE: This tag will NOT support paged retrieves unless necessary.
+2 ; Do not expect them.
+3 ;
+4 ; DE2818 SQA findings HMPCNT, HMPFINI, HMPLAST
+5 ;
+6 ; Gets terminology.
+7 NEW HMPFINI,TERMIENS,TERMCNT,X
+8 DO LIST^DIC("704.101",,,,,,,,"I $P(^(0),U,5)=1")
+9 MERGE TERMIENS=^TMP("DILIST",$JOB,2)
+10 SET TERMCNT=$PIECE($GET(^TMP("DILIST",$JOB,0)),U,1)
+11 KILL ^TMP("DILIST",$JOB)
+12 ;
+13 FOR X=0:0
SET X=$ORDER(TERMIENS(X))
if 'X
QUIT
Begin DoDot:1
+14 NEW HMPCNT,HMPLAST,RESULT
+15 ; term
+16 DO ONETERM($GET(TERMIENS(X)),"RESULT")
+17 ;
+18 DO ADD^HMPEF("RESULT")
+19 SET HMPCNT=X
SET HMPLAST=X
End DoDot:1
+20 IF 'X
SET HMPFINI=1
+21 QUIT
ONETERM(ID,TARGET) ; load one term
+1 ; Validate integer/id.
if +ID<1
QUIT
+2 NEW $ESTACK,$ETRAP,ERRMSG
+3 SET ERRMSG=$$ERRMSG^HMPEF("CLiO Term",ID)
+4 SET $ETRAP="D ERRHDLR^HMPDERRH"
+5 NEW TERM,TRM,TERMTYPE
+6 ;
+7 DO GETS^DIQ("704.101",ID_",","*","IE","TERM")
+8 NEW TRM
SET TRM=$NAME(TERM(704.101,""_ID_","))
+9 SET @TARGET@("id")=$GET(@TRM@(.01,"E"))
+10 SET @TARGET@("uid")="urn:va:clioterminology:"_$GET(@TARGET@("id"))
+11 SET @TARGET@("term")=$$SANITIZE($GET(@TRM@(.02,"E")))
+12 SET @TARGET@("abbreviation")=$$SANITIZE($GET(@TRM@(.03,"E")))
+13 SET @TARGET@("displayName")=$$SANITIZE($GET(@TRM@(.04,"E")))
+14 ; Get Term Type
+15 SET TERMTYPE=$$SANITIZE($GET(@TRM@(.05,"I")))
+16 DO TERMTYPE(TERMTYPE,.TARGET)
+17 ;
+18 SET @TARGET@("dataType")=$$SANITIZE($GET(@TRM@(.06,"I")))
+19 SET @TARGET@("valueType")=$$SANITIZE($GET(@TRM@(.07,"I")))
+20 SET @TARGET@("active")=$$SANITIZE($GET(@TRM@(.09,"E")))
+21 SET @TARGET@("description")=$$SANITIZE($GET(@TRM@(.1,"E")))
+22 SET @TARGET@("helpText")=$$SANITIZE($GET(@TRM@(.2,"E")))
+23 SET @TARGET@("booleanValueTrue")=$$SANITIZE($GET(@TRM@(.31,"E")))
+24 SET @TARGET@("booleanValueFalse")=$$SANITIZE($GET(@TRM@(.32,"E")))
+25 SET @TARGET@("multiSelectPicklist")=$$SANITIZE($GET(@TRM@(.33,"E")))
+26 SET @TARGET@("VUID")="urn:va:vuid:"_$$SANITIZE($GET(@TRM@(99.99,"E")))
+27 ; term -> child terms
+28 ;
+29 ; NOTE: As coded, the initial load is a function of DFN. But this load
+30 ; is a function of UID. May become normed either to UID or IFN.
+31 ;
+32 DO TERMCHLD($GET(@TRM@(.01,"E")),.TARGET)
+33 ;
+34 ; term -> unit pair
+35 DO TERMUNIT($GET(@TRM@(.01,"E")),.TARGET)
+36 ;
+37 ; term -> qualifier pair
+38 ;
+39 DO TERMQUAL($GET(@TRM@(.01,"E")),.TARGET,ID)
+40 ;
+41 ; NOTE: As coded, term -> unit conversions are not retrieved.
+42 ; That will be part of future development.
+43 ;
+44 KILL TERMTYPE,TRM
+45 QUIT
+46 ;
TERMTYPE(ID,TARGET) ; Load term types.
+1 ;
+2 ; TARGET is passed by reference.
+3 ;
+4 ; Validate for direct IFN lookup.
if +ID<1
QUIT
+5 NEW TERMTYPE
+6 ;ICR 5748 DE2818 ASF 11/25/15
DO GETS^DIQ("704.102",ID_",","*","E","TERMTYPE")
+7 NEW HMPNAME
SET HMPNAME=$TEXT(TTFLDS+1)
+8 ;
+9 NEW HMPEPLAC
SET HMPEPLAC("""")="\"""
+10 SET @TARGET@("termType",$PIECE(HMPNAME,";",3))=ID
+11 ;ICR 5748 DE2818 ASF 11/25/15
SET @TARGET@("termType",$PIECE(HMPNAME,";",4))=$$SANITIZE($$REPLACE^XLFSTR(TERMTYPE("704.102",ID_",",.01,"E"),.HMPEPLAC))
+12 SET @TARGET@("termType",$PIECE(HMPNAME,";",5))=$$SANITIZE($$REPLACE^XLFSTR(TERMTYPE("704.102",ID_",",.02,"E"),.HMPEPLAC))
+13 SET @TARGET@("termType",$PIECE(HMPNAME,";",6))=$$SANITIZE($$REPLACE^XLFSTR(TERMTYPE("704.102",ID_",",.03,"E"),.HMPEPLAC))
+14 KILL TERMTYPE
+15 QUIT
TERMCHLD(ID,TARGET) ;Loads child terms for a term
+1 ;
+2 ;DE2818 SQA findings Newed TERMCHLD
+3 NEW MSGROOT,TERMCHLD
+4 SET MSGROOT="TERMCHLD("""_ID_""")"
+5 DO FIND^DIC("704.106",,".02E;.03I;.04I;.05E;.06E;.07E;.08E;.09E","M",ID,,,,,MSGROOT)
+6 ; Check to see if we actually have any children.
+7 IF +$PIECE(TERMCHLD(ID,"DILIST",0),U,1)<1
KILL @MSGROOT
QUIT
+8 NEW X
FOR X=0:0
SET X=($ORDER(TERMCHLD(ID,"DILIST","ID",X)))
if 'X
QUIT
Begin DoDot:1
+9 ; .01 is the Term ID
+10 SET @TARGET@("termChild",X,"childOrder")=$$SANITIZE($GET(TERMCHLD(ID,"DILIST","ID",X,.02)))
+11 ; .03 is the Child ID
+12 NEW CHILD
SET CHILD=$NAME(@TARGET@("termChild",X,"childTerm"))
+13 DO ONETERM($GET(TERMCHLD(ID,"DILIST","ID",X,.03)),.CHILD)
+14 SET @TARGET@("termChild",X,"valueType")=$$SANITIZE($GET(TERMCHLD(ID,"DILIST","ID",X,.05)))
+15 SET @TARGET@("termChild",X,"valueDelimiter")=$$SANITIZE($GET(TERMCHLD(ID,"DILIST","ID",X,.06)))
+16 SET @TARGET@("termChild",X,"valueStart")=$$SANITIZE($GET(TERMCHLD(ID,"DILIST","ID",X,.07)))
+17 SET @TARGET@("termChild",X,"valueStop")=$$SANITIZE($GET(TERMCHLD(ID,"DILIST","ID",X,.08)))
+18 SET @TARGET@("termChild",X,"description")=$$SANITIZE($GET(TERMCHLD(ID,"DILIST","ID",X,.09)))
End DoDot:1
+19 KILL @MSGROOT
+20 QUIT
TERMUNIT(ID,TARGET) ;Loads Units for a term.
+1 ;
+2 ;DE2818 SQA findings Newed TERMUNIT
+3 NEW MSGROOT,TERMUNIT
+4 SET MSGROOT="TERMUNIT("""_ID_""")"
+5 DO FIND^DIC("704.105",,".02I;.03E;.04E;.05E;.06E;.07E","M",ID,,,,,MSGROOT)
+6 ; Check to see if we actually have any children.
+7 IF +$PIECE(TERMUNIT(ID,"DILIST",0),U,1)<1
KILL @MSGROOT
QUIT
+8 NEW X
FOR X=0:0
SET X=($ORDER(TERMUNIT(ID,"DILIST","ID",X)))
if 'X
QUIT
Begin DoDot:1
+9 ; .01 is the Term ID
+10 ; .02 is the Unit ID
+11 NEW UNIT
SET UNIT=$NAME(@TARGET@("units",X,"unitTerm"))
+12 DO ONETERM($GET(TERMUNIT(ID,"DILIST","ID",X,.02)),.UNIT)
+13 SET @TARGET@("units",X,"minValue")=$$SANITIZE($GET(TERMUNIT(ID,"DILIST","ID",X,.03)))
+14 SET @TARGET@("units",X,"maxValue")=$$SANITIZE($GET(TERMUNIT(ID,"DILIST","ID",X,.04)))
+15 SET @TARGET@("units",X,"decPrecision")=$$SANITIZE($GET(TERMUNIT(ID,"DILIST","ID",X,.05)))
+16 SET @TARGET@("units",X,"refLow")=$$SANITIZE($GET(TERMUNIT(ID,"DILIST","ID",X,.06)))
+17 SET @TARGET@("units",X,"refHigh")=$$SANITIZE($GET(TERMUNIT(ID,"DILIST","ID",X,.07)))
End DoDot:1
+18 KILL @MSGROOT
+19 QUIT
TERMQUAL(ID,TARGET,IFN) ;Loads Qualifiers for a term
+1 ;
+2 ;DE2818 SQA findings Newed TERQUAL
+3 NEW MSGROOT,TERMQUAL
+4 SET MSGROOT="TERMQUAL("""_ID_""")"
+5 DO FIND^DIC("704.103",,".02E;.03I;.04E","M",ID,,,,,MSGROOT)
+6 ; Check to see if we actually have any qualifiers.
+7 IF +$PIECE(TERMQUAL(ID,"DILIST",0),U,1)<1
KILL @MSGROOT
QUIT
+8 NEW X
FOR X=0:0
SET X=($ORDER(TERMQUAL(ID,"DILIST","ID",X)))
if 'X
QUIT
Begin DoDot:1
+9 ; .01 is the Term ID
+10 ; .03 is the Qualifier ID
+11 NEW QUAL
SET QUAL=$NAME(@TARGET@("qualifiers",X,"qualTerm"))
+12 ; blj 28 Feb 2014: bandaid to prevent recursive calls if someone has messed up the structure of the TERM_QUALIFIER file.
+13 IF IFN'=$GET(TERMQUAL(ID,"DILIST","ID",X,.03))
DO ONETERM($GET(TERMQUAL(ID,"DILIST","ID",X,.03)),.QUAL)
+14 SET @TARGET@("qualifiers",X,"qualOrder")=$$SANITIZE($GET(TERMQUAL(ID,"DILIST","ID",X,.02)))
+15 SET @TARGET@("qualifiers",X,"ranking")=$$SANITIZE($GET(TERMQUAL(ID,"DILIST","ID",X,.04)))
End DoDot:1
+16 KILL @MSGROOT
+17 QUIT
SANITIZE(VALUE) ; Makes sure values are formatted correctly.
+1 IF +VALUE'=VALUE
QUIT VALUE
+2 IF VALUE?1".".N
SET VALUE="0"_VALUE
+3 IF VALUE?1"-.".N
SET VALUE="-0"_$EXTRACT(VALUE,2,$LENGTH(VALUE))
+4 QUIT VALUE
+5 ;
GENGUID() ;
+1 NEW X,AB
+2 SET X=""
SET AB=$RANDOM(4)
SET AB=$SELECT(AB=0:"8",AB=1:"9",AB=2:"A",1:"B")
+3 FOR
SET X=X_$$BASE^XLFUTL($RANDOM(16),10,16)
if $LENGTH(X)>31
QUIT
+4 SET X="{"_$EXTRACT(X,1,8)_"-"_$EXTRACT(X,9,12)_"-"_"4"_$EXTRACT(X,14,16)_"-"_AB_$EXTRACT(X,18,20)_"-"_$EXTRACT(X,21,32)_"}"
+5 QUIT X
TRMFLDS ;Fields for terminology
+1 ;;.01;id
+2 ;;.02;term
+3 ;;.03;abbreviation
+4 ;;.04;displayName
+5 ;;.05;termType
+6 ;;.06;dataType
+7 ;;.07;valueType
+8 ;;.09;active
+9 ;;.1;description
+10 ;;.2;helpText;
+11 ;;.31;booleanValueTrue
+12 ;;.32;booleanValueFalse;
+13 ;;.33;multiSelectPicklist
+14 ;;99.99;VUID
+15 ;;***
TTFLDS ;Fields for Term Typea
+1 ;;id;type;xmlTag;VUID