Framework for Internationalization and Localization of VISTA

Prepared by Sam Habiel for Electronic Health Solutions LLC

This paper shows the ways in which you can establish internationalization and localization for VISTA. The following changes to support this are shown:

Preliminaries

Unicode is not used for Arabic support; rather, I am using Windows-1256 (a.k.a. cp1256) for Arabic Encoding. The only change to support that in Mumps is setting the terminal emulator to input and display cp1256. For CPRS to display Arabic properly on Windows XP, go to Control Panel > Regional and Language Options > Advanced tab. Set the language in the drop down to Arabic (Jordan) and make sure that Code page conversion table 1256 (ANSI – Arabic) is checked.

Unicode is the preferred approach, but CPRS doesn't operate with Unicode. However, all the Mumps changes are as applicable with Unicode as with cp1256.

Two databases were used to test this example: One patched up to June 2008 (and using CPRS 26) and one patched up to March 2009 (the most up to date patches available) (and using CPRS 27).

Change Type of Patient, add Eligibility, and add National ID field

First, add the national ID field:

Select FIELD: NATIONAL ID
LABEL: NATIONAL ID//
TITLE:
AUDIT:
AUDIT CONDITION:
READ ACCESS (OPTIONAL):
DELETE ACCESS (OPTIONAL):
WRITE ACCESS (OPTIONAL):
SOURCE: NATIONAL IDENTIFICATION NUMBER FOR A PATIENT
Select DESTINATION:
Select GROUP:
DESCRIPTION:
No existing text
Edit? NO//
TECHNICAL DESCRIPTION:
Stored in ^DPT(DA,"UJO0") first piece.

Edit? NO//

DATA TYPE OF NATIONAL ID: FREE TEXT//
MINIMUM LENGTH: 1//
MAXIMUM LENGTH: 12// 40
(OPTIONAL) PATTERN MATCH (IN 'X'):
IS NATIONAL ID ENTRY MANDATORY (Y/N): NO//   NO
....
'HELP'-PROMPT: Answer must be 1-40 characters in length.
       Replace
XECUTABLE 'HELP':
          

Notice that the National ID field is stored in ^DPT(DA,"UJO0")

Once this field is created, create a new patient type to replace "VISTA OFFICE EHR", which is an inappropriate term for users to see and may show up in several places. We will use "General Eligibility" or any other term instead.

prod-moh> D P^DI


VA FileMan 22.0


Select OPTION: transFER ENTRIES


Select TRANSFER OPTION: ?
    Answer with TRANSFER OPTION NUMBER, or NAME
   Choose from:
   1            TRANSFER FILE ENTRIES
   2            COMPARE/MERGE FILE ENTRIES

Select TRANSFER OPTION: 1  TRANSFER FILE ENTRIES

INPUT TO WHAT FILE: PATIENT// TYPE OF PATIENT    (10 entries)
TRANSFER FROM FILE: TYPE OF PATIENT//
TRANSFER DATA INTO WHICH TYPE OF PATIENT: GENERAL ELIGIBILITY
  Are you adding 'GENERAL ELIGIBILITY' as
    a new TYPE OF PATIENT (the 11TH)? No// Y  (Yes)
TRANSFER FROM TYPE OF PATIENT: VISTA OFFICE EHR
   WANT TO DELETE THIS ENTRY AFTER IT'S TRANSFERRED? No//   (No)
...HMMM, I'M WORKING AS FAST AS I CAN...
SINCE THE TRANSFERRED ENTRY MAY HAVE BEEN 'POINTED TO'
BY ENTRIES IN THE 'PATIENT' FILE,
DO YOU WANT THOSE POINTERS UPDATED (WHICH COULD TAKE QUITE A WHILE)? No//
  (No)
        

The new entry looks like this:

OUTPUT FROM WHAT FILE: TYPE OF PATIENT//
Select TYPE OF PATIENT NAME: generaL ELIGIBILITY
ANOTHER ONE:
STANDARD CAPTIONED OUTPUT? Yes//   (Yes)
Include COMPUTED fields:  (N/Y/R/B): NO//  - No record number (IEN), no Computed
 Fields

NAME: GENERAL ELIGIBILITY               IGNORE VETERAN CHECKS?: YES
  *INFO TO ASK: 1234567890              MAKE RECORD SENSITIVE?: NO
  VETERAN?: NO
  NEW PATIENT INPUT DR: S DR=".361///REIMBURSABLE INSURANCE;.323///OTHER REIMBUR
