Language File (.85): Difference between revisions
Add executive summary to top of article. |
|||
| (78 intermediate revisions by 4 users not shown) | |||
| Line 1: | Line 1: | ||
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 | 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 and two. | ||
[http://en.wiktionary.org/wiki/TLDR TL;DR] Summary: | |||
Go here to download and install the file: [http://www.vistapedia.com/index.php/Language_File_%28.85%29#Installing_the_Language_File_Version_2 Installing_the_Language_File_Version_2] | |||
== Background for the Language File Version 2 == | == Background for the Language File Version 2 == | ||
| Line 6: | Line 10: | ||
=== Meaningful-use Requirement === | === 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 | Stage one of meaningful use include a core objective that users be able to [[record~|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 [[record~|Record]]ed 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: | Here is the precise wording about these core objectives from the Federal Register, Vol. 75, No. 8, Wednesday, January 13, 2010, Rules and Regulations: | ||
| Line 22: | Line 26: | ||
"TABLE 1—CERTIFICATION CRITERIA . . . | "TABLE 1—CERTIFICATION CRITERIA . . . | ||
"Proposed meaningful use Stage 1 objectives: | "Proposed meaningful use Stage 1 objectives: F 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 professionals: Enable a user to electronically [[record~|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.' | "Certification criteria to support the achievement of meaningful use Stage 1 by eligible hospital: Enable a user to electronically [[record~|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.' | "[4] For eligible professionals the full proposed meaningful use Stage 1 objective is: '[[record~|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.' | "[5] For eligible hospitals the full proposed meaningful use Stage 1 objective is: '[[record~|Record]] demographics: preferred language, insurance type, gender, race, ethnicity, date of birth, date and cause of death in the event of mortality.' | ||
". . . | ". . . | ||
| Line 38: | Line 42: | ||
"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: . . . | "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. | "(c) [[Record~|Record]] demographics. Enable a user to electronically [[record~|Record]], modify, and retrieve patient demographic data including preferred language, insurance type, gender, race, ethnicity, and date of birth. | ||
". . . | ". . . | ||
| Line 46: | Line 50: | ||
"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: . . . | "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." | "(b) [[Record~|Record]] demographics. Enable a user to electronically [[record~|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. | 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. | ||
| Line 131: | Line 135: | ||
:$G(X) DINUM=X | :$G(X) DINUM=X | ||
LAST EDITED: MAY 24,1994 | LAST EDITED: MAY 24,1994 | ||
HELP-PROMPT: Type a Number between 1 and 9999999999, 0 | HELP-[[PROMPT~|Prompt]]: Type a Number between 1 and 9999999999, 0 | ||
Decimal Digits | Decimal Digits | ||
DESCRIPTION: A number that is used to uniquely identify a | DESCRIPTION: A number that is used to uniquely identify a | ||
| Line 150: | Line 154: | ||
INPUT TRANSFORM: K:$L(X)>30!($L(X)<1) X | INPUT TRANSFORM: K:$L(X)>30!($L(X)<1) X | ||
LAST EDITED: MAY 24,1994 | LAST EDITED: MAY 24,1994 | ||
HELP-PROMPT: Answer must be 1-30 characters in length. | HELP-[[PROMPT~|Prompt]]: Answer must be 1-30 characters in length. | ||
(e.g., ENGLISH, GERMAN, FRENCH) | (e.g., ENGLISH, GERMAN, FRENCH) | ||
DESCRIPTION: The descriptive name of the language | DESCRIPTION: The descriptive name of the language | ||
| Line 167: | Line 171: | ||
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | ||
LAST EDITED: MAR 7,1994 | LAST EDITED: MAR 7,1994 | ||
HELP-PROMPT: This is Standard MUMPS code. | HELP-[[PROMPT~|Prompt]]: This is Standard MUMPS code. | ||
DESCRIPTION: MUMPS code used to transfer a number in Y to | DESCRIPTION: MUMPS code used to transfer a number in Y to | ||
its ordinal equivalent in this language. The | its ordinal equivalent in this language. The | ||
| Line 181: | Line 185: | ||
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | ||
LAST EDITED: MAR 7,1994 | LAST EDITED: MAR 7,1994 | ||
HELP-PROMPT: This is Standard MUMPS code. | HELP-[[PROMPT~|Prompt]]: This is Standard MUMPS code. | ||
DESCRIPTION: MUMPS code used to transfer a date or date/time | DESCRIPTION: MUMPS code used to transfer a date or date/time | ||
in Y from FileMan internal format, to printable | in Y from FileMan internal format, to printable | ||
| Line 196: | Line 200: | ||
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | ||
LAST EDITED: JUN 24,1994 | LAST EDITED: JUN 24,1994 | ||
HELP-PROMPT: This is Standard MUMPS code. | HELP-[[PROMPT~|Prompt]]: This is Standard MUMPS code. | ||
DESCRIPTION: MUMPS code used to transfer a date or date/time | DESCRIPTION: MUMPS code used to transfer a date or date/time | ||
in Y from FileMan internal format, to printable | in Y from FileMan internal format, to printable | ||
| Line 233: | Line 237: | ||
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | ||
LAST EDITED: MAR 18,1996 | LAST EDITED: MAR 18,1996 | ||
HELP-PROMPT: This is Standard MUMPS code for the output of | HELP-[[PROMPT~|Prompt]]: This is Standard MUMPS code for the output of | ||
time only. | time only. | ||
DESCRIPTION: The code stored here will be used to get | DESCRIPTION: The code stored here will be used to get | ||
| Line 243: | Line 247: | ||
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | ||
LAST EDITED: MAR 8,1994 | LAST EDITED: MAR 8,1994 | ||
HELP-PROMPT: This is Standard MUMPS code. | HELP-[[PROMPT~|Prompt]]: This is Standard MUMPS code. | ||
DESCRIPTION: MUMPS code used to transfer a number in Y to | DESCRIPTION: MUMPS code used to transfer a number in Y to | ||
its cardinal equivalent in this language. The | its cardinal equivalent in this language. The | ||
| Line 256: | Line 260: | ||
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | ||
LAST EDITED: MAR 8,1994 | LAST EDITED: MAR 8,1994 | ||
HELP-PROMPT: This is Standard MUMPS code. | HELP-[[PROMPT~|Prompt]]: This is Standard MUMPS code. | ||
DESCRIPTION: MUMPS code used to convert text in Y to its | DESCRIPTION: MUMPS code used to convert text in Y to its | ||
upper-case equivalent in this language. The | upper-case equivalent in this language. The | ||
| Line 268: | Line 272: | ||
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | ||
LAST EDITED: MAR 8,1994 | LAST EDITED: MAR 8,1994 | ||
HELP-PROMPT: This is Standard MUMPS code. | HELP-[[PROMPT~|Prompt]]: This is Standard MUMPS code. | ||
DESCRIPTION: MUMPS code used to convert text in Y to its | DESCRIPTION: MUMPS code used to convert text in Y to its | ||
lower-case equivalent in this language. The | lower-case equivalent in this language. The | ||
| Line 280: | Line 284: | ||
INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | INPUT TRANSFORM: K:$L(X)>245 X D:$D(X) ^DIM | ||
LAST EDITED: JUL 14,1994 | LAST EDITED: JUL 14,1994 | ||
HELP-PROMPT: This is Standard MUMPS code. | HELP-[[PROMPT~|Prompt]]: This is Standard MUMPS code. | ||
==== Existing File's Data ==== | ==== Existing File's Data ==== | ||
| Line 286: | Line 290: | ||
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. | 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. | [[Record~|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~|Record]] number exposed as a user-visible field. Usually this is done only when the [[record~|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. | The entries for Russian, Greek, and Hebrew were added later. | ||
| Line 344: | Line 348: | ||
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. | 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 | In addition, the Kernel package during user sign-on would set the local variable DUZ("LANG") to a 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 [[application~|Application]]s 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 ==== | ==== 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. | 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~|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. | 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 | 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. | 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. | ||
UPDATE: As of November 2012, the various changes to Fileman from different adopters will be convereged to Fileman 22.2, the successor to MSC Fileman, which will be adopted by the VA. As part of these, the Language file designed by Rick Marshall including fields for ISO 639-1 and ISO 639-2 will be the same between WV and MSC Fileman. | |||
=== Problems with Existing Architecture === | === Problems with Existing Architecture === | ||
| Line 362: | Line 370: | ||
1) First, the Patient file needs to point to the Language file, but it did not. | 1) First, the Patient file needs to point to the Language file, but it did not. | ||
2) Second, Chris Richardson rightly concluded that although | 2) Second, Chris Richardson rightly concluded that although meaningful use stage one only requires a single field to [[record~|Record]] preferred language, to be truly useful it should also include a multiple that [[record~|Record]]s 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. | 3) The main options used to edit and report patient demographics did not include these new fields. | ||
| Line 372: | Line 380: | ||
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 | 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 | 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~|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 | To meet meaningful use stage one, all these problems had to be solved. | ||
== Components of Language File Version 2 == | == Components of Language File Version 2 == | ||
=== Patient File: | 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 === | === 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. | |||
==== Use of the Interpreter Language subfile (19906/2.019906) ==== | |||
WorldVistA EHR 1.0 includes a subfile that is 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. | |||
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. | |||
The field is asked in WorldVistA 2.0 registration, but not displayed in any place except patient registration. | |||
=== Changes to Options === | === Changes to Options === | ||
=== Language File: New Entries === | === 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 Stubble. According to Ms. Stubble 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. | |||
NOTE: Correction. This is what RPMS actually says: | |||
<pre> | |||
This file reflects entries in the U.S. Census Bureau's 2000 ACS 1-year & 2001 ACS 1-year PUMS Language Codes table | |||
(accessible at http://www.census.gov/acs/www/Products/PUMS/C2SS/CodeList/2000-2001/Language.htm) . | |||
Local additions or modifications should not be made. | |||
</pre> | |||
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 === | === 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~|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~|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 === | === VW HL7 Tables File === | ||
In parallel with the upgrade to the Language file, John McCormack created the VW HL7 Tables file (260) to [[record~|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~|Application]] GROUP & [[Application~|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~|Application]] GROUP (Multiple-260.002), [2;0] | |||
.01 [[APPLICATION~|Application]] GROUP (FJ4), [0;1] | |||
.02 [[APPLICATION~|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 == | |||
=== Listing of the new Language File === | |||
Condensed Listing | |||
<pre> | |||
CONDENSED DATA DICTIONARY---LANGUAGE FILE (#.85)UCI: EHR,EHR VERSION: 22.2 | |||
STORED IN: ^DI(.85, 11/08/12 PAGE 1 | |||
-------------------------------------------------------------------------------- | |||
FILE SECURITY | |||
DD SECURITY : ^ DELETE SECURITY: ^ | |||
READ SECURITY : LAYGO SECURITY : ^ | |||
WRITE SECURITY : ^ | |||
CROSS REFERENCED BY: | |||
ALTERNATE NAME(F) | |||
FILE #.85 | |||
INDEXED BY: NAME (B), TWO LETTER CODE (C), THREE LETTER CODE (D), | |||
ALTERNATE THREE LETTER CODE (E) | |||
FILE STRUCTURE | |||
FIELD FIELD | |||
NUMBER NAME | |||
.001 ID NUMBER (NJ10,0), [ ] | |||
.01 NAME (RFJ60), [0;1] | |||
.02 TWO LETTER CODE (FJ2), [0;2] | |||
.03 THREE LETTER CODE (FJ3), [0;3] | |||
.04 FOUR LETTER CODE (FJ4), [0;4] | |||
.05 ALTERNATE THREE LETTER CODE (FJ3), [0;5] | |||
.06 SCOPE (S), [0;6] | |||
.07 TYPE (S), [0;7] | |||
.08 LINGUISTIC CATEGORY (*P.85'), [0;8] | |||
.09 MEMBER OF LANGUAGE SET (*P.85'), [0;9] | |||
1 ALTERNATE NAME (Multiple-.8501), [1;0] | |||
.01 ALTERNATE NAME (MFJ60), [0;1] | |||
10 DESCRIPTION (Multiple-.8502), [10;0] | |||
.01 DESCRIPTION (Wx), [0;1] | |||
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] | |||
</pre> | |||
Indexes and Xrefs. | |||
<pre> | |||
INDEX AND CROSS-REFERENCE LIST -- FILE #.85 11/08/12 PAGE 1 | |||
------------------------------------------------------------------------------- | |||
File #.85 | |||
New-Style Indexes: | |||
B (#544) FIELD REGULAR IR LOOKUP & SORTING | |||
Unique for: Key A (#82), File #.85 | |||
Short Descr: Regular new-style B Index | |||
Set Logic: S ^DI(.85,"B",X,DA)="" | |||
Kill Logic: K ^DI(.85,"B",X,DA) | |||
Whole Kill: K ^DI(.85,"B") | |||
X(1): NAME (.85,.01) (Subscr 1) (forwards) | |||
C (#545) FIELD REGULAR IR LOOKUP & SORTING | |||
Short Descr: Regular new style index on two letter language codes | |||
Set Logic: S ^DI(.85,"C",X,DA)="" | |||
Kill Logic: K ^DI(.85,"C",X,DA) | |||
Whole Kill: K ^DI(.85,"C") | |||
X(1): TWO LETTER CODE (.85,.02) (Subscr 1) (forwards) | |||
D (#546) FIELD REGULAR IR LOOKUP & SORTING | |||
Unique for: Key B (#83), File #.85 | |||
Short Descr: Regular new-style index for three letter abbreviations for | |||
languages | |||
Set Logic: S ^DI(.85,"D",$E(X,1,30),DA)="" | |||
Kill Logic: K ^DI(.85,"D",$E(X,1,30),DA) | |||
Whole Kill: K ^DI(.85,"D") | |||
X(1): THREE LETTER CODE (.85,.03) (Subscr 1) (Len 30) | |||
(forwards) | |||
E (#547) FIELD MUMPS IR LOOKUP & SORTING | |||
Short Descr: (Pseudo-)Mneumonic index for the Alternate three letter | |||
code | |||
Description: This will add entries to the C index for the three letter | |||
code a la the mnemonic style. | |||
If you need re-cross-reference this field, you need to kill | |||
of the entries in the regular C index, set the C index, and | |||
then set this index to update the C with the mnemonic | |||
xrefs. | |||
Set Logic: S ^DI(.85,"D",X,DA)=1 | |||
Kill Logic: K ^DI(.85,"D",X,DA) | |||
X(1): ALTERNATE THREE LETTER CODE (.85,.05) (Subscr 1) | |||
(forwards) | |||
Subfile #.8501 | |||
Traditional Cross-References: | |||
B REGULAR | |||
Field: ALTERNATE NAME (.8501,.01) | |||
1)= S ^DI(.85,DA(1),1,"B",$E(X,1,30),DA)="" | |||
2)= K ^DI(.85,DA(1),1,"B",$E(X,1,30),DA) | |||
F REGULAR WHOLE FILE (#.85) | |||
Field: ALTERNATE NAME (.8501,.01) | |||
Description: Whole file cross-reference for ALTERNATE NAME multiple. | |||
1)= S ^DI(.85,"F",$E(X,1,30),DA(1),DA)="" | |||
2)= K ^DI(.85,"F",$E(X,1,30),DA(1),DA) | |||
3)= WHOLE FILE CROSS REFERENCE FOR ALTERNATE NAME | |||
</pre> | |||
<pre> | |||
KEY LIST -- FILE #.85 | |||
------------------------------------ | |||
FILE #.85 | |||
--------- | |||
PRIMARY KEY: A (#82) | |||
Uniqueness Index: B (#544) | |||
File, Field: 1) NAME (.85,.01) | |||
SECONDARY KEY: B (#83) | |||
Uniqueness Index: D (#546) | |||
File, Field: 1) THREE LETTER CODE (.85,.03) | |||
</pre> | |||
Sample Entry | |||
<pre> | |||
ID NUMBER: 2 NAME: GERMAN | |||
TWO LETTER CODE: DE THREE LETTER CODE: DEU | |||
ALTERNATE THREE LETTER CODE: GER | |||
ALTERNATE NAME: GERMAN, STANDARD | |||
ALTERNATE NAME: STANDARD GERMAN | |||
ALTERNATE NAME: DEUTSCH | |||
ALTERNATE NAME: DEUTSCH SPRACHE | |||
ALTERNATE NAME: TEDESCO | |||
ALTERNATE NAME: MODERN GERMAN (1500-) | |||
ALTERNATE NAME: GERMAN,MODERN (1500-) | |||
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[]\") | |||
</pre> | |||
=== Distributing and Installing the Core Language File === | === Distributing and Installing the Core Language File === | ||
When people refer to a Fileman file, they usually mean a file stored in the File Manager database management system (DBMS), but there a very different definition applies to the Language file. When a Fileman file is one of the files that Fileman himself uses to give him the ability to be a DBMS, when it's one of the files he uses to store all other files (like the File file), then the process of distributing and installing it is significantly more difficult, because he has to bootstrap himself without depending on any other package (including Kernel, the home of the Kernel Installation and Distribution System, or KIDS). This makes bundling up and distributing our changes a rare challenge of a kind that only members of the Fileman Development Team ever face. | |||
Before the advent of KIDS with Kernel version 7 (May 1993), software was bundled and distributed not by Kernel but by Fileman. A developer who wanted to distribute a package would run the Fileman module ^DIFROM, answer questions about what they wanted to distribute, then DIFROM would generate a set of initialization routines that could be run at the destination sites to install the package. This is the general pattern of how we will distribute these Language file changes, except for one very important difference. | |||
Because Fileman installing itself is a classic "boostrap yourself" situation, you cannot use DIFROM to create the DINIT routines (the initialization routines for Fileman's own files). The DINITs have to be hand-built to simulate what DIFROM would have created were it possible. | |||
The project sketch for this task is: (1) to map out how the DINITs transport the existing Language file, (2) to plan out the changes to make to convert the DINITs to the new Language file, and (3) to modify the DINITs and test them thoroughly. | |||
==== Mapping out How the DINITs Transport the Existing Language File ==== | |||
The following DINIT routines are involved in transporting the Language file: | |||
DINIT ;SFISC/GFT,XAK-INITIALIZE VA FILEMAN ;29MAY2006 | |||
DINIT3 ;SFISC/GFT-INITIALIZE VA FILEMAN ;28AUG2008 | |||
DINIT011 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;13JAN2011 | |||
DINIT012 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;2APR2004 | |||
DINIT013 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;9:34 AM 7 Aug 2002 | |||
DINIT and DINIT3 contain top-level control-flow logic for installing the Dialog and Language files. DINIT011, DINIT012, and DINIT013 install the DDs and data for the Language file, and are called by DINIT. | |||
Here is a routine-by-routine breakdown of what they do: | |||
===== DINIT ===== | |||
DINIT is both the main entry point and the master-control routine for Fileman initialization. | |||
It is called at the top and performs the installation in four not-clearly documented steps: | |||
1) ask all the init questions, | |||
2) install the two foundational files (DD and File), | |||
3) install the three files all the other Fileman files might point to and the code might use (MUMPS Operating System, Dialog, and Language), and | |||
4) install the rest of the Fileman files. Subroutine OSETC handles step three. | |||
Here is the part of DINIT that involves the Language file: | |||
K ^UTILITY(U,$J),^UTILITY("DIK",$J) W !!,"Now loading DIALOG and LANGUAGE Files" | |||
S DN="^DINIT" F R=1:1:39 D @(DN_$$B36(R)) W "." | |||
S $P(^DIC(.84,0),U,1,2)="DIALOG^.84",$P(^DI(.84,0),U,1,2)="DIALOG^.84I" I $D(^DIC(.84,0,"GL")) D A1^DINIT3 | |||
S $P(^DIC(.85,0),U,1,2)="LANGUAGE^.85",$P(^DI(.85,0),U,1,2)="LANGUAGE^.85I" I $D(^DIC(.85,0,"GL")) D A1^DINIT3 | |||
F I=.84,.841,.842,.844,.845,.847,.8471,.85 D XX^DINIT3 | |||
D DATA | |||
Q | |||
; | |||
DATA W "." S (D,DDF(1),DDT(0))=$O(^UTILITY(U,$J,0)) Q:D'>0 | |||
S DTO=0,DMRG=1,DTO(0)=^(D),Z=^(D)_"0)",D0=^(D,0),@Z=D0,DFR(1)="^UTILITY(U,$J,DDF(1),D0,",DKP=0 F D0=0:0 S D0=$O(^UTILITY(U,$J,DDF(1),D0)) S:D0="" D0=-1 Q:'$D(^(D0,0)) S Z=^(0) D I^DITR | |||
K ^UTILITY(U,$J,DDF(1)),DDF,DDT,DTO,DFR,DFN,DTN G DATA | |||
; | |||
B36(X) Q $$N1(X\(36*36)#36+1)_$$N1(X\36#36+1)_$$N1(X#36+1) | |||
N1(%) Q $E("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",%) | |||
Here is the same part annotated and refactored for clarity: | |||
K ^UTILITY(U,$J) ; clear the data-tranport global | |||
K ^UTILITY("DIK",$J) ; clear the reindexing global | |||
W !!,"Now loading DIALOG and LANGUAGE Files" | |||
; | |||
; The first thirty-nine handle Dialog and Language, | |||
; a group of thirty-six for Dialog, a group of three for Language. | |||
; Each group starts with routines that load the File file entry and the DD for that file, | |||
; then routines that load its data-transport global ^UTILITY(“^”,$J,DD #,*). | |||
S DN="^DINIT" ; unlike most packages, all FM data-transport routines start with DINIT, not DIN | |||
F R=1:1:39 D @(DN_$$B36(R)) W "." ; call each data-transport routine and write dots | |||
; | |||
S $P(^DIC(.84,0),U,1,2)="DIALOG^.84" ; Set the File file stub entry for the Dialog file | |||
S $P(^DI(.84,0),U,1,2)="DIALOG^.84I"; Set the data file stub entry for the Dialog file | |||
I $D(^DIC(.84,0,"GL")) D A1^DINIT3; Set the security for the Dialog file | |||
; | |||
S $P(^DIC(.85,0),U,1,2)="LANGUAGE^.85" ; Set the File file stub entry for the Language file | |||
S $P(^DI(.85,0),U,1,2)="LANGUAGE^.85I" ; Set the data file stub entry for the language file | |||
I $D(^DIC(.85,0,"GL")) D A1^DINIT3 ; Set the security for the Language file | |||
; | |||
; re-cross-reference Dialog & Language file DDs | |||
; and those of their subfiles | |||
F I=.84,.841,.842,.844,.845,.847,.8471,.85 D XX^DINIT3 | |||
; | |||
D DATA | |||
; | |||
QUIT ; end of OSETC | |||
; | |||
; | |||
DATA ; install data for one data file | |||
; input: ^utility(“^”,$j,file #,*) for each file | |||
; output: data is loaded into each data file | |||
; | |||
W "." | |||
S (D,DDF(1),DDT(0))=$O(^UTILITY(U,$J,0)) ; which data file is next (.84, then .85) | |||
Q:D'>0 ; end DATA if no more data files to install | |||
; | |||
S DTO=0 ; control flag for I^DITR | |||
S DMRG=1 ; control flag for I^DITR | |||
; | |||
; set the data-file header | |||
S DTO(0)=^(D) ; open root of the data file ; **NAKED** | |||
S Z=^(D)_"0)" ; closed root of the data-file header ; **NAKED** | |||
S D0=^(D,0) ; data-file header ; **NAKED** | |||
S @Z=D0 ; set the data-file header | |||
; | |||
S DFR(1)="^UTILITY(U,$J,DDF(1),D0," ; open root for any [[record~|Record]] in any file | |||
; | |||
S DKP=0 ; tell I^DITR to kill the old [[record~|Record]]’s indexes | |||
; | |||
; traverse [[record~|Record]]s in transport global, install each one | |||
F D0=0:0 D Q:’$D(^(D0,0)) | |||
. S D0=$O(^UTILITY(U,$J,DDF(1),D0)) ; get next [[record~|Record]] # to install | |||
. S:D0="" D0=-1 ; old backward-compatible code from $next conversion | |||
. Q:'$D(^(D0,0)) ; quit when out of [[record~|Record]]s to install | |||
. S Z=^(0) ; load [[record~|Record]]’s header node | |||
. D I^DITR ; install the whole [[record~|Record]] using Fileman transfer/merge | |||
; | |||
K ^UTILITY(U,$J,DDF(1)) ; clear this file from the data-transport global | |||
K DDF,DDT,DTO,DFR,DFN,DTN ; clear the install variables | |||
; | |||
GOTO DATA ; loop back up to DATA ; end of DATA | |||
; | |||
; | |||
; converts a base-10 number to base 36 padded to 3 digits | |||
; input: X = base-10 number to convert, e.g. 26 | |||
; output = 3-digit base-16 equivalent, e.g. 00Q | |||
B36(X) Q $$N1(X\(36*36)#36+1)_$$N1(X\36#36+1)_$$N1(X#36+1) | |||
; | |||
; convert a decimal numeral to base-16 equivalent -1 | |||
; input: % = base-10 numeral to convert, e.g. 26 | |||
; output = base-16 numeral -1, e.g. P (1 less than Q) | |||
N1(%) Q $E("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",%) | |||
; | |||
; | |||
EOR ; end of routine DINIT | |||
All of this in DINIT that applies to the Language file is top-level control-flow logic, so none of it needs to change to update the Language, and DINIT3 probably won’t either, though we’ll check. Probably, all we have to change is in the three long DINIT routines that deal with the Language file - DINIT011, DINIT012, and DINIT013. | |||
===== DINIT3 ===== | |||
Among other things, DINIT3 re-cross-references many of Fileman's files, including the Language file, in subroutine DIK. Here’s the line in question: | |||
F DIK="^DIC(.2,","^DIPT(","^DIST(1.2,","^DIST(.44,","^DI(.81,","^DIST(.403,","^DIST(.404,","^DIST(.46,","^DI(.85,","^DD(""IX"",","^DD(""KEY""," D X | |||
It also includes subroutine A1, which is called by OSETC^DINIT during the main processing of the Language file to set the file’s security. Note that this file allows read access, but not delete, LAYGO, write, or DD access: | |||
A1 S (^("DEL"),^("LAYGO"),^("WR"),^("DD"))=U Q | |||
It also includes subroutine XX, which is also called by OSETC^DINIT; it re-cross-references the Language file's DD: | |||
XX S DA(1)=I,DIK="^DD("_I_"," | |||
X W ".." G IXALL^DIK | |||
This is all supporting utility code for DINIT, so none of it needs to be updated to reflect our new Language file. | |||
===== DINIT011 ===== | |||
DINIT011 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;13JAN2011 | |||
===== DINIT012 ===== | |||
DINIT012 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;2APR2004 | |||
===== DINIT013 ===== | |||
DINIT013 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;9:34 AM 7 Aug 2002 | |||
==== Actual modifications made to DINIT ==== | |||
The acutal modifications made to DINIT build upon the changes made to DIFROM (see [http://www.osehra.org/blog/modifying-difrom-support-new-style-indexes-and-keys this blog post]) to make it transport v2 of the language file are as follows: | |||
OSETC+18: Kill off old file data | |||
K ^DIC(.85),^DD(.85),^DD(.8501),^DD(.8502),^DI(.85) ; VEN/SMH - Kill the language file old DD, DIC and data. (22.2) | |||
OSETC+22: New subfile DD's (.8501 and .8502) are re-indexed as well | |||
F I=.84,.841,.842,.844,.845,.847,.8471,.85,.8501,.8502 D XX^DINIT3 ; VEN/SMH - added .8501 and .8502 for new lang file | |||
OSETC+23-33: Install New Style Indexes and Keys: | |||
; Keys and new style indexes installer ; new in FM V22.2 | |||
N DIFRSA S DIFRSA=$NA(^UTILITY("KX",$J)) ; Tran global for Keys and Indexes | |||
N DIFRFILE S DIFRFILE=0 ; Loop through files | |||
F S DIFRFILE=$O(@DIFRSA@("IX",DIFRFILE)) Q:'DIFRFILE D | |||
. K ^TMP("DIFROMS2",$J,"TRIG") | |||
. N DIFRD S DIFRD=0 | |||
. F S DIFRD=$O(@DIFRSA@("IX",DIFRFILE,DIFRD)) Q:'DIFRD D DDIXIN^DIFROMSX(DIFRFILE,DIFRD,DIFRSA) ; install New Style Indexes | |||
. K ^TMP("DIFROMS2",$J,"TRIG") | |||
. S DIFRD=0 | |||
. F S DIFRD=$O(@DIFRSA@("KEY",DIFRFILE,DIFRD)) Q:'DIFRD D DDKEYIN^DIFROMSY(DIFRFILE,DIFRD,DIFRSA) ; install keys | |||
K @DIFRSA ; kill off tran global | |||
DATA+1: Kill D1 every time we do a loop because it leaks from symbol table causing MATCHKEY^DITR1 to fail thus not installing any data. | |||
S DTO=0,DMRG=1,DTO(0)=^(D),Z=^(D)_"0)",D0=^(D,0),@Z=D0,DFR(1)="^UTILITY(U,$J,DDF(1),D0,",DKP=0 F D0=0:0 S D0=$O(^UTILITY(U,$J,DDF(1),D0)) S:D0="" D0=-1 K D1 Q:'$D(^(D0,0)) S Z=^(0) D I^DITR | |||
DINIT011-013 now contain the new data dictionary in DIFROM format. I won't print them here because they are too long. | |||
=== Distributing and Installing the Extended Language File === | === Distributing and Installing the Extended Language File === | ||
The extended language file, comprising all languages in ISO 692-2, will be distributed via DILAINITs produced via DIFROM. The DINIT routines will only install in the language file the following languages: | |||
ARABIC | |||
ENGLISH | |||
FINNISH | |||
FRENCH | |||
GERMAN | |||
GREEK | |||
HEBREW | |||
ITALIAN | |||
PORTUGUESE | |||
RUSSIAN | |||
SPANISH | |||
== Licensing == | == Licensing == | ||
<pre> | |||
Copyright 2012 Fredrick D.S. Marshall and Sam Habiel | |||
Licensed under the Apache License, Version 2.0 (the "License"); | |||
you may not use this file except in compliance with the License. | |||
You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
</pre> | |||
== Installing the Language File Version 2 == | == Installing the Language File Version 2 == | ||
=== System Requirements === | === System Requirements === | ||
VA Fileman V22 patched up 2/11. DO NOT INSTALL OVER MSC FILEMAN ANY VERSION. A VERSION FOR 22.2 WILL BE COMING OUT THAT WILL BE INSTALLABLE OVER MSC FILEMAN. | |||
==== Infrastructure Dependencies ==== | ==== Infrastructure Dependencies ==== | ||
VA Fileman V22 patched up 2/11 | |||
==== VISTA Package Dependencies ==== | ==== VISTA Package Dependencies ==== | ||
None | |||
=== Downloading the Software === | === Downloading the Software === | ||
Download the Routine Output file from [https://trac.opensourcevista.net/svn/lang-file4mu1and2/VW-LanguageFiles-DMLAINITs-DINITs-2012-11-20.ro here] and follow the installation instructions below. | |||
=== Installation and Configuration === | === Installation and Configuration === | ||
# Import the routines from the file system using your Mumps implementation's Routine Input from RO format utility. | |||
# Run ^DINIT. Answer Yes to all Yes/No questions if unsure how to answer. | |||
# Run ^DMLAINIT. Answer Yes to all Yes/No questions. | |||
<pre> | |||
MU-beta>D ^%RI | |||
Routine Input Utility - Converts RO file to *.m files. | |||
Formfeed delimited <No>? | |||
Input device: <terminal>: /home/sam/repo/lang/lang-file4mu1and2/VW-LanguageFiles-DMLAINITs-DINITs-2012-11-20.ro | |||
Lang file inits. Run ^DINIT first and then ^DMLAINITs. | |||
GT.M 20-NOV-2012 19:44:28 | |||
Output directory : r/ | |||
DINIT DINIT011 DINIT012 DINIT013 DMLAI001 DMLAI002 DMLAI003 DMLAI004 | |||
DMLAI005 DMLAI006 DMLAI007 DMLAINI1 DMLAINI2 DMLAINI3 DMLAINI4 DMLAINI5 | |||
DMLAINIT | |||
GTM>D ^DINIT | |||
VA FileMan V.22.0 | |||
Initialize VA FileMan now? NO//Y | |||
SITE NAME: Vista-Office EHR// | |||
SITE NUMBER: 50// .......................... | |||
Now loading MUMPS Operating System File | |||
Do you want to change the MUMPS OPERATING SYSTEM File? NO//.... | |||
Now loading DIALOG and LANGUAGE Files.............................................................. | |||
TYPE OF MUMPS SYSTEM YOU ARE USING: GT.M(UNIX)// | |||
Now loading other FileMan files--please wait.......................................................................................... | |||
............................................................................................................................. | |||
.......... | |||
The following files have been installed: | |||
.11 INDEX | |||
.2 DESTINATION | |||
.31 KEY | |||
.4 PRINT TEMPLATE | |||
.401 SORT TEMPLATE | |||
.402 INPUT TEMPLATE | |||
.403 FORM | |||
.404 BLOCK | |||
.44 FOREIGN FORMAT | |||
.46 IMPORT TEMPLATE | |||
.5 FUNCTION | |||
.6 DD AUDIT | |||
.7 MUMPS OPERATING SYSTEM | |||
.81 DATA TYPE | |||
.83 COMPILED ROUTINE | |||
.84 DIALOG | |||
.85 LANGUAGE | |||
1 FILE | |||
1.1 AUDIT | |||
1.11 ARCHIVAL ACTIVITY | |||
1.12 FILEGRAM HISTORY | |||
1.13 FILEGRAM ERROR LOG | |||
1.2 ALTERNATE EDITOR | |||
1.521 SQLI_SCHEMA | |||
1.52101 SQLI_KEY_WORD | |||
1.5211 SQLI_DATA_TYPE | |||
1.5212 SQLI_DOMAIN | |||
1.5213 SQLI_KEY_FORMAT | |||
1.5214 SQLI_OUTPUT_FORMAT | |||
1.5215 SQLI_TABLE | |||
1.5216 SQLI_TABLE_ELEMENT | |||
1.5217 SQLI_COLUMN | |||
1.5218 SQLI_PRIMARY_KEY | |||
1.5219 SQLI_FOREIGN_KEY | |||
1.52191 SQLI_ERROR_TEXT | |||
1.52192 SQLI_ERROR_LOG | |||
Re-indexing entries in the DIALOG file...................... | |||
Compiling all forms ... | |||
DICATT (#.001) | |||
DIPTED (#.1001) | |||
DIKC EDIT (#.1101) | |||
DIKC EDIT UI (#.1102) | |||
DIKK EDIT (#.3101) | |||
DIBTED (#.40001) | |||
DIETED (#.40101) | |||
DIEDIT (#.40201) | |||
DDGF BLOCK EDIT (#.40301) | |||
DDGF PAGE ADD (#.40302) | |||
DDGF PAGE EDIT (#.40303) | |||
DDGF PAGE SELECT (#.40304) | |||
DDGF FORM EDIT (#.40305) | |||
DDGF HEADER BLOCK EDIT (#.40306) | |||
DDGF FIELD ADD (#.40401) | |||
DDGF FIELD CAPTION ONLY (#.40402) | |||
DDGF FIELD DD (#.40403) | |||
DDGF FIELD FORM ONLY (#.40404) | |||
DDGF FIELD COMPUTED (#.40405) | |||
DDGF BLOCK ADD (#.40406) | |||
DDGF BLOCK DELETE (#.40407) | |||
DDGF HEADER BLOCK SELECT (#.40408) | |||
DDXP FF FORM1 (#.441) | |||
DDMP SPECIFY IMPORT (#.461) | |||
XPD EDIT BUILD (#1) | |||
XUEDIT CHARACTERISTICS (#2) | |||
XUEXISTING USER (#3) | |||
XUDEVICE MT (#4) | |||
XUDEVICE SDP (#5) | |||
XUDEVICE SPL (#6) | |||
XUDEVICE HFS (#7) | |||
XUDEVICE CHAN (#8) | |||
XU OPTION SCHEDULE (#9) | |||
XUSERDEACT (#10) | |||
XUTM UCI ASSOC (#11) | |||
XUSITEPARM (#12) | |||
XUAUDIT (#13) | |||
XUREACT USER (#14) | |||
PRSA TD EDIT (#15) | |||
PRSA OT REQ (#16) | |||
PRSA TD DISP (#17) | |||
PRSA TL EDIT (#18) | |||
PRSA TL DISP (#19) | |||
PRSA LV REQ (#20) | |||
PRSA ED REQ (#21) | |||
PRSA VC POST (#22) | |||
PRSA PM POST (#23) | |||
PRSA TD TL (#24) | |||
PRSA TP POST1 (#25) | |||
PRSA TE EDIT (#26) | |||
PRSA FEE POST (#27) | |||
NURA-I-SERVICE (#28) | |||
XU-PERSON CLASS (#29) | |||
XUNEW USER (#30) | |||
SPNLPFM1 (#31) | |||
SPNFFRM1 (#32) | |||
SPNFFRM2 (#33) | |||
SPNLPFM2 (#34) | |||
XPD EDIT MP (#35) | |||
XPD EDIT GP (#36) | |||
PRCHQ1 (#37) | |||
PRCHQ2 (#38) | |||
PRCHQ3 (#39) | |||
PRCHQ4 (#40) | |||
PRCHQ5 (#41) | |||
SPNLP FUN MES (#42) | |||
SPNLP FIM FM1 (#43) | |||
SPNLP CHART FM1 (#44) | |||
SPNLP MS FM1 (#45) | |||
SPNE ENTER/EDIT SYNONYM (#46) | |||
LREPI (#47) | |||
ENPR MS (#48) | |||
ENPR ALL (#49) | |||
ENPR PRELIM (#50) | |||
ENPR AE (#51) | |||
ENPR CO (#52) | |||
ENPR CHG (#53) | |||
ABSV ADD/EDIT MASTER (#54) | |||
XQEDTOPT (#55) | |||
XU-INST-EDIT (#56) | |||
LREPIPROT (#57) | |||
XUTMKE ADD (#58) | |||
WV PROC-FORM-1 (#59) | |||
WV NOTIF-FORM-1 (#60) | |||
WV PATIENT-FORM-1 (#61) | |||
WV NOTIF-FORM-2 (#62) | |||
WV PROC-FORM-2-COLP (#63) | |||
WV NOTIFPURPOSE-FORM-1 (#64) | |||
WV SITE PARAMS-FORM-1 (#65) | |||
WV REFUSED PROCEDURE-ENTRY (#66) | |||
WV PROC-FORM-LAB (#67) | |||
XDR RESFILE FORM (#68) | |||
HL SITE PARAMETERS (#69) | |||
PSB PRN EFFECTIVENESS (#70) | |||
PSB MED LOG EDIT (#71) | |||
PSBO DL (#72) | |||
PSBO WA (#73) | |||
PSBO ML (#74) | |||
PSBO MM (#75) | |||
PSBO PE (#76) | |||
PSB MISSING DOSE REQUEST (#77) | |||
PSBO MH (#78) | |||
PSBO MV (#79) | |||
PSB MISSING DOSE FOLLOWUP (#80) | |||
PSBO BL (#81) | |||
PSBO MD (#82) | |||
PSB NEW UD ENTRY (#83) | |||
PSB NEW IV ENTRY (#84) | |||
HL7 APP (#85) | |||
HL7 LOGICAL LINK (#86) | |||
HL7 INTERFACE (#87) | |||
SPNLP ASIA MES (#88) | |||
PSB MED LOG EDIT IV (#89) | |||
SPNLP FAM FM1 (#90) | |||
SPNLP DIENER FM1 (#91) | |||
SPNLP DUSOI FM1 (#92) | |||
XU-CLINICAL TRAINEE (#93) | |||
XUSSPKI (#94) | |||
INSTITUTION EDIT (#95) | |||
PRSA LD POST (#96) | |||
XUDEVICE LPD (#97) | |||
XUDEVICE TRM (#98) | |||
KMPD PARAMETERS EDIT (#99) | |||
LREPI9 (#100) | |||
XUDEVICE RES (#101) | |||
PSBO BZ (#102) | |||
ENIT EDIT (#103) | |||
PXRM DIALOG EDIT (#104) | |||
XUSITEIP (#105) | |||
PSB BCBU PARAMETERS (#106) | |||
PSBO XA (#107) | |||
MD MAIN (#108) | |||
PRSP ESR POST (#109) | |||
PRSP EXT ABSENCE (#110) | |||
INITIALIZATION COMPLETED IN 8 SECONDS. | |||
MU-beta>D ^DMLAINIT | |||
This version (#22.2) of 'DMLAINIT' was created on 20-NOV-2012 | |||
(at FILEMAN.MUMPS.ORG, by MSC FileMan 22.1043) | |||
I AM GOING TO SET UP THE FOLLOWING FILES: | |||
.85 LANGUAGE (including data) | |||
Note: You already have the 'LANGUAGE' File. | |||
I will OVERWRITE your data with mine. | |||
SHALL I WRITE OVER FILE SECURITY CODES? No// Y (Yes) | |||
ARE YOU SURE EVERYTHING'S OK? No// Y (Yes) | |||
...HMMM, I'M WORKING AS FAST AS I CAN..................... | |||
OK, I'M DONE. | |||
NOTE THAT FILE SECURITY-CODE PROTECTION HAS BEEN MADE | |||
</pre> | |||
== Verifying the Installation == | == Verifying the Installation == | ||
To confirm installation of the new language file, run this: | |||
I $D(^DD(.85,.001,0)) W "IT WORKED" | |||
== Contributors == | == Contributors == | ||
=== Version 2 Language file final work to produce files === | |||
Building on the Version 2 work & | |||
Rick Marshall | |||
Sam Habiel | |||
=== 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 == | == Future Development == | ||
Later in 2012-2013, revisit the Language file to upgrade it to include the latest versions of the language standards esp. ISO 639-6, 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, 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. | |||
== To Do List for future versions == | |||
* Work with John McCormack to add Entity pointer to VW HL7 Tables file (260) and populate the field for ISO 639 entries. | |||
* Consider adding Signing to the Language Skills subfile of the Patient file, to better match the HL7 standard. | |||
* Delete the Interpreter Language subfile from the Patient file. | |||
* Investigate whether to delete the other Daou-added fields in the 19900 numberspace from the Patient file. | |||
Latest revision as of 01:04, 21 November 2012
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 and two.
TL;DR Summary: Go here to download and install the file: Installing_the_Language_File_Version_2
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: F 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 Recordnumber 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 a 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.
UPDATE: As of November 2012, the various changes to Fileman from different adopters will be convereged to Fileman 22.2, the successor to MSC Fileman, which will be adopted by the VA. As part of these, the Language file designed by Rick Marshall including fields for ISO 639-1 and ISO 639-2 will be the same between WV and MSC Fileman.
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.
Use of the Interpreter Language subfile (19906/2.019906)
WorldVistA EHR 1.0 includes a subfile that is 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.
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.
The field is asked in WorldVistA 2.0 registration, but not displayed in any place except patient registration.
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 Stubble. According to Ms. Stubble 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.
NOTE: Correction. This is what RPMS actually says:
This file reflects entries in the U.S. Census Bureau's 2000 ACS 1-year & 2001 ACS 1-year PUMS Language Codes table (accessible at http://www.census.gov/acs/www/Products/PUMS/C2SS/CodeList/2000-2001/Language.htm) . Local additions or modifications should not be made.
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
Listing of the new Language File
Condensed Listing
CONDENSED DATA DICTIONARY---LANGUAGE FILE (#.85)UCI: EHR,EHR VERSION: 22.2
STORED IN: ^DI(.85, 11/08/12 PAGE 1
--------------------------------------------------------------------------------
FILE SECURITY
DD SECURITY : ^ DELETE SECURITY: ^
READ SECURITY : LAYGO SECURITY : ^
WRITE SECURITY : ^
CROSS REFERENCED BY:
ALTERNATE NAME(F)
FILE #.85
INDEXED BY: NAME (B), TWO LETTER CODE (C), THREE LETTER CODE (D),
ALTERNATE THREE LETTER CODE (E)
FILE STRUCTURE
FIELD FIELD
NUMBER NAME
.001 ID NUMBER (NJ10,0), [ ]
.01 NAME (RFJ60), [0;1]
.02 TWO LETTER CODE (FJ2), [0;2]
.03 THREE LETTER CODE (FJ3), [0;3]
.04 FOUR LETTER CODE (FJ4), [0;4]
.05 ALTERNATE THREE LETTER CODE (FJ3), [0;5]
.06 SCOPE (S), [0;6]
.07 TYPE (S), [0;7]
.08 LINGUISTIC CATEGORY (*P.85'), [0;8]
.09 MEMBER OF LANGUAGE SET (*P.85'), [0;9]
1 ALTERNATE NAME (Multiple-.8501), [1;0]
.01 ALTERNATE NAME (MFJ60), [0;1]
10 DESCRIPTION (Multiple-.8502), [10;0]
.01 DESCRIPTION (Wx), [0;1]
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]
Indexes and Xrefs.
INDEX AND CROSS-REFERENCE LIST -- FILE #.85 11/08/12 PAGE 1
-------------------------------------------------------------------------------
File #.85
New-Style Indexes:
B (#544) FIELD REGULAR IR LOOKUP & SORTING
Unique for: Key A (#82), File #.85
Short Descr: Regular new-style B Index
Set Logic: S ^DI(.85,"B",X,DA)=""
Kill Logic: K ^DI(.85,"B",X,DA)
Whole Kill: K ^DI(.85,"B")
X(1): NAME (.85,.01) (Subscr 1) (forwards)
C (#545) FIELD REGULAR IR LOOKUP & SORTING
Short Descr: Regular new style index on two letter language codes
Set Logic: S ^DI(.85,"C",X,DA)=""
Kill Logic: K ^DI(.85,"C",X,DA)
Whole Kill: K ^DI(.85,"C")
X(1): TWO LETTER CODE (.85,.02) (Subscr 1) (forwards)
D (#546) FIELD REGULAR IR LOOKUP & SORTING
Unique for: Key B (#83), File #.85
Short Descr: Regular new-style index for three letter abbreviations for
languages
Set Logic: S ^DI(.85,"D",$E(X,1,30),DA)=""
Kill Logic: K ^DI(.85,"D",$E(X,1,30),DA)
Whole Kill: K ^DI(.85,"D")
X(1): THREE LETTER CODE (.85,.03) (Subscr 1) (Len 30)
(forwards)
E (#547) FIELD MUMPS IR LOOKUP & SORTING
Short Descr: (Pseudo-)Mneumonic index for the Alternate three letter
code
Description: This will add entries to the C index for the three letter
code a la the mnemonic style.
If you need re-cross-reference this field, you need to kill
of the entries in the regular C index, set the C index, and
then set this index to update the C with the mnemonic
xrefs.
Set Logic: S ^DI(.85,"D",X,DA)=1
Kill Logic: K ^DI(.85,"D",X,DA)
X(1): ALTERNATE THREE LETTER CODE (.85,.05) (Subscr 1)
(forwards)
Subfile #.8501
Traditional Cross-References:
B REGULAR
Field: ALTERNATE NAME (.8501,.01)
1)= S ^DI(.85,DA(1),1,"B",$E(X,1,30),DA)=""
2)= K ^DI(.85,DA(1),1,"B",$E(X,1,30),DA)
F REGULAR WHOLE FILE (#.85)
Field: ALTERNATE NAME (.8501,.01)
Description: Whole file cross-reference for ALTERNATE NAME multiple.
1)= S ^DI(.85,"F",$E(X,1,30),DA(1),DA)=""
2)= K ^DI(.85,"F",$E(X,1,30),DA(1),DA)
3)= WHOLE FILE CROSS REFERENCE FOR ALTERNATE NAME
KEY LIST -- FILE #.85
------------------------------------
FILE #.85
---------
PRIMARY KEY: A (#82)
Uniqueness Index: B (#544)
File, Field: 1) NAME (.85,.01)
SECONDARY KEY: B (#83)
Uniqueness Index: D (#546)
File, Field: 1) THREE LETTER CODE (.85,.03)
Sample Entry
ID NUMBER: 2 NAME: GERMAN
TWO LETTER CODE: DE THREE LETTER CODE: DEU
ALTERNATE THREE LETTER CODE: GER
ALTERNATE NAME: GERMAN, STANDARD
ALTERNATE NAME: STANDARD GERMAN
ALTERNATE NAME: DEUTSCH
ALTERNATE NAME: DEUTSCH SPRACHE
ALTERNATE NAME: TEDESCO
ALTERNATE NAME: MODERN GERMAN (1500-)
ALTERNATE NAME: GERMAN,MODERN (1500-)
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[]\")
Distributing and Installing the Core Language File
When people refer to a Fileman file, they usually mean a file stored in the File Manager database management system (DBMS), but there a very different definition applies to the Language file. When a Fileman file is one of the files that Fileman himself uses to give him the ability to be a DBMS, when it's one of the files he uses to store all other files (like the File file), then the process of distributing and installing it is significantly more difficult, because he has to bootstrap himself without depending on any other package (including Kernel, the home of the Kernel Installation and Distribution System, or KIDS). This makes bundling up and distributing our changes a rare challenge of a kind that only members of the Fileman Development Team ever face.
Before the advent of KIDS with Kernel version 7 (May 1993), software was bundled and distributed not by Kernel but by Fileman. A developer who wanted to distribute a package would run the Fileman module ^DIFROM, answer questions about what they wanted to distribute, then DIFROM would generate a set of initialization routines that could be run at the destination sites to install the package. This is the general pattern of how we will distribute these Language file changes, except for one very important difference.
Because Fileman installing itself is a classic "boostrap yourself" situation, you cannot use DIFROM to create the DINIT routines (the initialization routines for Fileman's own files). The DINITs have to be hand-built to simulate what DIFROM would have created were it possible.
The project sketch for this task is: (1) to map out how the DINITs transport the existing Language file, (2) to plan out the changes to make to convert the DINITs to the new Language file, and (3) to modify the DINITs and test them thoroughly.
Mapping out How the DINITs Transport the Existing Language File
The following DINIT routines are involved in transporting the Language file:
DINIT ;SFISC/GFT,XAK-INITIALIZE VA FILEMAN ;29MAY2006 DINIT3 ;SFISC/GFT-INITIALIZE VA FILEMAN ;28AUG2008 DINIT011 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;13JAN2011 DINIT012 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;2APR2004 DINIT013 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;9:34 AM 7 Aug 2002
DINIT and DINIT3 contain top-level control-flow logic for installing the Dialog and Language files. DINIT011, DINIT012, and DINIT013 install the DDs and data for the Language file, and are called by DINIT.
Here is a routine-by-routine breakdown of what they do:
DINIT
DINIT is both the main entry point and the master-control routine for Fileman initialization.
It is called at the top and performs the installation in four not-clearly documented steps:
1) ask all the init questions, 2) install the two foundational files (DD and File), 3) install the three files all the other Fileman files might point to and the code might use (MUMPS Operating System, Dialog, and Language), and 4) install the rest of the Fileman files. Subroutine OSETC handles step three.
Here is the part of DINIT that involves the Language file:
K ^UTILITY(U,$J),^UTILITY("DIK",$J) W !!,"Now loading DIALOG and LANGUAGE Files"
S DN="^DINIT" F R=1:1:39 D @(DN_$$B36(R)) W "."
S $P(^DIC(.84,0),U,1,2)="DIALOG^.84",$P(^DI(.84,0),U,1,2)="DIALOG^.84I" I $D(^DIC(.84,0,"GL")) D A1^DINIT3
S $P(^DIC(.85,0),U,1,2)="LANGUAGE^.85",$P(^DI(.85,0),U,1,2)="LANGUAGE^.85I" I $D(^DIC(.85,0,"GL")) D A1^DINIT3
F I=.84,.841,.842,.844,.845,.847,.8471,.85 D XX^DINIT3
D DATA
Q
;
DATA W "." S (D,DDF(1),DDT(0))=$O(^UTILITY(U,$J,0)) Q:D'>0
S DTO=0,DMRG=1,DTO(0)=^(D),Z=^(D)_"0)",D0=^(D,0),@Z=D0,DFR(1)="^UTILITY(U,$J,DDF(1),D0,",DKP=0 F D0=0:0 S D0=$O(^UTILITY(U,$J,DDF(1),D0)) S:D0="" D0=-1 Q:'$D(^(D0,0)) S Z=^(0) D I^DITR
K ^UTILITY(U,$J,DDF(1)),DDF,DDT,DTO,DFR,DFN,DTN G DATA
;
B36(X) Q $$N1(X\(36*36)#36+1)_$$N1(X\36#36+1)_$$N1(X#36+1)
N1(%) Q $E("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",%)
Here is the same part annotated and refactored for clarity:
K ^UTILITY(U,$J) ; clear the data-tranport global
K ^UTILITY("DIK",$J) ; clear the reindexing global
W !!,"Now loading DIALOG and LANGUAGE Files"
;
; The first thirty-nine handle Dialog and Language,
; a group of thirty-six for Dialog, a group of three for Language.
; Each group starts with routines that load the File file entry and the DD for that file,
; then routines that load its data-transport global ^UTILITY(“^”,$J,DD #,*).
S DN="^DINIT" ; unlike most packages, all FM data-transport routines start with DINIT, not DIN
F R=1:1:39 D @(DN_$$B36(R)) W "." ; call each data-transport routine and write dots
;
S $P(^DIC(.84,0),U,1,2)="DIALOG^.84" ; Set the File file stub entry for the Dialog file
S $P(^DI(.84,0),U,1,2)="DIALOG^.84I"; Set the data file stub entry for the Dialog file
I $D(^DIC(.84,0,"GL")) D A1^DINIT3; Set the security for the Dialog file
;
S $P(^DIC(.85,0),U,1,2)="LANGUAGE^.85" ; Set the File file stub entry for the Language file
S $P(^DI(.85,0),U,1,2)="LANGUAGE^.85I" ; Set the data file stub entry for the language file
I $D(^DIC(.85,0,"GL")) D A1^DINIT3 ; Set the security for the Language file
;
; re-cross-reference Dialog & Language file DDs
; and those of their subfiles
F I=.84,.841,.842,.844,.845,.847,.8471,.85 D XX^DINIT3
;
D DATA
;
QUIT ; end of OSETC
;
;
DATA ; install data for one data file
; input: ^utility(“^”,$j,file #,*) for each file
; output: data is loaded into each data file
;
W "."
S (D,DDF(1),DDT(0))=$O(^UTILITY(U,$J,0)) ; which data file is next (.84, then .85)
Q:D'>0 ; end DATA if no more data files to install
;
S DTO=0 ; control flag for I^DITR
S DMRG=1 ; control flag for I^DITR
;
; set the data-file header
S DTO(0)=^(D) ; open root of the data file ; **NAKED**
S Z=^(D)_"0)" ; closed root of the data-file header ; **NAKED**
S D0=^(D,0) ; data-file header ; **NAKED**
S @Z=D0 ; set the data-file header
;
S DFR(1)="^UTILITY(U,$J,DDF(1),D0," ; open root for any Record in any file
;
S DKP=0 ; tell I^DITR to kill the old Record’s indexes
;
; traverse Records in transport global, install each one
F D0=0:0 D Q:’$D(^(D0,0))
. S D0=$O(^UTILITY(U,$J,DDF(1),D0)) ; get next Record # to install
. S:D0="" D0=-1 ; old backward-compatible code from $next conversion
. Q:'$D(^(D0,0)) ; quit when out of Records to install
. S Z=^(0) ; load Record’s header node
. D I^DITR ; install the whole Record using Fileman transfer/merge
;
K ^UTILITY(U,$J,DDF(1)) ; clear this file from the data-transport global
K DDF,DDT,DTO,DFR,DFN,DTN ; clear the install variables
;
GOTO DATA ; loop back up to DATA ; end of DATA
;
;
; converts a base-10 number to base 36 padded to 3 digits
; input: X = base-10 number to convert, e.g. 26
; output = 3-digit base-16 equivalent, e.g. 00Q
B36(X) Q $$N1(X\(36*36)#36+1)_$$N1(X\36#36+1)_$$N1(X#36+1)
;
; convert a decimal numeral to base-16 equivalent -1
; input: % = base-10 numeral to convert, e.g. 26
; output = base-16 numeral -1, e.g. P (1 less than Q)
N1(%) Q $E("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",%)
;
;
EOR ; end of routine DINIT
All of this in DINIT that applies to the Language file is top-level control-flow logic, so none of it needs to change to update the Language, and DINIT3 probably won’t either, though we’ll check. Probably, all we have to change is in the three long DINIT routines that deal with the Language file - DINIT011, DINIT012, and DINIT013.
DINIT3
Among other things, DINIT3 re-cross-references many of Fileman's files, including the Language file, in subroutine DIK. Here’s the line in question:
F DIK="^DIC(.2,","^DIPT(","^DIST(1.2,","^DIST(.44,","^DI(.81,","^DIST(.403,","^DIST(.404,","^DIST(.46,","^DI(.85,","^DD(""IX"",","^DD(""KEY""," D X
It also includes subroutine A1, which is called by OSETC^DINIT during the main processing of the Language file to set the file’s security. Note that this file allows read access, but not delete, LAYGO, write, or DD access:
A1 S (^("DEL"),^("LAYGO"),^("WR"),^("DD"))=U Q
It also includes subroutine XX, which is also called by OSETC^DINIT; it re-cross-references the Language file's DD:
XX S DA(1)=I,DIK="^DD("_I_","
X W ".." G IXALL^DIK
This is all supporting utility code for DINIT, so none of it needs to be updated to reflect our new Language file.
DINIT011
DINIT011 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;13JAN2011
DINIT012
DINIT012 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;2APR2004
DINIT013
DINIT013 ; SFISC/TKW-DIALOG & LANGUAGE FILE INITS ;9:34 AM 7 Aug 2002
Actual modifications made to DINIT
The acutal modifications made to DINIT build upon the changes made to DIFROM (see this blog post) to make it transport v2 of the language file are as follows:
OSETC+18: Kill off old file data
K ^DIC(.85),^DD(.85),^DD(.8501),^DD(.8502),^DI(.85) ; VEN/SMH - Kill the language file old DD, DIC and data. (22.2)
OSETC+22: New subfile DD's (.8501 and .8502) are re-indexed as well
F I=.84,.841,.842,.844,.845,.847,.8471,.85,.8501,.8502 D XX^DINIT3 ; VEN/SMH - added .8501 and .8502 for new lang file
OSETC+23-33: Install New Style Indexes and Keys:
; Keys and new style indexes installer ; new in FM V22.2
N DIFRSA S DIFRSA=$NA(^UTILITY("KX",$J)) ; Tran global for Keys and Indexes
N DIFRFILE S DIFRFILE=0 ; Loop through files
F S DIFRFILE=$O(@DIFRSA@("IX",DIFRFILE)) Q:'DIFRFILE D
. K ^TMP("DIFROMS2",$J,"TRIG")
. N DIFRD S DIFRD=0
. F S DIFRD=$O(@DIFRSA@("IX",DIFRFILE,DIFRD)) Q:'DIFRD D DDIXIN^DIFROMSX(DIFRFILE,DIFRD,DIFRSA) ; install New Style Indexes
. K ^TMP("DIFROMS2",$J,"TRIG")
. S DIFRD=0
. F S DIFRD=$O(@DIFRSA@("KEY",DIFRFILE,DIFRD)) Q:'DIFRD D DDKEYIN^DIFROMSY(DIFRFILE,DIFRD,DIFRSA) ; install keys
K @DIFRSA ; kill off tran global
DATA+1: Kill D1 every time we do a loop because it leaks from symbol table causing MATCHKEY^DITR1 to fail thus not installing any data.
S DTO=0,DMRG=1,DTO(0)=^(D),Z=^(D)_"0)",D0=^(D,0),@Z=D0,DFR(1)="^UTILITY(U,$J,DDF(1),D0,",DKP=0 F D0=0:0 S D0=$O(^UTILITY(U,$J,DDF(1),D0)) S:D0="" D0=-1 K D1 Q:'$D(^(D0,0)) S Z=^(0) D I^DITR
DINIT011-013 now contain the new data dictionary in DIFROM format. I won't print them here because they are too long.
Distributing and Installing the Extended Language File
The extended language file, comprising all languages in ISO 692-2, will be distributed via DILAINITs produced via DIFROM. The DINIT routines will only install in the language file the following languages:
ARABIC ENGLISH FINNISH FRENCH GERMAN GREEK HEBREW ITALIAN PORTUGUESE RUSSIAN SPANISH
Licensing
Copyright 2012 Fredrick D.S. Marshall and Sam Habiel
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Installing the Language File Version 2
System Requirements
VA Fileman V22 patched up 2/11. DO NOT INSTALL OVER MSC FILEMAN ANY VERSION. A VERSION FOR 22.2 WILL BE COMING OUT THAT WILL BE INSTALLABLE OVER MSC FILEMAN.
Infrastructure Dependencies
VA Fileman V22 patched up 2/11
VISTA Package Dependencies
None
Downloading the Software
Download the Routine Output file from here and follow the installation instructions below.
Installation and Configuration
- Import the routines from the file system using your Mumps implementation's Routine Input from RO format utility.
- Run ^DINIT. Answer Yes to all Yes/No questions if unsure how to answer.
- Run ^DMLAINIT. Answer Yes to all Yes/No questions.
MU-beta>D ^%RI Routine Input Utility - Converts RO file to *.m files. Formfeed delimited <No>? Input device: <terminal>: /home/sam/repo/lang/lang-file4mu1and2/VW-LanguageFiles-DMLAINITs-DINITs-2012-11-20.ro Lang file inits. Run ^DINIT first and then ^DMLAINITs. GT.M 20-NOV-2012 19:44:28 Output directory : r/ DINIT DINIT011 DINIT012 DINIT013 DMLAI001 DMLAI002 DMLAI003 DMLAI004 DMLAI005 DMLAI006 DMLAI007 DMLAINI1 DMLAINI2 DMLAINI3 DMLAINI4 DMLAINI5 DMLAINIT GTM>D ^DINIT VA FileMan V.22.0 Initialize VA FileMan now? NO//Y SITE NAME: Vista-Office EHR// SITE NUMBER: 50// .......................... Now loading MUMPS Operating System File Do you want to change the MUMPS OPERATING SYSTEM File? NO//.... Now loading DIALOG and LANGUAGE Files.............................................................. TYPE OF MUMPS SYSTEM YOU ARE USING: GT.M(UNIX)// Now loading other FileMan files--please wait.......................................................................................... ............................................................................................................................. .......... The following files have been installed: .11 INDEX .2 DESTINATION .31 KEY .4 PRINT TEMPLATE .401 SORT TEMPLATE .402 INPUT TEMPLATE .403 FORM .404 BLOCK .44 FOREIGN FORMAT .46 IMPORT TEMPLATE .5 FUNCTION .6 DD AUDIT .7 MUMPS OPERATING SYSTEM .81 DATA TYPE .83 COMPILED ROUTINE .84 DIALOG .85 LANGUAGE 1 FILE 1.1 AUDIT 1.11 ARCHIVAL ACTIVITY 1.12 FILEGRAM HISTORY 1.13 FILEGRAM ERROR LOG 1.2 ALTERNATE EDITOR 1.521 SQLI_SCHEMA 1.52101 SQLI_KEY_WORD 1.5211 SQLI_DATA_TYPE 1.5212 SQLI_DOMAIN 1.5213 SQLI_KEY_FORMAT 1.5214 SQLI_OUTPUT_FORMAT 1.5215 SQLI_TABLE 1.5216 SQLI_TABLE_ELEMENT 1.5217 SQLI_COLUMN 1.5218 SQLI_PRIMARY_KEY 1.5219 SQLI_FOREIGN_KEY 1.52191 SQLI_ERROR_TEXT 1.52192 SQLI_ERROR_LOG Re-indexing entries in the DIALOG file...................... Compiling all forms ... DICATT (#.001) DIPTED (#.1001) DIKC EDIT (#.1101) DIKC EDIT UI (#.1102) DIKK EDIT (#.3101) DIBTED (#.40001) DIETED (#.40101) DIEDIT (#.40201) DDGF BLOCK EDIT (#.40301) DDGF PAGE ADD (#.40302) DDGF PAGE EDIT (#.40303) DDGF PAGE SELECT (#.40304) DDGF FORM EDIT (#.40305) DDGF HEADER BLOCK EDIT (#.40306) DDGF FIELD ADD (#.40401) DDGF FIELD CAPTION ONLY (#.40402) DDGF FIELD DD (#.40403) DDGF FIELD FORM ONLY (#.40404) DDGF FIELD COMPUTED (#.40405) DDGF BLOCK ADD (#.40406) DDGF BLOCK DELETE (#.40407) DDGF HEADER BLOCK SELECT (#.40408) DDXP FF FORM1 (#.441) DDMP SPECIFY IMPORT (#.461) XPD EDIT BUILD (#1) XUEDIT CHARACTERISTICS (#2) XUEXISTING USER (#3) XUDEVICE MT (#4) XUDEVICE SDP (#5) XUDEVICE SPL (#6) XUDEVICE HFS (#7) XUDEVICE CHAN (#8) XU OPTION SCHEDULE (#9) XUSERDEACT (#10) XUTM UCI ASSOC (#11) XUSITEPARM (#12) XUAUDIT (#13) XUREACT USER (#14) PRSA TD EDIT (#15) PRSA OT REQ (#16) PRSA TD DISP (#17) PRSA TL EDIT (#18) PRSA TL DISP (#19) PRSA LV REQ (#20) PRSA ED REQ (#21) PRSA VC POST (#22) PRSA PM POST (#23) PRSA TD TL (#24) PRSA TP POST1 (#25) PRSA TE EDIT (#26) PRSA FEE POST (#27) NURA-I-SERVICE (#28) XU-PERSON CLASS (#29) XUNEW USER (#30) SPNLPFM1 (#31) SPNFFRM1 (#32) SPNFFRM2 (#33) SPNLPFM2 (#34) XPD EDIT MP (#35) XPD EDIT GP (#36) PRCHQ1 (#37) PRCHQ2 (#38) PRCHQ3 (#39) PRCHQ4 (#40) PRCHQ5 (#41) SPNLP FUN MES (#42) SPNLP FIM FM1 (#43) SPNLP CHART FM1 (#44) SPNLP MS FM1 (#45) SPNE ENTER/EDIT SYNONYM (#46) LREPI (#47) ENPR MS (#48) ENPR ALL (#49) ENPR PRELIM (#50) ENPR AE (#51) ENPR CO (#52) ENPR CHG (#53) ABSV ADD/EDIT MASTER (#54) XQEDTOPT (#55) XU-INST-EDIT (#56) LREPIPROT (#57) XUTMKE ADD (#58) WV PROC-FORM-1 (#59) WV NOTIF-FORM-1 (#60) WV PATIENT-FORM-1 (#61) WV NOTIF-FORM-2 (#62) WV PROC-FORM-2-COLP (#63) WV NOTIFPURPOSE-FORM-1 (#64) WV SITE PARAMS-FORM-1 (#65) WV REFUSED PROCEDURE-ENTRY (#66) WV PROC-FORM-LAB (#67) XDR RESFILE FORM (#68) HL SITE PARAMETERS (#69) PSB PRN EFFECTIVENESS (#70) PSB MED LOG EDIT (#71) PSBO DL (#72) PSBO WA (#73) PSBO ML (#74) PSBO MM (#75) PSBO PE (#76) PSB MISSING DOSE REQUEST (#77) PSBO MH (#78) PSBO MV (#79) PSB MISSING DOSE FOLLOWUP (#80) PSBO BL (#81) PSBO MD (#82) PSB NEW UD ENTRY (#83) PSB NEW IV ENTRY (#84) HL7 APP (#85) HL7 LOGICAL LINK (#86) HL7 INTERFACE (#87) SPNLP ASIA MES (#88) PSB MED LOG EDIT IV (#89) SPNLP FAM FM1 (#90) SPNLP DIENER FM1 (#91) SPNLP DUSOI FM1 (#92) XU-CLINICAL TRAINEE (#93) XUSSPKI (#94) INSTITUTION EDIT (#95) PRSA LD POST (#96) XUDEVICE LPD (#97) XUDEVICE TRM (#98) KMPD PARAMETERS EDIT (#99) LREPI9 (#100) XUDEVICE RES (#101) PSBO BZ (#102) ENIT EDIT (#103) PXRM DIALOG EDIT (#104) XUSITEIP (#105) PSB BCBU PARAMETERS (#106) PSBO XA (#107) MD MAIN (#108) PRSP ESR POST (#109) PRSP EXT ABSENCE (#110) INITIALIZATION COMPLETED IN 8 SECONDS. MU-beta>D ^DMLAINIT This version (#22.2) of 'DMLAINIT' was created on 20-NOV-2012 (at FILEMAN.MUMPS.ORG, by MSC FileMan 22.1043) I AM GOING TO SET UP THE FOLLOWING FILES: .85 LANGUAGE (including data) Note: You already have the 'LANGUAGE' File. I will OVERWRITE your data with mine. SHALL I WRITE OVER FILE SECURITY CODES? No// Y (Yes) ARE YOU SURE EVERYTHING'S OK? No// Y (Yes) ...HMMM, I'M WORKING AS FAST AS I CAN..................... OK, I'M DONE. NOTE THAT FILE SECURITY-CODE PROTECTION HAS BEEN MADE
Verifying the Installation
To confirm installation of the new language file, run this:
I $D(^DD(.85,.001,0)) W "IT WORKED"
Contributors
Version 2 Language file final work to produce files
Building on the Version 2 work & Rick Marshall Sam Habiel
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-2013, revisit the Language file to upgrade it to include the latest versions of the language standards esp. ISO 639-6, 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, 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.
To Do List for future versions
- Work with John McCormack to add Entity pointer to VW HL7 Tables file (260) and populate the field for ISO 639 entries.
- Consider adding Signing to the Language Skills subfile of the Patient file, to better match the HL7 standard.
- Delete the Interpreter Language subfile from the Patient file.
- Investigate whether to delete the other Daou-added fields in the 19900 numberspace from the Patient file.