Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Routine Automated Development Translations Update

  • Loading branch information...
commit db53f1bdbf052678c2b75915684873b6d9ccd319 1 parent f1633bc
@bradymiller bradymiller authored
View
582 buildLanguageDatabase.pl
@@ -0,0 +1,582 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2009-2013 Brady Miller <brady@sparmy.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Author Brady Miller <brady@sparmy.com>
+# Author Ramin Moshiri <raminmoshiri@gmail.com>
+#
+# This is a perl script that will build the language translation sql
+# dumpfiles from the tab delimited language translation spreadsheet.
+# It will create two output dumpfiles:
+# languageTranslations_utf8.sql
+# languageTranslations_latin1.sql (minus utf languages)
+# It will also validate the spreadsheet and create a new spreadsheet
+# that can be used for further downstream editing and re-importing
+# back into Google Docs. It also outputs a logfile log.txt with
+# errors in validation and database statistics.
+#
+# Example command:
+#
+# -Below command will build the sql dumpfile from given tsv
+# language spreadsheet and compare with a constants list to
+# ensure constants didn't get edited (output will go to
+# the log file), and will also fix limited issues. In this case
+# a new spreadsheet file will also be created with the corrected
+# constants to allow downstream modification and re-importing of
+# file into Google Docs:
+# ./buildLanguageDatabase.pl openemr_language_table.tsv constants.txt
+#
+#
+
+use strict;
+
+# Array to hold languages to skip for the latin1 translation file
+# (pending)
+
+# Put current known constant mismatches here, which are basically
+# constants that get modified during the pipeline and don't look
+# like originals in the end. If this number increases, a english constant
+# was likely modified in the spreadsheet, and can then use log output
+# to localize and fix the problem.
+my $mismatchesKnown = 101;
+
+# Hold variables to calculate language database statistics
+my $totalConstants;
+my $totalDefinitions;
+my @languages;
+my @numberConstantsLanguages;
+
+# Main variables
+my $de = "\t";
+my $filenameOut;
+my $inputFilename;
+my $logFile = "log.txt";
+my $stats = "stats.txt";
+my $constantIdColumn = 0; # 0 is lowest
+my $constantColumn = 1; # 0 is lowest
+my $constantRow = 5; # 0 is lowest
+my $languageNumRow = 0; # 0 is lowest
+my $languageIdRow = 1; # 0 is lowest
+my $languageNameRow = 2; # 0 is lowest
+
+# variables for checking/fixing constants application
+my $checkFilename; # holds list of constants if checking
+my $filenameOut_revised = "revisedSpreadsheet.tsv";
+my $flagCheck = 0;
+my @previousConstants;
+my @inputFile;
+my @revisedFile;
+my @inputFileProcessed;
+
+# to hold utf8 flag
+my $utf8;
+
+# open output file
+open(LOGFILE, ">$logFile") or die "unable to open log file";
+
+# open output file
+open(STATFILE, ">$stats") or die "unable to open stats file";
+
+# collect parameters
+if (@ARGV > 2) {
+ die "\nERROR: Too many parameters. Follow instructions found in buildLanguageDatabase.pl file.\n\n";
+ }
+elsif (@ARGV < 2) {
+ die "\nERROR: Need more parameter(s). Follow instructions found in buildLanguageDatabase.pl file.\n\n";
+}
+elsif (@ARGV == 2) {
+ $flagCheck = 1;
+ $checkFilename = $ARGV[1];
+ $inputFilename = $ARGV[0];
+}
+else {
+ print LOGFILE "ERROR: with parameters\n\n";
+}
+
+# if checking, then open check file and store in array
+if ($flagCheck) {
+ open(MYINPUTFILE, "<$checkFilename") or die "unable to open file";
+ @previousConstants = <MYINPUTFILE>;
+ close(MYINPUTFILE);
+}
+
+# place spreadsheet into array
+open(MYINPUTFILE2, "<$inputFilename") or die "unable to open file";
+@inputFile = <MYINPUTFILE2>;
+close(MYINPUTFILE2);
+
+# Clean up spreadsheet
+# FIRST, remove newlines, blank lines, escape characters, and windows returns
+# SECOND, place the escape characters in all required sql characters
+foreach my $tempLine (@inputFile) {
+ chomp($tempLine);
+ if ($tempLine !~ /^\s*$/) {
+ # remove ^M characters (windows line feeds)
+ $tempLine =~ s/\r//g;
+
+ # remove all escape characters
+ $tempLine =~ s/\\//g;
+
+ # place all required escape characters
+ $tempLine =~ s/\'/\\\'/g;
+ $tempLine =~ s/\"/\\\"/g;
+
+ # push into new array
+ push (@inputFileProcessed,$tempLine);
+ }
+}
+
+# check spreadsheet for rogue tabs and newlines
+# (the last column needs to be full for this to work
+# correctly, such as the dummy language)
+quickCheckStructure(@inputFileProcessed);
+
+# check and fix modified constants (and constant id's)
+if ($flagCheck) {
+ # first create data for replacement spreadsheet if needed
+ @revisedFile = checkConstants("special",@inputFileProcessed);
+ # then clean data to create mysql dumpfiles
+ @inputFileProcessed = checkConstants("normal",@inputFileProcessed);
+}
+
+# run through twice to make a utf8 table and a latin1 table
+# revised spreadsheet. Build statistics and revised
+# spreadsheet during utf8 run.
+for (my $i=0;$i<2;$i++) {
+
+ # set utf flag
+ if ($i == 0) {
+ # build utf8 table
+ $filenameOut = "languageTranslations_utf8.sql";
+ $utf8 = 1;
+ }
+ else {
+ # build latin1 table
+ $filenameOut = "languageTranslations_latin1.sql";
+ $utf8 = 0
+ }
+
+ # open output file
+ open(OUTPUTFILE, ">$filenameOut") or die "unable to open output file";
+
+ my $outputString = "";
+
+ # add UTF8 set names for both utf8 and latin1 encoding, since
+ # the dumpfile is encoded in UTF8
+ $outputString .= "\
+--
+-- Ensure correct encoding
+--
+";
+ $outputString .= "SET NAMES utf8;\n\n";
+
+ # parse lang_languages
+ $outputString .= createLanguages($utf8, @inputFileProcessed);
+
+ # parse lang_constants
+ $outputString .= createConstants($utf8, @inputFileProcessed);
+
+ # parse lang_definitions
+ $outputString .= createDefinitions($utf8, @inputFileProcessed);
+
+ print OUTPUTFILE $outputString;
+
+ # calculate statistics
+ if ($utf8) {
+ my $count = 0;
+ my $countLanguages = 0;
+ my $subtractDefinitions = 0;
+ my @tempArray;
+ my @statArray;
+ foreach my $var (@languages) {
+ # push all info into the log file
+ push (@tempArray, $var.": ".fstr((($numberConstantsLanguages[$count]/$totalConstants)*100),2)."% (".$numberConstantsLanguages[$count]." definitions)\n");
+ if ($var eq "dummy") {
+ # do not count dummy language or dummy language constants
+ $subtractDefinitions += $numberConstantsLanguages[$count];
+ }
+ else {
+ if ($numberConstantsLanguages[$count] > 0) {
+ # only count non-empty languages in total count
+ $countLanguages += 1;
+ # only include non-empty and non-dummy languages in stats
+ push (@statArray, $var.": ".fstr((($numberConstantsLanguages[$count]/$totalConstants)*100),2)."% (".$numberConstantsLanguages[$count]." definitions)\n");
+ }
+ }
+ $count += 1;
+ }
+ print LOGFILE "\nLanguage Statistics:\n";
+ print STATFILE "\nLanguage Statistics:\n";
+
+ # Report total number of real non empty languages
+ print LOGFILE "Total number of languages with translations: ".$countLanguages."\n";
+ print STATFILE "Total number of languages with translations: ".$countLanguages."\n";
+
+ # Report total number of constants
+ print LOGFILE "Total number of constants: ".$totalConstants."\n";
+ print STATFILE "Total number of constants: ".$totalConstants."\n";
+
+ # Report total number of real definitions
+ print LOGFILE "Total number of real definitions: ".($totalDefinitions-$subtractDefinitions)."\n";
+ print STATFILE "Total number of real definitions: ".($totalDefinitions-$subtractDefinitions)."\n";
+
+ # Send log stat info
+ my @sorted_tempArray = sort { lc($a) cmp lc($b) } @tempArray;
+ foreach my $var (@sorted_tempArray) {
+ print LOGFILE $var;
+ }
+
+ # Send official stat info
+ my @sorted_statArray = sort { lc($a) cmp lc($b) } @statArray;
+ foreach my $var (@sorted_statArray) {
+ print STATFILE $var;
+ }
+ }
+
+ # send the processed spreadsheet to file to allow downstream modifications
+ # if checking and fixing modified constants
+ if ($flagCheck && $utf8) {
+ open(MYOUTPUTFILE2, ">$filenameOut_revised") or die "unable to open file";
+ foreach my $var (@revisedFile) {
+ print MYOUTPUTFILE2 $var."\n";
+ }
+ close(MYOUTPUTFILE2)
+ }
+
+ # close files
+ close(OUTPUTFILE);
+}
+
+close(LOGFILE);
+close(STATFILE);
+
+#
+#
+# FUNCTIONS
+#
+#
+
+#
+# function to check spreadsheet for rogue tabs
+# to work, the last column needs to be filled (such as a dummy language)
+# will output errors to LOGFILE
+# param - @arr array of spreadsheet
+# globals - @inputFile, LOGFILE, $de, $languageNumRow
+#
+sub quickCheckStructure() {
+ my (@arr) = @_;
+
+ # use the languagNumRow as the standard for number of tabs
+ # on each row
+ my $numberColumns = split($de,$arr[$languageNumRow]);
+ my $numberTabs = $numberColumns - 1;
+
+ # ensure every row on spreadsheet has equal number of tabs
+ my $counter = 1;
+ foreach my $var (@arr) {
+ my $tempNumber = split($de,$var);
+ my $tempTabs = $tempNumber - 1;
+ if ($numberTabs != $tempTabs) {
+ print LOGFILE "\nERROR: $counter row with incorrect number of tabs. There are $tempTabs in this row and should be $numberTabs.\n";
+ if ($tempTabs > $numberTabs) {
+ # too many tabs
+ print LOGFILE "\t(This is likely secondary to a rogue tab character(s) on row $counter.)\n";
+ }
+ else {
+ # not enough tabs
+ print LOGFILE "\t(This is likely secondary to a rogue newline character(s) on row $counter or one row above.)\n";
+ }
+ }
+ $counter += 1;
+ }
+
+ return;
+}
+
+#
+# function to compare to original constants
+# normal flag will fix constants escape characters to prepare for mysql dumpfile
+# special flag will not fix escape characters to prepare for spreadsheet revision file
+# param - flag (normal or special), array of processed file
+# globals - @previousConstants, $constantRow, $de, LOGFILE,
+# $constantIdColumn, $constantColumn
+# return - none
+#
+sub checkConstants () {
+ my ($flag, @page) = @_;
+
+ print LOGFILE "Checking constants:\n\n";
+ my $counter = $constantRow;
+ my $badCount = 0;
+ my $idErrorFlag = 0;
+ foreach my $var (@previousConstants) {
+ chomp($var);
+ my @tempRow = split($de,$page[$counter]);
+ my $tempId = $tempRow[$constantIdColumn];
+ my $tempConstant = $tempRow[$constantColumn];
+
+ # ensure constant has not been altered
+ if ($var ne $tempConstant) {
+ print LOGFILE "Following constant not same:\n";
+ print LOGFILE "\toriginal- val:$var\n";
+ print LOGFILE "\tspreadsheet- ID:$tempId val:$tempConstant\n";
+ $badCount += 1;
+
+ # apply fix
+ my $fixedVar = $var;
+ if ($flag eq "normal") {
+ $fixedVar =~ s/\\//g;
+ $fixedVar =~ s/\'/\\\'/g;
+ $fixedVar =~ s/\"/\\\"/g;
+ }
+ $tempRow[$constantColumn] = $fixedVar;
+ $page[$counter] = join($de,@tempRow);
+ }
+
+ # ensure constant id number has not been altered
+ my $realID = ($counter - $constantRow + 1);
+ if ($realID != $tempId) {
+ $idErrorFlag = 1;
+ print LOGFILE "\nERROR: Constant ID number ".$realID." has been modified to ".$tempId."!!!\n\n";
+
+ # apply fix (replace with original after reset escape characters)
+ $tempRow[$constantIdColumn] = $realID;
+ $page[$counter] = join($de,@tempRow);
+ }
+
+ # increment counter
+ $counter += 1;
+ }
+
+ print LOGFILE "\nDone checking constants:\n";
+ print LOGFILE "\t".$badCount." mismatches found (known is ".$mismatchesKnown.")\n";
+ if ($badCount == $mismatchesKnown) {
+ print LOGFILE "Good, constants weren't modified by translators\n\n";
+ }
+ else {
+ print LOGFILE "ERROR: Constant(s) have been modified by translators\n\n";
+ }
+ if ($idErrorFlag) {
+ print LOGFILE "ERROR: Constant ID number(s) have been modified by translators\n\n";
+ }
+
+ return @page;
+}
+
+#
+# function to build lang_languages dumpfile
+# param - integer flag for utf8, array of processed file
+# globals - $constantColumn, $constantRow,
+# $languageNumRow, $languageIdRow, $languageNameRow,
+# @numberConstantsLanguages, @languages
+# return - output string
+#
+sub createLanguages() {
+ my ($flag, @page) = @_;
+ my $charset;
+ if ($flag) {
+ $charset = "utf8";
+ }
+ else {
+ $charset = "latin1";
+ }
+
+ # create table input
+ my $tempReturn;
+ my $tempCounter;
+ my @numberRow = split($de,$page[$languageNumRow]);
+ my @idRow = split($de,$page[$languageIdRow]);
+ my @nameRow = split($de,$page[$languageNameRow]);
+ $tempReturn .= "INSERT INTO `lang_languages` (`lang_id`, `lang_code`, `lang_description`) VALUES\n";
+ for (my $i = $constantColumn; $i < @numberRow; $i++) {
+ $tempReturn .= "(".$numberRow[$i].", '".$idRow[$i]."', '".$nameRow[$i]."'),\n";
+ $tempCounter = $numberRow[$i];
+
+ # set up for statistics later
+ push (@languages, $nameRow[$i]);
+ $numberConstantsLanguages[$numberRow[$i]-1] = 0;
+ }
+ $tempReturn =~ s/,\n$/;\n/;
+ $tempCounter += 1;
+
+ # create header
+ my $return = "\
+--
+-- Table structure for table `lang_languages`
+--
+\n
+DROP TABLE IF EXISTS `lang_languages`;
+CREATE TABLE `lang_languages` (
+ `lang_id` int(11) NOT NULL auto_increment,
+ `lang_code` char(2) NOT NULL default '',
+ `lang_description` varchar(100) default NULL,
+ UNIQUE KEY `lang_id` (`lang_id`)
+) ENGINE=MyISAM AUTO_INCREMENT=".$tempCounter." ;
+\n
+--
+-- Dumping data for table `lang_languages`
+--\n\n";
+
+ # insert table input
+ $return .= $tempReturn;
+
+ # create footer
+ $return .= "
+--\n\n";
+
+ return $return;
+}
+
+#
+# function to build lang_constants dumpfile
+# param - integer flag for utf, array of processed file
+# globals - $constantColumn, $constantRow, $constantIdColumn, $totalConstants
+# return - nothing
+#
+sub createConstants() {
+ my (@page) = @_;
+ my ($flag, @page) = @_;
+ my $charset;
+ if ($flag) {
+ $charset = "utf8";
+ }
+ else {
+ $charset = "latin1";
+ }
+
+ # create table input
+ my $tempReturn;
+ my $tempCounter;
+ $tempReturn .= "INSERT INTO `lang_constants` (`cons_id`, `constant_name`) VALUES\n";
+ for (my $i = $constantRow; $i < @page; $i++) {
+ my @tempRow = split($de,$page[$i]);
+ my $tempId = $tempRow[$constantIdColumn];
+ my $tempConstant = $tempRow[$constantColumn];
+ $tempReturn .= "(".$tempId.", '".$tempConstant."'),\n";
+ $tempCounter = $tempId;
+ }
+ $tempReturn =~ s/,\n$/;\n/;
+ $tempCounter += 1;
+
+ # create header
+ my $return = "\
+--
+-- Table structure for table `lang_constants`
+--
+\n
+DROP TABLE IF EXISTS `lang_constants`;
+CREATE TABLE `lang_constants` (
+ `cons_id` int(11) NOT NULL auto_increment,
+ `constant_name` varchar(255) BINARY default NULL,
+ UNIQUE KEY `cons_id` (`cons_id`),
+ KEY `constant_name` (`constant_name`)
+) ENGINE=MyISAM AUTO_INCREMENT=".$tempCounter." ;
+\n
+--
+-- Dumping data for table `lang_constants`
+--\n\n";
+
+ # insert table input
+ $return .= $tempReturn;
+
+ # create footer
+ $return .= "
+--\n\n";
+
+ # fill total constants for statistics later
+ $totalConstants = $tempCounter - 1;
+
+ return $return;
+}
+
+#
+# function to build lang_definitions dumpfile
+# param - integer flag for utf8, array of processed file
+# globals - $constantColumn, $constantRow,
+# $languageNumRow, $constantIdColumn, @numberConstantsLanguages,
+# $totalDefinitions
+# return - nothing
+#
+sub createDefinitions() {
+ my (@page) = @_;
+ my ($flag, @page) = @_;
+ my $charset;
+ if ($flag) {
+ $charset = "utf8";
+ }
+ else {
+ $charset = "latin1";
+ }
+
+ # create table input
+ my $tempReturn;
+ my $tempCounter;
+ my @numberRow = split($de,$page[$languageNumRow]);
+ my $counter = 1;
+ for (my $i = $constantColumn + 1; $i < @numberRow; $i++) {
+ for (my $j = $constantRow; $j < @page; $j++) {
+ my @tempRow = split($de,$page[$j]);
+ my $tempId = $tempRow[$constantIdColumn];
+ my $tempDefinition = $tempRow[$i];
+ my $tempLangNumber = $numberRow[$i];
+ if ($tempDefinition !~ /^\s*$/) {
+ $tempReturn .= "INSERT INTO `lang_definitions` VALUES (".$counter.", ".$tempId.", ".$tempLangNumber.", '".$tempDefinition."');\n";
+ $tempCounter = $counter;
+ $counter += 1;
+
+ # set up for statistics
+ $numberConstantsLanguages[($tempLangNumber - 1)] += 1;
+ }
+ }
+ }
+ $tempCounter += 1;
+
+ # create header
+ my $return = "\
+--
+-- Table structure for table `lang_definitions`
+--
+\n
+DROP TABLE IF EXISTS `lang_definitions`;
+CREATE TABLE `lang_definitions` (
+ `def_id` int(11) NOT NULL auto_increment,
+ `cons_id` int(11) NOT NULL default '0',
+ `lang_id` int(11) NOT NULL default '0',
+ `definition` mediumtext,
+ UNIQUE KEY `def_id` (`def_id`),
+ KEY `cons_id` (`cons_id`)
+) ENGINE=MyISAM AUTO_INCREMENT=".$tempCounter." ;
+\n
+--
+-- Dumping data for table `lang_definitions`
+--\n\n";
+
+ # insert table input
+ $return .= $tempReturn;
+
+ # create footer
+ $return .= "
+--\n\n";
+
+ # fill total definitions for statistics later
+ $totalDefinitions = $tempCounter - 1;
+
+ return $return;
+}
+
+# Function to drop decimals
+# param: 1st is number, 2nd is nubmer of desired decimals
+sub fstr () {
+ my ($value,$precision) = @_;
+ if ($value == 0) {
+ return "0";
+ }
+ my $s = sprintf("%.${precision}f", $value);
+ $s =~ s/\.?0*$//;
+ return $s;
+}
View
6,152 currentConstants.txt
6,152 additions, 0 deletions not shown
View
663 log_buildLanguageDatabase.txt
@@ -0,0 +1,663 @@
+Checking constants:
+
+Following constant not same:
+ original- val:Age format for "age from" is not valid
+ spreadsheet- ID:198 val:Age format for \"age from\" is not valid
+Following constant not same:
+ original- val:Age format for "age up to" is not valid
+ spreadsheet- ID:199 val:Age format for \"age up to\" is not valid
+Following constant not same:
+ original- val:Alternatively, you may use the search page to upload an electronic remittance (X12 835) file that you have obtained from your payer or clearinghouse. You can do this by clicking the Browse button and selecting the file to upload, and then clicking Search to perform the upload and display the corresponding invoices. In this case the other parameters mentioned above do not apply and will be ignored. Uploading saves the file but does not yet process its contents -- that is done separately as described below.
+ spreadsheet- ID:270 val:Alternatively, you may use the search page to upload an electronic remittance (X12 835) file that you have obtained from your payer or clearinghouse. You can do this by clicking the Browse button and selecting the file to upload, and then clicking Search to perform the upload and display the corresponding invoices. In this case the other parameters mentioned above do not apply and will be ignored. Uploading saves the file but does not yet process its contents -- that is done separately as described below.
+Following constant not same:
+ original- val:Automatically create a new encounter when appointment status is set to "@" (arrived).
+ spreadsheet- ID:446 val:Automatically create a new encounter when appointment status is set to \"@\" (arrived).
+Following constant not same:
+ original- val:Blue lines in this report are informational. Black lines show previously existing information. Green lines show changes that were successfully applied. Red lines indicate errors, or changes that were not applied; these must be processed manually. Currently denied claims and payment reversals are not handled automatically and so will appear in red.
+ spreadsheet- ID:551 val:Blue lines in this report are informational. Black lines show previously existing information. Green lines show changes that were successfully applied. Red lines indicate errors, or changes that were not applied; these must be processed manually. Currently denied claims and payment reversals are not handled automatically and so will appear in red.
+Following constant not same:
+ original- val:Checked box = yes , empty = no
+ spreadsheet- ID:748 val:Checked box = yes , empty = no
+Following constant not same:
+ original- val:Click 'export' to export your Category, Subcategory, Item, Content data to a text file. Any resemblance of this file to an XML file is purely coincidental. The opening and closing tags must be on the same line, they must be lowercase with no spaces. To import, browse for a file and click 'import'. If the data is completely different, it will merge with your existing data. If there are similar item names, The old one will be kept and the new one saved with a number added to the end.
+ spreadsheet- ID:804 val:Click \'export\' to export your Category, Subcategory, Item, Content data to a text file. Any resemblance of this file to an XML file is purely coincidental. The opening and closing tags must be on the same line, they must be lowercase with no spaces. To import, browse for a file and click \'import\'. If the data is completely different, it will merge with your existing data. If there are similar item names, The old one will be kept and the new one saved with a number added to the end.
+Following constant not same:
+ original- val:Couldn't create backup dir:
+ spreadsheet- ID:1038 val:Couldn\'t create backup dir:
+Following constant not same:
+ original- val:Couldn't remove dir:
+ spreadsheet- ID:1039 val:Couldn\'t remove dir:
+Following constant not same:
+ original- val:Couldn't remove old backup file:
+ spreadsheet- ID:1040 val:Couldn\'t remove old backup file:
+Following constant not same:
+ original- val:Couldn't remove old export file:
+ spreadsheet- ID:1041 val:Couldn\'t remove old export file:
+Following constant not same:
+ original- val:Date format for "appointment end" is not valid
+ spreadsheet- ID:1160 val:Date format for \"appointment end\" is not valid
+Following constant not same:
+ original- val:Date format for "appointment start" is not valid
+ spreadsheet- ID:1161 val:Date format for \"appointment start\" is not valid
+Following constant not same:
+ original- val:Date format for "Next Appointment" is not valid
+ spreadsheet- ID:1162 val:Date format for \"Next Appointment\" is not valid
+Following constant not same:
+ original- val:Date format for "not seen since" is not valid
+ spreadsheet- ID:1163 val:Date format for \"not seen since\" is not valid
+Following constant not same:
+ original- val:Date format for "seen since" is not valid
+ spreadsheet- ID:1164 val:Date format for \"seen since\" is not valid
+Following constant not same:
+ original- val:Depending on the type of bill you are testing you will see HCFA like output on a blank page for HCFA bills, you will see many lines of somewhat garbled text and information if you are testing an X12 claim. That garbled text is the X12 EDI 4010A format. Occasionally you will see odd characters that look like dominoes or squiglies, these are control characters such as page feeds and are normal.
+ spreadsheet- ID:1289 val:Depending on the type of bill you are testing you will see HCFA like output on a blank page for HCFA bills, you will see many lines of somewhat garbled text and information if you are testing an X12 claim. That garbled text is the X12 EDI 4010A format. Occasionally you will see odd characters that look like dominoes or squiglies, these are control characters such as page feeds and are normal.
+Following constant not same:
+ original- val:Don't Save
+ spreadsheet- ID:1453 val:Don\'t Save
+Following constant not same:
+ original- val:Done. Will now send download.
+ spreadsheet- ID:1458 val:Done. Will now send download.
+Following constant not same:
+ original- val:ee the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free
+ spreadsheet- ID:1566 val:ee the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free
+Following constant not same:
+ original- val:Empty value in "Email Hours"
+ spreadsheet- ID:1620 val:Empty value in \"Email Hours\"
+Following constant not same:
+ original- val:Empty value in "Email Sender"
+ spreadsheet- ID:1621 val:Empty value in \"Email Sender\"
+Following constant not same:
+ original- val:Empty value in "Email Subject"
+ spreadsheet- ID:1622 val:Empty value in \"Email Subject\"
+Following constant not same:
+ original- val:Empty value in "Email Text"
+ spreadsheet- ID:1623 val:Empty value in \"Email Text\"
+Following constant not same:
+ original- val:Empty value in "Name of Provider"
+ spreadsheet- ID:1624 val:Empty value in \"Name of Provider\"
+Following constant not same:
+ original- val:Empty value in "Password"
+ spreadsheet- ID:1625 val:Empty value in \"Password\"
+Following constant not same:
+ original- val:Empty value in "SMS Hours"
+ spreadsheet- ID:1626 val:Empty value in \"SMS Hours\"
+Following constant not same:
+ original- val:Empty value in "SMS Text"
+ spreadsheet- ID:1627 val:Empty value in \"SMS Text\"
+Following constant not same:
+ original- val:Empty value in "Username"
+ spreadsheet- ID:1628 val:Empty value in \"Username\"
+Following constant not same:
+ original- val:Error in "Gender" selection
+ spreadsheet- ID:1768 val:Error in \"Gender\" selection
+Following constant not same:
+ original- val:Error in "HIPAA" selection
+ spreadsheet- ID:1769 val:Error in \"HIPAA\" selection
+Following constant not same:
+ original- val:Error in "Process" selection
+ spreadsheet- ID:1770 val:Error in \"Process\" selection
+Following constant not same:
+ original- val:Error in "SMS Gateway" selection
+ spreadsheet- ID:1771 val:Error in \"SMS Gateway\" selection
+Following constant not same:
+ original- val:Error in "Sort By" selection
+ spreadsheet- ID:1772 val:Error in \"Sort By\" selection
+Following constant not same:
+ original- val:Error: passwords don't match. Please check your typing.
+ spreadsheet- ID:1801 val:Error: passwords don\'t match. Please check your typing.
+Following constant not same:
+ original- val:Guardian's Name
+ spreadsheet- ID:2220 val:Guardian\'s Name
+Following constant not same:
+ original- val:If you have chosen to upload electronic remittances, then the search window redisplays itself with the matching invoices from the X12 file. You may click on any of these invoice numbers (as described below) if you wish to make any corrections before the remittance information is applied. To apply the changes, click the Process ERA File button at the bottom of the page. This will produce a new window with a detailed report.
+ spreadsheet- ID:2391 val:If you have chosen to upload electronic remittances, then the search window redisplays itself with the matching invoices from the X12 file. You may click on any of these invoice numbers (as described below) if you wish to make any corrections before the remittance information is applied. To apply the changes, click the Process ERA File button at the bottom of the page. This will produce a new window with a detailed report.
+Following constant not same:
+ original- val:If you have entered a Pay Date in the search page, this will override the posting date of payments and adjustments that are otherwise taken from the X12 file. This may be useful for reporting purposes, if you want your receipts reporting to use your posting date rather than the insurance company\'s processing date. Note that this will also affect dates of prior payments and adjustments that are put into secondary claims.
+ spreadsheet- ID:2392 val:If you have entered a Pay Date in the search page, this will override the posting date of payments and adjustments that are otherwise taken from the X12 file. This may be useful for reporting purposes, if you want your receipts reporting to use your posting date rather than the insurance company\'s processing date. Note that this will also affect dates of prior payments and adjustments that are put into secondary claims.
+Following constant not same:
+ original- val:Internal error: encounter '
+ spreadsheet- ID:2545 val:Internal error: encounter \'
+Following constant not same:
+ original- val:Invalid source designation "
+ spreadsheet- ID:2570 val:Invalid source designation \"
+Following constant not same:
+ original- val:Just below the check information is a blue area where you put in your search parameters. You can search by patient name, chart number, encounter number or date of service, or any combination of these. You may also select whether you want to see all invoices, open invoices, or only invoices that are due (by the patient). Click the Search button to perform the search.
+ spreadsheet- ID:2662 val:Just below the check information is a blue area where you put in your search parameters. You can search by patient name, chart number, encounter number or date of service, or any combination of these. You may also select whether you want to see all invoices, open invoices, or only invoices that are due (by the patient). Click the Search button to perform the search.
+Following constant not same:
+ original- val:k, here's the rest
+ spreadsheet- ID:2668 val:k, here\'s the rest
+Following constant not same:
+ original- val:Make sure "
+ spreadsheet- ID:2874 val:Make sure \"
+Following constant not same:
+ original- val:Mother's Name
+ spreadsheet- ID:3052 val:Mother\'s Name
+Following constant not same:
+ original- val:NOTE: Uploading files with duplicate names will cause the files to be automatically renamed. For example '<i>file.jpg</i>' will become '<i>file.jpg.1</i>'. Filenames are considered unique per patient, not per category.
+ spreadsheet- ID:3372 val:NOTE: Uploading files with duplicate names will cause the files to be automatically renamed. For example \'<i>file.jpg</i>\' will become \'<i>file.jpg.1</i>\'. Filenames are considered unique per patient, not per category.
+Following constant not same:
+ original- val:Passwords Don't match!
+ spreadsheet- ID:3628 val:Passwords Don\'t match!
+Following constant not same:
+ original- val:Pay attention to the "Done with" checkboxes. After the insurances are marked complete then we will start asking the patient to pay the remaining balance; if you fail to mark all of the insurances complete then the remaining amount will not be collected! Also if there is a balance that the patient should pay, then set the due date appropriately, as this will affect the language that appears on patient statements.
+ spreadsheet- ID:3750 val:Pay attention to the \"Done with\" checkboxes. After the insurances are marked complete then we will start asking the patient to pay the remaining balance; if you fail to mark all of the insurances complete then the remaining amount will not be collected! Also if there is a balance that the patient should pay, then set the due date appropriately, as this will affect the language that appears on patient statements.
+Following constant not same:
+ original- val:Pennington Firm OpenEMR v
+ spreadsheet- ID:3791 val:Pennington Firm OpenEMR v
+Following constant not same:
+ original- val:Please do NOT use your browsers stop or reload button while this page is running unless more than 10 minutes have elapsed, this will not cause the process to stop on the server and will consume uneccesary resources.
+ spreadsheet- ID:3885 val:Please do NOT use your browsers stop or reload button while this page is running unless more than 10 minutes have elapsed, this will not cause the process to stop on the server and will consume uneccesary resources.
+Following constant not same:
+ original- val:Please note that this can take a very long time, up to several minutes, your web browser may not appear very active during this time but generating a bill is a complicated process and your web browser is merely waiting for more information.
+ spreadsheet- ID:3915 val:Please note that this can take a very long time, up to several minutes, your web browser may not appear very active during this time but generating a bill is a complicated process and your web browser is merely waiting for more information.
+Following constant not same:
+ original- val:Please select a Primary Business Entity facility with 'Tax ID' as your facility Tax ID. If you are an individual practitioner, use your tax id. This is used for identifying you in the NewCrop system.
+ spreadsheet- ID:3927 val:Please select a Primary Business Entity facility with \'Tax ID\' as your facility Tax ID. If you are an individual practitioner, use your tax id. This is used for identifying you in the NewCrop system.
+Following constant not same:
+ original- val:SA * * To read the license please read the docs/license.txt or visit * http://www.gnu.org/copyleft/gpl.html * */ //========================================================================= //
+ spreadsheet- ID:4550 val:SA * * To read the license please read the docs/license.txt or visit * http://www.gnu.org/copyleft/gpl.html * */ //========================================================================= //
+Following constant not same:
+ original- val:Specifies formatting for invoice reference numbers. # = digit, * = any character. Empty if not used.
+ spreadsheet- ID:4938 val:Specifies formatting for invoice reference numbers. # = digit, * = any character. Empty if not used.
+Following constant not same:
+ original- val:Specifies formatting for invoice reference numbers. # = digit, @ = alpha, * = any character. Empty if not used.
+ spreadsheet- ID:4939 val:Specifies formatting for invoice reference numbers. # = digit, @ = alpha, * = any character. Empty if not used.
+Following constant not same:
+ original- val:Specifies formatting for product NDC fields. # = digit, * = any character. Empty if not used.
+ spreadsheet- ID:4940 val:Specifies formatting for product NDC fields. # = digit, * = any character. Empty if not used.
+Following constant not same:
+ original- val:Specifies formatting for product NDC fields. # = digit, @ = alpha, * = any character. Empty if not used.
+ spreadsheet- ID:4941 val:Specifies formatting for product NDC fields. # = digit, @ = alpha, * = any character. Empty if not used.
+Following constant not same:
+ original- val:Specifies formatting for the external patient ID. # = digit, * = any character. Empty if not used.
+ spreadsheet- ID:4942 val:Specifies formatting for the external patient ID. # = digit, * = any character. Empty if not used.
+Following constant not same:
+ original- val:Specifies formatting for the external patient ID. # = digit, @ = alpha, * = any character. Empty if not used.
+ spreadsheet- ID:4943 val:Specifies formatting for the external patient ID. # = digit, @ = alpha, * = any character. Empty if not used.
+Following constant not same:
+ original- val:The 'Clear' button will remove all annotations.
+ spreadsheet- ID:5204 val:The \'Clear\' button will remove all annotations.
+Following constant not same:
+ original- val:The exported data appears in the text area below. You can copy and paste this into an email or to any other desired destination.
+ spreadsheet- ID:5220 val:The exported data appears in the text area below. You can copy and paste this into an email or to any other desired destination.
+Following constant not same:
+ original- val:The first ("target") chart is the one that is considered the most complete and accurate. Demographics, history and insurance sections for this one will be retained.
+ spreadsheet- ID:5225 val:The first (\"target\") chart is the one that is considered the most complete and accurate. Demographics, history and insurance sections for this one will be retained.
+Following constant not same:
+ original- val:The initial window is the invoice search page. At the top you may enter a source (e.g. check number), pay date and check amount. The reason for the source and pay date is so that you don\'t have to enter them over and over again for each claim. The amount that you enter will be decreased for each invoice that is given part of the payment, and hopefully will end at zero when you are done.
+ spreadsheet- ID:5240 val:The initial window is the invoice search page. At the top you may enter a source (e.g. check number), pay date and check amount. The reason for the source and pay date is so that you don\'t have to enter them over and over again for each claim. The amount that you enter will be decreased for each invoice that is given part of the payment, and hopefully will end at zero when you are done.
+Following constant not same:
+ original- val:The second ("source") chart will have its demographics, history and insurance sections discarded. Its other data will be merged into the target chart.
+ spreadsheet- ID:5264 val:The second (\"source\") chart will have its demographics, history and insurance sections discarded. Its other data will be merged into the target chart.
+Following constant not same:
+ original- val:The Source and Date columns are copied from the first page, so normally you will not need to touch those. You can put a payment amount in the Pay column, an adjustment amount in the Adjust column, or both. You can also click the "W" on the right to automatically compute an adjustment value that writes off the remainder of the charge for that line item.
+ spreadsheet- ID:5265 val:The Source and Date columns are copied from the first page, so normally you will not need to touch those. You can put a payment amount in the Pay column, an adjustment amount in the Adjust column, or both. You can also click the \"W\" on the right to automatically compute an adjustment value that writes off the remainder of the charge for that line item.
+Following constant not same:
+ original- val:The X12 files as well as the resulting HTML output reports are archived in the "era" subdirectory of the main OpenEMR installation directory. You will want to refer to these archives from time to time. The URL is
+ spreadsheet- ID:5276 val:The X12 files as well as the resulting HTML output reports are archived in the \"era\" subdirectory of the main OpenEMR installation directory. You will want to refer to these archives from time to time. The URL is
+Following constant not same:
+ original- val:There are errors with your submission. These are outlined below.
+ spreadsheet- ID:5283 val:There are errors with your submission. These are outlined below.
+Following constant not same:
+ original- val:This utility is experimental. Back up your database and documents before using it!
+ spreadsheet- ID:5361 val:This utility is experimental. Back up your database and documents before using it!
+Following constant not same:
+ original- val:This will be a "dry run" with no physical data updates.
+ spreadsheet- ID:5368 val:This will be a \"dry run\" with no physical data updates.
+Following constant not same:
+ original- val:This will merge two patient charts into one. It is useful when a patient has been duplicated by mistake. If that happens often, fix your office procedures - do not run this routinely!
+ spreadsheet- ID:5372 val:This will merge two patient charts into one. It is useful when a patient has been duplicated by mistake. If that happens often, fix your office procedures - do not run this routinely!
+Following constant not same:
+ original- val:To ded'ble
+ spreadsheet- ID:5417 val:To ded\'ble
+Following constant not same:
+ original- val:trftime($month_format, mktime(0, 0, 0, $i, 1, 2000)) ); $month_value
+ spreadsheet- ID:5548 val:trftime($month_format, mktime(0, 0, 0, $i, 1, 2000)) ); $month_value
+Following constant not same:
+ original- val:Upon clicking an invoice number the "manual posting window" appears. Here you can change the due date and notes for the invoice, select the party for whom you are posting, and select the insurances for which all expected paymants have been received. Most importantly, for each billing code for which an amount was charged, you can enter payment and adjustment information.
+ spreadsheet- ID:5655 val:Upon clicking an invoice number the \"manual posting window\" appears. Here you can change the due date and notes for the invoice, select the party for whom you are posting, and select the insurances for which all expected paymants have been received. Most importantly, for each billing code for which an amount was charged, you can enter payment and adjustment information.
+Following constant not same:
+ original- val:Upon searching you are presented with a list of invoices. You may click on one of the invoice numbers to open a second window, which is the data entry page for manual posting. You may also click on a patient name if you want to enter a note that the front office staff will see when the patient checks in, and you may select invoices to appear on patient statements and print those statements.
+ spreadsheet- ID:5656 val:Upon searching you are presented with a list of invoices. You may click on one of the invoice numbers to open a second window, which is the data entry page for manual posting. You may also click on a patient name if you want to enter a note that the front office staff will see when the patient checks in, and you may select invoices to appear on patient statements and print those statements.
+Following constant not same:
+ original- val:uses php <a href="http://php.net/strftime">strftime</a> format
+ spreadsheet- ID:5731 val:uses php <a href=\"http://php.net/strftime\">strftime</a> format
+Following constant not same:
+ original- val:You have attempted to alter content which is locked. Remove the lock if you want to do this. To unlock, remove the line, '/*lock::*/'
+ spreadsheet- ID:5948 val:You have attempted to alter content which is locked. Remove the lock if you want to do this. To unlock, remove the line, \'/*lock::*/\'
+Following constant not same:
+ original- val: but was
+ spreadsheet- ID:6007 val:but was
+Following constant not same:
+ original- val: could not be accessed.
+ spreadsheet- ID:6008 val:could not be accessed.
+Following constant not same:
+ original- val: Do you really want to delete
+ spreadsheet- ID:6009 val:Do you really want to delete
+Following constant not same:
+ original- val: Drug
+ spreadsheet- ID:6010 val:Drug
+Following constant not same:
+ original- val: emails not sent
+ spreadsheet- ID:6011 val:emails not sent
+Following constant not same:
+ original- val: from
+ spreadsheet- ID:6012 val:from
+Following constant not same:
+ original- val: has been created.
+ spreadsheet- ID:6013 val:has been created.
+Following constant not same:
+ original- val: has been re-opened.
+ spreadsheet- ID:6014 val:has been re-opened.
+Following constant not same:
+ original- val: History
+ spreadsheet- ID:6015 val:History
+Following constant not same:
+ original- val: is not a number
+ spreadsheet- ID:6016 val:is not a number
+Following constant not same:
+ original- val: is ready for re-billing.
+ spreadsheet- ID:6017 val:is ready for re-billing.
+Following constant not same:
+ original- val: LLL:
+ spreadsheet- ID:6018 val:LLL:
+Following constant not same:
+ original- val: Lot
+ spreadsheet- ID:6019 val:Lot
+Following constant not same:
+ original- val: Medicaid Original Reference No.
+ spreadsheet- ID:6020 val:Medicaid Original Reference No.
+Following constant not same:
+ original- val: min
+ spreadsheet- ID:6021 val:min
+Following constant not same:
+ original- val: not found!
+ spreadsheet- ID:6022 val:not found!
+Following constant not same:
+ original- val: Pecularities in many browsers may mean that the output below enters your screen in sudden jerks and that there are long pauses of several seconds where it appears as though things may have crashed. That is not the case, you will eventually see output coming out line by line. There may be sequential numbers appearing below, this is to indicate that even though nothing else may be displaying there is activity going on. These numbers will be interspersed with the content of the billing and that is normal.
+ spreadsheet- ID:6023 val:Pecularities in many browsers may mean that the output below enters your screen in sudden jerks and that there are long pauses of several seconds where it appears as though things may have crashed. That is not the case, you will eventually see output coming out line by line. There may be sequential numbers appearing below, this is to indicate that even though nothing else may be displaying there is activity going on. These numbers will be interspersed with the content of the billing and that is normal.
+Following constant not same:
+ original- val: prescription has reached its limit of
+ spreadsheet- ID:6024 val:prescription has reached its limit of
+Following constant not same:
+ original- val: until
+ spreadsheet- ID:6025 val:until
+Following constant not same:
+ original- val: update failed, not in database?
+ spreadsheet- ID:6026 val:update failed, not in database?
+Following constant not same:
+ original- val: was marked as billed only.
+ spreadsheet- ID:6027 val:was marked as billed only.
+Following constant not same:
+ original- val: was queued successfully.
+ spreadsheet- ID:6028 val:was queued successfully.
+Following constant not same:
+ original- val:" for code
+ spreadsheet- ID:6030 val:\" for code
+Following constant not same:
+ original- val:" is CHECKED in PostCalendar Settings!
+ spreadsheet- ID:6031 val:\" is CHECKED in PostCalendar Settings!
+Following constant not same:
+ original- val:% Cancelled < 24h
+ spreadsheet- ID:6039 val:% Cancelled < 24h
+Following constant not same:
+ original- val:' should exist but does not.
+ spreadsheet- ID:6040 val: should exist but does not.
+
+Done checking constants:
+ 101 mismatches found (known is 101)
+Good, constants weren't modified by translators
+
+Checking constants:
+
+Following constant not same:
+ original- val:Age format for "age from" is not valid
+ spreadsheet- ID:198 val:Age format for \"age from\" is not valid
+Following constant not same:
+ original- val:Age format for "age up to" is not valid
+ spreadsheet- ID:199 val:Age format for \"age up to\" is not valid
+Following constant not same:
+ original- val:Alternatively, you may use the search page to upload an electronic remittance (X12 835) file that you have obtained from your payer or clearinghouse. You can do this by clicking the Browse button and selecting the file to upload, and then clicking Search to perform the upload and display the corresponding invoices. In this case the other parameters mentioned above do not apply and will be ignored. Uploading saves the file but does not yet process its contents -- that is done separately as described below.
+ spreadsheet- ID:270 val:Alternatively, you may use the search page to upload an electronic remittance (X12 835) file that you have obtained from your payer or clearinghouse. You can do this by clicking the Browse button and selecting the file to upload, and then clicking Search to perform the upload and display the corresponding invoices. In this case the other parameters mentioned above do not apply and will be ignored. Uploading saves the file but does not yet process its contents -- that is done separately as described below.
+Following constant not same:
+ original- val:Automatically create a new encounter when appointment status is set to "@" (arrived).
+ spreadsheet- ID:446 val:Automatically create a new encounter when appointment status is set to \"@\" (arrived).
+Following constant not same:
+ original- val:Blue lines in this report are informational. Black lines show previously existing information. Green lines show changes that were successfully applied. Red lines indicate errors, or changes that were not applied; these must be processed manually. Currently denied claims and payment reversals are not handled automatically and so will appear in red.
+ spreadsheet- ID:551 val:Blue lines in this report are informational. Black lines show previously existing information. Green lines show changes that were successfully applied. Red lines indicate errors, or changes that were not applied; these must be processed manually. Currently denied claims and payment reversals are not handled automatically and so will appear in red.
+Following constant not same:
+ original- val:Checked box = yes , empty = no
+ spreadsheet- ID:748 val:Checked box = yes , empty = no
+Following constant not same:
+ original- val:Click 'export' to export your Category, Subcategory, Item, Content data to a text file. Any resemblance of this file to an XML file is purely coincidental. The opening and closing tags must be on the same line, they must be lowercase with no spaces. To import, browse for a file and click 'import'. If the data is completely different, it will merge with your existing data. If there are similar item names, The old one will be kept and the new one saved with a number added to the end.
+ spreadsheet- ID:804 val:Click \'export\' to export your Category, Subcategory, Item, Content data to a text file. Any resemblance of this file to an XML file is purely coincidental. The opening and closing tags must be on the same line, they must be lowercase with no spaces. To import, browse for a file and click \'import\'. If the data is completely different, it will merge with your existing data. If there are similar item names, The old one will be kept and the new one saved with a number added to the end.
+Following constant not same:
+ original- val:Couldn't create backup dir:
+ spreadsheet- ID:1038 val:Couldn\'t create backup dir:
+Following constant not same:
+ original- val:Couldn't remove dir:
+ spreadsheet- ID:1039 val:Couldn\'t remove dir:
+Following constant not same:
+ original- val:Couldn't remove old backup file:
+ spreadsheet- ID:1040 val:Couldn\'t remove old backup file:
+Following constant not same:
+ original- val:Couldn't remove old export file:
+ spreadsheet- ID:1041 val:Couldn\'t remove old export file:
+Following constant not same:
+ original- val:Date format for "appointment end" is not valid
+ spreadsheet- ID:1160 val:Date format for \"appointment end\" is not valid
+Following constant not same:
+ original- val:Date format for "appointment start" is not valid
+ spreadsheet- ID:1161 val:Date format for \"appointment start\" is not valid
+Following constant not same:
+ original- val:Date format for "Next Appointment" is not valid
+ spreadsheet- ID:1162 val:Date format for \"Next Appointment\" is not valid
+Following constant not same:
+ original- val:Date format for "not seen since" is not valid
+ spreadsheet- ID:1163 val:Date format for \"not seen since\" is not valid
+Following constant not same:
+ original- val:Date format for "seen since" is not valid
+ spreadsheet- ID:1164 val:Date format for \"seen since\" is not valid
+Following constant not same:
+ original- val:Depending on the type of bill you are testing you will see HCFA like output on a blank page for HCFA bills, you will see many lines of somewhat garbled text and information if you are testing an X12 claim. That garbled text is the X12 EDI 4010A format. Occasionally you will see odd characters that look like dominoes or squiglies, these are control characters such as page feeds and are normal.
+ spreadsheet- ID:1289 val:Depending on the type of bill you are testing you will see HCFA like output on a blank page for HCFA bills, you will see many lines of somewhat garbled text and information if you are testing an X12 claim. That garbled text is the X12 EDI 4010A format. Occasionally you will see odd characters that look like dominoes or squiglies, these are control characters such as page feeds and are normal.
+Following constant not same:
+ original- val:Don't Save
+ spreadsheet- ID:1453 val:Don\'t Save
+Following constant not same:
+ original- val:Done. Will now send download.
+ spreadsheet- ID:1458 val:Done. Will now send download.
+Following constant not same:
+ original- val:ee the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free
+ spreadsheet- ID:1566 val:ee the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free
+Following constant not same:
+ original- val:Empty value in "Email Hours"
+ spreadsheet- ID:1620 val:Empty value in \"Email Hours\"
+Following constant not same:
+ original- val:Empty value in "Email Sender"
+ spreadsheet- ID:1621 val:Empty value in \"Email Sender\"
+Following constant not same:
+ original- val:Empty value in "Email Subject"
+ spreadsheet- ID:1622 val:Empty value in \"Email Subject\"
+Following constant not same:
+ original- val:Empty value in "Email Text"
+ spreadsheet- ID:1623 val:Empty value in \"Email Text\"
+Following constant not same:
+ original- val:Empty value in "Name of Provider"
+ spreadsheet- ID:1624 val:Empty value in \"Name of Provider\"
+Following constant not same:
+ original- val:Empty value in "Password"
+ spreadsheet- ID:1625 val:Empty value in \"Password\"
+Following constant not same:
+ original- val:Empty value in "SMS Hours"
+ spreadsheet- ID:1626 val:Empty value in \"SMS Hours\"
+Following constant not same:
+ original- val:Empty value in "SMS Text"
+ spreadsheet- ID:1627 val:Empty value in \"SMS Text\"
+Following constant not same:
+ original- val:Empty value in "Username"
+ spreadsheet- ID:1628 val:Empty value in \"Username\"
+Following constant not same:
+ original- val:Error in "Gender" selection
+ spreadsheet- ID:1768 val:Error in \"Gender\" selection
+Following constant not same:
+ original- val:Error in "HIPAA" selection
+ spreadsheet- ID:1769 val:Error in \"HIPAA\" selection
+Following constant not same:
+ original- val:Error in "Process" selection
+ spreadsheet- ID:1770 val:Error in \"Process\" selection
+Following constant not same:
+ original- val:Error in "SMS Gateway" selection
+ spreadsheet- ID:1771 val:Error in \"SMS Gateway\" selection
+Following constant not same:
+ original- val:Error in "Sort By" selection
+ spreadsheet- ID:1772 val:Error in \"Sort By\" selection
+Following constant not same:
+ original- val:Error: passwords don't match. Please check your typing.
+ spreadsheet- ID:1801 val:Error: passwords don\'t match. Please check your typing.
+Following constant not same:
+ original- val:Guardian's Name
+ spreadsheet- ID:2220 val:Guardian\'s Name
+Following constant not same:
+ original- val:If you have chosen to upload electronic remittances, then the search window redisplays itself with the matching invoices from the X12 file. You may click on any of these invoice numbers (as described below) if you wish to make any corrections before the remittance information is applied. To apply the changes, click the Process ERA File button at the bottom of the page. This will produce a new window with a detailed report.
+ spreadsheet- ID:2391 val:If you have chosen to upload electronic remittances, then the search window redisplays itself with the matching invoices from the X12 file. You may click on any of these invoice numbers (as described below) if you wish to make any corrections before the remittance information is applied. To apply the changes, click the Process ERA File button at the bottom of the page. This will produce a new window with a detailed report.
+Following constant not same:
+ original- val:If you have entered a Pay Date in the search page, this will override the posting date of payments and adjustments that are otherwise taken from the X12 file. This may be useful for reporting purposes, if you want your receipts reporting to use your posting date rather than the insurance company\'s processing date. Note that this will also affect dates of prior payments and adjustments that are put into secondary claims.
+ spreadsheet- ID:2392 val:If you have entered a Pay Date in the search page, this will override the posting date of payments and adjustments that are otherwise taken from the X12 file. This may be useful for reporting purposes, if you want your receipts reporting to use your posting date rather than the insurance company\'s processing date. Note that this will also affect dates of prior payments and adjustments that are put into secondary claims.
+Following constant not same:
+ original- val:Internal error: encounter '
+ spreadsheet- ID:2545 val:Internal error: encounter \'
+Following constant not same:
+ original- val:Invalid source designation "
+ spreadsheet- ID:2570 val:Invalid source designation \"
+Following constant not same:
+ original- val:Just below the check information is a blue area where you put in your search parameters. You can search by patient name, chart number, encounter number or date of service, or any combination of these. You may also select whether you want to see all invoices, open invoices, or only invoices that are due (by the patient). Click the Search button to perform the search.
+ spreadsheet- ID:2662 val:Just below the check information is a blue area where you put in your search parameters. You can search by patient name, chart number, encounter number or date of service, or any combination of these. You may also select whether you want to see all invoices, open invoices, or only invoices that are due (by the patient). Click the Search button to perform the search.
+Following constant not same:
+ original- val:k, here's the rest
+ spreadsheet- ID:2668 val:k, here\'s the rest
+Following constant not same:
+ original- val:Make sure "
+ spreadsheet- ID:2874 val:Make sure \"
+Following constant not same:
+ original- val:Mother's Name
+ spreadsheet- ID:3052 val:Mother\'s Name
+Following constant not same:
+ original- val:NOTE: Uploading files with duplicate names will cause the files to be automatically renamed. For example '<i>file.jpg</i>' will become '<i>file.jpg.1</i>'. Filenames are considered unique per patient, not per category.
+ spreadsheet- ID:3372 val:NOTE: Uploading files with duplicate names will cause the files to be automatically renamed. For example \'<i>file.jpg</i>\' will become \'<i>file.jpg.1</i>\'. Filenames are considered unique per patient, not per category.
+Following constant not same:
+ original- val:Passwords Don't match!
+ spreadsheet- ID:3628 val:Passwords Don\'t match!
+Following constant not same:
+ original- val:Pay attention to the "Done with" checkboxes. After the insurances are marked complete then we will start asking the patient to pay the remaining balance; if you fail to mark all of the insurances complete then the remaining amount will not be collected! Also if there is a balance that the patient should pay, then set the due date appropriately, as this will affect the language that appears on patient statements.
+ spreadsheet- ID:3750 val:Pay attention to the \"Done with\" checkboxes. After the insurances are marked complete then we will start asking the patient to pay the remaining balance; if you fail to mark all of the insurances complete then the remaining amount will not be collected! Also if there is a balance that the patient should pay, then set the due date appropriately, as this will affect the language that appears on patient statements.
+Following constant not same:
+ original- val:Pennington Firm OpenEMR v
+ spreadsheet- ID:3791 val:Pennington Firm OpenEMR v
+Following constant not same:
+ original- val:Please do NOT use your browsers stop or reload button while this page is running unless more than 10 minutes have elapsed, this will not cause the process to stop on the server and will consume uneccesary resources.
+ spreadsheet- ID:3885 val:Please do NOT use your browsers stop or reload button while this page is running unless more than 10 minutes have elapsed, this will not cause the process to stop on the server and will consume uneccesary resources.
+Following constant not same:
+ original- val:Please note that this can take a very long time, up to several minutes, your web browser may not appear very active during this time but generating a bill is a complicated process and your web browser is merely waiting for more information.
+ spreadsheet- ID:3915 val:Please note that this can take a very long time, up to several minutes, your web browser may not appear very active during this time but generating a bill is a complicated process and your web browser is merely waiting for more information.
+Following constant not same:
+ original- val:Please select a Primary Business Entity facility with 'Tax ID' as your facility Tax ID. If you are an individual practitioner, use your tax id. This is used for identifying you in the NewCrop system.
+ spreadsheet- ID:3927 val:Please select a Primary Business Entity facility with \'Tax ID\' as your facility Tax ID. If you are an individual practitioner, use your tax id. This is used for identifying you in the NewCrop system.
+Following constant not same:
+ original- val:SA * * To read the license please read the docs/license.txt or visit * http://www.gnu.org/copyleft/gpl.html * */ //========================================================================= //
+ spreadsheet- ID:4550 val:SA * * To read the license please read the docs/license.txt or visit * http://www.gnu.org/copyleft/gpl.html * */ //========================================================================= //
+Following constant not same:
+ original- val:Specifies formatting for invoice reference numbers. # = digit, * = any character. Empty if not used.
+ spreadsheet- ID:4938 val:Specifies formatting for invoice reference numbers. # = digit, * = any character. Empty if not used.
+Following constant not same:
+ original- val:Specifies formatting for invoice reference numbers. # = digit, @ = alpha, * = any character. Empty if not used.
+ spreadsheet- ID:4939 val:Specifies formatting for invoice reference numbers. # = digit, @ = alpha, * = any character. Empty if not used.
+Following constant not same:
+ original- val:Specifies formatting for product NDC fields. # = digit, * = any character. Empty if not used.
+ spreadsheet- ID:4940 val:Specifies formatting for product NDC fields. # = digit, * = any character. Empty if not used.
+Following constant not same:
+ original- val:Specifies formatting for product NDC fields. # = digit, @ = alpha, * = any character. Empty if not used.
+ spreadsheet- ID:4941 val:Specifies formatting for product NDC fields. # = digit, @ = alpha, * = any character. Empty if not used.
+Following constant not same:
+ original- val:Specifies formatting for the external patient ID. # = digit, * = any character. Empty if not used.
+ spreadsheet- ID:4942 val:Specifies formatting for the external patient ID. # = digit, * = any character. Empty if not used.
+Following constant not same:
+ original- val:Specifies formatting for the external patient ID. # = digit, @ = alpha, * = any character. Empty if not used.
+ spreadsheet- ID:4943 val:Specifies formatting for the external patient ID. # = digit, @ = alpha, * = any character. Empty if not used.
+Following constant not same:
+ original- val:The 'Clear' button will remove all annotations.
+ spreadsheet- ID:5204 val:The \'Clear\' button will remove all annotations.
+Following constant not same:
+ original- val:The exported data appears in the text area below. You can copy and paste this into an email or to any other desired destination.
+ spreadsheet- ID:5220 val:The exported data appears in the text area below. You can copy and paste this into an email or to any other desired destination.
+Following constant not same:
+ original- val:The first ("target") chart is the one that is considered the most complete and accurate. Demographics, history and insurance sections for this one will be retained.
+ spreadsheet- ID:5225 val:The first (\"target\") chart is the one that is considered the most complete and accurate. Demographics, history and insurance sections for this one will be retained.
+Following constant not same:
+ original- val:The initial window is the invoice search page. At the top you may enter a source (e.g. check number), pay date and check amount. The reason for the source and pay date is so that you don\'t have to enter them over and over again for each claim. The amount that you enter will be decreased for each invoice that is given part of the payment, and hopefully will end at zero when you are done.
+ spreadsheet- ID:5240 val:The initial window is the invoice search page. At the top you may enter a source (e.g. check number), pay date and check amount. The reason for the source and pay date is so that you don\'t have to enter them over and over again for each claim. The amount that you enter will be decreased for each invoice that is given part of the payment, and hopefully will end at zero when you are done.
+Following constant not same:
+ original- val:The second ("source") chart will have its demographics, history and insurance sections discarded. Its other data will be merged into the target chart.
+ spreadsheet- ID:5264 val:The second (\"source\") chart will have its demographics, history and insurance sections discarded. Its other data will be merged into the target chart.
+Following constant not same:
+ original- val:The Source and Date columns are copied from the first page, so normally you will not need to touch those. You can put a payment amount in the Pay column, an adjustment amount in the Adjust column, or both. You can also click the "W" on the right to automatically compute an adjustment value that writes off the remainder of the charge for that line item.
+ spreadsheet- ID:5265 val:The Source and Date columns are copied from the first page, so normally you will not need to touch those. You can put a payment amount in the Pay column, an adjustment amount in the Adjust column, or both. You can also click the \"W\" on the right to automatically compute an adjustment value that writes off the remainder of the charge for that line item.
+Following constant not same:
+ original- val:The X12 files as well as the resulting HTML output reports are archived in the "era" subdirectory of the main OpenEMR installation directory. You will want to refer to these archives from time to time. The URL is
+ spreadsheet- ID:5276 val:The X12 files as well as the resulting HTML output reports are archived in the \"era\" subdirectory of the main OpenEMR installation directory. You will want to refer to these archives from time to time. The URL is
+Following constant not same:
+ original- val:There are errors with your submission. These are outlined below.
+ spreadsheet- ID:5283 val:There are errors with your submission. These are outlined below.
+Following constant not same:
+ original- val:This utility is experimental. Back up your database and documents before using it!
+ spreadsheet- ID:5361 val:This utility is experimental. Back up your database and documents before using it!
+Following constant not same:
+ original- val:This will be a "dry run" with no physical data updates.
+ spreadsheet- ID:5368 val:This will be a \"dry run\" with no physical data updates.
+Following constant not same:
+ original- val:This will merge two patient charts into one. It is useful when a patient has been duplicated by mistake. If that happens often, fix your office procedures - do not run this routinely!
+ spreadsheet- ID:5372 val:This will merge two patient charts into one. It is useful when a patient has been duplicated by mistake. If that happens often, fix your office procedures - do not run this routinely!
+Following constant not same:
+ original- val:To ded'ble
+ spreadsheet- ID:5417 val:To ded\'ble
+Following constant not same:
+ original- val:trftime($month_format, mktime(0, 0, 0, $i, 1, 2000)) ); $month_value
+ spreadsheet- ID:5548 val:trftime($month_format, mktime(0, 0, 0, $i, 1, 2000)) ); $month_value
+Following constant not same:
+ original- val:Upon clicking an invoice number the "manual posting window" appears. Here you can change the due date and notes for the invoice, select the party for whom you are posting, and select the insurances for which all expected paymants have been received. Most importantly, for each billing code for which an amount was charged, you can enter payment and adjustment information.
+ spreadsheet- ID:5655 val:Upon clicking an invoice number the \"manual posting window\" appears. Here you can change the due date and notes for the invoice, select the party for whom you are posting, and select the insurances for which all expected paymants have been received. Most importantly, for each billing code for which an amount was charged, you can enter payment and adjustment information.
+Following constant not same:
+ original- val:Upon searching you are presented with a list of invoices. You may click on one of the invoice numbers to open a second window, which is the data entry page for manual posting. You may also click on a patient name if you want to enter a note that the front office staff will see when the patient checks in, and you may select invoices to appear on patient statements and print those statements.
+ spreadsheet- ID:5656 val:Upon searching you are presented with a list of invoices. You may click on one of the invoice numbers to open a second window, which is the data entry page for manual posting. You may also click on a patient name if you want to enter a note that the front office staff will see when the patient checks in, and you may select invoices to appear on patient statements and print those statements.
+Following constant not same:
+ original- val:uses php <a href="http://php.net/strftime">strftime</a> format
+ spreadsheet- ID:5731 val:uses php <a href=\"http://php.net/strftime\">strftime</a> format
+Following constant not same:
+ original- val:You have attempted to alter content which is locked. Remove the lock if you want to do this. To unlock, remove the line, '/*lock::*/'
+ spreadsheet- ID:5948 val:You have attempted to alter content which is locked. Remove the lock if you want to do this. To unlock, remove the line, \'/*lock::*/\'
+Following constant not same:
+ original- val: but was
+ spreadsheet- ID:6007 val:but was
+Following constant not same:
+ original- val: could not be accessed.
+ spreadsheet- ID:6008 val:could not be accessed.
+Following constant not same:
+ original- val: Do you really want to delete
+ spreadsheet- ID:6009 val:Do you really want to delete
+Following constant not same:
+ original- val: Drug
+ spreadsheet- ID:6010 val:Drug
+Following constant not same:
+ original- val: emails not sent
+ spreadsheet- ID:6011 val:emails not sent
+Following constant not same:
+ original- val: from
+ spreadsheet- ID:6012 val:from
+Following constant not same:
+ original- val: has been created.
+ spreadsheet- ID:6013 val:has been created.
+Following constant not same:
+ original- val: has been re-opened.
+ spreadsheet- ID:6014 val:has been re-opened.
+Following constant not same:
+ original- val: History
+ spreadsheet- ID:6015 val:History
+Following constant not same:
+ original- val: is not a number
+ spreadsheet- ID:6016 val:is not a number
+Following constant not same:
+ original- val: is ready for re-billing.
+ spreadsheet- ID:6017 val:is ready for re-billing.
+Following constant not same:
+ original- val: LLL:
+ spreadsheet- ID:6018 val:LLL:
+Following constant not same:
+ original- val: Lot
+ spreadsheet- ID:6019 val:Lot
+Following constant not same:
+ original- val: Medicaid Original Reference No.
+ spreadsheet- ID:6020 val:Medicaid Original Reference No.
+Following constant not same:
+ original- val: min
+ spreadsheet- ID:6021 val:min
+Following constant not same:
+ original- val: not found!
+ spreadsheet- ID:6022 val:not found!
+Following constant not same:
+ original- val: Pecularities in many browsers may mean that the output below enters your screen in sudden jerks and that there are long pauses of several seconds where it appears as though things may have crashed. That is not the case, you will eventually see output coming out line by line. There may be sequential numbers appearing below, this is to indicate that even though nothing else may be displaying there is activity going on. These numbers will be interspersed with the content of the billing and that is normal.
+ spreadsheet- ID:6023 val:Pecularities in many browsers may mean that the output below enters your screen in sudden jerks and that there are long pauses of several seconds where it appears as though things may have crashed. That is not the case, you will eventually see output coming out line by line. There may be sequential numbers appearing below, this is to indicate that even though nothing else may be displaying there is activity going on. These numbers will be interspersed with the content of the billing and that is normal.
+Following constant not same:
+ original- val: prescription has reached its limit of
+ spreadsheet- ID:6024 val:prescription has reached its limit of
+Following constant not same:
+ original- val: until
+ spreadsheet- ID:6025 val:until
+Following constant not same:
+ original- val: update failed, not in database?
+ spreadsheet- ID:6026 val:update failed, not in database?
+Following constant not same:
+ original- val: was marked as billed only.
+ spreadsheet- ID:6027 val:was marked as billed only.
+Following constant not same:
+ original- val: was queued successfully.
+ spreadsheet- ID:6028 val:was queued successfully.
+Following constant not same:
+ original- val:" for code
+ spreadsheet- ID:6030 val:\" for code
+Following constant not same:
+ original- val:" is CHECKED in PostCalendar Settings!
+ spreadsheet- ID:6031 val:\" is CHECKED in PostCalendar Settings!
+Following constant not same:
+ original- val:% Cancelled < 24h
+ spreadsheet- ID:6039 val:% Cancelled < 24h
+Following constant not same:
+ original- val:' should exist but does not.
+ spreadsheet- ID:6040 val: should exist but does not.
+
+Done checking constants:
+ 101 mismatches found (known is 101)
+Good, constants weren't modified by translators
+
+
+Language Statistics:
+Total number of languages with translations: 29
+Total number of constants: 6152
+Total number of real definitions: 98200
+Albanian: 16.64% (1024 definitions)
+Amharic: 0% (0 definitions)
+Arabic: 26.89% (1654 definitions)
+Armenian: 0% (0 definitions)
+Bahasa Indonesia: 90.12% (5544 definitions)
+Bengali: 0% (0 definitions)
+Chinese (Simplified): 89.68% (5517 definitions)
+Chinese (Traditional): 86.51% (5322 definitions)
+Czech: 17.43% (1072 definitions)
+Danish: 51.11% (3144 definitions)
+dummy: 100% (6152 definitions)
+Dutch: 93.34% (5742 definitions)
+English (Indian): 1.93% (119 definitions)
+English (Standard): 0% (0 definitions)
+Estonian: 10.92% (672 definitions)
+French (Canadian): 37.6% (2313 definitions)
+French (Standard): 42.47% (2613 definitions)
+German: 72.59% (4466 definitions)
+Greek: 88.74% (5459 definitions)
+Hebrew: 0% (0 definitions)
+Hindi: 3.48% (214 definitions)
+Hungarian: 0.02% (1 definitions)
+Italian: 87.96% (5411 definitions)
+Lithuanian: 0% (0 definitions)
+Norwegian: 15.52% (955 definitions)
+Persian: 48.65% (2993 definitions)
+Polish: 11.1% (683 definitions)
+Portuguese (Brazilian): 58.65% (3608 definitions)
+Portuguese (European): 63.54% (3909 definitions)
+Romanian: 0% (0 definitions)
+Russian: 90.57% (5572 definitions)
+Slovak: 0% (0 definitions)
+Spanish (Latin American): 93.16% (5731 definitions)
+Spanish (Spain): 92.98% (5720 definitions)
+Swedish: 40% (2461 definitions)
+Turkish: 81.36% (5005 definitions)
+Ukrainian: 93.24% (5736 definitions)
+Vietnamese: 90.05% (5540 definitions)
View
6,157 spreadsheet.tsv
6,157 additions, 0 deletions not shown
View
57 successLastLog
@@ -1,2 +1,57 @@
Success:
-
+623c623
+< Total number of languages with translations: 29
+---
+> Total number of languages with translations: 32
+625c625
+< Total number of real definitions: 98200
+---
+> Total number of real definitions: 114285
+627,628c627,628
+< Amharic: 0% (0 definitions)
+< Arabic: 26.89% (1654 definitions)
+---
+> Amharic: 0.03% (2 definitions)
+> Arabic: 99.92% (6147 definitions)
+637c637
+< Dutch: 93.34% (5742 definitions)
+---
+> Dutch: 100% (6152 definitions)
+643,644c643,644
+< German: 72.59% (4466 definitions)
+< Greek: 88.74% (5459 definitions)
+---
+> German: 77.36% (4759 definitions)
+> Greek: 92.08% (5665 definitions)
+646c646
+< Hindi: 3.48% (214 definitions)
+---
+> Hindi: 99.92% (6147 definitions)
+648,649c648,649
+< Italian: 87.96% (5411 definitions)
+< Lithuanian: 0% (0 definitions)
+---
+> Italian: 100% (6152 definitions)
+> Lithuanian: 0.37% (23 definitions)
+651,653c651,653
+< Persian: 48.65% (2993 definitions)
+< Polish: 11.1% (683 definitions)
+< Portuguese (Brazilian): 58.65% (3608 definitions)
+---
+> Persian: 53.67% (3302 definitions)
+> Polish: 29.86% (1837 definitions)
+> Portuguese (Brazilian): 65.9% (4054 definitions)
+655c655
+< Romanian: 0% (0 definitions)
+---
+> Romanian: 15.28% (940 definitions)
+660c660
+< Swedish: 40% (2461 definitions)
+---
+> Swedish: 51.22% (3151 definitions)
+662,663c662,663
+< Ukrainian: 93.24% (5736 definitions)
+< Vietnamese: 90.05% (5540 definitions)
+---
+> Ukrainian: 99.95% (6149 definitions)
+> Vietnamese: 90.57% (5572 definitions)
Please sign in to comment.
Something went wrong with that request. Please try again.