S. (NON-VET)"                           *EDIT APPLICANT EMPLOYER?: YES
  *EDIT SPOUSE'S EMPLOYER?: YES         *EDIT SERVICE HISTORY?: NO
  *EDIT PRISONER OF WAR DATA?: NO       *EDIT COMBAT DATA?: NO
  *EDIT VIETNAM SERVICE DATA?: NO       *EDIT AGENT ORANGE DATA?: NO
  *EDIT RADIATION EXPOSURE DATA?: NO    *EDIT MILITARY DISABILITY DATA: NO
  *EDIT DENTAL HISTORY DATA?: YES       *EDIT VA MONETARY BENEFITS?: NO
  *EDIT OTHER MONETARY BENEFITS?: YES   EDIT SC CONDITIONS PER PT?: NO
  *EDIT SC CONDITIONS PER PT?: NO       *EDIT INELIGIBLE DATA?: NO
  *EDIT MISSING DATA?: YES              EDIT INELIGIBLE DATA?: NO
  EDIT MISSING DATA?: YES               SHOW CONTACT SCREEN?: YES
  *SHOW EMPLOYMENT SCREEN?: YES         *SHOW INSURANCE SCREEN?: NO
  SHOW SERVICE SCREEN?: NO              *SHOW MONETARY SCREEN?: NO
  SHOW FAMILY INFO SCREEN: YES          SHOW INCOME SCREENING SCREEN: NO
  SHOW INELIGIBLE SCREEN: NO            SHOW VERIFICATION SCREEN?: NO
        

We are going to edit the "NEW PATIENT INPUT DR" in a moment, but we need to fix the ELIGIBILITY and PERIOD OF SERVICE files first.

Let's fix ELIGIBILITY first. It currently says "EHR PATIENT", which is non-sensical in many reports. Eligibility determines the ID format the system uses, so we need to take care of that first. That's in the IDENTIFICATION FORMAT file.

Select OPTION: enter OR EDIT FILE ENTRIES



INPUT TO WHAT FILE: IDENTIFICATION FORMAT//
EDIT WHICH FIELD: ALL//


Select IDENTIFICATION FORMAT NAME: NATIONAL ID
  Are you adding 'NATIONAL ID' as
    a new IDENTIFICATION FORMAT (the 3RD)? No// Y  (Yes)
PROMPT USER FOR ID?:
CROSS REFERENCE SET LOGIC:
CROSS REFERENCE KILL LOGIC:
XECUTABLE 'HELP':
DESCRIPTION:
  No existing text
  Edit? NO// YES

==[ WRAP ]==[ INSERT ]=============< DESCRIPTION >===========[ <PF1>H=Hel]
National ID for Jordan and other interested countries.


<=======T=======T=======T=======T=======T=======T=======T=======T=======T>


INPUT TRANSFORM:
DEFAULT LONG ID VALUE LOGIC: S X=$P($G(^DPT(DA(1),"UJO0")),U)
SHORT ID TRANSFORM: S X=$P($G(^DPT(DA(1),"UJO0")),U),X=$E(X,$L(X)-3,$L(X))

Select IDENTIFICATION FORMAT NAME:
        

Then MAS ELIGIBILITY CODE:

INPUT TO WHAT FILE: ELIGIBILITY CODE// MAS ELIGIBILITY CODE
                                          (22 entries)
EDIT WHICH FIELD: ALL// INACTIVE
THEN EDIT FIELD:


Select MAS ELIGIBILITY CODE NAME:    REIMBURSABLE INSURANCE  8
INACTIVE: YES//   (No Editing)
        

This is where we get stuck. There are no other suitable MAS ELIGIBILITY CODES to use. We have to activate this. We can fix that:

Select UTILITY OPTION: 9  UNEDITABLE DATA

MODIFY WHAT FILE: MAS ELIGIBILITY CODE//
Select FIELD: INACTIVE
FIELD IS ALREADY UNEDITABLE
DO YOU WANT TO ALLOW EDITING AGAIN? No// Y  (Yes)  ..OK
        

Now then:

INPUT TO WHAT FILE: MAS ELIGIBILITY CODE//
EDIT WHICH FIELD: ALL// inactive
THEN EDIT FIELD:


Select MAS ELIGIBILITY CODE NAME:    REIMBURSABLE INSURANCE  8
INACTIVE: YES// @
   SURE YOU WANT TO DELETE? y  (Yes)
        

