PXRMVSTX ;SLC/PKR - Routines for building taxonomies for value sets. ;09/16/2014
;;2.0;CLINICAL REMINDERS;**47**;Feb 04, 2005;Build 291
;==========================================
BLDCODEL(VSIEN,TAXIEN) ;Populate the code list.
N CODE,CSYSIEN,IND,JND,LEXSAB,SAVEOK,TC
K ^TMP("PXRMCODES",$J)
S IND=0
F S IND=+$O(^PXRM(802.2,VSIEN,2,IND)) Q:IND=0 D
. S CSYSIEN=^PXRM(802.2,VSIEN,2,IND,0)
. S LEXSAB=$P(^PXRM(802.1,CSYSIEN,0),U,4)
.;DBIA #5679
. S TC=$P($$CSYS^LEXU(LEXSAB),U,4)_" codes from value set (imported)"
. S JND=0
. F S JND=+$O(^PXRM(802.2,VSIEN,2,IND,1,JND)) Q:JND=0 D
.. S CODE=^PXRM(802.2,VSIEN,2,IND,1,JND,0)
.. I $$CHKCODE(LEXSAB,CODE)=-1 Q
.. S ^TMP("PXRMCODES",$J,TC,LEXSAB,CODE)=""
;Format is: ^TMP("PXRMCODES",$J,TC,CODESYS,CODE)=UID
S SAVEOK=$$SAVETC^PXRMTXIM(TAXIEN)
I 'SAVEOK W !,"Could not save terms."
I SAVEOK D POSTSAVE^PXRMTXSM(TAXIEN)
Q
;
;==========================================
BLDTAX(VSIEN) ;Build a taxonony from a value set.
N DESC,ERRMSG,NAME,OID,TXDATA,VSNAME
I '$$SCSYS(VSIEN) H 2 Q
;Get the name of the taxonomy to create.
S NAME=$$GETNAME(VSIEN)
I (NAME="^")!(NAME="") Q
S OID=$P(^PXRM(802.2,VSIEN,1),U,1)
S VDATE=$P(^PXRM(802.2,VSIEN,1),U,3)
S DESC(1,0)="This taxonomy was automatically generated from the value set:"
S DESC(2,0)=" "_$P(^PXRM(802.2,VSIEN,0),U,1)
S DESC(3,0)=" OID - "_OID
S DESC(4,0)=" Version Date - "_$$FMTE^XLFDT(VDATE)
S TXDATA("NAME")=NAME
S TXDATA("CLASS")="L"
M TXDATA("DESC")=DESC
S TXDATA("OID")=OID
S TXDATA("VERSION DATE")=VDATE
S TAXIEN=$$CRETAX^PXRMTXIM("E",.TXDATA,.ERRMSG)
I TAXIEN=0 H 2 Q
W !,"Created taxonomy ",NAME
W !,"Populating the code list ..."
;Populate the code list.
D BLDCODEL(VSIEN,TAXIEN)
;Initialize the Change Log.
D INICLOG(TAXIEN,.DESC)
H 2
Q
;
;==========================================
CHKCODE(LEXSAB,CODE) ;Verify that a code is in the Lexicon.
N CDATA,PDATA,RESULT
;DBIA #5679
S RESULT=$$CSDATA^LEXU(CODE,LEXSAB,DT,.CDATA)
S RESULT=$$PERIOD^LEXU(CODE,LEXSAB,.PDATA)
I +RESULT=-1 D
. W !,"Lexicon does not recognize the ",LEXSAB," code: ",CODE
. W !,"It will not be added to the taxonomy."
Q +RESULT
;
;==========================================
CMPALL(OUTTYPE) ;Find all taxonomies generated from a value set and compare
;the codes in the taxonomy with those in the most recent version of
;the value set.
N NL,OUTPUT,TAXIEN,VSOID
S NL=0
S VSOID=""
F S VSOID=$O(^PXD(811.2,"VSOID",VSOID)) Q:VSOID="" D
. S TAXIEN=""
. F S TAXIEN=$O(^PXD(811.2,"VSOID",VSOID,TAXIEN)) Q:TAXIEN="" D
.. D CMPTXVS(TAXIEN,VSOID,.NL,.OUTPUT)
I OUTTYPE="B" D BROWSE^DDBR("OUTPUT","NR","Taxonomy Value Set Code Comparison")
I OUTTYPE="M" D
. N IND,SUBJECT,TO
. S SUBJECT="VALUE SETS WERE UPDATED"
. S TO(DUZ)=""
. K ^TMP("PXRMXMZ",$J)
.;MailMan has a built-in width of 79.
. F IND=1:1:NL S ^TMP("PXRMXMZ",$J,IND,0)=$E(OUTPUT(IND),1,79)
. D SEND^PXRMMSG("PXRMXMZ",SUBJECT,.TO,DUZ)
. K ^TMP("PXRMXMZ",$J)
Q
;
;==========================================
CMPTXVS(TAXIEN,VSOID,NL,OUTPUT) ;For taxonomies that were generated from a
;value set compare the codes in the most recent version of the
;value set to the codes in the taxonomy.
I $P($G(^PXD(811.2,TAXIEN,40)),U,1)'=VSOID Q
N CODE,CODESYS,TAXNAME,TAXVDATE,UID,VDATE,VSIEN,VSNAME
S VSIEN=$O(^PXRM(802.2,"OID",VSOID,""),-1)
S VSNAME=$P(^PXRM(802.2,VSIEN,0),U,1)
S VDATE=$P(^PXRM(802.2,VSIEN,1),U,3)
S TAXNAME=$P(^PXD(811.2,TAXIEN,0),U,1)
S TAXVDATE=$P(^PXD(811.2,TAXIEN,40),U,2)
S NL=NL+1,OUTPUT(NL)=""
S NL=NL+1,OUTPUT(NL)="Checking taxonomy "_TAXNAME
S NL=NL+1,OUTPUT(NL)=" It was generated from the value set:"
S NL=NL+1,OUTPUT(NL)=" "_VSNAME
S NL=NL+1,OUTPUT(NL)=" OID - "_VSOID
S NL=NL+1,OUTPUT(NL)=" The most recent version of the value set is dated "_$$FMTE^XLFDT(VDATE)_"."
S NL=NL+1,OUTPUT(NL)=" The taxonomy was generated from the version dated "_$$FMTE^XLFDT(TAXVDATE)_"."
I TAXVDATE'=VDATE S NL=NL+1,OUTPUT(NL)=" The comparison is being made with the most recent version of the value set."
;Build a list of codes in the value set in the same structure as the
;"AE" index in the taxonomy. ^TMP($J,"VSCODES")
D GVSCODES(VSIEN,"VSCODES")
K ^TMP($J,"TAXCODES")
M ^TMP($J,"TAXCODES")=^PXD(811.2,TAXIEN,20,"AE")
;Compare the two lists of codes, keep the differences.
S CODESYS=""
F S CODESYS=$O(^TMP($J,"TAXCODES",CODESYS)) Q:CODESYS="" D
. S CODE=""
. F S CODE=$O(^TMP($J,"TAXCODES",CODESYS,CODE)) Q:CODE="" D
.. I $D(^TMP($J,"VSCODES",CODESYS,CODE)) K ^TMP($J,"VSCODES",CODESYS,CODE),^TMP($J,"TAXCODES",CODESYS,CODE)
;
;Create the result output.
I $D(^TMP($J,"TAXCODES")) D
. S NL=NL+1,OUTPUT(NL)=""
. S NL=NL+1,OUTPUT(NL)="The following codes are in the taxonomy but not in the value set:"
. S CODESYS=""
. F S CODESYS=$O(^TMP($J,"TAXCODES",CODESYS)) Q:CODESYS="" D
.. S NL=NL+1,OUTPUT(NL)="Coding system "_$P($$CSYS^LEXU(CODESYS),U,4)
.. S NL=NL+1,OUTPUT(NL)="Code INACT UID Description"
.. S NL=NL+1,OUTPUT(NL)="------------------ ----- --- -----------"
.. S CODE=""
.. F S CODE=$O(^TMP($J,"TAXCODES",CODESYS,CODE)) Q:CODE="" D
... S UID=$S($D(^PXD(811.2,TAXIEN,20,"AUID",CODESYS,CODE)):1,1:0)
... D CDETAILC^PXRMTXIN(CODESYS,CODE,UID,.NL,.OUTPUT)
I $D(^TMP($J,"VSCODES")) D
. S NL=NL+1,OUTPUT(NL)=""
. S NL=NL+1,OUTPUT(NL)="The following codes are in the value set but not in the taxonomy:"
. S CODESYS=""
. F S CODESYS=$O(^TMP($J,"VSCODES",CODESYS)) Q:CODESYS="" D
.. S NL=NL+1,OUTPUT(NL)="Coding system "_$P($$CSYS^LEXU(CODESYS),U,4)
.. S NL=NL+1,OUTPUT(NL)="Code INACT Description"
.. S NL=NL+1,OUTPUT(NL)="------------------ ----- -----------"
.. S CODE=""
.. F S CODE=$O(^TMP($J,"VSCODES",CODESYS,CODE)) Q:CODE="" D
... D CDETAILC^PXRMTXIN(CODESYS,CODE,"",.NL,.OUTPUT)
I '$D(^TMP($J,"TAXCODES")),'$D(^TMP($J,"VSCODES")) D
. S NL=NL+1,OUTPUT(NL)=""
. S NL=NL+1,OUTPUT(NL)="The list of codes in the taxonomy is identical to the list of codes in the"
. S NL=NL+1,OUTPUT(NL)="value set."
S NL=NL+1,OUTPUT(NL)=""
K ^TMP($J,"TAXCODES"),^TMP($J,"VSCODES")
Q
;
;==========================================
GVSCODES(VSIEN,NODE) ;Get the codes in a value set.
N CODE,CSYSIEN,IND,JND,LEXSAB
K ^TMP($J,NODE)
S IND=0
F S IND=+$O(^PXRM(802.2,VSIEN,2,IND)) Q:IND=0 D
. S CSYSIEN=^PXRM(802.2,VSIEN,2,IND,0)
. S LEXSAB=$P(^PXRM(802.1,CSYSIEN,0),U,4)
. S JND=0
. F S JND=+$O(^PXRM(802.2,VSIEN,2,IND,1,JND)) Q:JND=0 D
.. S CODE=^PXRM(802.2,VSIEN,2,IND,1,JND,0)
.. S ^TMP($J,NODE,LEXSAB,CODE)=""
Q
;
;==========================================
GETNAME(VSIEN) ;
N DIR,FIELDLEN,NAME,TEXT,VSNAME,X,Y
S VSNAME=$P(^PXRM(802.2,VSIEN,0),U,1)
S VSNAME=$$UP^XLFSTR(VSNAME)
S FIELDLEN=$$GET1^DID(811.2,.01,"","FIELD LENGTH")
S DIR(0)="F"_U_"3:"_FIELDLEN_U_"K:(X?.N)!'(X'?1P.E) X"
S DIR("A")="Please enter the taxonomy name"
I $L(VSNAME)'>FIELDLEN S DIR("B")=VSNAME
GETNAM W ! D ^DIR
S NAME=Y
;Make sure the new name is valid.
I $D(^PXD(811.2,"B",NAME)) D G GETNAM
. S TEXT(1)="A taxonomy named "_NAME_" already exists!"
. S TEXT(2)="Please choose a unique name."
. D EN^DDIOL(.TEXT)
I '$$VNAME^PXRMINTR(NAME) G GETNAM
Q NAME
;
;==========================================
INICLOG(IEN,TEXT) ;Initialize the change log.
N IENS,FDA,FDAIEN,MSG
S IENS="+1,"_IEN_","
S FDA(811.21,IENS,.01)=$$NOW^XLFDT
S FDA(811.21,IENS,1)=DUZ
S FDA(811.21,IENS,2)="TEXT"
D UPDATE^DIE("S","FDA","FDAIEN","MSG")
Q
;
;==========================================
SCSYS(VSIEN) ;Scan the coding systems in the value set to determine if it
;contains any supported coding systems.
N CSYSIEN,LEXSAB,OK,NCSYS,TEMP
W !,"Scanning the coding systems used in the value set ..."
S NCSYS=+$P(^PXRM(802.2,VSIEN,2,0),U,3)
I NCSYS=0 D Q 0
. W !,"No coding systems were found, cannot create a taxonomy."
. H 2
S IND=0,OK=0
F S IND=+$O(^PXRM(802.2,VSIEN,2,IND)) Q:IND=0 D
. S CSYSIEN=^PXRM(802.2,VSIEN,2,IND,0)
. S TEMP=^PXRM(802.1,CSYSIEN,0)
. S LEXSAB=$P(TEMP,U,4)
. I LEXSAB="" W !," ",$P(TEMP,U,1)," is not a supported coding system." Q
. I $$VCSYS^PXRMTAXD(LEXSAB) S OK=1 W !," Will import ",$P(TEMP,U,1)," codes into the taxonomy."
I 'OK W !,"No supported coding systems were found, cannot create a taxonomy." H 2
Q OK
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPXRMVSTX 8468 printed Oct 16, 2024@17:50:53 Page 2
PXRMVSTX ;SLC/PKR - Routines for building taxonomies for value sets. ;09/16/2014
+1 ;;2.0;CLINICAL REMINDERS;**47**;Feb 04, 2005;Build 291
+2 ;==========================================
BLDCODEL(VSIEN,TAXIEN) ;Populate the code list.
+1 NEW CODE,CSYSIEN,IND,JND,LEXSAB,SAVEOK,TC
+2 KILL ^TMP("PXRMCODES",$JOB)
+3 SET IND=0
+4 FOR
SET IND=+$ORDER(^PXRM(802.2,VSIEN,2,IND))
if IND=0
QUIT
Begin DoDot:1
+5 SET CSYSIEN=^PXRM(802.2,VSIEN,2,IND,0)
+6 SET LEXSAB=$PIECE(^PXRM(802.1,CSYSIEN,0),U,4)
+7 ;DBIA #5679
+8 SET TC=$PIECE($$CSYS^LEXU(LEXSAB),U,4)_" codes from value set (imported)"
+9 SET JND=0
+10 FOR
SET JND=+$ORDER(^PXRM(802.2,VSIEN,2,IND,1,JND))
if JND=0
QUIT
Begin DoDot:2
+11 SET CODE=^PXRM(802.2,VSIEN,2,IND,1,JND,0)
+12 IF $$CHKCODE(LEXSAB,CODE)=-1
QUIT
+13 SET ^TMP("PXRMCODES",$JOB,TC,LEXSAB,CODE)=""
End DoDot:2
End DoDot:1
+14 ;Format is: ^TMP("PXRMCODES",$J,TC,CODESYS,CODE)=UID
+15 SET SAVEOK=$$SAVETC^PXRMTXIM(TAXIEN)
+16 IF 'SAVEOK
WRITE !,"Could not save terms."
+17 IF SAVEOK
DO POSTSAVE^PXRMTXSM(TAXIEN)
+18 QUIT
+19 ;
+20 ;==========================================
BLDTAX(VSIEN) ;Build a taxonony from a value set.
+1 NEW DESC,ERRMSG,NAME,OID,TXDATA,VSNAME
+2 IF '$$SCSYS(VSIEN)
HANG 2
QUIT
+3 ;Get the name of the taxonomy to create.
+4 SET NAME=$$GETNAME(VSIEN)
+5 IF (NAME="^")!(NAME="")
QUIT
+6 SET OID=$PIECE(^PXRM(802.2,VSIEN,1),U,1)
+7 SET VDATE=$PIECE(^PXRM(802.2,VSIEN,1),U,3)
+8 SET DESC(1,0)="This taxonomy was automatically generated from the value set:"
+9 SET DESC(2,0)=" "_$PIECE(^PXRM(802.2,VSIEN,0),U,1)
+10 SET DESC(3,0)=" OID - "_OID
+11 SET DESC(4,0)=" Version Date - "_$$FMTE^XLFDT(VDATE)
+12 SET TXDATA("NAME")=NAME
+13 SET TXDATA("CLASS")="L"
+14 MERGE TXDATA("DESC")=DESC
+15 SET TXDATA("OID")=OID
+16 SET TXDATA("VERSION DATE")=VDATE
+17 SET TAXIEN=$$CRETAX^PXRMTXIM("E",.TXDATA,.ERRMSG)
+18 IF TAXIEN=0
HANG 2
QUIT
+19 WRITE !,"Created taxonomy ",NAME
+20 WRITE !,"Populating the code list ..."
+21 ;Populate the code list.
+22 DO BLDCODEL(VSIEN,TAXIEN)
+23 ;Initialize the Change Log.
+24 DO INICLOG(TAXIEN,.DESC)
+25 HANG 2
+26 QUIT
+27 ;
+28 ;==========================================
CHKCODE(LEXSAB,CODE) ;Verify that a code is in the Lexicon.
+1 NEW CDATA,PDATA,RESULT
+2 ;DBIA #5679
+3 SET RESULT=$$CSDATA^LEXU(CODE,LEXSAB,DT,.CDATA)
+4 SET RESULT=$$PERIOD^LEXU(CODE,LEXSAB,.PDATA)
+5 IF +RESULT=-1
Begin DoDot:1
+6 WRITE !,"Lexicon does not recognize the ",LEXSAB," code: ",CODE
+7 WRITE !,"It will not be added to the taxonomy."
End DoDot:1
+8 QUIT +RESULT
+9 ;
+10 ;==========================================
CMPALL(OUTTYPE) ;Find all taxonomies generated from a value set and compare
+1 ;the codes in the taxonomy with those in the most recent version of
+2 ;the value set.
+3 NEW NL,OUTPUT,TAXIEN,VSOID
+4 SET NL=0
+5 SET VSOID=""
+6 FOR
SET VSOID=$ORDER(^PXD(811.2,"VSOID",VSOID))
if VSOID=""
QUIT
Begin DoDot:1
+7 SET TAXIEN=""
+8 FOR
SET TAXIEN=$ORDER(^PXD(811.2,"VSOID",VSOID,TAXIEN))
if TAXIEN=""
QUIT
Begin DoDot:2
+9 DO CMPTXVS(TAXIEN,VSOID,.NL,.OUTPUT)
End DoDot:2
End DoDot:1
+10 IF OUTTYPE="B"
DO BROWSE^DDBR("OUTPUT","NR","Taxonomy Value Set Code Comparison")
+11 IF OUTTYPE="M"
Begin DoDot:1
+12 NEW IND,SUBJECT,TO
+13 SET SUBJECT="VALUE SETS WERE UPDATED"
+14 SET TO(DUZ)=""
+15 KILL ^TMP("PXRMXMZ",$JOB)
+16 ;MailMan has a built-in width of 79.
+17 FOR IND=1:1:NL
SET ^TMP("PXRMXMZ",$JOB,IND,0)=$EXTRACT(OUTPUT(IND),1,79)
+18 DO SEND^PXRMMSG("PXRMXMZ",SUBJECT,.TO,DUZ)
+19 KILL ^TMP("PXRMXMZ",$JOB)
End DoDot:1
+20 QUIT
+21 ;
+22 ;==========================================
CMPTXVS(TAXIEN,VSOID,NL,OUTPUT) ;For taxonomies that were generated from a
+1 ;value set compare the codes in the most recent version of the
+2 ;value set to the codes in the taxonomy.
+3 IF $PIECE($GET(^PXD(811.2,TAXIEN,40)),U,1)'=VSOID
QUIT
+4 NEW CODE,CODESYS,TAXNAME,TAXVDATE,UID,VDATE,VSIEN,VSNAME
+5 SET VSIEN=$ORDER(^PXRM(802.2,"OID",VSOID,""),-1)
+6 SET VSNAME=$PIECE(^PXRM(802.2,VSIEN,0),U,1)
+7 SET VDATE=$PIECE(^PXRM(802.2,VSIEN,1),U,3)
+8 SET TAXNAME=$PIECE(^PXD(811.2,TAXIEN,0),U,1)
+9 SET TAXVDATE=$PIECE(^PXD(811.2,TAXIEN,40),U,2)
+10 SET NL=NL+1
SET OUTPUT(NL)=""
+11 SET NL=NL+1
SET OUTPUT(NL)="Checking taxonomy "_TAXNAME
+12 SET NL=NL+1
SET OUTPUT(NL)=" It was generated from the value set:"
+13 SET NL=NL+1
SET OUTPUT(NL)=" "_VSNAME
+14 SET NL=NL+1
SET OUTPUT(NL)=" OID - "_VSOID
+15 SET NL=NL+1
SET OUTPUT(NL)=" The most recent version of the value set is dated "_$$FMTE^XLFDT(VDATE)_"."
+16 SET NL=NL+1
SET OUTPUT(NL)=" The taxonomy was generated from the version dated "_$$FMTE^XLFDT(TAXVDATE)_"."
+17 IF TAXVDATE'=VDATE
SET NL=NL+1
SET OUTPUT(NL)=" The comparison is being made with the most recent version of the value set."
+18 ;Build a list of codes in the value set in the same structure as the
+19 ;"AE" index in the taxonomy. ^TMP($J,"VSCODES")
+20 DO GVSCODES(VSIEN,"VSCODES")
+21 KILL ^TMP($JOB,"TAXCODES")
+22 MERGE ^TMP($JOB,"TAXCODES")=^PXD(811.2,TAXIEN,20,"AE")
+23 ;Compare the two lists of codes, keep the differences.
+24 SET CODESYS=""
+25 FOR
SET CODESYS=$ORDER(^TMP($JOB,"TAXCODES",CODESYS))
if CODESYS=""
QUIT
Begin DoDot:1
+26 SET CODE=""
+27 FOR
SET CODE=$ORDER(^TMP($JOB,"TAXCODES",CODESYS,CODE))
if CODE=""
QUIT
Begin DoDot:2
+28 IF $DATA(^TMP($JOB,"VSCODES",CODESYS,CODE))
KILL ^TMP($JOB,"VSCODES",CODESYS,CODE),^TMP($JOB,"TAXCODES",CODESYS,CODE)
End DoDot:2
End DoDot:1
+29 ;
+30 ;Create the result output.
+31 IF $DATA(^TMP($JOB,"TAXCODES"))
Begin DoDot:1
+32 SET NL=NL+1
SET OUTPUT(NL)=""
+33 SET NL=NL+1
SET OUTPUT(NL)="The following codes are in the taxonomy but not in the value set:"
+34 SET CODESYS=""
+35 FOR
SET CODESYS=$ORDER(^TMP($JOB,"TAXCODES",CODESYS))
if CODESYS=""
QUIT
Begin DoDot:2
+36 SET NL=NL+1
SET OUTPUT(NL)="Coding system "_$PIECE($$CSYS^LEXU(CODESYS),U,4)
+37 SET NL=NL+1
SET OUTPUT(NL)="Code INACT UID Description"
+38 SET NL=NL+1
SET OUTPUT(NL)="------------------ ----- --- -----------"
+39 SET CODE=""
+40 FOR
SET CODE=$ORDER(^TMP($JOB,"TAXCODES",CODESYS,CODE))
if CODE=""
QUIT
Begin DoDot:3
+41 SET UID=$SELECT($DATA(^PXD(811.2,TAXIEN,20,"AUID",CODESYS,CODE)):1,1:0)
+42 DO CDETAILC^PXRMTXIN(CODESYS,CODE,UID,.NL,.OUTPUT)
End DoDot:3
End DoDot:2
End DoDot:1
+43 IF $DATA(^TMP($JOB,"VSCODES"))
Begin DoDot:1
+44 SET NL=NL+1
SET OUTPUT(NL)=""
+45 SET NL=NL+1
SET OUTPUT(NL)="The following codes are in the value set but not in the taxonomy:"
+46 SET CODESYS=""
+47 FOR
SET CODESYS=$ORDER(^TMP($JOB,"VSCODES",CODESYS))
if CODESYS=""
QUIT
Begin DoDot:2
+48 SET NL=NL+1
SET OUTPUT(NL)="Coding system "_$PIECE($$CSYS^LEXU(CODESYS),U,4)
+49 SET NL=NL+1
SET OUTPUT(NL)="Code INACT Description"
+50 SET NL=NL+1
SET OUTPUT(NL)="------------------ ----- -----------"
+51 SET CODE=""
+52 FOR
SET CODE=$ORDER(^TMP($JOB,"VSCODES",CODESYS,CODE))
if CODE=""
QUIT
Begin DoDot:3
+53 DO CDETAILC^PXRMTXIN(CODESYS,CODE,"",.NL,.OUTPUT)
End DoDot:3
End DoDot:2
End DoDot:1
+54 IF '$DATA(^TMP($JOB,"TAXCODES"))
IF '$DATA(^TMP($JOB,"VSCODES"))
Begin DoDot:1
+55 SET NL=NL+1
SET OUTPUT(NL)=""
+56 SET NL=NL+1
SET OUTPUT(NL)="The list of codes in the taxonomy is identical to the list of codes in the"
+57 SET NL=NL+1
SET OUTPUT(NL)="value set."
End DoDot:1
+58 SET NL=NL+1
SET OUTPUT(NL)=""
+59 KILL ^TMP($JOB,"TAXCODES"),^TMP($JOB,"VSCODES")
+60 QUIT
+61 ;
+62 ;==========================================
GVSCODES(VSIEN,NODE) ;Get the codes in a value set.
+1 NEW CODE,CSYSIEN,IND,JND,LEXSAB
+2 KILL ^TMP($JOB,NODE)
+3 SET IND=0
+4 FOR
SET IND=+$ORDER(^PXRM(802.2,VSIEN,2,IND))
if IND=0
QUIT
Begin DoDot:1
+5 SET CSYSIEN=^PXRM(802.2,VSIEN,2,IND,0)
+6 SET LEXSAB=$PIECE(^PXRM(802.1,CSYSIEN,0),U,4)
+7 SET JND=0
+8 FOR
SET JND=+$ORDER(^PXRM(802.2,VSIEN,2,IND,1,JND))
if JND=0
QUIT
Begin DoDot:2
+9 SET CODE=^PXRM(802.2,VSIEN,2,IND,1,JND,0)
+10 SET ^TMP($JOB,NODE,LEXSAB,CODE)=""
End DoDot:2
End DoDot:1
+11 QUIT
+12 ;
+13 ;==========================================
GETNAME(VSIEN) ;
+1 NEW DIR,FIELDLEN,NAME,TEXT,VSNAME,X,Y
+2 SET VSNAME=$PIECE(^PXRM(802.2,VSIEN,0),U,1)
+3 SET VSNAME=$$UP^XLFSTR(VSNAME)
+4 SET FIELDLEN=$$GET1^DID(811.2,.01,"","FIELD LENGTH")
+5 SET DIR(0)="F"_U_"3:"_FIELDLEN_U_"K:(X?.N)!'(X'?1P.E) X"
+6 SET DIR("A")="Please enter the taxonomy name"
+7 IF $LENGTH(VSNAME)'>FIELDLEN
SET DIR("B")=VSNAME
GETNAM WRITE !
DO ^DIR
+1 SET NAME=Y
+2 ;Make sure the new name is valid.
+3 IF $DATA(^PXD(811.2,"B",NAME))
Begin DoDot:1
+4 SET TEXT(1)="A taxonomy named "_NAME_" already exists!"
+5 SET TEXT(2)="Please choose a unique name."
+6 DO EN^DDIOL(.TEXT)
End DoDot:1
GOTO GETNAM
+7 IF '$$VNAME^PXRMINTR(NAME)
GOTO GETNAM
+8 QUIT NAME
+9 ;
+10 ;==========================================
INICLOG(IEN,TEXT) ;Initialize the change log.
+1 NEW IENS,FDA,FDAIEN,MSG
+2 SET IENS="+1,"_IEN_","
+3 SET FDA(811.21,IENS,.01)=$$NOW^XLFDT
+4 SET FDA(811.21,IENS,1)=DUZ
+5 SET FDA(811.21,IENS,2)="TEXT"
+6 DO UPDATE^DIE("S","FDA","FDAIEN","MSG")
+7 QUIT
+8 ;
+9 ;==========================================
SCSYS(VSIEN) ;Scan the coding systems in the value set to determine if it
+1 ;contains any supported coding systems.
+2 NEW CSYSIEN,LEXSAB,OK,NCSYS,TEMP
+3 WRITE !,"Scanning the coding systems used in the value set ..."
+4 SET NCSYS=+$PIECE(^PXRM(802.2,VSIEN,2,0),U,3)
+5 IF NCSYS=0
Begin DoDot:1
+6 WRITE !,"No coding systems were found, cannot create a taxonomy."
+7 HANG 2
End DoDot:1
QUIT 0
+8 SET IND=0
SET OK=0
+9 FOR
SET IND=+$ORDER(^PXRM(802.2,VSIEN,2,IND))
if IND=0
QUIT
Begin DoDot:1
+10 SET CSYSIEN=^PXRM(802.2,VSIEN,2,IND,0)
+11 SET TEMP=^PXRM(802.1,CSYSIEN,0)
+12 SET LEXSAB=$PIECE(TEMP,U,4)
+13 IF LEXSAB=""
WRITE !," ",$PIECE(TEMP,U,1)," is not a supported coding system."
QUIT
+14 IF $$VCSYS^PXRMTAXD(LEXSAB)
SET OK=1
WRITE !," Will import ",$PIECE(TEMP,U,1)," codes into the taxonomy."
End DoDot:1
+15 IF 'OK
WRITE !,"No supported coding systems were found, cannot create a taxonomy."
HANG 2
+16 QUIT OK
+17 ;