Language File (.85)
The Language File Version 2 project added upgrades to File Manager's Language file (.85) and related software to help WorldVistA EHR 2.0 meet the EHR certification standards required by meaningful use stage one.
Background for the Language File Version 2
back: VistA_Meaningful_Use_Enhancements
Meaningful-use Requirement
Stage one of meaningful use include a core objective that users be able to record demographic information, including preferred language, gender, race, ethnicity, date of birth, and date and preliminary cause of death in the event of mortality in the eligible hospital. Stage one includes a corresponding core measure that more than 50% of all unique patients seen by the eligible professional (EP) or admitted to the eligible hospital (EH) have demographics as recorded structured data.
Here is the precise wording about these core objectives from the Federal Register, Vol. 75, No. 8, Wednesday, January 13, 2010, Rules and Regulations:
"C. Standards, Implementation Specifications, and Certification Criteria Processes Before and After the HITECH Act . . . "2. HITECH Act Requirements for the Adoption of Standards, Implementation Specifications, and Certification Criteria . . . "Once the National Coordinator accepts a recommendation for the priority order of standards, implementation specifications, and certification criteria, such priorities will be communicated to the HIT Standards Committee to guide its work. The HIT Policy Committee is charged with making recommendations in at least the following eight areas as specified in section 3002(b)(2)(B) of the PHSA: . . . "(7) The use of electronic systems to ensure the comprehensive collection of patient demographic data, including, at a minimum, race, ethnicity, primary language, and gender information; ". . . "TABLE 1—CERTIFICATION CRITERIA . . . "Proposed meaningful use Stage 1 objectives: Record demographics [4] [5] "Certification criteria to support the achievement of meaningful use Stage 1 by eligible professionals: Enable a user to electronically record, modify, and retrieve patient demographic data in- cluding preferred language, insurance type, gender, race, ethnicity, and date of birth. "Certification criteria to support the achievement of meaningful use Stage 1 by eligible hospital: Enable a user to electronically record, modify, and retrieve patient demographic data in- cluding preferred language, insurance type, gender, race, ethnicity, date of birth, and date and cause of death in the event of mortality.' "[4] For eligible professionals the full proposed meaningful use Stage 1 objective is: 'record demographics: preferred language, insurance type, gender, race, ethnicity, date of birth.' "[5] For eligible hospitals the full proposed meaningful use Stage 1 objective is: 'record demographics: preferred language, insurance type, gender, race, ethnicity, date of birth, date and cause of death in the event of mortality.' ". . . "§ 170.304 Specific certification criteria for Complete EHRs or EHR Modules designed for an ambulatory setting. "The Secretary adopts the following certification criteria for Complete EHRs or EHR Modules designed to be used in an ambulatory setting. Complete EHRs or EHR Modules must include the capability to perform the following functions electronically and in accordance with all applicable standards and implementation specifications adopted in this part: . . . "(c) Record demographics. Enable a user to electronically record, modify, and retrieve patient demographic data including preferred language, insurance type, gender, race, ethnicity, and date of birth. ". . . "§ 170.306 Specific certification criteria for Complete EHRs or EHR Modules designed for an inpatient setting. "The Secretary adopts the following certification criteria for Complete EHRs or EHR Modules designed to be used in an inpatient setting. Complete EHRs or EHR Modules must include the capability to perform the following functions electronically and in accordance with all applicable standards and implementation specifications adopted in this part: . . . "(b) Record demographics. Enable a user to electronically record, modify, and retrieve patient demographic data including preferred language, insurance type, gender, race, ethnicity, date of birth, and date and cause of death in the event of mortality."
Prior to WorldVistA EHR 2.0, VISTA did not include anything like a preferred language field attached to patients, nor did it include the necessary options to set or modify it. This part of the project was about resolving this deficiency to help WorldVistA EHR 2.0 become a certified EHR hospitals could use to meet meaningful use stage one.
Architectural Base
VISTA has included a Language file (#.85) since the 1994 release of version 21 of the File Manager (aka Fileman) package. Fileman 21 included numerous features designed to introduce true multi-lingual capabilities into VISTA. The Fileman team at the time intended to follow this up with further enhancements in the subsequent versions of Fileman and to assist the primary-development teams responsible for all other VISTA packages in shifting to this new internationalization framework. Unfortunately, their work was interrupted when the U.S. Department of Veterans Affairs (VA) chose to break up the File Manager development team, leaving VISTA database development at a crawl for the subsequent fifteen years. As a result, there was a Language file to build from for this WorldVistA EHR 2.0 project, but it was far more rudimentary than it was intended to be by its designers.
The first version of the Language file was created by Marcus Werners, who at the time was the technical lead for the VISTA implementation at the German Heart Institute of Berlin. He was motivated by the problem of having to repeatedly translate new versions of VISTA packages into German. He spent his multi-week annual vacation one year in the early 1990s working side by side with the File Manager team in San Francisco to develop File Manager's internationalization framework, including the design of this file. The other members of the team were Maureen Hoye, Tami Winn, Danila Manapsal, Michael Ogi, Don Creaven, David LaLiberte, and Rick Marshall, all of whom were involved in the brainstorming sessions with Mr. Werners, though the principal design work was his.
Existing File's Data Dictionary
Here is the data dictionary of the existing Language file presented three ways: first, a global map that shows where the data is stored in MUMPS; second, a condensed listing that summarizes the fields; and finally a standard listing that includes all the details about the file definition:
GLOBAL MAP DATA DICTIONARY #.85 -- LANGUAGE FILE 12/27/11 PAGE 1 STORED IN ^DI(.85, (11 ENTRIES) SITE: VISTA Forum UCI: LIVE,FORUM (VERSION 22.0) ------------------------------------------------------------------------------- The LANGUAGE file is used both to officially identify a language, and to store MUMPS code needed to do language-specific conversions of data such as dates and numbers. VA FileMan currently distributes only the English language entry for this file (entry number 1). This code is currently available for use only within VA FileMan. A pointer to this file from the TRANSLATION multiple on the DIALOG file also allows non-English text to be returned via FileMan calls. CROSS REFERENCED BY: ID NUMBER(B), NAME(C) ^DI(.85,D0,0)= (#.01) ID NUMBER [1N] ^ (#1) NAME [2F] ^ ^DI(.85,D0,20.2)= (#20.2) DATE INPUT [E1,245K] ^ ^DI(.85,D0,CRD)= (#10.3) CARDINAL NUMBER FORMAT [E1,245K] ^ ^DI(.85,D0,DD)= (#10.2) DATE/TIME FORMAT [E1,245K] ^ ^DI(.85,D0,FMTE)= (#10.21) DATE/TIME FORMAT (FMTE) [E1,245K] ^ ^DI(.85,D0,LC)= (#10.5) LOWERCASE CONVERSION [E1,245K] ^ ^DI(.85,D0,MSCISO)= (#21400) CODE [1F] ^ ^DI(.85,D0,ORD)= (#10.1) ORDINAL NUMBER FORMAT [E1,245K] ^ ^DI(.85,D0,TIME)= (#10.22) TIME [E1,245K] ^ ^DI(.85,D0,UC)= (#10.4) UPPERCASE CONVERSION [E1,245K] ^
CONDENSED DATA DICTIONARY---LANGUAGE FILE (#.85)UCI: LIVE,FORUM VERSION: 22.0
STORED IN: ^DI(.85, DEC 27,2011 PAGE 1
--------------------------------------------------------------------------------
FILE SECURITY
DD SECURITY : ^ DELETE SECURITY: ^
READ SECURITY : LAYGO SECURITY : ^
WRITE SECURITY : ^
CROSS REFERENCED BY:
ID NUMBER(B) NAME(C)
FILE STRUCTURE
FIELD FIELD
NUMBER NAME
.01 ID NUMBER (RNJ10,0X), [0;1]
1 NAME (RF), [0;2]
10.1 ORDINAL NUMBER FORMAT (K), [ORD;E1,245]
10.2 DATE/TIME FORMAT (K), [DD;E1,245]
10.21 DATE/TIME FORMAT (FMTE) (K), [FMTE;E1,245]
10.22 TIME (K), [TIME;E1,245]
10.3 CARDINAL NUMBER FORMAT (K), [CRD;E1,245]
10.4 UPPERCASE CONVERSION (K), [UC;E1,245]
10.5 LOWERCASE CONVERSION (K), [LC;E1,245]
20.2 DATE INPUT (K), [20.2;E1,245]
STANDARD DATA DICTIONARY #.85 -- LANGUAGE FILE 12/27/11 PAGE 1
STORED IN ^DI(.85, (11 ENTRIES) SITE: VISTA Forum UCI: LIVE,FORUM (VERSION 22.0)
DATA NAME GLOBAL DATA
ELEMENT TITLE LOCATION TYPE
-------------------------------------------------------------------------------
IDENTIFIED BY: NAME (#1)[R]
POINTED TO BY:
LANGUAGE field (#.01) of the TRANSLATION sub-field (#.847) of
the DIALOG File (#.84)
LANGUAGE field (#200.07) of the NEW PERSON File (#200)
DEFAULT LANGUAGE field (#207) of the KERNEL SYSTEM PARAMETERS
File (#8989.3)
CROSS REFERENCED BY: ID NUMBER(B), NAME(C)
.85,.01 ID NUMBER 0;1 NUMBER (Required)
Language-ID-Number
INPUT TRANSFORM: K:+X'=X!(X>9999999999)!(X<1)!(X?.E1"."1N.N) X S
:$G(X) DINUM=X
LAST EDITED: MAY 24,1994
HELP-PROMPT: Type a Number between 1 and 9999999999, 0
Decimal Digits
DESCRIPTION: A number that is used to uniquely identify a
language. This number corresponds to the
FileMan system variable DUZ("LANG"), which is
set during Kernel signon to signify which
language FileMan should use.
NOTES: XXXX--CAN'T BE ALTERED EXCEPT BY PROGRAMMER
CROSS-REFERENCE: .85^B
1)= S ^DI(.85,"B",$E(X,1,30),DA)=""
2)= K ^DI(.85,"B",$E(X,1,30),DA)
.85,1 NAME 0;2 FREE TEXT (Required)
Language-Name
INPUT TRANSFORM: K:$L(X)>30!($L(X)<1) X
LAST EDITED: MAY 24,1994
HELP-PROMPT: Answer must be 1-30 characters in length.
(e.g., ENGLISH, GERMAN, FRENCH)
DESCRIPTION: The descriptive name of the language
corresponding to this entry (i.e., German,
Spanish).
TECHNICAL DESCR: Descriptive name of this language (e.g.,
ENGLISH, GERMAN).
CROSS-REFERENCE: .85^C
1)= S ^DI(.85,"C",$E(X,1,30),DA)=""
2)= K ^DI(.85,"C",$E(X,1,30),DA)
.85,10.1 ORDINAL NUMBER FORMAT ORD;E1,245 MUMPS
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM
LAST EDITED: MAR 7,1994
HELP-PROMPT: This is Standard MUMPS code.
DESCRIPTION: MUMPS code used to transfer a number in Y to
its ordinal equivalent in this language. The
code should set Y to the ordinal equivalent
without altering any other variables in the
environment. Ex. in English:
Y=1 becomes Y=1ST
Y=2 becomes Y=2ND
Y=3 becomes Y=3RD etc.
.85,10.2 DATE/TIME FORMAT DD;E1,245 MUMPS
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM
LAST EDITED: MAR 7,1994
HELP-PROMPT: This is Standard MUMPS code.
DESCRIPTION: MUMPS code used to transfer a date or date/time
in Y from FileMan internal format, to printable
format equivalent to English MMM
DD,YYYY@HH.MM.SS. The code should set Y to the
output, without altering any other variables in
the environment. Ex. in English:
Y=2940612.031245 becomes
Y=JUN 12,1994@03:12:45
.85,10.21 DATE/TIME FORMAT (FMTE) FMTE;E1,245 MUMPS
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM
LAST EDITED: JUN 24,1994
HELP-PROMPT: This is Standard MUMPS code.
DESCRIPTION: MUMPS code used to transfer a date or date/time
in Y from FileMan internal format, to printable
format based on the various outputs from
routine FMTE^DILIBF. This is an extrinsic
function. Coming in to this MUMPS code, in
addition to the internal date in Y, a third
parameter will be defined to contain flags
equivalent to the flag passed as the second
input parameter to FMTE^DILIBF. The code should
set Y to the output, without altering any other
variables in the environment. The output
should be formatted based on these flags:
1 MMM DD, YYYY@HH:MM:SS
2 MM/DD/YY@HH:MM:SS no leading zeroes
on month,day
3 DD/MM/YY@HH:MM:SS no leading zeroes
on month,day
4 YY/MM/DD@HH:MM:SS
5 MMM DD,YYYY@HH:MM:SS no space before
year,no leading zero on day
6 MM-DD-YYYY @ HH:MM:SS spaces separate
time
7 MM-DD-YYYY@HH:MM:SS no leading zeroes
on month,day
letters in the flag
S return always seconds
U return uppercase month names
P return time as am,pm
D return only date part
.85,10.22 TIME TIME;E1,245 MUMPS
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM
LAST EDITED: MAR 18,1996
HELP-PROMPT: This is Standard MUMPS code for the output of
time only.
DESCRIPTION: The code stored here will be used to get
formatted output of the time part belonging to
a FileMan Date/Time value.
.85,10.3 CARDINAL NUMBER FORMAT CRD;E1,245 MUMPS
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM
LAST EDITED: MAR 8,1994
HELP-PROMPT: This is Standard MUMPS code.
DESCRIPTION: MUMPS code used to transfer a number in Y to
its cardinal equivalent in this language. The
code should set Y to the cardinal equivalent
without altering any other variables in the
environment. Ex. in English:
Y=2000 becomes Y=2,000
Y=1234567 becomes Y=1,234,567
.85,10.4 UPPERCASE CONVERSION UC;E1,245 MUMPS
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM
LAST EDITED: MAR 8,1994
HELP-PROMPT: This is Standard MUMPS code.
DESCRIPTION: MUMPS code used to convert text in Y to its
upper-case equivalent in this language. The
code should set Y to the external format
without altering any other variables in the
environment. In English, changes
abCdeF to: ABCDEF
.85,10.5 LOWERCASE CONVERSION LC;E1,245 MUMPS
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM
LAST EDITED: MAR 8,1994
HELP-PROMPT: This is Standard MUMPS code.
DESCRIPTION: MUMPS code used to convert text in Y to its
lower-case equivalent in this language. The
code should set Y to the external format
without altering any other variables in the
environment. In English, changes:
ABcdEFgHij to: abcdefghij
.85,20.2 DATE INPUT 20.2;E1,245 MUMPS
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM
LAST EDITED: JUL 14,1994
HELP-PROMPT: This is Standard MUMPS code.
Existing File's Data
In the beginning, entries were created only for the language of the different nations where the team was aware File Manager was being used at the time. Most of the entries were left as placeholders to be filled in by expert VISTA adopters from those nations, but the team felt comfortable filling in English and German in detail, given their makeup.
Record number 10 was assigned to Arabic in gratitude for and recognition of the Arab scholars who introduced the concept of the number 0 to Europe (along with the rest of the Arabic numbering system). This assignment is important to the discussion that follows because it is the sole reason why this file has an ID Number field. As shown in the file's data dictionary above, the ID Number field (.001) is the internal record number exposed as a user-visible field. Usually this is done only when the record number is meaningful to an end user. In this case it is not; it has no significance at all, except that by adding it the team was able to ensure that Arabic was made language #10.
The entries for Russian, Greek, and Hebrew were added later.
LANGUAGE List DEC 27,2011@14:10 PAGE 1
--------------------------------------------------------------------------------
ID NUMBER: 1 NAME: ENGLISH
CARDINAL NUMBER FORMAT: I Y S Y=$FN(Y,",")
DATE/TIME FOR: S:Y Y=$S($E(Y,4,5):$P("JAN^FEB^MAR^APR^MAY^JUN^JUL^AUG^SEP^OCT^
NOV^DEC","^",+$E(Y,4,5))_" ",1:"")_$S($E(Y,6,7):+$E(Y,6,7)_",",1:"")_($E(Y,1,3)+
1700)_$P("@"_$E(Y_0,9,10)_":"_$E(Y_"000",11,12)_$S($E(Y,13,14):":"_$E(Y_0,13,14)
,1:""),"^",Y[".")
DATE/TIME FORMAT (FMTE): N RTN,%T S %T="."_$E($P(Y,".",2)_"000000",1,7),%F=$G(
%F),RTN="F"_$S(%F<1:1,%F>7:1,1:+%F\1)_"^DILIBF" D @RTN S Y=%R
LOWERCASE CONVERSION: S Y=$TR(Y,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnop
qrstuvwxyz")
ORDINAL NUMBER FORMAT: I $G(Y) S Y=Y_$S(Y#10=1&(Y#100-11):"ST",Y#10=2&(Y#100-1
2):"ND",Y#10=3&(Y#100-13):"RD",1:"TH")
TIME: S Y=$S($L($G(Y),".")>1:$E(Y_0,9,10)_":"_$E(Y_"000",11,12)_$S($E(Y,13,14)
:":"_$E(Y_0,13,14),1:""),1:"")
UPPERCASE CONVERSION: S Y=$TR(Y,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOP
QRSTUVWXYZ")
ID NUMBER: 2 NAME: GERMAN
CARDINAL NUMBER FORMAT: S:$G(Y) Y=$TR($FN(Y,","),",",".")
DATE/TIME FORMAT: S:Y Y=$S($E(Y,6,7):$E(Y,6,7)_".",1:"")_$S($E(Y,4,5):$E(Y,4,5
)_".",1:"")_($E(Y,1,3)+1700)_$P(" "_$E(Y_0,9,10)_":"_$E(Y_"000",11,12)_$S($E(Y,1
3,14):":"_$E(Y_0,13,14),1:""),"^",Y[".")
LOWERCASE CONVERSION: S Y=$TR(Y,"ABCDEFGHIJKLMNOPQRSTUVWXYZ[]\","abcdefghijklm
nopqrstuvwxyz{}|") ORDINAL NUMBER FORMAT: S:$G(Y) Y=Y_"."
TIME: S Y=$S($L($G(Y),".")>1:$E(Y_0,9,10)_":"_$E(Y_"000",11,12)_$S($E(Y,13,14)
:":"_$E(Y_0,13,14),1:""),1:"")
UPPERCASE CONVERSION: S Y=$TR(Y,"abcdefghijklmnopqrstuvwxyz{}|","ABCDEFGHIJKLM
NOPQRSTUVWXYZ[]\")
ID NUMBER: 3 NAME: SPANISH
ID NUMBER: 4 NAME: FRENCH
ID NUMBER: 5 NAME: FINNISH
DATE/TIME FORMAT: X:$G(Y) ^DD("DD") ORDINAL NUMBER FORMAT: I $G(Y) S Y=Y_"."
ID NUMBER: 6 NAME: ITALIAN
ID NUMBER: 7 NAME: PORTUGUESE
ID NUMBER: 10 NAME: ARABIC
ID NUMBER: 11 NAME: RUSSIAN
ID NUMBER: 12 NAME: GREEK
ID NUMBER: 18 NAME: HEBREW
Design Intentions
This version of the file was intended mainly to be used to assist in the process of translating all of VISTA's hard-coded text (such as in user prompts, help, and so on) into other languages so it could be used by non-English-speaking users. The only database pointers to the Language file are from (1) the Dialog file (#.84), which contains the canned text to be translated along with any translations, (2) the Kernel System Parameters file (8989.3), to allow the default language of the VISTA system to be set, and (3) the New Person file (200), to allow individual users to be set to a different language than the overall system.
In addition, the Kernel package during user sign-on would set the local variable DUZ("LANG") to the user's language, so that File Manager would offer dialog in that language wherever available. The intent was for packages to replace their hard-coded MUMPS write commands with calls to an API that would fetch the correct piece of dialog from the Dialog file, automatically translating it whenever DUZ("LANG") told it to. Because of the chaos in VISTA strategy and coordination over the past fifteen years, only two VISTA packages, File Manager and Mail Manager, have been converted so far to the use of this new internationalization framework. It remains a high priority for any future VISTA work to follow their example, not just to support multilingual use of VISTA but also because the same calls that support this also support separating the business logic from the user interface (UI), a necessary step in making it possible to convert VISTA applications to next-generation UIs like browsers and mobile devices.
The work to convert File Manager to the Dialog framework was done partly by VA's 1990s File Manager development team (named above), but especially by George Timson in his subsequent MSC Fileman work. The work to convert Mail Manager to the Dialog framework was done single-handedly by Gary Beuschel.
Improvements in Medsphere Fileman
George Timson, the original author of File Manager, made significant enhancements to File Manager after the U.S. Department of Veterans Affairs released version 22 (the last version of Fileman officially released so far). This work was done for and paid by various clients but especially by Medsphere Corporation. Included in this work were significant improvements to Fileman's internationalization framework, which gave Mr. Timson the ability to convert many of File Manager's unique elements of dialog (such as file and field names, word-processing values, and so on) over to the enhanced internationalization framework so they could be translated as well. Many files (including Fileman's own data dictionary, file #0) were pointed to the Language file, and a new Code field was added. In a more recent upgrade, Mr. Timson added separate fields for two-letter and three-letter codes, to be used to record the ISO 639 codes for languages.
Unfortunately, to date neither VA nor Indian Health Service (IHS) has adopted these extensions to File Manager. Therefore, they are not part of the VA's Freedom of Information Act (FOIA) release, and consequently neither are they the basis for WorldVistA EHR. Therefore, upgrading WorldVistA EHR to version 2.0 so it could be certified and so its adopters could attest to meaningful use had to be done independently of Mr. Timson's work.
For the brief present, Mr. Timson's work represents a fork, an alternative (and in most ways superior) dialect of File Manager. As described below, the full plans for this project include eventually synchronizing Mr. Timson's MSC Fileman solution to the language file with WorldVistA EHR 2.0's solution, to make it possible to later resolve the fork by adopting Mr. Timson's work into the WorldVistA EHR codebase. For now, their Language files will remain out of sync, making it problematic for the adopter of either to install the other.
Later in this project, as it moves toward the synchronization phase, this page will be expanded to compare MSC File Manager to WorldVistA EHR 2.0 File Manager in enough detail to guide the reunification.
Problems with Existing Architecture
The problems with the architecture before WorldVistA EHR 2.0 were these:
1) First, the Patient file needs to point to the Language file, but it did not.
2) Second, Chris Richardson rightly concluded that although meaningful use stage one only requires a single field to record preferred language, to be truly useful it should also include a multiple that records all the languages the patient knows, separately including how well they understand, speak, read, and write the language. Communicating with non-English-speaking people can often require round-about methods; after all, what if no one in the hospital speaks a patient's preferred language? If someone happens to speak an additional language they speak, you can still communicate with them. Likewise, some speakers of different dialects of Chinese cannot communicate through speech but can understand each other perfectly in writing. Tracking all four sets of skills for all languages a patient can speak is essential to maximizing the chances of communication, which is the spirit of this meaningful use stage one goal. The existing file also lacked such a subfile.
3) The main options used to edit and report patient demographics did not include these new fields.
4) The Language file itself contained only eleven languages. It needed its contents to be massively upgraded.
5) Although users refer to language by name, software prefers to refer to language by unique codes. Although such coding systems exist for languages, the existing data dictionary included no such coding fields.
6) Coding systems change over time. Tying a permanent hub file like Language to a specific generation of codes makes it impossible to keep track of changes to those codes over time. Some other file would be needed to keep track of the language codes themselves
7) The biggest problem with the existing file dates back to the decision to include Arabic. To make it easy to make Arabic language #10, the team made the key of the file be the record's internal entry number. When VA broke up the File Manager team, it de facto converted this temporary expediency into the permanent condition of the file, with the file's scaffolding released into production. The result is that pointers to the Language file from other files do not resolve as the name of the language but as its number, making it nearly useless to end users and meeting neither the spirit nor the letter of the meaningful use stage one goal.
To meet meaningful use stage one, all these problems had to be solved.
Components of Language File Version 2
The following seven changes make up this project:
1) Added Language Preference field (256000) to Patient file (2).
2) Added Language Skills subfile (256001/2.0256001) to Patient file (2).
3) Tertiary modifications to the primary options that edit and display patient demographic information.
4) Hundreds of new entries added to the Language file (.85).
5) New code fields added to the Language file (.85).
6) New VW HL7 Tables file (260).
7) Overhaul of data dictionary of the Language file (.85)
Patient File: Language Preference Field
This is the new field added to the Patient file (2) to support the letter of the preferred-language requirement of meaningful use stage one:
STANDARD DATA DICTIONARY #2 -- PATIENT FILE DEC 27,2011@19:09:49 PAGE 1
STORED IN ^DPT( (58806 ENTRIES) SITE: Oroville Hospital Development UCI: DEV,VISTA
(VERSION 5.3)
DATA NAME GLOBAL DATA
ELEMENT TITLE LOCATION TYPE
-------------------------------------------------------------------------------
2,256000 LANGUAGE PREFERENCE 256000;1 POINTER TO LANGUAGE FILE (#.85)
LAST EDITED: JUN 22, 2011
DESCRIPTION: This field is to define the language preference
of the patient.
FILES POINTED TO FIELDS
LANGUAGE (#.85) LANGUAGE PREFERENCE (#256000)
LANGUAGE SKILLS:LANGUAGE SKILLS (#.01)
This field was created by Chris Richardson.
Patient File: Language Skills Subfile
On 20 December 2010, Nancy Anthracite pointed the team to appendix A of the HL7 tables, which includes standards for language ability and language proficiency:
Language Ability 1 Read 2 Write 3 Speak 4 Understand 5 Sign
Language Proficiency 1 Excellent 2 Good 3 Fair 4 Poor 5 Some(level unknown)
In designing the subfile for the Patient file, Chris Richardson approximated these two standards but modified them. He changed the order of the abilities and omitted signing. He also changed the order of the proficiencies, replaced them with more specific and intuitive names where possible, followed the VISTA convention of eschewing numeric codes in favor of more user-friendly alphabetic ones, and omitted "some (level unknown)". Here is the resulting data dictionary for the new subfile:
STANDARD DATA DICTIONARY #2 -- PATIENT FILE DEC 27,2011@19:09:49 PAGE 1
STORED IN ^DPT( (58806 ENTRIES) SITE: Oroville Hospital Development UCI: DEV,VISTA
(VERSION 5.3)
DATA NAME GLOBAL DATA
ELEMENT TITLE LOCATION TYPE
-------------------------------------------------------------------------------
2,256001 LANGUAGE SKILLS 256001;0 POINTER Multiple #2.0256001
DESCRIPTION: The languages listed here are associated with a
series of qualifiers for UNDERSTANDING,
SPEAKING, READING, and/or WRITTEN skill levels
of each langua language specified for this
patient.
2.0256001,.01 LANGUAGE SKILLS 0;1 POINTER TO LANGUAGE FILE (#.85)
(Multiply asked)
LAST EDITED: MAY 24, 2011
DESCRIPTION: This multiple is to help catalog the language
skills of the patient. It may be the case
that a patient may be called upon to
communicate with other patients that the
staff is unable to communicate with
otherwise.
CROSS-REFERENCE: 2.0256001^B
1)= S ^DPT(DA(1),256001,"B",$E(X,1,30),DA)=""
2)= K ^DPT(DA(1),256001,"B",$E(X,1,30),DA)
2.0256001,1 UNDERSTANDING SKILL LEVEL 0;2 SET
'P' FOR poor to none;
'I' FOR intermediate;
'N' FOR native skills;
'M' FOR mastery of the Language;
LAST EDITED: MAY 24, 2011
2.0256001,2 SPEAKING SKILL LEVEL 0;3 SET
'P' FOR poor to none;
'I' FOR intermediate;
'N' FOR native skills;
'M' FOR mastery of the Language;
LAST EDITED: MAY 24, 2011
2.0256001,3 READING SKILL LEVEL 0;4 SET
'P' FOR poor to none;
'I' FOR intermediate;
'N' FOR native skills;
'M' FOR mastery of the Language;
LAST EDITED: MAY 24, 2011
2.0256001,4 WRITTEN SKILL LEVEL 0;5 SET
'P' FOR poor to none;
'I' FOR intermediate;
'N' FOR native skills;
'M' FOR mastery of the Language;
LAST EDITED: MAY 24, 2011
FILES POINTED TO FIELDS
LANGUAGE (#.85) LANGUAGE SKILLS:LANGUAGE SKILLS (#.01)
This subfile was created by Chris Richardson. Greg Woodhouse and Nancy Anthracite helped brainstorm the actual representation with him.
Why the Interpreter Language subfile (19906/2.019906) Was Not Used
WorldVistA EHR 1.0 included a subfile that was not used for this project. Here is its complete data dictionary:
STANDARD DATA DICTIONARY #2.019906 -- INTERPRETER LANGUAGE SUB-FILE
DEC 27,2011@18:16:57 PAGE 1
STORED IN ^DPT(D0,19901, SITE: Oroville Hospital Development UCI: DEV,VISTA
DATA NAME GLOBAL DATA
ELEMENT TITLE LOCATION TYPE
-------------------------------------------------------------------------------
CROSS REFERENCED BY: INTERPRETER LANGUAGE(B)
2.019906,.01 INTERPRETER LANGUAGE 0;1 POINTER TO LANGUAGE FILE (#.85)
(Multiply asked)
OUTPUT TRANSFORM: S Y=$$GET1^DIQ(.85,Y,1,"")
LAST EDITED: MAY 09, 2005
HELP-PROMPT: English is the default Language if no other
Language is entered. If others are entered and
the patient speaks English as well, ENGLISH
must be included in this field.
CROSS-REFERENCE: 2.019906^B
1)= S ^DPT(DA(1),19901,"B",$E(X,1,30),DA)=""
2)= K ^DPT(DA(1),19901,"B",$E(X,1,30),DA)
FILES POINTED TO FIELDS
LANGUAGE (#.85) INTERPRETER LANGUAGE (#.01)
This field, along with the other 19900-numberspaced fields, was created by Brian Lord at Daou Systems in 2005 as part of the Centers for Medicare and Medicaid Services's (CMS's) VistA-Office EHR (VOE) project. This was a project to modify VA's FOIA VISTA to create a dialect of VISTA preconfigured for small clinics and doctor's offices. It was inspired by studies showing the high rate of medical error in the United States and the promise of EHRs to drive down those errors; EHR uptake was especially low in small clinics and doctor's offices, so CMS wanted to create a free EHR they could adopt. The project was crushed when EHR vendors got wind of it, which interrupted the plans for this subfile along with everything else. Since this work predates meaningful use, it was originally added not to comply with MU stage one but to meet CMS's design requirements for the VOE project.
Note the use of the field's output transform to overcome the difficulty with pointers to the existing Language file resolving to language number rather than name. Also note the better-than-average help prompt. Although unfinished, this subfile was a good start on solving the problem.
When Chris Richardson set out to solve the problem of adding a preferred language field to the Patient file for meaningful use stage one, he decided against using the Interpreter Language field partly because of its unclear history at the time and partly because of its unfinished state. As part of the bundling of this work for distribution as part of WorldVistA EHR 2.0, Rick Marshall will delete this promising but unfinished and orphaned subfile from the Patient file.
At some point, the remaining 19900-numberspaced fields need to be analyzed as well for whether they are in use and whether they should be finished or removed.
Changes to Options
Language File: New Entries
The contents of the upgraded Language file (.85) were based on the contents of IHS's Language file (9999999.99), at the suggestion of Nancy Anthracite, Ben Mehling, and Fay ???. According to Ms. ??? the IHS file's contents were based on ISO 639-2 (http://www.loc.gov/standards/iso639-2/ascii_8bits.html), and according to Mr. Mehling Medsphere OpenVistA would use the same contents, so Ms. Anthracite chose to do likewise on 8 December 2010. Rick Marshall advised WorldVistA to upgrade File Manager's Language file (.85) instead of the IHS Language file, because language is too central to the emerging new VISTA architecture to have it stored in a peripheral file, especially when file .85 was already present to be used. Although the ISO 639 (http://en.wikipedia.org/wiki/ISO_639) standards had already been extended up through ISO 639-5, WorldVistA decided to restrict this upgrade to ISO 639-1 and 2 to maximize WorldVistA EHR 2.0's compatibility with RPMS and Medsphere OpenVistA.
Chris Richardson populated the file with data loaded from a spreadsheet containing the ISO 639-1 and 2 data on 21 December 2010.
LANGUAGE LIST JAN 22,2012 19:45 PAGE 1
--------------------------------------------------------------------------------
NAME: ENGLISH THREE LETTER CODE: ENG
TWO LETTER CODE: EN
CARDINAL NUMBER FORMAT: I Y S Y=$FN(Y,",")
DATE/TIME FOR: S:Y Y=$S($E(Y,4,5):$P("JAN^FEB^MAR^APR^MAY^JUN^JUL^AUG^SEP^OCT^NOV^DEC","^",+$E(Y,4,5))_" ",1:"")_$S($E(Y,6,7):+$E(Y,6,7)_",",1:"")_($E(Y,1,3)+1700)_$P("@"_$E(Y_0,9,10)_":"_$E(Y_"000",11,12)_$S($E(Y,13,14):":"_$E(Y_0,13,14),1:""),"^",Y[".")
DATE/TIME FORMAT (FMTE): N RTN,%T S %T="."_$E($P(Y,".",2)_"000000",1,7),%F=$G(%F),RTN="F"_$S(%F<1:1,%F>7:1,1:+%F\1)_"^DILIBF" D @RTN S Y=%R
LOWERCASE CONVERSION: S Y=$TR(Y,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
ORDINAL NUMBER FORMAT: I $G(Y) S Y=Y_$S(Y#10=1&(Y#100-11):"ST",Y#10=2&(Y#100-12):"ND",Y#10=3&(Y#100-13):"RD",1:"TH")
TIME: S Y=$S($L($G(Y),".")>1:$E(Y_0,9,10)_":"_$E(Y_"000",11,12)_$S($E(Y,13,14):":"_$E(Y_0,13,14),1:""),1:"")
UPPERCASE CONVERSION: S Y=$TR(Y,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
NAME: GERMAN THREE LETTER CODE: GER
TWO LETTER CODE: DE
CARDINAL NUMBER FORMAT: S:$G(Y) Y=$TR($FN(Y,","),",",".")
DATE/TIME FORMAT: S:Y Y=$S($E(Y,6,7):$E(Y,6,7)_".",1:"")_$S($E(Y,4,5):$E(Y,4,5)_".",1:"")_($E(Y,1,3)+1700)_$P(" "_$E(Y_0,9,10)_":"_$E(Y_"000",11,12)_$S($E(Y,13,14):":"_$E(Y_0,13,14),1:""),"^",Y[".")
LOWERCASE CONVERSION: S Y=$TR(Y,"ABCDEFGHIJKLMNOPQRSTUVWXYZ[]\","abcdefghijklmnopqrstuvwxyz{}|") ORDINAL NUMBER FORMAT: S:$G(Y) Y=Y_"."
TIME: S Y=$S($L($G(Y),".")>1:$E(Y_0,9,10)_":"_$E(Y_"000",11,12)_$S($E(Y,13,14):":"_$E(Y_0,13,14),1:""),1:"")
UPPERCASE CONVERSION: S Y=$TR(Y,"abcdefghijklmnopqrstuvwxyz{}|","ABCDEFGHIJKLMNOPQRSTUVWXYZ[]\")
NAME: SPANISH THREE LETTER CODE: SPA
TWO LETTER CODE: ES
NAME: FRENCH THREE LETTER CODE: FRE
TWO LETTER CODE: FR
NAME: FINNISH THREE LETTER CODE: FIN
TWO LETTER CODE: FI DATE/TIME FORMAT: X:$G(Y) ^DD("DD")
ORDINAL NUMBER FORMAT: I $G(Y) S Y=Y_"."
NAME: ITALIAN THREE LETTER CODE: ITA
TWO LETTER CODE: IT
NAME: PORTUGUESE THREE LETTER CODE: POR
TWO LETTER CODE: PT
NAME: ARABIC THREE LETTER CODE: ARA
TWO LETTER CODE: AR
NAME: RUSSIAN THREE LETTER CODE: RUS
TWO LETTER CODE: RU
NAME: GREEK THREE LETTER CODE: GRE
TWO LETTER CODE: EL
NAME: HEBREW THREE LETTER CODE: HEB
TWO LETTER CODE: HE
NAME: AFAR THREE LETTER CODE: AAR
TWO LETTER CODE: AA
NAME: ABKHAZIAN THREE LETTER CODE: ABK
TWO LETTER CODE: AB
NAME: ACHINESE THREE LETTER CODE: ACE
NAME: ACOLI THREE LETTER CODE: ACH
NAME: ADANGME THREE LETTER CODE: ADA
NAME: ADYGHE THREE LETTER CODE: ADY
NAME: AFRO-ASIATIC LANGUAGES THREE LETTER CODE: AFA
NAME: AFRIHILI THREE LETTER CODE: AFH
NAME: AFRIKAANS THREE LETTER CODE: AFR
TWO LETTER CODE: AF
NAME: AINU THREE LETTER CODE: AIN
NAME: AKAN THREE LETTER CODE: AKA
TWO LETTER CODE: AK
NAME: AKKADIAN THREE LETTER CODE: AKK
NAME: ALBANIAN THREE LETTER CODE: ALB
TWO LETTER CODE: SQ
NAME: ALEUT THREE LETTER CODE: ALE
NAME: ALGONQUIAN LANGUAGES THREE LETTER CODE: ALG
NAME: SOUTHERN ALTAI THREE LETTER CODE: ALT
NAME: AMHARIC THREE LETTER CODE: AMH
TWO LETTER CODE: AM
NAME: ENGLISH, OLD (CA.450-1100) THREE LETTER CODE: ANG
NAME: ANGIKA THREE LETTER CODE: ANP
NAME: APACHE LANGUAGES THREE LETTER CODE: APA
NAME: OFFICIAL ARAMAIC (700-300 BCE) THREE LETTER CODE: ARC
NAME: ARAGONESE THREE LETTER CODE: ARG
TWO LETTER CODE: AN
NAME: ARMENIAN THREE LETTER CODE: ARM
TWO LETTER CODE: HY
NAME: MAPUDUNGUN THREE LETTER CODE: ARN
NAME: ARAPAHO THREE LETTER CODE: ARP
NAME: ARTIFICIAL LANGUAGES THREE LETTER CODE: ART
NAME: ARAWAK THREE LETTER CODE: ARW
NAME: ASSAMESE THREE LETTER CODE: ASM
TWO LETTER CODE: AS
NAME: ASTURIAN THREE LETTER CODE: AST
NAME: ATHAPASCAN LANGUAGES THREE LETTER CODE: ATH
NAME: AUSTRALIAN LANGUAGES THREE LETTER CODE: AUS
NAME: AVARIC THREE LETTER CODE: AVA
TWO LETTER CODE: AV
NAME: AVESTAN THREE LETTER CODE: AVE
TWO LETTER CODE: AE
NAME: AWADHI THREE LETTER CODE: AWA
NAME: AYMARA THREE LETTER CODE: AYM
TWO LETTER CODE: AY
NAME: AZERBAIJANI THREE LETTER CODE: AZE
TWO LETTER CODE: AZ
NAME: BANDA LANGUAGES THREE LETTER CODE: BAD
NAME: BAMILEKE LANGUAGES THREE LETTER CODE: BAI
NAME: BASHKIR THREE LETTER CODE: BAK
TWO LETTER CODE: BA
NAME: BALUCHI THREE LETTER CODE: BAL
NAME: BAMBARA THREE LETTER CODE: BAM
TWO LETTER CODE: BM
NAME: BALINESE THREE LETTER CODE: BAN
NAME: BASQUE THREE LETTER CODE: BAQ
TWO LETTER CODE: EU
NAME: BASA THREE LETTER CODE: BAS
NAME: BALTIC LANGUAGES THREE LETTER CODE: BAT
NAME: BEJA THREE LETTER CODE: BEJ
NAME: BELARUSIAN THREE LETTER CODE: BEL
TWO LETTER CODE: BE
NAME: BEMBA THREE LETTER CODE: BEM
NAME: BENGALI THREE LETTER CODE: BEN
TWO LETTER CODE: BN
NAME: BERBER LANGUAGES) THREE LETTER CODE: BER
NAME: BHOJPURI THREE LETTER CODE: BHO
NAME: BIHARI LANGUAGES THREE LETTER CODE: BIH
TWO LETTER CODE: BH
NAME: BIKOL THREE LETTER CODE: BIK
NAME: BINI THREE LETTER CODE: BIN
NAME: BISLAMA THREE LETTER CODE: BIS
TWO LETTER CODE: BI
NAME: SIKSIKA THREE LETTER CODE: BLA
NAME: BANTU LANGUAGES THREE LETTER CODE: BNT
NAME: BOSNIAN THREE LETTER CODE: BOS
TWO LETTER CODE: BS
NAME: BRAJ THREE LETTER CODE: BRA
NAME: BRETON THREE LETTER CODE: BRE
TWO LETTER CODE: BR
NAME: BATAK LANGUAGES THREE LETTER CODE: BTK
NAME: BURIAT THREE LETTER CODE: BUA
NAME: BUGINESE THREE LETTER CODE: BUG
NAME: BULGARIAN THREE LETTER CODE: BUL
TWO LETTER CODE: BG
NAME: BURMESE THREE LETTER CODE: BUR
TWO LETTER CODE: MY
NAME: BLIN THREE LETTER CODE: BYN
NAME: CADDO THREE LETTER CODE: CAD
NAME: CENTRAL AMERICAN INDIAN LANGUAGES
THREE LETTER CODE: CAI
NAME: GALIBI CARIB THREE LETTER CODE: CAR
NAME: CATALAN THREE LETTER CODE: CAT
TWO LETTER CODE: CA
NAME: CAUCASIAN LANGUAGES THREE LETTER CODE: CAU
NAME: CEBUANO THREE LETTER CODE: CEB
NAME: CELTIC LANGUAGES THREE LETTER CODE: CEL
NAME: CHAMORRO THREE LETTER CODE: CHA
TWO LETTER CODE: CH
NAME: CHIBCHA THREE LETTER CODE: CHB
NAME: CHECHEN THREE LETTER CODE: CHE
TWO LETTER CODE: CE
NAME: CHAGATAI THREE LETTER CODE: CHG
NAME: CHINESE THREE LETTER CODE: CHI
TWO LETTER CODE: ZH
NAME: CHUUKESE THREE LETTER CODE: CHK
NAME: MARI THREE LETTER CODE: CHM
NAME: CHINOOK JARGON THREE LETTER CODE: CHN
NAME: CHOCTAW THREE LETTER CODE: CHO
NAME: CHIPEWYAN THREE LETTER CODE: CHP
NAME: CHEROKEE THREE LETTER CODE: CHR
NAME: CHURCH SLAVIC THREE LETTER CODE: CHU
TWO LETTER CODE: CU
NAME: CHUVASH THREE LETTER CODE: CHV
TWO LETTER CODE: CV
NAME: CHEYENNE THREE LETTER CODE: CHY
NAME: CHAMIC LANGUAGES THREE LETTER CODE: CMC
NAME: COPTIC THREE LETTER CODE: COP
NAME: CORNISH THREE LETTER CODE: COR
TWO LETTER CODE: KW
NAME: CORSICAN THREE LETTER CODE: COS
TWO LETTER CODE: CO
NAME: CREOLES AND PIDGINS, ENGLISH BASED
THREE LETTER CODE: CPE
NAME: CREOLES AND PIDGINS, FRENCH-BASED
THREE LETTER CODE: CPF
NAME: CREOLES AND PIDGINS, PORTUGUESE-BASED
THREE LETTER CODE: CPP
NAME: CREE THREE LETTER CODE: CRE
TWO LETTER CODE: CR
NAME: CRIMEAN TATAR THREE LETTER CODE: CRH
NAME: CREOLES AND PIDGINS THREE LETTER CODE: CRP
NAME: KASHUBIAN THREE LETTER CODE: CSB
NAME: CUSHITIC LANGUAGES THREE LETTER CODE: CUS
NAME: CZECH THREE LETTER CODE: CZE
TWO LETTER CODE: CS
NAME: DAKOTA THREE LETTER CODE: DAK
NAME: DANISH THREE LETTER CODE: DAN
TWO LETTER CODE: DA
NAME: DARGWA THREE LETTER CODE: DAR
NAME: LAND DAYAK LANGUAGES THREE LETTER CODE: DAY
NAME: DELAWARE THREE LETTER CODE: DEL
NAME: SLAVE (ATHAPASCAN) THREE LETTER CODE: DEN
NAME: DOGRIB THREE LETTER CODE: DGR
NAME: DINKA THREE LETTER CODE: DIN
NAME: DIVEHI THREE LETTER CODE: DIV
TWO LETTER CODE: DV
NAME: DOGRI THREE LETTER CODE: DOI
NAME: DRAVIDIAN LANGUAGES THREE LETTER CODE: DRA
NAME: LOWER SORBIAN THREE LETTER CODE: DSB
NAME: DUALA THREE LETTER CODE: DUA
NAME: DUTCH, MIDDLE (CA.1050-1350) THREE LETTER CODE: DUM
NAME: DUTCH THREE LETTER CODE: DUT
TWO LETTER CODE: NL
NAME: DYULA THREE LETTER CODE: DYU
NAME: DZONGKHA THREE LETTER CODE: DZO
TWO LETTER CODE: DZ
NAME: EFIK THREE LETTER CODE: EFI
NAME: EGYPTIAN (ANCIENT) THREE LETTER CODE: EGY
NAME: EKAJUK THREE LETTER CODE: EKA
NAME: ELAMITE THREE LETTER CODE: ELX
NAME: ENGLISH, MIDDLE (1100-1500) THREE LETTER CODE: ENM
NAME: ESPERANTO THREE LETTER CODE: EPO
TWO LETTER CODE: EO
NAME: ESTONIAN THREE LETTER CODE: EST
TWO LETTER CODE: ET
NAME: EWE THREE LETTER CODE: EWE
TWO LETTER CODE: EE
NAME: EWONDO THREE LETTER CODE: EWO
NAME: FANG THREE LETTER CODE: FAN
NAME: FAROESE THREE LETTER CODE: FAO
TWO LETTER CODE: FO
NAME: FANTI THREE LETTER CODE: FAT
NAME: FIJIAN THREE LETTER CODE: FIJ
TWO LETTER CODE: FJ
NAME: FILIPINO THREE LETTER CODE: FIL
NAME: FINNO-UGRIAN LANGUAGES) THREE LETTER CODE: FIU
NAME: FON THREE LETTER CODE: FON
NAME: FRENCH, MIDDLE (CA.1400-1600) THREE LETTER CODE: FRM
NAME: FRENCH, OLD (842-CA.1400) THREE LETTER CODE: FRO
NAME: NORTHERN FRISIAN THREE LETTER CODE: FRR
NAME: EASTERN FRISIAN THREE LETTER CODE: FRS
NAME: WESTERN FRISIAN THREE LETTER CODE: FRY
TWO LETTER CODE: FY
NAME: FULAH THREE LETTER CODE: FUL
TWO LETTER CODE: FF
NAME: FRIULIAN THREE LETTER CODE: FUR
NAME: GA THREE LETTER CODE: GAA
NAME: GAYO THREE LETTER CODE: GAY
NAME: GBAYA THREE LETTER CODE: GBA
NAME: GERMANIC LANGUAGES THREE LETTER CODE: GEM
NAME: GEORGIAN THREE LETTER CODE: GEO
TWO LETTER CODE: KA
NAME: GEEZ THREE LETTER CODE: GEZ
NAME: GILBERTESE THREE LETTER CODE: GIL
NAME: GAELIC THREE LETTER CODE: GLA
TWO LETTER CODE: GD
NAME: IRISH THREE LETTER CODE: GLE
TWO LETTER CODE: GA
NAME: GALICIAN THREE LETTER CODE: GLG
TWO LETTER CODE: GL
NAME: MANX THREE LETTER CODE: GLV
TWO LETTER CODE: GV
NAME: GERMAN, MIDDLE HIGH (CA.1050-1500)
THREE LETTER CODE: GMH
NAME: GERMAN, OLD HIGH (CA.750-1050) THREE LETTER CODE: GOH
NAME: GONDI THREE LETTER CODE: GON
NAME: GORONTALO THREE LETTER CODE: GOR
NAME: GOTHIC THREE LETTER CODE: GOT
NAME: GREBO THREE LETTER CODE: GRB
NAME: GREEK, ANCIENT (TO 1453) THREE LETTER CODE: GRC
NAME: GREEK, MODERN (1453-) THREE LETTER CODE: GRE
TWO LETTER CODE: EL
NAME: GUARANI THREE LETTER CODE: GRN
TWO LETTER CODE: GN
NAME: SWISS GERMAN THREE LETTER CODE: GSW
NAME: GUJARATI THREE LETTER CODE: GUJ
TWO LETTER CODE: GU
NAME: GWICH'IN THREE LETTER CODE: GWI
NAME: HAIDA THREE LETTER CODE: HAI
NAME: HAITIAN THREE LETTER CODE: HAT
TWO LETTER CODE: HT
NAME: HAUSA THREE LETTER CODE: HAU
TWO LETTER CODE: HA
NAME: HAWAIIAN THREE LETTER CODE: HAW
NAME: HERERO THREE LETTER CODE: HER
TWO LETTER CODE: HZ
NAME: HILIGAYNON THREE LETTER CODE: HIL
NAME: HIMACHALI LANGUAGES THREE LETTER CODE: HIM
NAME: HINDI THREE LETTER CODE: HIN
TWO LETTER CODE: HI
NAME: HITTITE THREE LETTER CODE: HIT
NAME: HMONG THREE LETTER CODE: HMN
NAME: HIRI MOTU THREE LETTER CODE: HMO
TWO LETTER CODE: HO
NAME: CROATIAN THREE LETTER CODE: HRV
TWO LETTER CODE: HR
NAME: UPPER SORBIAN THREE LETTER CODE: HSB
NAME: HUNGARIAN THREE LETTER CODE: HUN
TWO LETTER CODE: HU
NAME: HUPA THREE LETTER CODE: HUP
NAME: IBAN THREE LETTER CODE: IBA
NAME: IGBO THREE LETTER CODE: IBO
TWO LETTER CODE: IG
NAME: ICELANDIC THREE LETTER CODE: ICE
TWO LETTER CODE: IS
NAME: IDO THREE LETTER CODE: IDO
TWO LETTER CODE: IO
NAME: SICHUAN YI THREE LETTER CODE: III
TWO LETTER CODE: II
NAME: IJO LANGUAGES THREE LETTER CODE: IJO
NAME: INUKTITUT THREE LETTER CODE: IKU
TWO LETTER CODE: IU
NAME: INTERLINGUE THREE LETTER CODE: ILE
TWO LETTER CODE: IE
NAME: ILOKO THREE LETTER CODE: ILO
NAME: INTERLINGUA (INTERNATIONAL AUXILIARY LANGUAGE ASSOCIATION)
THREE LETTER CODE: INA TWO LETTER CODE: IA
NAME: INDIC LANGUAGES THREE LETTER CODE: INC
NAME: INDONESIAN THREE LETTER CODE: IND
TWO LETTER CODE: ID
NAME: INDO-EUROPEAN LANGUAGES THREE LETTER CODE: INE
NAME: INGUSH THREE LETTER CODE: INH
NAME: INUPIAQ THREE LETTER CODE: IPK
TWO LETTER CODE: IK
NAME: IRANIAN LANGUAGES THREE LETTER CODE: IRA
NAME: IROQUOIAN LANGUAGES THREE LETTER CODE: IRO
NAME: JAVANESE THREE LETTER CODE: JAV
TWO LETTER CODE: JV
NAME: LOJBAN THREE LETTER CODE: JBO
NAME: JAPANESE THREE LETTER CODE: JPN
TWO LETTER CODE: JA
NAME: JUDEO-PERSIAN THREE LETTER CODE: JPR
NAME: JUDEO-ARABIC THREE LETTER CODE: JRB
NAME: KARA-KALPAK THREE LETTER CODE: KAA
NAME: KABYLE THREE LETTER CODE: KAB
NAME: KACHIN THREE LETTER CODE: KAC
NAME: KALAALLISUT THREE LETTER CODE: KAL
TWO LETTER CODE: KL
NAME: KAMBA THREE LETTER CODE: KAM
NAME: KANNADA THREE LETTER CODE: KAN
TWO LETTER CODE: KN
NAME: KAREN LANGUAGES THREE LETTER CODE: KAR
NAME: KASHMIRI THREE LETTER CODE: KAS
TWO LETTER CODE: KS
NAME: KANURI THREE LETTER CODE: KAU
TWO LETTER CODE: KR
NAME: KAWI THREE LETTER CODE: KAW
NAME: KAZAKH THREE LETTER CODE: KAZ
TWO LETTER CODE: KK
NAME: KABARDIAN THREE LETTER CODE: KBD
NAME: KHASI THREE LETTER CODE: KHA
NAME: KHOISAN LANGUAGES THREE LETTER CODE: KHI
NAME: CENTRAL KHMER THREE LETTER CODE: KHM
TWO LETTER CODE: KM
NAME: KHOTANESE THREE LETTER CODE: KHO
NAME: KIKUYU THREE LETTER CODE: KIK
TWO LETTER CODE: KI
NAME: KINYARWANDA THREE LETTER CODE: KIN
TWO LETTER CODE: RW
NAME: KIRGHIZ THREE LETTER CODE: KIR
TWO LETTER CODE: KY
NAME: KIMBUNDU THREE LETTER CODE: KMB
NAME: KONKANI THREE LETTER CODE: KOK
NAME: KOMI THREE LETTER CODE: KOM
TWO LETTER CODE: KV
NAME: KONGO THREE LETTER CODE: KON
TWO LETTER CODE: KG
NAME: KOREAN THREE LETTER CODE: KOR
TWO LETTER CODE: KO
NAME: KOSRAEAN THREE LETTER CODE: KOS
NAME: KPELLE THREE LETTER CODE: KPE
NAME: KARACHAY-BALKAR THREE LETTER CODE: KRC
NAME: KARELIAN THREE LETTER CODE: KRL
NAME: KRU LANGUAGES THREE LETTER CODE: KRO
NAME: KURUKH THREE LETTER CODE: KRU
NAME: KUANYAMA THREE LETTER CODE: KUA
TWO LETTER CODE: KJ
NAME: KUMYK THREE LETTER CODE: KUM
NAME: KURDISH THREE LETTER CODE: KUR
TWO LETTER CODE: KU
NAME: KUTENAI THREE LETTER CODE: KUT
NAME: LADINO THREE LETTER CODE: LAD
NAME: LAHNDA THREE LETTER CODE: LAH
NAME: LAMBA THREE LETTER CODE: LAM
NAME: LAO THREE LETTER CODE: LAO
TWO LETTER CODE: LO
NAME: LATIN THREE LETTER CODE: LAT
TWO LETTER CODE: LA
NAME: LATVIAN THREE LETTER CODE: LAV
TWO LETTER CODE: LV
NAME: LEZGHIAN THREE LETTER CODE: LEZ
NAME: LIMBURGAN THREE LETTER CODE: LIM
TWO LETTER CODE: LI
NAME: LINGALA THREE LETTER CODE: LIN
TWO LETTER CODE: LN
NAME: LITHUANIAN THREE LETTER CODE: LIT
TWO LETTER CODE: LT
NAME: MONGO THREE LETTER CODE: LOL
NAME: LOZI THREE LETTER CODE: LOZ
NAME: LUXEMBOURGISH THREE LETTER CODE: LTZ
TWO LETTER CODE: LB
NAME: LUBA-LULUA THREE LETTER CODE: LUA
NAME: LUBA-KATANGA THREE LETTER CODE: LUB
TWO LETTER CODE: LU
NAME: GANDA THREE LETTER CODE: LUG
TWO LETTER CODE: LG
NAME: LUISENO THREE LETTER CODE: LUI
NAME: LUNDA THREE LETTER CODE: LUN
NAME: LUO (KENYA AND TANZANIA) THREE LETTER CODE: LUO
NAME: LUSHAI THREE LETTER CODE: LUS
NAME: MACEDONIAN THREE LETTER CODE: MAC
TWO LETTER CODE: MK
NAME: MADURESE THREE LETTER CODE: MAD
NAME: MAGAHI THREE LETTER CODE: MAG
NAME: MARSHALLESE THREE LETTER CODE: MAH
TWO LETTER CODE: MH
NAME: MAITHILI THREE LETTER CODE: MAI
NAME: MAKASAR THREE LETTER CODE: MAK
NAME: MALAYALAM THREE LETTER CODE: MAL
TWO LETTER CODE: ML
NAME: MANDINGO THREE LETTER CODE: MAN
NAME: MAORI THREE LETTER CODE: MAO
TWO LETTER CODE: MI
NAME: AUSTRONESIAN LANGUAGES THREE LETTER CODE: MAP
NAME: MARATHI THREE LETTER CODE: MAR
TWO LETTER CODE: MR
NAME: MASAI THREE LETTER CODE: MAS
NAME: MALAY THREE LETTER CODE: MAY
TWO LETTER CODE: MS
NAME: MOKSHA THREE LETTER CODE: MDF
NAME: MANDAR THREE LETTER CODE: MDR
NAME: MENDE THREE LETTER CODE: MEN
NAME: IRISH, MIDDLE (900-1200) THREE LETTER CODE: MGA
NAME: MI'KMAQ THREE LETTER CODE: MIC
NAME: MINANGKABAU THREE LETTER CODE: MIN
NAME: UNCODED LANGUAGES THREE LETTER CODE: MIS
NAME: MON-KHMER LANGUAGES THREE LETTER CODE: MKH
NAME: MALAGASY THREE LETTER CODE: MLG
TWO LETTER CODE: MG
NAME: MALTESE THREE LETTER CODE: MLT
TWO LETTER CODE: MT
NAME: MANCHU THREE LETTER CODE: MNC
NAME: MANIPURI THREE LETTER CODE: MNI
NAME: MANOBO LANGUAGES THREE LETTER CODE: MNO
NAME: MOHAWK THREE LETTER CODE: MOH
NAME: MONGOLIAN THREE LETTER CODE: MON
TWO LETTER CODE: MN
NAME: MOSSI THREE LETTER CODE: MOS
NAME: MULTIPLE LANGUAGES THREE LETTER CODE: MUL
NAME: MUNDA LANGUAGES THREE LETTER CODE: MUN
NAME: CREEK THREE LETTER CODE: MUS
NAME: MIRANDESE THREE LETTER CODE: MWL
NAME: MARWARI THREE LETTER CODE: MWR
NAME: MAYAN LANGUAGES THREE LETTER CODE: MYN
NAME: ERZYA THREE LETTER CODE: MYV
NAME: NAHUATL LANGUAGES THREE LETTER CODE: NAH
NAME: NORTH AMERICAN INDIAN LANGUAGES THREE LETTER CODE: NAI
NAME: NEAPOLITAN THREE LETTER CODE: NAP
NAME: NAURU THREE LETTER CODE: NAU
TWO LETTER CODE: NA
NAME: NAVAJO THREE LETTER CODE: NAV
TWO LETTER CODE: NV
NAME: NDEBELE, SOUTH THREE LETTER CODE: NBL
TWO LETTER CODE: NR
NAME: NDEBELE, NORTH THREE LETTER CODE: NDE
TWO LETTER CODE: ND
NAME: NDONGA THREE LETTER CODE: NDO
TWO LETTER CODE: NG
NAME: LOW GERMAN THREE LETTER CODE: NDS
NAME: NEPALI THREE LETTER CODE: NEP
TWO LETTER CODE: NE
NAME: NEPAL BHASA THREE LETTER CODE: NEW
NAME: NIAS THREE LETTER CODE: NIA
NAME: NIGER-KORDOFANIAN LANGUAGES THREE LETTER CODE: NIC
NAME: NIUEAN THREE LETTER CODE: NIU
NAME: NORWEGIAN NYNORSK THREE LETTER CODE: NNO
TWO LETTER CODE: NN
NAME: BOKMåL, NORWEGIAN THREE LETTER CODE: NOB
TWO LETTER CODE: NB
NAME: NOGAI THREE LETTER CODE: NOG
NAME: NORSE, OLD THREE LETTER CODE: NON
NAME: NORWEGIAN THREE LETTER CODE: NOR
TWO LETTER CODE: NO
NAME: N'KO THREE LETTER CODE: NQO
NAME: PEDI THREE LETTER CODE: NSO
NAME: NUBIAN LANGUAGES THREE LETTER CODE: NUB
NAME: CLASSICAL NEWARI THREE LETTER CODE: NWC
NAME: CHICHEWA THREE LETTER CODE: NYA
TWO LETTER CODE: NY
NAME: NYAMWEZI THREE LETTER CODE: NYM
NAME: NYANKOLE THREE LETTER CODE: NYN
NAME: NYORO THREE LETTER CODE: NYO
NAME: NZIMA THREE LETTER CODE: NZI
NAME: OCCITAN (POST 1500) THREE LETTER CODE: OCI
TWO LETTER CODE: OC
NAME: OJIBWA THREE LETTER CODE: OJI
TWO LETTER CODE: OJ
NAME: ORIYA THREE LETTER CODE: ORI
TWO LETTER CODE: OR
NAME: OROMO THREE LETTER CODE: ORM
TWO LETTER CODE: OM
NAME: OSAGE THREE LETTER CODE: OSA
NAME: OSSETIAN THREE LETTER CODE: OSS
TWO LETTER CODE: OS
NAME: TURKISH, OTTOMAN (1500-1928) THREE LETTER CODE: OTA
NAME: OTOMIAN LANGUAGES THREE LETTER CODE: OTO
NAME: PAPUAN LANGUAGES THREE LETTER CODE: PAA
NAME: PANGASINAN THREE LETTER CODE: PAG
NAME: PAHLAVI THREE LETTER CODE: PAL
NAME: PAMPANGA THREE LETTER CODE: PAM
NAME: PANJABI THREE LETTER CODE: PAN
TWO LETTER CODE: PA
NAME: PAPIAMENTO THREE LETTER CODE: PAP
NAME: PALAUAN THREE LETTER CODE: PAU
NAME: PERSIAN, OLD (CA.600-400 B.C.) THREE LETTER CODE: PEO
NAME: PERSIAN THREE LETTER CODE: PER
TWO LETTER CODE: FA
NAME: PHILIPPINE LANGUAGES) THREE LETTER CODE: PHI
NAME: PHOENICIAN THREE LETTER CODE: PHN
NAME: PALI THREE LETTER CODE: PLI
TWO LETTER CODE: PI
NAME: POLISH THREE LETTER CODE: POL
TWO LETTER CODE: PL
NAME: POHNPEIAN THREE LETTER CODE: PON
NAME: PRAKRIT LANGUAGES THREE LETTER CODE: PRA
NAME: PROVENçAL, OLD (TO 1500) THREE LETTER CODE: PRO
NAME: PUSHTO THREE LETTER CODE: PUS
TWO LETTER CODE: PS
NAME: RESERVED FOR LOCAL USE (QAA-QTZ) THREE LETTER CODE: QAA
NAME: QUECHUA THREE LETTER CODE: QUE
TWO LETTER CODE: QU
NAME: RAJASTHANI THREE LETTER CODE: RAJ
NAME: RAPANUI THREE LETTER CODE: RAP
NAME: RAROTONGAN THREE LETTER CODE: RAR
NAME: ROMANCE LANGUAGES THREE LETTER CODE: ROA
NAME: ROMANSH THREE LETTER CODE: ROH
TWO LETTER CODE: RM
NAME: ROMANY THREE LETTER CODE: ROM
NAME: ROMANIAN THREE LETTER CODE: RUM
TWO LETTER CODE: RO
NAME: RUNDI THREE LETTER CODE: RUN
TWO LETTER CODE: RN
NAME: AROMANIAN THREE LETTER CODE: RUP
NAME: SANDAWE THREE LETTER CODE: SAD
NAME: SANGO THREE LETTER CODE: SAG
TWO LETTER CODE: SG
NAME: YAKUT THREE LETTER CODE: SAH
NAME: SOUTH AMERICAN INDIAN LANGUAGES THREE LETTER CODE: SAI
NAME: SALISHAN LANGUAGES THREE LETTER CODE: SAL
NAME: SAMARITAN ARAMAIC THREE LETTER CODE: SAM
NAME: SANSKRIT THREE LETTER CODE: SAN
TWO LETTER CODE: SA
NAME: SASAK THREE LETTER CODE: SAS
NAME: SANTALI THREE LETTER CODE: SAT
NAME: SICILIAN THREE LETTER CODE: SCN
NAME: SCOTS THREE LETTER CODE: SCO
NAME: SELKUP THREE LETTER CODE: SEL
NAME: SEMITIC LANGUAGES THREE LETTER CODE: SEM
NAME: IRISH, OLD (TO 900) THREE LETTER CODE: SGA
NAME: SIGN LANGUAGES THREE LETTER CODE: SGN
NAME: SHAN THREE LETTER CODE: SHN
NAME: SIDAMO THREE LETTER CODE: SID
NAME: SINHALA THREE LETTER CODE: SIN
TWO LETTER CODE: SI
NAME: SIOUAN LANGUAGES THREE LETTER CODE: SIO
NAME: SINO-TIBETAN LANGUAGES THREE LETTER CODE: SIT
NAME: SLAVIC LANGUAGES THREE LETTER CODE: SLA
NAME: SLOVAK THREE LETTER CODE: SLO
TWO LETTER CODE: SK
NAME: SLOVENIAN THREE LETTER CODE: SLV
TWO LETTER CODE: SL
NAME: SOUTHERN SAMI THREE LETTER CODE: SMA
NAME: NORTHERN SAMI THREE LETTER CODE: SME
TWO LETTER CODE: SE
NAME: SAMI LANGUAGES THREE LETTER CODE: SMI
NAME: LULE SAMI THREE LETTER CODE: SMJ
NAME: INARI SAMI THREE LETTER CODE: SMN
NAME: SAMOAN THREE LETTER CODE: SMO
TWO LETTER CODE: SM
NAME: SKOLT SAMI THREE LETTER CODE: SMS
NAME: SHONA THREE LETTER CODE: SNA
TWO LETTER CODE: SN
NAME: SINDHI THREE LETTER CODE: SND
TWO LETTER CODE: SD
NAME: SONINKE THREE LETTER CODE: SNK
NAME: SOGDIAN THREE LETTER CODE: SOG
NAME: SOMALI THREE LETTER CODE: SOM
TWO LETTER CODE: SO
NAME: SONGHAI LANGUAGES THREE LETTER CODE: SON
NAME: SOTHO, SOUTHERN THREE LETTER CODE: SOT
TWO LETTER CODE: ST
NAME: SARDINIAN THREE LETTER CODE: SRD
TWO LETTER CODE: SC
NAME: SRANAN TONGO THREE LETTER CODE: SRN
NAME: SERBIAN THREE LETTER CODE: SRP
TWO LETTER CODE: SR
NAME: SERER THREE LETTER CODE: SRR
NAME: NILO-SAHARAN LANGUAGES THREE LETTER CODE: SSA
NAME: SWATI THREE LETTER CODE: SSW
TWO LETTER CODE: SS
NAME: SUKUMA THREE LETTER CODE: SUK
NAME: SUNDANESE THREE LETTER CODE: SUN
TWO LETTER CODE: SU
NAME: SUSU THREE LETTER CODE: SUS
NAME: SUMERIAN THREE LETTER CODE: SUX
NAME: SWAHILI THREE LETTER CODE: SWA
TWO LETTER CODE: SW
NAME: SWEDISH THREE LETTER CODE: SWE
TWO LETTER CODE: SV
NAME: CLASSICAL SYRIAC THREE LETTER CODE: SYC
NAME: SYRIAC THREE LETTER CODE: SYR
NAME: TAHITIAN THREE LETTER CODE: TAH
TWO LETTER CODE: TY
NAME: TAI LANGUAGES THREE LETTER CODE: TAI
NAME: TAMIL THREE LETTER CODE: TAM
TWO LETTER CODE: TA
NAME: TATAR THREE LETTER CODE: TAT
TWO LETTER CODE: TT
NAME: TELUGU THREE LETTER CODE: TEL
TWO LETTER CODE: TE
NAME: TIMNE THREE LETTER CODE: TEM
NAME: TERENO THREE LETTER CODE: TER
NAME: TETUM THREE LETTER CODE: TET
NAME: TAJIK THREE LETTER CODE: TGK
TWO LETTER CODE: TG
NAME: TAGALOG THREE LETTER CODE: TGL
TWO LETTER CODE: TL
NAME: THAI THREE LETTER CODE: THA
TWO LETTER CODE: TH
NAME: TIBETAN THREE LETTER CODE: TIB
TWO LETTER CODE: BO
NAME: TIGRE THREE LETTER CODE: TIG
NAME: TIGRINYA THREE LETTER CODE: TIR
TWO LETTER CODE: TI
NAME: TIV THREE LETTER CODE: TIV
NAME: TOKELAU THREE LETTER CODE: TKL
NAME: KLINGON THREE LETTER CODE: TLH
NAME: TLINGIT THREE LETTER CODE: TLI
NAME: TAMASHEK THREE LETTER CODE: TMH
NAME: TONGA (NYASA) THREE LETTER CODE: TOG
NAME: TONGA (TONGA ISLANDS) THREE LETTER CODE: TON
TWO LETTER CODE: TO
NAME: TOK PISIN THREE LETTER CODE: TPI
NAME: TSIMSHIAN THREE LETTER CODE: TSI
NAME: TSWANA THREE LETTER CODE: TSN
TWO LETTER CODE: TN
NAME: TSONGA THREE LETTER CODE: TSO
TWO LETTER CODE: TS
NAME: TURKMEN THREE LETTER CODE: TUK
TWO LETTER CODE: TK
NAME: TUMBUKA THREE LETTER CODE: TUM
NAME: TUPI LANGUAGES THREE LETTER CODE: TUP
NAME: TURKISH THREE LETTER CODE: TUR
TWO LETTER CODE: TR
NAME: ALTAIC LANGUAGES THREE LETTER CODE: TUT
NAME: TUVALU THREE LETTER CODE: TVL
NAME: TWI THREE LETTER CODE: TWI
TWO LETTER CODE: TW
NAME: TUVINIAN THREE LETTER CODE: TYV
NAME: UDMURT THREE LETTER CODE: UDM
NAME: UGARITIC THREE LETTER CODE: UGA
NAME: UIGHUR THREE LETTER CODE: UIG
TWO LETTER CODE: UG
NAME: UKRAINIAN THREE LETTER CODE: UKR
TWO LETTER CODE: UK
NAME: UMBUNDU THREE LETTER CODE: UMB
NAME: UNDETERMINED THREE LETTER CODE: UND
NAME: URDU THREE LETTER CODE: URD
TWO LETTER CODE: UR
NAME: UZBEK THREE LETTER CODE: UZB
TWO LETTER CODE: UZ
NAME: VAI THREE LETTER CODE: VAI
NAME: VENDA THREE LETTER CODE: VEN
TWO LETTER CODE: VE
NAME: VIETNAMESE THREE LETTER CODE: VIE
TWO LETTER CODE: VI
NAME: VOLAPüK THREE LETTER CODE: VOL
TWO LETTER CODE: VO
NAME: VOTIC THREE LETTER CODE: VOT
NAME: WAKASHAN LANGUAGES THREE LETTER CODE: WAK
NAME: WOLAITTA THREE LETTER CODE: WAL
NAME: WARAY THREE LETTER CODE: WAR
NAME: WASHO THREE LETTER CODE: WAS
NAME: WELSH THREE LETTER CODE: WEL
TWO LETTER CODE: CY
NAME: SORBIAN LANGUAGES THREE LETTER CODE: WEN
NAME: WALLOON THREE LETTER CODE: WLN
TWO LETTER CODE: WA
NAME: WOLOF THREE LETTER CODE: WOL
TWO LETTER CODE: WO
NAME: KALMYK THREE LETTER CODE: XAL
NAME: XHOSA THREE LETTER CODE: XHO
TWO LETTER CODE: XH
NAME: YAO THREE LETTER CODE: YAO
NAME: YAPESE THREE LETTER CODE: YAP
NAME: YIDDISH THREE LETTER CODE: YID
TWO LETTER CODE: YI
NAME: YORUBA THREE LETTER CODE: YOR
TWO LETTER CODE: YO
NAME: YUPIK LANGUAGES THREE LETTER CODE: YPK
NAME: ZAPOTEC THREE LETTER CODE: ZAP
NAME: BLISSYMBOLS THREE LETTER CODE: ZBL
NAME: ZENAGA THREE LETTER CODE: ZEN
NAME: ZHUANG THREE LETTER CODE: ZHA
TWO LETTER CODE: ZA
NAME: ZANDE LANGUAGES THREE LETTER CODE: ZND
NAME: ZULU THREE LETTER CODE: ZUL
TWO LETTER CODE: ZU
NAME: ZUNI THREE LETTER CODE: ZUN
NAME: NO LINGUISTIC CONTENT THREE LETTER CODE: ZXX
NAME: ZAZA THREE LETTER CODE: ZZA
Language File: Code Fields
Extending the Language file to store two- or three-character codes has gone through several drafts.
George Timson developed the first code field for the Language file for Medsphere OpenVistA. This field is part of the current draft of MSC Fileman:
.85,21400 CODE MSCISO;1 FREE TEXT
INPUT TRANSFORM: K:X'?2L.E X
HELP-PROMPT: This is the ISO code for the language. Max 9
bytes. Starts with two lower-case characters
(e.g., 'en_US')
Instead of storing codes in the Language file, John McCormack developed a VW HL7 Tables file (260, described below) that can handle code-set versioning, then added a field to the Language file to point to this new file. This field is part of the current draft of WorldVistA EHR 2.0:
.85,250001 ISO LANGUAGE CODE 250000;1 POINTER TO VW HL7 TABLES FILE (#2
60)
INPUT TRANSFORM: S DIC("S")="I $P(^(0),U,3)=""HL70296""" D ^DIC
K DIC S DIC=$G(DIE),X=+Y K:Y<0 X
LAST EDITED: JUN 13, 2011
HELP-PROMPT: Select the language code related to this
language.
DESCRIPTION: Identifies the type of language being mapped
to an ISO code.
SCREEN: S DIC("S")="I $P(^(0),U,3)=""HL70296"""
EXPLANATION: Only languages from HL7 table 0296 are selectab
le.
Chris Richardson, recognizing that two fields would be needed to record both two-character and three-character codes, and recognizing that these codes are useful identifiers for the Language file, added them as fields .03 and .04 on the 0 node. George Timson, concerned about collisions with future VA development on this file, convinced him to move them to name- and number-spaced fields on a separate node and with (semi-)namespaced cross-references:
.85,256000.01 VW 3 LETTER ABBREVIATION ABR;1 FREE TEXT
INPUT TRANSFORM: K:$L(X)>3!($L(X)<3) X
LAST EDITED: APR 12, 2011
HELP-PROMPT: Answer must be 3 characters in length.
DESCRIPTION: This abbreviation is loaded from the ISO
standard file for this purpose.
CROSS-REFERENCE: .85^VW3
1)= S ^DI(.85,"VW3",$E(X,1,30),DA)=""
2)= K ^DI(.85,"VW3",$E(X,1,30),DA)
3)= Regenerate Cross-Reference, Do not Delete
This is a quick lookup for three letter
abbreviations for languages.
.85,256000.02 VW 2 LETTER ABBREVIATION ABR;2 FREE TEXT
INPUT TRANSFORM: K:$L(X)>2!($L(X)<2) X
LAST EDITED: APR 12, 2011
HELP-PROMPT: Answer must be 2 characters in length.
DESCRIPTION: This is derived from the ISO standards for
abbreviations.
CROSS-REFERENCE: .85^VW2
1)= S ^DI(.85,"VW2",$E(X,1,30),DA)=""
2)= K ^DI(.85,"VW2",$E(X,1,30),DA)
3)= Re-generate, do not delete.
This is a sparser array than the 3 letter
abbreviation.
VW HL7 Tables File
In parallel with the upgrade to the Language file, John McCormack created the VW HL7 Tables file (260) to record codes from different codesets (including ISO 639) in a file that supported version control. Although this project is described in fuller detail on a separate Vistapedia page, a condensed version of the new file's DD is shown below for context:
CONDENSED DATA DICTIONARY---VW HL7 TABLES FILE (#260)UCI: DEV,VISTA VERSION: 2.0
STORED IN: ^VWLEX(260, 01/22/12 PAGE 1
--------------------------------------------------------------------------------
DD SECURITY : DELETE SECURITY:
READ SECURITY : LAYGO SECURITY :
WRITE SECURITY :
(NOTE: Kernel's File Access Security has been installed in this UCI.)
CROSS REFERENCED BY:
TERM(B)
FILE #260
INDEXED BY: CODE ID & CODE SYSTEM (AC), TABLE VERSION & CODE SYSTEM &
CODE ID (AD), TABLE VERSION & CODE SYSTEM & CODE ID (AE),
APPLICATION GROUP & APPLICATION USE (AG), TABLE & TERM STATUS
(AH), TERM (C), NAME (D), NAME (E), TABLE (H)
FILE STRUCTURE
FIELD FIELD
NUMBER NAME
.001 SEQUENCE (NJ7,0), [ ]
.01 TERM (RFJ30), [0;1]
.02 CODE TYPE (S), [0;2]
.03 TABLE (FJ7), [0;3]
.04 NAME (FJ100), [0;4]
.05 TABLE OID (FJ64), [0;5]
.06 TERM STATUS (S), [0;6]
.07 REPLACEMENT TERM (*P260'), [0;7]
.08 ENTRY STATUS (S), [0;8]
.99 DESCRIPTION (Multiple-260.0099), [.99;0]
.01 DESCRIPTION (W), [0;1]
1 VERSION (Multiple-260.001), [1;0]
.01 TABLE VERSION (MFJ10), [0;1]
.02 CODE ID (FJ15), [0;2]
.03 CODE TEXT (FJ100), [0;3]
.04 CODE SYSTEM (*P260'), [0;4]
.05 CODE SYSTEM NAME (FJ20), [0;5]
.06 CODE SYSTEM OID (FJ64), [0;6]
.07 CODE STATUS (S), [0;7]
.08 EFFECTIVE DATE (D), [0;8]
.09 EXPIRATION DATE (D), [0;9]
.1 CHECK DIGIT SCHEME (S), [0;10]
.11 CODE SYSTEM VERSION (FJ20), [1;1]
.12 STATUS DATE (D), [1;2]
2 APPLICATION GROUP (Multiple-260.002), [2;0]
.01 APPLICATION GROUP (FJ4), [0;1]
.02 APPLICATION USE (S), [0;2]
With this file created, Mr. McCormack considered the approach of doing away with the code fields in the Language file and instead using a simple pointer to file 260 to designate the code, on the reasonable theory that because code sets tend to be volatile and in need of versioning, they need to be stored in a file like 260 that supports versioning and should not also be redundantly stored elsewhere (such as in the Language file).
However, Rick Marshall argued that although that is generally true, it does not apply to the Language file for three reasons. First, Language names are often not unique in the first few characters (especially with cases like GREEK, ANCIENT versus GREEK, MODERN), so the file needs short codes that can be used as identifiers. Second, the versioning of the ISO 639 standards is cumulative rather than operating by replacement; the codes have to be stable from version to version because they are hard coded into all HTML documents on the World Wide Web. Third, and most importantly, as the foundation package of VISTA, File Manager cannot be dependent upon any other package (such as HL7, where file 260 will eventually go to live); putting a field that points to file 260 in file .85 would break the inter-package dependencies.
Therefore, Mr. McCormack agreed that WorldVistA would remove the ISO Language Code field from file .85. Instead file 260 would be extended to allow it to point to entities in other files that its codes describe. These two changes have not yet been made to the current draft of WorldVistA EHR 2.0.
Mr. McCormack also agreed WorldVistA EHR 2.0 will keep the two- and three-character code fields in file .85, though all versioning information about the codes as members of a codeset will indeed be stored in file 260; the two fields in file .85 will be treated merely as short identifiers, not as codes per se.
Language File: Data Dictionary Overhaul
Distributing and Installing the Core Language File
Distributing and Installing the Extended Language File
Licensing
Installing the Language File Version 2
System Requirements
Infrastructure Dependencies
VISTA Package Dependencies
Downloading the Software
Installation and Configuration
Verifying the Installation
Contributors
Version 2 Language file
Chris Richardson George Timson Nancy Anthracite John McCormack Brian Lord Greg Woodhouse David Whitten Kevin Toppenberg Ben Mehling Rick Marshall
Version 1 Language file
Marcus Werners Maureen Hoye Tami Winn Danila Manapsal Michael Ogi Don Creaven David LaLiberte Rick Marshall
Future Development
Later in 2012, revisit the Language file to upgrade it to include the latest versions of the language standards - ISO 639-3 & 5, which include a lot more languages, dialects, and language families - and redo this process. There's no rush on that since the current generation of the data is sufficient for our current needs.
Thereafter in 2012, work with John McCormack to capture the coding systems themselves in his new coding-system file and to work out the proper distribution of entries in that file - which package should they belong to, etc. - and then distribute those coding systems with pointers back to the Language file. John's design separates the true entity we are trying to represent (the actual human language in the Language file) from the coding system that tries to represent it, and it can be updated over generations of standards (the coding system in John's coding-system file) and then link them by having the coding system point to its referent. It standardizes a pattern in the VISTA database that had been accumulating in an ad hoc and tangled way into a new, clean, extensible architecture for managing coding systems and weaving them into the VISTA architecture. We will support his architecture by making the language coding systems a guinea pig.
Immediate To Do List for the Language File Version 2
This temporary section will track the work left to be done to polish and release version 2 of the Language file. As items are completed, they will be checked off. When all items are complete, this section will be removed.
1. Finish writing this Wikipedia article.
2. Confirm its accuracy with the principals who did the initial work.
3. Resolve potential duplicate of Greek in Language file.
4. Consider adding Signing to the Language Skills subfile of the Patient file, to better match the HL7 standard.
5. Improve the help and technical help for all the DD elements introduced or revised as part of this project.
6. Delete the Interpreter Language subfile from the Patient file.
7. Investigate whether to delete the other Daou-added fields in the 19900 numberspace from the Patient file.
8. Modify the DINIT routines in WorldVistA EHR 2.0 to correct the DD of the Language file and its small set of core entries so they match.
9. Create the DILAINIT routines to generate the full Language file 2.0.
10. Apply those inits to a WV EHR environment to prove they work.
11. Send them to Skip Ormsby with simple instructions for how to weave them into his next WV EHR KIDS distribution's pre-install routine. This should give WV EHR everything it needs to proceed for the current version.
12. Reapply these same changes on top of an MSC Fileman environment to "rebundle" them as MSC File Manager changes.
12. Send them to George Timson for inclusion in a new MSC Fileman release, so those who install MSC Fileman over WV EHR don't undo WV EHR's shiny new Language file.