And then, we can enter Eligibility:

Select OPTION:    ENTER OR EDIT FILE ENTRIES



INPUT TO WHAT FILE: ELIGIBILITY CODE//
EDIT WHICH FIELD: ALL//


Select ELIGIBILITY CODE NAME: GENERAL ELIGIBILITY
  Are you adding 'GENERAL ELIGIBILITY' as
    a new ELIGIBILITY CODE (the 24TH)? No// Y  (Yes)
   ELIGIBILITY CODE VA CODE NUMBER: 8
   ELIGIBILITY CODE MAS ELIGIBILITY CODE: REIMBURSABLE INSURANCE    8
MAKE RECORD SENSITIVE?:
ABBREVIATION: GEN
PRINT NAME: ??
     Enter abbreviated Eligibility Code name for ouput in limited space.
PRINT NAME: GEN ELIG
INACTIVE:
MAS ELIGIBILITY CODE: REIMBURSABLE INSURANCE//
ID FORMAT: NATIONAL ID
Select SYNONYM:
AGENCY: EHR
        

Now we can fix the PERIOD OF SERVICE entry "OTHER OR NONE":

Select OPTION: enter OR EDIT FILE ENTRIES



INPUT TO WHAT FILE: PERIOD OF SERVICE//
EDIT WHICH FIELD: ALL// eligibility    (multiple)
   EDIT WHICH ELIGIBILITY SUB-FIELD: ALL//
THEN EDIT FIELD:


Select PERIOD OF SERVICE NAME:    OTHER OR NONE
                                        (9)
Select ELIGIBILITY: HUMANITARIAN EMERGENCY// GENERAL ELIGIBILITY    8      8   N
ON-VETERAN
  Are you adding 'GENERAL ELIGIBILITY' as a new ELIGIBILITY (the 10TH for this
PERIOD OF SERVICE)? No// Y  (Yes)
Select ELIGIBILITY:
        

Now, time to fix the DR string in the TYPE OF PATIENT file.

Field .361 points to the Eligibility Code. Field .323 points to the Period of Service.

INPUT TO WHAT FILE: PERIOD OF SERVICE// TYPE OF PATIENT
                                          (11 entries)
EDIT WHICH FIELD: ALL// NEW PATIENT INPUT DR
THEN EDIT FIELD:


Select TYPE OF PATIENT NAME: GENERAL ELIGIBILITY
NEW PATIENT INPUT DR: S DR=".361///REIMBURSABLE INSURANCE;.323///OTHER REIMBURS.
 (NON-VET)"  Replace ... With S DR=".361///GENERAL ELIGIBILITY;.323//OTHER OR NO
^  Replace ^


Select TYPE OF PATIENT NAME:    GENERAL ELIGIBILITY
NEW PATIENT INPUT DR: S DR=".361///REIMBURSABLE INSURANCE;.323///OTHER REIMBURS.
 (NON-VET)"  Replace ... With S DR=".361///GENERAL ELIGIBILITY;.323///OTHER OR N
ONE"  Replace
   S DR=".361///GENERAL ELIGIBILITY;.323///OTHER OR NONE"
        

Time to test whether our changes work in theory (outside of any routines):

EHR,EHR> S DIC=2,DIC(0)="ALEMQ",DLAYGO=2,DIC("DR")=".02;.03;994;.301;391;1901;40
0000000;.361;.323"

EHR,EHR> D ^DIC

Select PATIENT NAME: COYOTE,WILEY
   ARE YOU ADDING 'COYOTE,WILEY' AS A NEW PATIENT (THE 16TH)? No// Y  (Yes)
Enter complete middle name if known or press  to add as entered: :

   ...adding new patient
   PATIENT SEX: F  FEMALE
   PATIENT DATE OF BIRTH: 1920  (1920)
   PATIENT MULTIPLE BIRTH INDICATOR:
   PATIENT SERVICE CONNECTED?: N  NO
   PATIENT TYPE: GENERAL ELIGIBILITY
   PATIENT VETERAN (Y/N)?: N  NO
   PATIENT NATIONAL ID: 1234567899
   PATIENT PRIMARY ELIGIBILITY CODE: GENERAL ELIGIBILITY    8      8   NON-VETER
AN
   PATIENT PERIOD OF SERVICE: ?
     Select from the available listing the period of service which best
     classifies this patient.
     POS must be compatible with Eligibility Code
 Answer with PERIOD OF SERVICE NAME, or ABBREVIATION, or CODE, or
     SYNONYM
 Do you want the entire PERIOD OF SERVICE List? Y  (Yes)
   Choose from:
   OTHER OR NONE                        (9)
   OTHER REIMBURS. (NON-VET)            (P)

     Current Eligibility Code: GENERAL ELIGIBILITY
   PATIENT PERIOD OF SERVICE: OTHER OR NONE
                                        (9)
HEALTH RECORD NO.: 777885567// 777885567
EHR,EHR> W Y
17^COYOTE,WILEY^1
EHR,EHR> D P^DI


VA FileMan 22.0


Select OPTION: INQUIRE TO FILE ENTRIES



OUTPUT FROM WHAT FILE: PATIENT//
Select PATIENT NAME:
  COYOTE,WILEY                              F 00-00-1920
                                                                       777885567
ANOTHER ONE:
STANDARD CAPTIONED OUTPUT? Yes//   (Yes)
Include COMPUTED fields:  (N/Y/R/B): NO//  - No record number (IEN), no Computed
 Fields
DISPLAY AUDIT TRAIL? No//   NO

NAME: COYOTE,WILEY                      SEX: FEMALE
  DATE OF BIRTH: 00/00/1920             CHECK FOR DUPLICATE: YES
  SERVICE CONNECTED?: NO                PERIOD OF SERVICE: OTHER OR NONE
  PRIMARY ELIGIBILITY CODE: GENERAL ELIGIBILITY
  PRIMARY LONG ID: 1234567899           PRIMARY SHORT ID: 7899
ELIGIBILITY: GENERAL ELIGIBILITY        LONG ID: 1234567899
  SHORT ID: 7899
  NAME COMPONENTS: 2                    TYPE: GENERAL ELIGIBILITY
  NATIONAL ID: 1234567899               VETERAN (Y/N)?: NO



Select PATIENT NAME:




Select OPTION: INQUIRE TO FILE ENTRIES



OUTPUT FROM WHAT FILE: PATIENT// IHS PATIENT    (16 entries)
Select PATIENT NAME:
  COYOTE,WILEY                              F 00-00-1920
                                                                       777885567
ANOTHER ONE:
STANDARD CAPTIONED OUTPUT? Yes//   (Yes)
Include COMPUTED fields:  (N/Y/R/B): NO//  - No record number (IEN), no Computed
 Fields
DISPLAY AUDIT TRAIL? No//   NO

NAME: COYOTE,WILEY                      DATE ESTABLISHED: MAR 29, 2010
  ESTABLISHING USER: DEWAYNE,ROBERT
HEALTH RECORD FAC: PRINCE HAMZAH HOSPITAL
  HEALTH RECORD NO.: 777885567
        

Time to edit the patient registration routine so that it would register patients as desired:

Change line 36 in DGREG from:

.. S DIC("DR")=".02;.03;994;.301///N;391///VISTA OFFICE EHR;1901///N;.09"
        

to:

.. S DIC("DR")=".02;.03;994;.301///N;391///GENERAL ELIGIBILITY;1901///N;400000000"
        

The result when using DGREG:

Select OPTION: inqUIRE TO FILE ENTRIES



OUTPUT FROM WHAT FILE: PATIENT//
Select PATIENT NAME:
  DUCK,DONALD                               M 00-00-1950
                                                                       777885568
ANOTHER ONE:
STANDARD CAPTIONED OUTPUT? Yes//   (Yes)
Include COMPUTED fields:  (N/Y/R/B): NO//  - No record number (IEN), no Computed
 Fields
DISPLAY AUDIT TRAIL? No//   NO

NAME: DUCK,DONALD                       SEX: MALE
  DATE OF BIRTH: 00/00/1950             CHECK FOR DUPLICATE: YES
  SERVICE CONNECTED?: NO                PERIOD OF SERVICE: OTHER OR NONE
  PRIMARY ELIGIBILITY CODE: GENERAL ELIGIBILITY
  PRIMARY LONG ID: 1231231234           PRIMARY SHORT ID: 1234
LOG IN DATE/TIME: MAR 29, 2010@16:58    STATUS: APPLICATION WITHOUT EXAM
  TYPE OF BENEFIT APPLIED FOR: HOSPITAL
  FACILITY APPLYING TO: PRINCE HAMZAH HOSPITAL
  WHO ENTERED 10/10: DOCTOR,TEN         ACTIVE: ACTIVE
  TYPE OF CARE APPLIED FOR: ALL OTHER
  REGISTRATION ELIGIBILITY CODE: GENERAL ELIGIBILITY
  ELIG VERIFIED AT REGISTRATION: NO     SC AT REGISTRATION: NO
  NEED RELATED TO OCCUPATION: NO        NEED RELATED TO AN ACCIDENT: NO
ELIGIBILITY: GENERAL ELIGIBILITY        LONG ID: 1231231234
  SHORT ID: 1234
  NAME COMPONENTS: 2                    TYPE: GENERAL ELIGIBILITY
  NATIONAL ID: 1231231234               VETERAN (Y/N)?: NO



Select PATIENT NAME:




Select OPTION:    INQUIRE TO FILE ENTRIES



OUTPUT FROM WHAT FILE: PATIENT// ihs patiENT    (17 entries)
Select PATIENT NAME:
  DUCK,DONALD                               M 00-00-1950
                                                                       777885568
ANOTHER ONE:
STANDARD CAPTIONED OUTPUT? Yes//   (Yes)
Include COMPUTED fields:  (N/Y/R/B): NO//  - No record number (IEN), no Computed
 Fields
DISPLAY AUDIT TRAIL? No//   NO

NAME: DUCK,DONALD                       DATE ESTABLISHED: MAR 29, 2010
  ESTABLISHING USER: DOCTOR,TEN
HEALTH RECORD FAC: PRINCE HAMZAH HOSPITAL
  HEALTH RECORD NO.: 777885568
        

Creation of Arabic Name field

Follow the following steps in Fileman:

Select OPTION:    MODIFY FILE ATTRIBUTES
Do you want to use the screen-mode version? YES// NO

MODIFY WHAT FILE: PATIENT//



Select FIELD: 400000013
  Are you adding a new FIELD (the 468TH)? No// Y  (Yes)
   LABEL: ARABIC NAME
   FIELD NUMBER: 400000013//

DATA TYPE OF ARABIC NAME: FREE TEXT
MINIMUM LENGTH: 3
MAXIMUM LENGTH: 50
(OPTIONAL) PATTERN MATCH (IN 'X'):
WILL ARABIC NAME FIELD BE MULTIPLE? No//   (No)

SUBSCRIPT: 1// UJO1
^-PIECE POSITION: 1//
IS ARABIC NAME ENTRY MANDATORY (Y/N): NO//   NO
....
'HELP'-PROMPT: Answer must be 3-50 characters in length.
           Replace
XECUTABLE 'HELP':
DESCRIPTION:
  No existing text
  Edit? NO//
        

Now, we need to enable display and search of both the National ID and Arabic Name. First we need to create indexes for both of them. To minimize changes to the system, we are going to make an index on the Primary Identifier field, Secondary Identifier field and make a Mnemonic index on the Arabic Name.

Select UTILITY OPTION:    CROSS-REFERENCE A FIELD OR FILE

What type of cross-reference (Traditional or New)? Traditional//   TRADITIONAL

MODIFY WHAT FILE: HOSPITAL LOCATION// 2  PATIENT  (17 entries)
Select FIELD: PRIMARY
     1   PRIMARY ELIGIBILITY CODE
     2   PRIMARY LONG ID
     3   PRIMARY NOK CHANGE DATE/TIME
     4   PRIMARY SHORT ID
CHOOSE 1-4: 2  PRIMARY LONG ID

CURRENT CROSS-REFERENCE IS MUMPS 'AHL7' INDEX OF FILE

Choose E (Edit)/D (Delete)/C (Create): CREATE
WANT TO CREATE A NEW CROSS-REFERENCE FOR THIS FIELD? No// Y  (Yes)
CROSS-REFERENCE NUMBER: 1//
Select TYPE OF INDEXING: REGULAR//
WANT CROSS-REFERENCE TO BE USED FOR LOOKUP AS WELL AS FOR SORTING? Yes//   (Yes)
INDEX: F// UJOPID
...

NO-DELETION MESSAGE:
DESCRIPTION:
  No existing text
  Edit? NO// YES

Index by Patient Primary ID.
DO YOU WANT TO CROSS-REFERENCE EXISTING DATA NOW? y  (Yes)
...EXCUSE ME, THIS MAY TAKE A FEW MOMENTS...


Select UTILITY OPTION:    CROSS-REFERENCE A FIELD OR FILE

What type of cross-reference (Traditional or New)? Traditional//   TRADITIONAL

MODIFY WHAT FILE: PATIENT//
Select FIELD: primary shORT ID

NO CURRENT CROSS-REFERENCE
WANT TO CREATE A NEW CROSS-REFERENCE FOR THIS FIELD? No// y  (Yes)
CROSS-REFERENCE NUMBER: 1//
Select TYPE OF INDEXING: REGULAR//
WANT CROSS-REFERENCE TO BE USED FOR LOOKUP AS WELL AS FOR SORTING? Yes//   (Yes)
INDEX: F// UJOBID
...

NO-DELETION MESSAGE:
DESCRIPTION:
  No existing text
  Edit? NO// YES

Index by Patient Brief/Short Primary ID.


DO YOU WANT TO CROSS-REFERENCE EXISTING DATA NOW? y  (Yes)
...HMMM, I'M WORKING AS FAST AS I CAN...


Select UTILITY OPTION: cross-REFERENCE A FIELD OR FILE

What type of cross-reference (Traditional or New)? Traditional//   TRADITIONAL

MODIFY WHAT FILE: PATIENT//
Select FIELD: ARABIC NAME

NO CURRENT CROSS-REFERENCE
WANT TO CREATE A NEW CROSS-REFERENCE FOR THIS FIELD? No// Y  (Yes)
CROSS-REFERENCE NUMBER: 1//
Select TYPE OF INDEXING: REGULAR// M
     1   MNEMONIC
     2   MUMPS
CHOOSE 1-2: 1  MNEMONIC
...

NO-DELETION MESSAGE:
DESCRIPTION:
  No existing text
  Edit? NO// YES

Mnemonic index for Arabic Name.

...SORRY, HOLD ON...


Select UTILITY OPTION:




Select OPTION:
        

Change Identifiers: Remove SSN and add Primary ID and Arabic Name

The end result is as follows. The name in English, then Arabic, then Sex, then DOB, then Primary Identifier (where that could be a National ID or a chart number), then the chart numbers.

   COYOTE,WILEY     والي كايوتي        F     0/0/20   1234567899
                                                                       777885567
   DUCK,DONALD      دوناد داك        M     0/0/50   1231231234
                                                                       777885568
   MONROE,MARLENE   مارلين مانروى        F   11/23/09    777885562
                                                                       777885562
        

The changes are only in 1 routine: AUPNLKID.

Change Line 8 from:

I $D(DIQUIET) S ^TMP("DILIST",$J,"IHS",DICOUNT)=$P(^(0),U,2)_" "_$E($P(^(0),U,3),4,5)_"-"_$E($P(^(0),U,3),6,7)_"-"_(1700+$E($P(^(0),U,3),1,3))_" "_$J($P(^(0),U,9),9) ;Y2000
        

to:

I $D(DIQUIET) S ^TMP("DILIST",$J,"IHS",DICOUNT)=$P(^(0),U,2)_" "_$$DOB^DPTLK1(Y,1)_" "_$P($G(^(.36)),U,3) ;//SMH Sex + DOB + Primary ID
        

Line 10 from:

K AUPNA I '$D(DIQUIET) NEW % S %=$P(^(0),U,2)_" "_$E($P(^(0),U,3),4,5)_"-"_$E($P(^(0),U,3),6,7)_"-"_(1700+$E($P(^(0),U,3),1,3))_" "_$J($P(^(0),U,9),9) S AUPNA(1)=%,AUPNA(1,"F")="?43" ;Y2000 - display 4 digit year
        

to:

K AUPNA I '$D(DIQUIET) S AUPNA(1)=$P(^(0),U,2)_" "_$J($$DOB^DPTLK1(Y,1),10)_" "_$J($P($G(^(.36)),U,3),12),AUPNA(1,"F")="?43" ;//smh Sex + DOB + Primary ID in 12 sp
        

Line 12 from:

I '$D(DIQUIET) S AUPNA(1)=$$CWAD(Y)_AUPNA(1),AUPNA(1,"F")="?37"
        

to:

I '$D(DIQUIET) S AUPNA(1)=$G(^("UJO1"))_" "_$$CWAD(Y)_AUPNA(1),AUPNA(1,"F")="?20" ;//smh - Arabic Name + CWAD + above
        

Enabling searching for patients by Arabic Name and by National ID

Searching for Arabic Names should work out of the box since the Mnemonic index should take care of that. However, it turns out that there is an input transform in AUPNLK1I that is present to capitalize letters that is garbling the user input (due to how Mumps operates with ASCII encoding cp1256). In order to fix that, the following change needs to be made:

Change Line 21 from:

I AUPX?.E1L.E F AUPI=1:1:$L(AUPX) S:$E(AUPX,AUPI)?1L AUPX=$E(AUPX,0,AUPI-1)_$C($A(AUPX,AUPI)-32)_$E(AUPX,AUPI+1,$L(AUPX))
        

to:

S AUPX=$$UP^XLFSTR(AUPX) ;//smh - proper English capitalization using API
        

Now, searching using Arabic works:

VA FileMan 22.0


Select OPTION: inqUIRE TO FILE ENTRIES



OUTPUT FROM WHAT FILE: PATIENT//
Select PATIENT NAME: مار
لين مانروى
  MONROE,MARLENE    مارلين مانروى        F   11/23/09    777885562
                                                                       777885562
        

To enable searching by National ID (or any expression designated as a Primary ID), add a line after line 35 in AUPNLK1I:

PHONE I DIC(0)["M",AUPX?.NP S AUPREFS=AUPREFS_",AZVWVOE" ;**GFT/VW
        

New line

NID I DIC(0)["M" S AUPREFS=AUPREFS_",UJOPID,UJOBID" ;//SMH/UJO - Primary Long ID, Primary Short ID
        

Now searching by Primary Long ID or Primary Short ID works:

Select PATIENT NAME: 1234567899
  COYOTE,WILEY      والي كايوتي        F     0/0/20   1234567899
                                                                       777885567
ANOTHER ONE: 7899
  COYOTE,WILEY      والي كايوتي        F     0/0/20   1234567899
                                                                       777885567
        

Change the registration process to include Arabic Name as part of the questions

Change line 36 in DGREG to say:

. . S DIC("DR")=".02;.03;994;.301///N;391///GENERAL ELIGIBILITY;1901///N;400000000;400000013" ; //smh
        

Now, here's the registration:

Select PATIENT NAME: GOOSE,GOOFY
   ARE YOU ADDING 'GOOSE,GOOFY' AS A NEW PATIENT (THE 19TH)? No// Y  (Yes)
Enter complete middle name if known or press  to add as entered: :

   ...adding new patient
   PATIENT SEX: F  FEMALE
   PATIENT DATE OF BIRTH: 1989  (1989)
   PATIENT MULTIPLE BIRTH INDICATOR:
   PATIENT NATIONAL ID: 1233455678
   PATIENT ARABIC NAME: جوس,جوفي
HEALTH RECORD NO.: 777885570// 777885570
Press ENTER to continue
        

Display of Dates in Little Endian Format

The following instructions apply to the Mumps side. CPRS and other GUI applications do their own formatting; localizing these applications requires changing their code. You need the DIDT (named as %DT by the ^DINIT routine) routine found in Fileman 22.1037 or later for some bug fixes for some bugs I reported.

Once the changes outlined below are done, the system will display and receive input in dd/mm/yyyy as long as the applications use the VISTA date APIs. The applications that don't use them will display dates typically in the mm/dd/yyyy format.

The date support depends on the language file.

Set the Default Language in the Kernel to be Arabic:

Select OPTION: ENTER OR EDIT FILE ENTRIES
    


INPUT TO WHAT FILE: KERNEL SYSTEM PARAMETERS    (1 entry)
EDIT WHICH FIELD: ALL// DEFAULT LANGUAGE
THEN EDIT FIELD:


Select KERNEL SYSTEM PARAMETERS DOMAIN NAME: `1  MOH.AMMAN.JO
DEFAULT LANGUAGE: ARABIC  10     ARABIC
        

Set Arabic Language Date Formatting Options in the Language File as follows:

ID NUMBER: 10                           NAME: ARABIC
  DATE INPUT: S:$G(%DT)'["I" %DT=$G(%DT)_"I" G CONT^%DT
  DATE/TIME FORMAT (FMTE): N %T,%R,%F S %T="."_($E($P(Y,".",2)_"000000",1,7)) S %F="3" D F3^DILIBF S Y=%R
        

Once that's set, Fileman APIs correctly allow input and write output in a proper format using the Language file.

The other API in Vista that is extensively used for dates is in the Kernel's XLFDT routine. It does not check (currently) DUZ("LANG") in order to do proper processing. I made an edit to the routine to give it this support (just an additional one line, shown in bold).

Before edit (T2^XLFDT):

T2 S %T="."_$E($P(Y,".",2)_"000000",1,7)
 D FMT^XLFDT1 Q %R
        

After edit:

T2 Q:($G(DUZ("LANG"))>1) $$OUT^DIALOGU(Y,"FMTE",%F) ; smh – support for intl dates
 S %T="."_$E($P(Y,".",2)_"000000",1,7)
 D FMT^XLFDT1 Q %R
        

Here's the end result:

Select PATIENT NAME: THE CAT,FELIX
   ARE YOU ADDING 'THE CAT,FELIX' AS A NEW PATIENT (THE 20TH)? No// Y  (Yes)
Enter complete middle name if known or press  to add as entered: :

   ...adding new patient
   PATIENT SEX: M  MALE
   PATIENT DATE OF BIRTH: 23/11/88  (NOV 23,1988)
   PATIENT MULTIPLE BIRTH INDICATOR:
   PATIENT NATIONAL ID: 2345678900
   PATIENT ARABIC NAME: القط,فيلكس
HEALTH RECORD NO.: 777885571// 777885571
Press ENTER to continue

Please verify or update the following information:

HEALTH RECORD NO.: 777885571// 777885571
MOTHER'S MAIDEN NAME:
PLACE OF BIRTH [CITY]:
PLACE OF BIRTH [STATE]:
Select ALIAS:

THE CAT,FELIX                                                    23/11/88
=============================================================================
               COORDINATING MASTER OF RECORD: NOT LISTED
 Address: STREET ADDRESS UNKNOWN        Temporary: NO TEMPORARY ADDRESS
         UNK. CITY/STATE

  County: UNSPECIFIED                     From/To: NOT APPLICABLE
   Phone: UNSPECIFIED                       Phone: NOT APPLICABLE
  Office: UNSPECIFIED
    Cell: UNSPECIFIED
  E-mail: UNSPECIFIED
Bad Addr:

 Confidential Address:                      Confidential Address Categories:
         NO CONFIDENTIAL ADDRESS
 From/To: NOT APPLICABLE

    POS: OTHER OR NONE                    Claim #: UNSPECIFIED
  Relig: UNSPECIFIED                          Sex: MALE
   Race: UNANSWERED                     Ethnicity: UNANSWERED
Enter RETURN to continue or '^' to exit:

THE CAT,FELIX                                                    23/11/88
=============================================================================
               COORDINATING MASTER OF RECORD: NOT LISTED

Primary Eligibility: GENERAL ELIGIBILITY (NOT VERIFIED)
Other Eligibilities:
      Unemployable: NO

Status      : PATIENT HAS NO INPATIENT OR LODGER ACTIVITY IN THE COMPUTER

Future Appointments: NONE

Remarks:

Date of Death Information
     Date of Death:
     Source of Notification:
     Updated Date/Time:
     Last Edited By:

Enter RETURN to continue or '^' to exit:

THE CAT,FELIX                                                    23/11/88
=============================================================================
               COORDINATING MASTER OF RECORD: NOT LISTED

Do you want to enter Patient Data? Yes//   (Yes)
              PATIENT DEMOGRAPHIC DATA, SCREEN <1>
THE CAT,FELIX; 2345678900                                   GENERAL ELIGIBILITY
===============================================================================
                                                          Reg Dt:

[1]    Name: THE CAT,FELIX                  SS: --
        DOB: 23/11/88
     Family: THE CAT                       HRN: 777885571    Sex: MALE
      Given: FELIX                   [2] Alias:  No alias entries on file 
     Middle:
     Prefix:
     Suffix:
     Degree:
[3] Remarks: NO REMARKS ENTERED FOR THIS PATIENT
[4] Permanent Address:                  [5] Temporary Address:
         STREET ADDRESS UNKNOWN                 NO TEMPORARY ADDRESS
         UNK. CITY/STATE

   County: UNANSWERED                      County: NOT APPLICABLE
    Phone: UNANSWERED                       Phone: NOT APPLICABLE
   Office: UNANSWERED                     From/To: NOT APPLICABLE
 Alt Ph:
 Bad Addr:
RET to CONTINUE, 1-5 or ALL to EDIT, ^N for screen N or '^' to QUIT: