[med-svn] [gnumed-client] 01/06: Imported Upstream version 1.6.7+dfsg

Andreas Tille tille at debian.org
Thu Jul 7 16:22:06 UTC 2016


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository gnumed-client.

commit 72aee95566a1ae355e497dd83c415b662ceaebf0
Author: Andreas Tille <tille at debian.org>
Date:   Thu Jul 7 18:02:29 2016 +0200

    Imported Upstream version 1.6.7+dfsg
---
 client/CHANGELOG                            |  20 +++
 client/business/gmClinicalCalculator.py     |  16 +-
 client/business/gmDICOM.py                  | 252 +++++++++++++++++++---------
 client/business/gmMedication.py             |   3 +-
 client/doc/schema/gnumed-entire_schema.html |   2 +-
 client/gnumed-client.desktop                |   2 +-
 client/gnumed.py                            |   2 +-
 client/po/ar-gnumed.mo                      | Bin 2373 -> 2373 bytes
 client/po/ar.po                             |  34 ++--
 client/po/bg-gnumed.mo                      | Bin 1340 -> 1340 bytes
 client/po/bg.po                             |  30 ++--
 client/po/ca-gnumed.mo                      | Bin 25469 -> 25469 bytes
 client/po/ca.po                             |  36 ++--
 client/po/cs-gnumed.mo                      | Bin 27310 -> 27310 bytes
 client/po/cs.po                             |  36 ++--
 client/po/da-gnumed.mo                      | Bin 3284 -> 3284 bytes
 client/po/da.po                             |  30 ++--
 client/po/de-gnumed.mo                      | Bin 493006 -> 493067 bytes
 client/po/de.po                             |  59 ++++---
 client/po/el-gnumed.mo                      | Bin 108365 -> 108365 bytes
 client/po/el.po                             |  42 +++--
 client/po/en_AU-gnumed.mo                   | Bin 4988 -> 4988 bytes
 client/po/en_AU.po                          |  30 ++--
 client/po/en_CA-gnumed.mo                   | Bin 15065 -> 15065 bytes
 client/po/en_CA.po                          |  31 ++--
 client/po/es-gnumed.mo                      | Bin 510739 -> 510301 bytes
 client/po/es.po                             |  52 +++---
 client/po/fr-gnumed.mo                      | Bin 152053 -> 152053 bytes
 client/po/fr.po                             |  42 +++--
 client/po/id-gnumed.mo                      | Bin 4526 -> 4526 bytes
 client/po/id.po                             |  36 ++--
 client/po/it-gnumed.mo                      | Bin 101242 -> 101242 bytes
 client/po/it.po                             |  41 +++--
 client/po/ka-gnumed.mo                      | Bin 1928 -> 1928 bytes
 client/po/ka.po                             |  30 ++--
 client/po/nb-gnumed.mo                      | Bin 2194 -> 2194 bytes
 client/po/nb.po                             |  31 ++--
 client/po/nl-gnumed.mo                      | Bin 141767 -> 141767 bytes
 client/po/nl.po                             |  42 +++--
 client/po/pl-gnumed.mo                      | Bin 38003 -> 38003 bytes
 client/po/pl.po                             |  36 ++--
 client/po/pt-gnumed.mo                      | Bin 124922 -> 124922 bytes
 client/po/pt.po                             |  42 +++--
 client/po/pt_BR-gnumed.mo                   | Bin 149991 -> 149991 bytes
 client/po/pt_BR.po                          |  42 +++--
 client/po/ro-gnumed.mo                      | Bin 1311 -> 1311 bytes
 client/po/ro.po                             |  30 ++--
 client/po/ru-gnumed.mo                      | Bin 431563 -> 431563 bytes
 client/po/ru.po                             |  42 +++--
 client/po/ru_RU-gnumed.mo                   | Bin 451187 -> 451187 bytes
 client/po/ru_RU.po                          |  42 +++--
 client/po/sq-gnumed.mo                      | Bin 33489 -> 33489 bytes
 client/po/sq.po                             |  36 ++--
 client/po/sr-gnumed.mo                      | Bin 14583 -> 14583 bytes
 client/po/sr.po                             |  31 ++--
 client/po/sv-gnumed.mo                      | Bin 65951 -> 65951 bytes
 client/po/sv.po                             |  36 ++--
 client/po/tr-gnumed.mo                      | Bin 1940 -> 1940 bytes
 client/po/tr.po                             |  35 ++--
 client/po/uk-gnumed.mo                      | Bin 862 -> 862 bytes
 client/po/uk.po                             |  30 ++--
 client/po/zh_TW-gnumed.mo                   | Bin 2740 -> 2740 bytes
 client/po/zh_TW.po                          |  30 ++--
 client/pycommon/gmI18N.py                   |   8 +-
 client/pycommon/gmMimeLib.py                |  32 ++--
 client/pycommon/gmTools.py                  |  21 +--
 client/wxGladeWidgets/wxgPACSPluginPnl.py   |  14 +-
 client/wxpython/gmDateTimeInput.py          |  10 ++
 client/wxpython/gmDocumentWidgets.py        | 132 +++++++++------
 client/wxpython/gmEMRStructWidgets.py       |  67 ++++----
 client/wxpython/gmExportAreaWidgets.py      |  37 +++-
 client/wxpython/gmHabitWidgets.py           |   3 +
 client/wxpython/gmListWidgets.py            |   1 +
 client/wxpython/gmMedicationWidgets.py      |   8 +-
 external-tools/check-prerequisites.sh       |  44 ++---
 external-tools/gm-describe_file             |  25 ++-
 76 files changed, 1046 insertions(+), 687 deletions(-)

diff --git a/client/CHANGELOG b/client/CHANGELOG
index e065dcf..9b4e067 100644
--- a/client/CHANGELOG
+++ b/client/CHANGELOG
@@ -6,6 +6,26 @@
 # rel-1-6-patches
 ------------------------------------------------
 
+	1.6.7
+
+FIX: constrain hospital stay PRW to current patient
+FIX: smoking status detection in dynamic hints
+FIX: GKV checkup auto hint
+FIX: tetanus shot auto hint
+FIX: substance intake discontinuation reason field behaviour
+FIX: exception in clinical calculator with pre-birth test results
+
+IMPROVED: file viewer detection on Windows [thanks John]
+IMPROVED: DICOM studies/series display
+IMPROVED: ZIP-with-DICOMDIR support
+IMPROVED: browse index.html after saving/burning from export area
+IMPROVED: substance abuse management workflow
+IMPROVED: check for tools im gm-describe_file
+IMPROVED: substance intake start/end formatting
+
+NEW: a few hints from the German Choosing Wisely initiative
+NEW: CD/DVD sleeve LaTeX template
+
 	1.6.6
 
 FIX: error when running gm-import_incoming as root
diff --git a/client/business/gmClinicalCalculator.py b/client/business/gmClinicalCalculator.py
index 74a9fc1..511310e 100644
--- a/client/business/gmClinicalCalculator.py
+++ b/client/business/gmClinicalCalculator.py
@@ -833,14 +833,16 @@ class cClinicalCalculator(object):
 			return result
 
 		result.variables['dob'] = self.__patient['dob']
-		result.variables['age at height'] = self.d (
-			gmDateTime.calculate_apparent_age (
-				start = result.variables['dob'],
-				end = result.variables['height']['clin_when']
-			)[0]
-		)
+		start = result.variables['dob']
+		end = result.variables['height']['clin_when']
+		multiplier = 1
+		if end < start:
+			start = result.variables['height']['clin_when']
+			end = result.variables['dob']
+			multiplier = -1
+		result.variables['age at height'] = multiplier * self.d(gmDateTime.calculate_apparent_age(start, end)[0])
 		if (result.variables['age at height'] < 18):
-			result.message = _('BMI (Quetelet): formula does not apply at age [%s] (age < 18)') % result.variables['age at height']
+			result.message = _('BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)') % result.variables['age at height']
 			return result
 
 		# bmi = mass kg / height m2
diff --git a/client/business/gmDICOM.py b/client/business/gmDICOM.py
index d949039..d8bdf6e 100644
--- a/client/business/gmDICOM.py
+++ b/client/business/gmDICOM.py
@@ -309,37 +309,28 @@ class cOrthancServer:
 			return filename
 
 	#--------------------------------------------------------
-	def get_studies_with_dicomdir(self, study_ids=None, patient_id=None, target_dir=None, filename=None, create_zip=False):
+	def _manual_get_studies_with_dicomdir(self, study_ids=None, patient_id=None, target_dir=None, filename=None, create_zip=False):
 
 		if filename is None:
 			filename = gmTools.get_unique_filename(prefix = r'DCM-', suffix = r'.zip', tmp_dir = target_dir)
 
 		# all studies
 		if study_ids is None:
-			if study_ids is None:
-				_log.info(u'exporting all studies of patient [%s] into [%s]', patient_id, filename)
-				f = io.open(filename, 'wb')
-				url = '%s/patients/%s/media' % (self.__server_url, str(patient_id))
-				_log.debug(url)
-				f.write(self.__run_GET(url = url))
-				f.close()
-				if create_zip:
-					return filename
-				if target_dir is None:
-					target_dir = gmTools.mk_sandbox_dir(prefix = u'dcm-')
-				if not gmTools.unzip_archive(filename, target_dir = target_dir, remove_archive = True):
-					return False
-				return target_dir
+			_log.info(u'exporting all studies of patient [%s] into [%s]', patient_id, filename)
+			f = io.open(filename, 'wb')
+			url = '%s/patients/%s/media' % (self.__server_url, str(patient_id))
+			_log.debug(url)
+			f.write(self.__run_GET(url = url))
+			f.close()
+			if create_zip:
+				return filename
+			if target_dir is None:
+				target_dir = gmTools.mk_sandbox_dir(prefix = u'dcm-')
+			if not gmTools.unzip_archive(filename, target_dir = target_dir, remove_archive = True):
+				return False
+			return target_dir
 
 		# a selection of studies
-#		return u'get range of studies as zip with dicomdir not implemented, either all or one'
-
-		dicomdir_cmd = u'gm-create_dicomdir'		# args: 1) name of DICOMDIR to create 2) base directory where to start recursing for DICOM files
-		found, external_cmd = gmShellAPI.detect_external_binary(dicomdir_cmd)
-		if not found:
-			_log.error('[%s] not found', dicomdir_cmd)
-			return False
-
 		dicomdir_cmd = u'gm-create_dicomdir'		# args: 1) name of DICOMDIR to create 2) base directory where to start recursing for DICOM files
 		found, external_cmd = gmShellAPI.detect_external_binary(dicomdir_cmd)
 		if not found:
@@ -408,15 +399,51 @@ class cOrthancServer:
 		gmTools.rmdir(sandbox_dir)
 		return studies_zip
 
-		#> > I finally implemented your request to create a ZIP-with-DICOMDIR from
-		#> > several patients/studies.
-		#> > 
-		#> > You have to make a POST request against URI "/tools/create-media", with a
-		#> > JSON body that contains the array of the resources of interest (as Orthanc
-		#> > identifiers). Here is a sample command-line:
-		#> > 
-		#> > # curl -X POST http://localhost:8042/tools/create-media -d '["8c4663df-c3e66066-9e20a8fc-dd14d1e5-251d3d84","2cd4848d-02f0005f-812ffef6-a210bbcf-3f01a00a","6eeded74-75005003-c3ae9738-d4a06a4f-6beedeb8","8a622020-c058291c-7693b63f-bc67aa2e-0a02e69c"]' -v > /tmp/a.zip
-		# (this will not create duplicates but will also not check for single-patient-ness)
+	#--------------------------------------------------------
+	def get_studies_with_dicomdir(self, study_ids=None, patient_id=None, target_dir=None, filename=None, create_zip=False):
+
+		if filename is None:
+			filename = gmTools.get_unique_filename(prefix = r'DCM-', suffix = r'.zip', tmp_dir = target_dir)
+
+		# all studies
+		if study_ids is None:
+			if patient_id is None:
+				raise ValueError('<patient_id> must be defined if <study_ids> is None')
+			_log.info(u'exporting all studies of patient [%s] into [%s]', patient_id, filename)
+			f = io.open(filename, 'wb')
+			url = '%s/patients/%s/media' % (self.__server_url, str(patient_id))
+			_log.debug(url)
+			f.write(self.__run_GET(url = url))
+			f.close()
+			if create_zip:
+				return filename
+			if target_dir is None:
+				target_dir = gmTools.mk_sandbox_dir(prefix = u'dcm-')
+			if not gmTools.unzip_archive(filename, target_dir = target_dir, remove_archive = True):
+				return False
+			return target_dir
+
+		# selection of studies
+		_log.info(u'exporting %s studies into [%s]', len(study_ids), filename)
+		_log.debug(u'studies: %s', study_ids)
+		f = io.open(filename, 'wb')
+		url = '%s/tools/create-media' % self.__server_url
+		_log.debug(url)
+		#  You have to make a POST request against URI "/tools/create-media", with a
+		#  JSON body that contains the array of the resources of interest (as Orthanc
+		#  identifiers). Here is a sample command-line:
+		#  curl -X POST http://localhost:8042/tools/create-media -d '["8c4663df-c3e66066-9e20a8fc-dd14d1e5-251d3d84","2cd4848d-02f0005f-812ffef6-a210bbcf-3f01a00a","6eeded74-75005003-c3ae9738-d4a06a4f-6beedeb8","8a622020-c058291c-7693b63f-bc67aa2e-0a02e69c"]' -v > /tmp/a.zip
+		#  (this will not create duplicates but will also not check for single-patient-ness)
+		f.write(self.__run_POST(url = url, data = study_ids))
+		f.close()
+		if create_zip:
+			return filename
+		if target_dir is None:
+			target_dir = gmTools.mk_sandbox_dir(prefix = u'dcm-')
+			_log.debug(u'exporting studies into [%s]', target_dir)
+		if not gmTools.unzip_archive(filename, target_dir = target_dir, remove_archive = True):
+			return False
+		return target_dir
 
 	#--------------------------------------------------------
 	# server-side API
@@ -592,116 +619,181 @@ class cOrthancServer:
 	# helper functions
 	#--------------------------------------------------------
 	def get_studies_list_by_orthanc_patient_list(self, orthanc_patients=None):
+
+		study_keys2hide =  ['ModifiedFrom', 'Type', 'ID', 'ParentPatient', 'Series']
+		series_keys2hide = ['ModifiedFrom', 'Type', 'ID', 'ParentStudy',   'Instances']
+
 		studies_by_patient = []
-		study_keys = {}
-		study_keys_m = {}
 		series_keys = {}
 		series_keys_m = {}
+
+		# loop over patients
 		for pat in orthanc_patients:
 			pat_dict = {
 				'orthanc_id': pat['ID'],
-				'name': pat['MainDicomTags']['PatientName'],
-				'external_id': pat['MainDicomTags']['PatientID'],
+				'name': None,
+				'external_id': None,
+				'date_of_birth': None,
+				'gender': None,
 				'studies': []
 			}
 			try:
-				pat_dict['date_of_birth'] = pat['MainDicomTags']['PatientBirthDate']
+				pat_dict['name'] = pat['MainDicomTags']['PatientName'].strip()
+			except KeyError:
+				pass
+			try:
+				pat_dict['external_id'] = pat['MainDicomTags']['PatientID'].strip()
+			except KeyError:
+				pass
+			try:
+				pat_dict['date_of_birth'] = pat['MainDicomTags']['PatientBirthDate'].strip()
 			except KeyError:
-				pat_dict['date_of_birth'] = None
+				pass
 			try:
-				pat_dict['gender'] = pat['MainDicomTags']['PatientSex']
+				pat_dict['gender'] = pat['MainDicomTags']['PatientSex'].strip()
 			except KeyError:
-				pat_dict['gender'] = None
+				pass
 			for key in pat_dict:
 				if pat_dict[key] == u'unknown':
 					pat_dict[key] = None
 				if pat_dict[key] == u'(null)':
 					pat_dict[key] = None
+				if pat_dict[key] == u'':
+					pat_dict[key] = None
 			studies_by_patient.append(pat_dict)
+
+			# loop over studies of patient
 			orth_studies = self.__run_GET(url = u'%s/patients/%s/studies' % (self.__server_url, pat['ID']))
 			if orth_studies is False:
 				_log.error('cannot retrieve studies')
 				return []
 			for orth_study in orth_studies:
-				# debugging
-				#for key in orth_study.keys():
-				#	study_keys[key] = True
-				#for key in orth_study['MainDicomTags'].keys():
-				#	study_keys_m[key] = True
 				study_dict = {
 					'orthanc_id': orth_study['ID'],
-					'date': orth_study['MainDicomTags'][u'StudyDate'],
-					'time': orth_study['MainDicomTags'][u'StudyTime'],
+					'date': None,
+					'time': None,
+					'description': None,
+					'referring_doc': None,
+					'radiology_org': None,
 					'series': []
 				}
 				try:
-					study_dict['description'] = orth_study['MainDicomTags'][u'StudyDescription']
+					study_dict['date'] = orth_study['MainDicomTags'][u'StudyDate'].strip()
+				except KeyError:
+					pass
+				try:
+					study_dict['time'] = orth_study['MainDicomTags'][u'StudyTime'].strip()
+				except KeyError:
+					pass
+				try:
+					study_dict['description'] = orth_study['MainDicomTags'][u'StudyDescription'].strip()
+				except KeyError:
+					pass
+				try:
+					study_dict['referring_doc'] = orth_study['MainDicomTags'][u'ReferringPhysicianName'].strip()
+				except KeyError:
+					pass
+				try:
+					study_dict['radiology_org'] = orth_study['MainDicomTags'][u'InstitutionName'].strip()
 				except KeyError:
-					study_dict['description'] = None
+					pass
 				for key in study_dict:
 					if study_dict[key] == u'unknown':
 						study_dict[key] = None
 					if study_dict[key] == u'(null)':
 						study_dict[key] = None
+					if study_dict[key] == u'':
+						study_dict[key] = None
+				study_dict['all_tags'] = {}
+				try:
+					orth_study['PatientMainDicomTags']
+				except KeyError:
+					orth_study['PatientMainDicomTags'] = pat['MainDicomTags']
+				for key in orth_study.keys():
+					if key == u'MainDicomTags':
+						for mkey in orth_study['MainDicomTags'].keys():
+							study_dict['all_tags'][mkey] = orth_study['MainDicomTags'][mkey].strip()
+						continue
+					if key == u'PatientMainDicomTags':
+						for pkey in orth_study['PatientMainDicomTags'].keys():
+							study_dict['all_tags'][pkey] = orth_study['PatientMainDicomTags'][pkey].strip()
+						continue
+					study_dict['all_tags'][key] = orth_study[key]
+				_log.debug('study: %s', study_dict['all_tags'].keys())
+				for key in study_keys2hide:
+					try: del study_dict['all_tags'][key]
+					except KeyError: pass
 				pat_dict['studies'].append(study_dict)
+
+				# loop over series in study
 				for orth_series_id in orth_study['Series']:
 					orth_series = self.__run_GET(url = u'%s/series/%s' % (self.__server_url, orth_series_id))
 					if orth_series is False:
 						_log.error('cannot retrieve series')
 						return []
-					# debugging
-					#for key in orth_series.keys():
-					#	series_keys[key] = True
-					#for key in orth_series['MainDicomTags'].keys():
-					#	series_keys_m[key] = True
 					series_dict = {
 						'orthanc_id': orth_series['ID'],
-						'modality': orth_series['MainDicomTags']['Modality'],
-						'instances': len(orth_series['Instances'])
+						'instances': len(orth_series['Instances']),
+						'modality': None,
+						'date': None,
+						'time': None,
+						'description': None,
+						'body_part': None,
+						'protocol': None
 					}
 					try:
-						series_dict['date'] = orth_series['MainDicomTags']['SeriesDate']
+						series_dict['modality'] = orth_series['MainDicomTags']['Modality'].strip()
 					except KeyError:
-						series_dict['date'] = study_dict['date']
+						pass
 					try:
-						series_dict['description'] = orth_series['MainDicomTags'][u'SeriesDescription']
+						series_dict['date'] = orth_series['MainDicomTags']['SeriesDate'].strip()
 					except KeyError:
-						series_dict['description'] = None
+						pass
 					try:
-						series_dict['time'] = orth_series['MainDicomTags']['SeriesTime']
+						series_dict['description'] = orth_series['MainDicomTags'][u'SeriesDescription'].strip()
 					except KeyError:
-						series_dict['time'] = None
-					if series_dict['time'] is not None:
-						if series_dict['time'].strip() == u'':
-							series_dict['time'] = None
+						pass
 					try:
-						series_dict['body_part'] = orth_series['MainDicomTags']['BodyPartExamined']
+						series_dict['time'] = orth_series['MainDicomTags']['SeriesTime'].strip()
 					except KeyError:
-						series_dict['body_part'] = None
+						pass
 					try:
-						series_dict['protocol'] = orth_series['MainDicomTags']['ProtocolName']
+						series_dict['body_part'] = orth_series['MainDicomTags']['BodyPartExamined'].strip()
 					except KeyError:
-						series_dict['protocol'] = None
-					if series_dict['description'] == series_dict['protocol']:
-						_log.debug('<series description> matches <series protocol>, ignoring description')
-						series_dict['description'] = None
+						pass
 					try:
-						series_dict['station'] = orth_series['MainDicomTags']['StationName']
+						series_dict['protocol'] = orth_series['MainDicomTags']['ProtocolName'].strip()
 					except KeyError:
-						series_dict['station'] = None
+						pass
 					for key in series_dict:
 						if series_dict[key] == u'unknown':
 							series_dict[key] = None
 						if series_dict[key] == u'(null)':
 							series_dict[key] = None
+						if series_dict[key] == u'':
+							series_dict[key] = None
+					if series_dict['description'] == series_dict['protocol']:
+						_log.debug('<series description> matches <series protocol>, ignoring protocol')
+						series_dict['protocol'] = None
+					if series_dict['date'] == study_dict['date']:
+						_log.debug('<series date> matches <study date>, ignoring date')
+						series_dict['date'] = None
+					if series_dict['time'] == study_dict['time']:
+						_log.debug('<series time> matches <study time>, ignoring time')
+						series_dict['time'] = None
+					series_dict['all_tags'] = {}
+					for key in orth_series.keys():
+						if key == 'MainDicomTags':
+							for mkey in orth_series['MainDicomTags'].keys():
+								series_dict['all_tags'][mkey] = orth_series['MainDicomTags'][mkey].strip()
+							continue
+						series_dict['all_tags'][key] = orth_series[key]
+					_log.debug('series: %s', series_dict['all_tags'].keys())
+					for key in series_keys2hide:
+						try: del series_dict['all_tags'][key]
+						except KeyError: pass
 					study_dict['series'].append(series_dict)
 
-		# debugging
-		#_log.debug('study: %s', study_keys.keys())
-		#_log.debug('study(MainDicomTags): %s', study_keys_m.keys())
-		#_log.debug('series: %s', series_keys.keys())
-		#_log.debug('series(MainDicomTags): %s', series_keys_m.keys())
-
 		return studies_by_patient
 
 	#--------------------------------------------------------
diff --git a/client/business/gmMedication.py b/client/business/gmMedication.py
index 19fd7da..4263e89 100644
--- a/client/business/gmMedication.py
+++ b/client/business/gmMedication.py
@@ -2559,7 +2559,8 @@ class cSubstanceIntakeEntry(gmBusinessDBObject.cBusinessDBObject):
 					gmTools.coalesce(self._payload[self._idx['comment_on_start']], u'', u' [%s]')
 				)
 			ended_ago = now - self._payload[self._idx['discontinued']]
-			txt = _(u'%s ago (for %s: %s %s %s)') % (
+			txt = _(u'%s %s ago (for %s: %s %s %s)') % (
+				gmTools.u_arrow2right_until_vertical_bar,
 				gmDateTime.format_interval_medically(ended_ago),
 				gmDateTime.format_interval_medically(duration_taken),
 				start,
diff --git a/client/doc/schema/gnumed-entire_schema.html b/client/doc/schema/gnumed-entire_schema.html
index 1bd1ec2..82a80df 100644
--- a/client/doc/schema/gnumed-entire_schema.html
+++ b/client/doc/schema/gnumed-entire_schema.html
@@ -112,7 +112,7 @@
   <body>
 
     <!-- Primary Index -->
-	<p><br><br>Dumped on 2016-05-26</p>
+	<p><br><br>Dumped on 2016-07-07</p>
 <h1><a name="index">Index of database - gnumed_v21</a></h1>
 <ul>
     
diff --git a/client/gnumed-client.desktop b/client/gnumed-client.desktop
index 2b8b3d3..a6024ed 100644
--- a/client/gnumed-client.desktop
+++ b/client/gnumed-client.desktop
@@ -13,4 +13,4 @@ Icon=gm_icon-serpent_and_gnu
 Exec=/usr/bin/gnumed
 Terminal=false
 Categories=Office;MedicalSoftware;
-Keywords=PHR;PMR;EHR;PMS;Patient Record;Medical Record;Patient Chart;Practice Management System;Medical Practice;Surgery
+Keywords=PHR;PMR;EHR;PMS;Patient Record;Medical Record;Patient Chart;Practice Management System;Medical Practice;Surgery;
diff --git a/client/gnumed.py b/client/gnumed.py
index 7155470..e6943c7 100644
--- a/client/gnumed.py
+++ b/client/gnumed.py
@@ -88,7 +88,7 @@ against. Please run GNUmed as a non-root user.
 	sys.exit(1)
 
 #----------------------------------------------------------
-current_client_version = u'1.6.6'
+current_client_version = u'1.6.7'
 current_client_branch = u'1.6'
 
 _log = None
diff --git a/client/po/ar-gnumed.mo b/client/po/ar-gnumed.mo
index 069846c..484416d 100644
Binary files a/client/po/ar-gnumed.mo and b/client/po/ar-gnumed.mo differ
diff --git a/client/po/ar.po b/client/po/ar.po
index 25e360f..cac3c73 100644
--- a/client/po/ar.po
+++ b/client/po/ar.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6401,7 +6401,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6662,7 +6662,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr ""
 
 msgid "Additional notes"
@@ -13194,6 +13194,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "وصفة"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -13947,10 +13951,11 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
-msgstr ""
+#, fuzzy
+msgid "Referrer"
+msgstr "التحويل"
 
-msgid "Study time"
+msgid "Time"
 msgstr ""
 
 msgid "Method"
@@ -13959,9 +13964,6 @@ msgstr ""
 msgid "Body part"
 msgstr ""
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -13992,11 +13994,7 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s series"
-msgstr ""
-
-#, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr ""
 
 msgid "no studies"
@@ -14040,7 +14038,13 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
+msgstr ""
+
+msgid "Study"
+msgstr ""
+
+msgid "Series"
 msgstr ""
 
 msgid "Select the directory from which to recursively upload DICOM files."
diff --git a/client/po/bg-gnumed.mo b/client/po/bg-gnumed.mo
index 978a71c..c71db88 100644
Binary files a/client/po/bg-gnumed.mo and b/client/po/bg-gnumed.mo differ
diff --git a/client/po/bg.po b/client/po/bg.po
index d40f140..c2870f8 100644
--- a/client/po/bg.po
+++ b/client/po/bg.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6401,7 +6401,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6658,7 +6658,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr ""
 
 msgid "Additional notes"
@@ -13184,6 +13184,9 @@ msgid ""
 " %s"
 msgstr ""
 
+msgid "Browse patient data pack ?"
+msgstr ""
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -13942,10 +13945,10 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
-msgid "Study time"
+msgid "Time"
 msgstr ""
 
 msgid "Method"
@@ -13954,9 +13957,6 @@ msgstr ""
 msgid "Body part"
 msgstr ""
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -13987,11 +13987,7 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s series"
-msgstr ""
-
-#, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr ""
 
 msgid "no studies"
@@ -14035,7 +14031,13 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
+msgstr ""
+
+msgid "Study"
+msgstr ""
+
+msgid "Series"
 msgstr ""
 
 msgid "Select the directory from which to recursively upload DICOM files."
diff --git a/client/po/ca-gnumed.mo b/client/po/ca-gnumed.mo
index 2948685..a862516 100644
Binary files a/client/po/ca-gnumed.mo and b/client/po/ca-gnumed.mo differ
diff --git a/client/po/ca.po b/client/po/ca.po
index 2704ce0..1510321 100644
--- a/client/po/ca.po
+++ b/client/po/ca.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2012-06-01 01:20+0000\n"
 "Last-Translator: ncq <Unknown>\n"
 "Language-Team: Catalan <ca at li.org>\n"
@@ -6702,7 +6702,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6970,7 +6970,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr "Pacient:  , No:\n"
 
 msgid "Additional notes"
@@ -13706,6 +13706,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Pacient"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -14498,12 +14502,12 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
 #, fuzzy
-msgid "Study time"
-msgstr "Mostra l'hora"
+msgid "Time"
+msgstr "Línia de temps"
 
 msgid "Method"
 msgstr ""
@@ -14512,10 +14516,6 @@ msgstr ""
 msgid "Body part"
 msgstr "part"
 
-#, fuzzy
-msgid "Time"
-msgstr "Línia de temps"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14546,12 +14546,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s la setmana passada (%s of %s)"
 
 msgid "no studies"
@@ -14598,9 +14594,17 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "Documents: %s"
 
+#, fuzzy
+msgid "Study"
+msgstr "Mostra l'hora"
+
+#, fuzzy
+msgid "Series"
+msgstr "Categories"
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
diff --git a/client/po/cs-gnumed.mo b/client/po/cs-gnumed.mo
index 9612234..07a4973 100644
Binary files a/client/po/cs-gnumed.mo and b/client/po/cs-gnumed.mo differ
diff --git a/client/po/cs.po b/client/po/cs.po
index b0f8605..7465045 100644
--- a/client/po/cs.po
+++ b/client/po/cs.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6584,7 +6584,7 @@ msgid "BMI: weight not in kg or g"
 msgstr "Tělesný povrch: váha není v kg nebo g"
 
 #, fuzzy, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr "MDRD (4 vars/IDMS): vzorec nelze použít na věk [%s] (17 < věk < 85)"
 
 #, python-format
@@ -6848,7 +6848,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr " Trvání: %s (%s - %s)"
 
 msgid "Additional notes"
@@ -13445,6 +13445,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Popis"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -14213,12 +14217,12 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
 #, fuzzy
-msgid "Study time"
-msgstr "Počáteční čas "
+msgid "Time"
+msgstr "Časová osa"
 
 msgid "Method"
 msgstr ""
@@ -14227,10 +14231,6 @@ msgstr ""
 msgid "Body part"
 msgstr "žádné části"
 
-#, fuzzy
-msgid "Time"
-msgstr "Časová osa"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14261,11 +14261,7 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s series"
-msgstr ""
-
-#, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr ""
 
 msgid "no studies"
@@ -14312,9 +14308,17 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr ""
 
+#, fuzzy
+msgid "Study"
+msgstr "Počáteční čas "
+
+#, fuzzy
+msgid "Series"
+msgstr "Kategorie"
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
diff --git a/client/po/da-gnumed.mo b/client/po/da-gnumed.mo
index 177d6dd..a63f63e 100644
Binary files a/client/po/da-gnumed.mo and b/client/po/da-gnumed.mo differ
diff --git a/client/po/da.po b/client/po/da.po
index 2896683..42098c8 100644
--- a/client/po/da.po
+++ b/client/po/da.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6410,7 +6410,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6669,7 +6669,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr "%s: tilfælde (%s)"
 
 msgid "Additional notes"
@@ -13215,6 +13215,9 @@ msgid ""
 " %s"
 msgstr ""
 
+msgid "Browse patient data pack ?"
+msgstr ""
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -13973,10 +13976,10 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
-msgid "Study time"
+msgid "Time"
 msgstr ""
 
 msgid "Method"
@@ -13985,9 +13988,6 @@ msgstr ""
 msgid "Body part"
 msgstr ""
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14017,12 +14017,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s: tilfælde (%s)"
 
 msgid "no studies"
@@ -14066,9 +14062,15 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "%s: tilfælde (%s)"
 
+msgid "Study"
+msgstr ""
+
+msgid "Series"
+msgstr ""
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
diff --git a/client/po/de-gnumed.mo b/client/po/de-gnumed.mo
index bb77dfc..71ec79d 100644
Binary files a/client/po/de-gnumed.mo and b/client/po/de-gnumed.mo differ
diff --git a/client/po/de.po b/client/po/de.po
index 550446d..eb6201d 100644
--- a/client/po/de.po
+++ b/client/po/de.po
@@ -5,8 +5,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
-"PO-Revision-Date: 2016-05-26 12:38+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
+"PO-Revision-Date: 2016-07-07 15:10+0200\n"
 "Last-Translator: Karsten Hilbert <Karsten.Hilbert at gmx.net>\n"
 "Language-Team: Deutsch\n"
 "Language: de_DE\n"
@@ -14,7 +14,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: pygettext.py 1.3\n"
-"X-Generator: Poedit 1.8.7.1\n"
+"X-Generator: Poedit 1.8.8\n"
 
 #, python-format
 msgid "unknown test status [%s]"
@@ -7300,9 +7300,10 @@ msgid "BMI: weight not in kg or g"
 msgstr "BMI: Gewicht nicht in kg oder g"
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
-"BMI (Quetelet): Formel trifft für Alter [%s] nicht zu (Alter muß <18 sein)"
+"BMI (Quetelet): Formel trifft für Alter [%s] nicht zu (Alter muß zwischen 0 "
+"und 18 sein)"
 
 #, python-format
 msgid "BMI (Quetelet): %.2f %s"
@@ -7558,8 +7559,8 @@ msgid ", planned for %s%s"
 msgstr ", geplant für %s%s"
 
 #, python-format
-msgid "%s ago (for %s: %s %s %s)"
-msgstr "vor %s (für %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
+msgstr "%s vor %s (für %s: %s %s %s)"
 
 msgid "Additional notes"
 msgstr "Zusätzliche Angaben"
@@ -14963,8 +14964,8 @@ msgstr ""
 "\n"
 " [%s]\n"
 "\n"
-"enthält schon Dateien. Wollen Sie es dort trotzdem\n"
-"die ausgewählten Dokumente des Exportbereits speichern ?\n"
+"enthält schon Dateien. Wollen Sie die ausgewählten\n"
+"Dokumente des Exportbereichs dennoch dort speichern ?\n"
 "\n"
 "(so können Sie externe Dateien einschließen, die schon\n"
 " in oder unter diesem Verzeichnis gespeichert sind)\n"
@@ -14994,10 +14995,13 @@ msgid ""
 "\n"
 " %s"
 msgstr ""
-"Dokumente in folgendes Verzeichnis gespeichtert:\n"
+"Dokumente in folgendes Verzeichnis gespeichert:\n"
 "\n"
 " %s"
 
+msgid "Browse patient data pack ?"
+msgstr "Patientenpaket durchblättern"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 "Wenn Sie ein existierendes Verzeichnis hinzufügen wollen, wählen Sie dieses "
@@ -15904,11 +15908,11 @@ msgstr "Sind Sie sicher, daß das Dokument gelöscht werden soll ?"
 msgid "Deleting document"
 msgstr "Dokument löschen"
 
-msgid "Study date"
-msgstr "Datum der Studie"
+msgid "Referrer"
+msgstr "Überweiser"
 
-msgid "Study time"
-msgstr "Zeit der Studie"
+msgid "Time"
+msgstr "Zeit"
 
 msgid "Method"
 msgstr "Methode"
@@ -15916,9 +15920,6 @@ msgstr "Methode"
 msgid "Body part"
 msgstr "Körperteil"
 
-msgid "Time"
-msgstr "Zeit"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr "Kann ohne Port nicht verbinden (versuchen Sie 8042)."
 
@@ -15951,12 +15952,8 @@ msgstr ""
 "durchsehen"
 
 #, python-format
-msgid "%s series"
-msgstr "%s Serien"
-
-#, python-format
-msgid "%%s (%s series)"
-msgstr "%%s (%s Serien)"
+msgid "%s series%s"
+msgstr "%s Serie(n)%s"
 
 msgid "no studies"
 msgstr "keine Studien"
@@ -16003,8 +16000,14 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr "Alle DICOM-Studien zu [%s] aus dem Orthanc PACS \"%s\" (AET \"%s\")"
 
 #, python-format
-msgid "%s%s images"
-msgstr "%s%s Bilder"
+msgid "%s image(s)%s"
+msgstr "%s Bild(er)%s"
+
+msgid "Study"
+msgstr "Studie"
+
+msgid "Series"
+msgstr "Serie"
 
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
@@ -20728,6 +20731,12 @@ msgstr "Abbrechen"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Abbrechen und keine Verbindung zu GNUmed herstellen."
 
+#~ msgid "Study time"
+#~ msgstr "Zeit der Studie"
+
+#~ msgid "%%s (%s series)"
+#~ msgstr "%%s (%s Serien)"
+
 #~ msgid "age"
 #~ msgstr "Alter"
 
diff --git a/client/po/el-gnumed.mo b/client/po/el-gnumed.mo
index 265d2d7..63c103b 100644
Binary files a/client/po/el-gnumed.mo and b/client/po/el-gnumed.mo differ
diff --git a/client/po/el.po b/client/po/el.po
index 83641b6..9c532b4 100644
--- a/client/po/el.po
+++ b/client/po/el.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2012-06-01 01:24+0000\n"
 "Last-Translator: ncq <Unknown>\n"
 "Language-Team: Ελληνικά, Σύγχρονα <opensuse-translation-el at opensuse.org>\n"
@@ -7047,7 +7047,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -7322,7 +7322,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr " Διάρκεια: %s (%s - %s)"
 
 msgid "Additional notes"
@@ -14209,6 +14209,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Αποθήκευση εγγράφου"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -15008,12 +15012,12 @@ msgid "Deleting document"
 msgstr ""
 
 #, fuzzy
-msgid "Study date"
-msgstr "ημέρα"
+msgid "Referrer"
+msgstr "Παραπομπές"
 
 #, fuzzy
-msgid "Study time"
-msgstr "Άρχισε νέο"
+msgid "Time"
+msgstr "Ώρα:"
 
 msgid "Method"
 msgstr ""
@@ -15022,10 +15026,6 @@ msgstr ""
 msgid "Body part"
 msgstr "μέρος"
 
-#, fuzzy
-msgid "Time"
-msgstr "Ώρα:"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -15055,12 +15055,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s (%s αυτό το έτος)"
 
 msgid "no studies"
@@ -15107,9 +15103,17 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "Ημερομηνία: %s\n"
 
+#, fuzzy
+msgid "Study"
+msgstr "ημέρα"
+
+#, fuzzy
+msgid "Series"
+msgstr "Κατηγορία"
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
@@ -19313,6 +19317,10 @@ msgstr "Ματαίωση"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Ματαίωση και ΔΕΝ θα συνδεθείτε με το GNUmed."
 
+#, fuzzy
+#~ msgid "Study time"
+#~ msgstr "Άρχισε νέο"
+
 #~ msgid "age"
 #~ msgstr "ηλικία"
 
diff --git a/client/po/en_AU-gnumed.mo b/client/po/en_AU-gnumed.mo
index 6c28497..385e398 100644
Binary files a/client/po/en_AU-gnumed.mo and b/client/po/en_AU-gnumed.mo differ
diff --git a/client/po/en_AU.po b/client/po/en_AU.po
index 63d0831..1da1d9c 100644
--- a/client/po/en_AU.po
+++ b/client/po/en_AU.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6408,7 +6408,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6666,7 +6666,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr "%s: encounter (%s)"
 
 msgid "Additional notes"
@@ -13226,6 +13226,9 @@ msgid ""
 " %s"
 msgstr ""
 
+msgid "Browse patient data pack ?"
+msgstr ""
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -13984,10 +13987,10 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
-msgid "Study time"
+msgid "Time"
 msgstr ""
 
 msgid "Method"
@@ -13996,9 +13999,6 @@ msgstr ""
 msgid "Body part"
 msgstr ""
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14028,12 +14028,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s: encounter (%s)"
 
 msgid "no studies"
@@ -14077,9 +14073,15 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "%s: encounter (%s)"
 
+msgid "Study"
+msgstr ""
+
+msgid "Series"
+msgstr ""
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
diff --git a/client/po/en_CA-gnumed.mo b/client/po/en_CA-gnumed.mo
index cc57064..7cb961f 100644
Binary files a/client/po/en_CA-gnumed.mo and b/client/po/en_CA-gnumed.mo differ
diff --git a/client/po/en_CA.po b/client/po/en_CA.po
index 0d8c8b3..0992709 100644
--- a/client/po/en_CA.po
+++ b/client/po/en_CA.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2010-02-09 16:17+0000\n"
 "Last-Translator: Brett Alton <brett.jr.alton at gmail.com>\n"
 "Language-Team: English (Canada) <en_CA at li.org>\n"
@@ -6526,7 +6526,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6794,7 +6794,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr "  your time: %s - %s  (@%s = %s%s)\n"
 
 msgid "Additional notes"
@@ -13448,6 +13448,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr " %s documents\n"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -14219,10 +14223,10 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
-msgid "Study time"
+msgid "Time"
 msgstr ""
 
 msgid "Method"
@@ -14232,9 +14236,6 @@ msgstr ""
 msgid "Body part"
 msgstr "part"
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14265,12 +14266,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s (%s this year)"
 
 msgid "no studies"
@@ -14314,9 +14311,15 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "Documents: %s"
 
+msgid "Study"
+msgstr ""
+
+msgid "Series"
+msgstr ""
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
diff --git a/client/po/es-gnumed.mo b/client/po/es-gnumed.mo
index defdc04..ad1c78b 100644
Binary files a/client/po/es-gnumed.mo and b/client/po/es-gnumed.mo differ
diff --git a/client/po/es.po b/client/po/es.po
index 480aa5d..e784670 100644
--- a/client/po/es.po
+++ b/client/po/es.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: es\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2016-02-24 18:28+0100\n"
 "Last-Translator: Karsten Hilbert <Karsten.Hilbert at gmx.net>\n"
 "Language-Team: colombiano <es at li.org>\n"
@@ -7435,8 +7435,8 @@ msgstr "ÍMC: peso no numérico"
 msgid "BMI: weight not in kg or g"
 msgstr "ÍMC: peso no expresado en kg o g"
 
-#, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+#, fuzzy, python-format
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr "ÍMC (Quetelet): fórmula no es válida para la edad de [%s] (edad <18)"
 
 #, python-format
@@ -7705,8 +7705,8 @@ msgstr " (planeado para %s%s)"
 msgid ", planned for %s%s"
 msgstr ", planeado para %s%s"
 
-#, python-format
-msgid "%s ago (for %s: %s %s %s)"
+#, fuzzy, python-format
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr "%s atrás (para %s: %s %s %s)"
 
 msgid "Additional notes"
@@ -15185,6 +15185,10 @@ msgstr ""
 "\n"
 " %s"
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Reviso datos del paciente"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr "Si desea incluir un directorio exstente, selecciónelo acá:"
 
@@ -16094,11 +16098,12 @@ msgstr "¿Está seguro de que quiere borrar el documento?"
 msgid "Deleting document"
 msgstr "Borrando documento"
 
-msgid "Study date"
-msgstr "Fecha del estudio"
+#, fuzzy
+msgid "Referrer"
+msgstr "Remisiones"
 
-msgid "Study time"
-msgstr "Hora del estudio"
+msgid "Time"
+msgstr "Tiempo"
 
 msgid "Method"
 msgstr "Método"
@@ -16106,9 +16111,6 @@ msgstr "Método"
 msgid "Body part"
 msgstr "Parte del cuerpo"
 
-msgid "Time"
-msgstr "Tiempo"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr "No puedo conectar sin puerto (trate 8042)."
 
@@ -16140,14 +16142,10 @@ msgstr ""
 "SCAI: se encontró más de una coincidencia de paciente para la ID, "
 "cuidadosamente revise los estudios"
 
-#, python-format
-msgid "%s series"
+#, fuzzy, python-format
+msgid "%s series%s"
 msgstr "%s series"
 
-#, python-format
-msgid "%%s (%s series)"
-msgstr "%%s (%s series)"
-
 msgid "no studies"
 msgstr "sin estudios"
 
@@ -16191,10 +16189,18 @@ msgstr "IMposible guardar estudios."
 msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr "Todos los estudios DICOM de [%s] del SCAI Orthanc \"%s\" (AET \"%s\")"
 
-#, python-format
-msgid "%s%s images"
+#, fuzzy, python-format
+msgid "%s image(s)%s"
 msgstr "%s%s imágenes"
 
+#, fuzzy
+msgid "Study"
+msgstr "Fecha del estudio"
+
+#, fuzzy
+msgid "Series"
+msgstr "%s series"
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 "Seleccione el directorio desde el cual subir recursivamente archivos DICOM."
@@ -20972,6 +20978,12 @@ msgstr "Aborto"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Aborto y NO conecto a GNUMed."
 
+#~ msgid "Study time"
+#~ msgstr "Hora del estudio"
+
+#~ msgid "%%s (%s series)"
+#~ msgstr "%%s (%s series)"
+
 #, fuzzy
 #~ msgid "Copy to e&xport area..."
 #~ msgstr "Copio todos los estudios al área de exportación."
diff --git a/client/po/fr-gnumed.mo b/client/po/fr-gnumed.mo
index 368c18e..252917e 100644
Binary files a/client/po/fr-gnumed.mo and b/client/po/fr-gnumed.mo differ
diff --git a/client/po/fr.po b/client/po/fr.po
index 4fd0eaa..5113bdb 100644
--- a/client/po/fr.po
+++ b/client/po/fr.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2012-06-01 01:16+0000\n"
 "Last-Translator: ncq <Unknown>\n"
 "Language-Team: FR <LL at li.org>\n"
@@ -7388,7 +7388,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -7660,7 +7660,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr " Durée : %s (%s - %s)"
 
 msgid "Additional notes"
@@ -14704,6 +14704,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Fusionner les patients"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -15507,12 +15511,12 @@ msgid "Deleting document"
 msgstr ""
 
 #, fuzzy
-msgid "Study date"
-msgstr "date"
+msgid "Referrer"
+msgstr "References"
 
 #, fuzzy
-msgid "Study time"
-msgstr "Démarré"
+msgid "Time"
+msgstr "Durée :"
 
 msgid "Method"
 msgstr ""
@@ -15521,10 +15525,6 @@ msgstr ""
 msgid "Body part"
 msgstr "(%s patients)"
 
-#, fuzzy
-msgid "Time"
-msgstr "Durée :"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -15555,12 +15555,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s (%s cette année)"
 
 msgid "no studies"
@@ -15609,10 +15605,18 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "Exporté: %s\n"
 
 #, fuzzy
+msgid "Study"
+msgstr "date"
+
+#, fuzzy
+msgid "Series"
+msgstr "Catégorie"
+
+#, fuzzy
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr "Choisissez l'épisode vers lequel vous voulez déplacer le texte."
 
@@ -19911,6 +19915,10 @@ msgstr "Abandonner"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Annuler et ne PAS se connecter a GNUmed."
 
+#, fuzzy
+#~ msgid "Study time"
+#~ msgstr "Démarré"
+
 #~ msgid "age"
 #~ msgstr "âge"
 
diff --git a/client/po/id-gnumed.mo b/client/po/id-gnumed.mo
index 0008d45..d74d892 100644
Binary files a/client/po/id-gnumed.mo and b/client/po/id-gnumed.mo differ
diff --git a/client/po/id.po b/client/po/id.po
index 501e8f9..82ace81 100644
--- a/client/po/id.po
+++ b/client/po/id.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6440,7 +6440,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6700,7 +6700,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr ""
 
 msgid "Additional notes"
@@ -13244,6 +13244,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Deskripsi"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -14000,12 +14004,12 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
 #, fuzzy
-msgid "Study time"
-msgstr "Waktu mulai "
+msgid "Time"
+msgstr "Garis Waktu"
 
 msgid "Method"
 msgstr ""
@@ -14013,10 +14017,6 @@ msgstr ""
 msgid "Body part"
 msgstr ""
 
-#, fuzzy
-msgid "Time"
-msgstr "Garis Waktu"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14047,11 +14047,7 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s series"
-msgstr ""
-
-#, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr ""
 
 msgid "no studies"
@@ -14095,9 +14091,17 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr ""
 
+#, fuzzy
+msgid "Study"
+msgstr "Waktu mulai "
+
+#, fuzzy
+msgid "Series"
+msgstr "Kategori"
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
diff --git a/client/po/it-gnumed.mo b/client/po/it-gnumed.mo
index 48e2267..e22a7d0 100644
Binary files a/client/po/it-gnumed.mo and b/client/po/it-gnumed.mo differ
diff --git a/client/po/it.po b/client/po/it.po
index 8a15354..c83dc9c 100644
--- a/client/po/it.po
+++ b/client/po/it.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2012-06-01 01:22+0000\n"
 "Last-Translator: ncq <Unknown>\n"
 "Language-Team: GNUmed\n"
@@ -6992,7 +6992,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -7264,7 +7264,7 @@ msgid ", planned for %s%s"
 msgstr "nessun paziente trovato per [%s]/%s"
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr " Durata: %s (%s - %s)"
 
 msgid "Additional notes"
@@ -14219,6 +14219,10 @@ msgid ""
 " %s"
 msgstr "Salva il documento nella cartella ..."
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Unire i pazienti"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -15035,12 +15039,12 @@ msgid "Deleting document"
 msgstr "Cancella documento"
 
 #, fuzzy
-msgid "Study date"
-msgstr "Essudato"
+msgid "Referrer"
+msgstr "Referenti"
 
 #, fuzzy
-msgid "Study time"
-msgstr "Incomincia nuovo"
+msgid "Time"
+msgstr "Ora:"
 
 msgid "Method"
 msgstr ""
@@ -15049,10 +15053,6 @@ msgstr ""
 msgid "Body part"
 msgstr "mostra parte"
 
-#, fuzzy
-msgid "Time"
-msgstr "Ora:"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -15083,12 +15083,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s (%s quest'anno)"
 
 msgid "no studies"
@@ -15136,10 +15132,17 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "&Zona:"
 
 #, fuzzy
+msgid "Study"
+msgstr "Essudato"
+
+msgid "Series"
+msgstr ""
+
+#, fuzzy
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr "Selezionare l'episodio del quale si desidera spostare la narrazione."
 
@@ -19434,6 +19437,10 @@ msgstr "Annulla"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Annulla e NON connetti a GNUmed"
 
+#, fuzzy
+#~ msgid "Study time"
+#~ msgstr "Incomincia nuovo"
+
 #~ msgid "age"
 #~ msgstr "età"
 
diff --git a/client/po/ka-gnumed.mo b/client/po/ka-gnumed.mo
index b0f5b6c..12a3d41 100644
Binary files a/client/po/ka-gnumed.mo and b/client/po/ka-gnumed.mo differ
diff --git a/client/po/ka.po b/client/po/ka.po
index b525999..ff4f2bf 100644
--- a/client/po/ka.po
+++ b/client/po/ka.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6404,7 +6404,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6674,7 +6674,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr ""
 "%ს:%ს %.8ს (ვ%ს)\n"
 "%ს"
@@ -13227,6 +13227,9 @@ msgid ""
 " %s"
 msgstr ""
 
+msgid "Browse patient data pack ?"
+msgstr ""
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -13986,10 +13989,10 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
-msgid "Study time"
+msgid "Time"
 msgstr ""
 
 msgid "Method"
@@ -13998,9 +14001,6 @@ msgstr ""
 msgid "Body part"
 msgstr ""
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14030,12 +14030,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr ""
 "%ს:%ს %.8ს (ვ%ს)\n"
 "%ს"
@@ -14081,11 +14077,17 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr ""
 "%ს:%ს %.8ს (ვ%ს)\n"
 "%ს"
 
+msgid "Study"
+msgstr ""
+
+msgid "Series"
+msgstr ""
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
diff --git a/client/po/nb-gnumed.mo b/client/po/nb-gnumed.mo
index d6d4c84..6211cd6 100644
Binary files a/client/po/nb-gnumed.mo and b/client/po/nb-gnumed.mo differ
diff --git a/client/po/nb.po b/client/po/nb.po
index 5758deb..81e8cf8 100644
--- a/client/po/nb.po
+++ b/client/po/nb.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2009-02-12 20:47+0000\n"
 "Last-Translator: Leif Gunnar Erlandsen <Unknown>\n"
 "Language-Team: Norwegian Bokmal <nb at li.org>\n"
@@ -6574,7 +6574,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6845,7 +6845,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr "Pasient: %s (%s), Nr: %s\n"
 
 msgid "Additional notes"
@@ -13523,6 +13523,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Vaksinasjon"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -14305,10 +14309,10 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
-msgid "Study time"
+msgid "Time"
 msgstr ""
 
 msgid "Method"
@@ -14318,9 +14322,6 @@ msgstr ""
 msgid "Body part"
 msgstr "delvis"
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14350,12 +14351,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "Pasient: %s (%s), Nr: %s\n"
 
 msgid "no studies"
@@ -14399,9 +14396,15 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "   Dok: %s"
 
+msgid "Study"
+msgstr ""
+
+msgid "Series"
+msgstr ""
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
diff --git a/client/po/nl-gnumed.mo b/client/po/nl-gnumed.mo
index a45a8e5..0ef706a 100644
Binary files a/client/po/nl-gnumed.mo and b/client/po/nl-gnumed.mo differ
diff --git a/client/po/nl.po b/client/po/nl.po
index 42b2c3d..3b62d77 100644
--- a/client/po/nl.po
+++ b/client/po/nl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2012-06-01 01:19+0000\n"
 "Last-Translator: Anik ten Have <anik at itchi-go.nl>\n"
 "Language-Team: Dutch <nl at li.org>\n"
@@ -7290,7 +7290,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -7567,7 +7567,7 @@ msgid ", planned for %s%s"
 msgstr "geen patiënt gevonden voor [%s]/%s"
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr "Ontmoetingen: %s (%s - %s):"
 
 msgid "Additional notes"
@@ -14956,6 +14956,10 @@ msgid ""
 " %s"
 msgstr "Document opslaan in map..."
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Patiëntendetails"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -15912,12 +15916,12 @@ msgid "Deleting document"
 msgstr "verwijderen documenttype"
 
 #, fuzzy
-msgid "Study date"
-msgstr "datum"
+msgid "Referrer"
+msgstr "Verwijzingen"
 
 #, fuzzy
-msgid "Study time"
-msgstr "Begin nieuw"
+msgid "Time"
+msgstr "Titel"
 
 msgid "Method"
 msgstr ""
@@ -15927,10 +15931,6 @@ msgid "Body part"
 msgstr "patiënt"
 
 #, fuzzy
-msgid "Time"
-msgstr "Titel"
-
-#, fuzzy
 msgid "Cannot connect without port (try 8042)."
 msgstr "Kan patiënt niet verwijderen. Geen actieve patiënt."
 
@@ -15961,12 +15961,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s (%s dit jaar)"
 
 msgid "no studies"
@@ -16015,10 +16011,18 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "Geexporteerd: %s\n"
 
 #, fuzzy
+msgid "Study"
+msgstr "datum"
+
+#, fuzzy
+msgid "Series"
+msgstr "Categorie"
+
+#, fuzzy
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr "Selecteer de episode waaronder dit document bewaard moet worden..."
 
@@ -20849,6 +20853,10 @@ msgstr "Afbreken"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Afbreken en GEEN verbinding maken met GNUmed."
 
+#, fuzzy
+#~ msgid "Study time"
+#~ msgstr "Begin nieuw"
+
 #~ msgid "age"
 #~ msgstr "leeftijd"
 
diff --git a/client/po/pl-gnumed.mo b/client/po/pl-gnumed.mo
index 251595b..1006ad4 100644
Binary files a/client/po/pl-gnumed.mo and b/client/po/pl-gnumed.mo differ
diff --git a/client/po/pl.po b/client/po/pl.po
index a9f0a10..a93f98a 100644
--- a/client/po/pl.po
+++ b/client/po/pl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2012-06-01 01:17+0000\n"
 "Last-Translator: J.Luszawski <jl at leksoft.com.pl>\n"
 "Language-Team: Polish <pl at li.org>\n"
@@ -6854,7 +6854,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -7128,7 +7128,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr " Czas trwania: %s (%s - %s)"
 
 msgid "Additional notes"
@@ -14013,6 +14013,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "wewn. identyfikator pacjenta"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -14831,12 +14835,12 @@ msgstr ""
 msgid "Deleting document"
 msgstr "Usuwanie epizodu"
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
 #, fuzzy
-msgid "Study time"
-msgstr "Czas rozpoczęcia "
+msgid "Time"
+msgstr "Linia czasu"
 
 msgid "Method"
 msgstr ""
@@ -14845,10 +14849,6 @@ msgstr ""
 msgid "Body part"
 msgstr "część"
 
-#, fuzzy
-msgid "Time"
-msgstr "Linia czasu"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14879,12 +14879,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr ""
 "%s:%s przez %.8s\n"
 "%s"
@@ -14934,10 +14930,18 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "Wystawca"
 
 #, fuzzy
+msgid "Study"
+msgstr "Czas rozpoczęcia "
+
+#, fuzzy
+msgid "Series"
+msgstr "Kategorie"
+
+#, fuzzy
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr "Wybierz epizod, w ramach którego ma być zachowany dokument ..."
 
diff --git a/client/po/pt-gnumed.mo b/client/po/pt-gnumed.mo
index be19981..8a6cd81 100644
Binary files a/client/po/pt-gnumed.mo and b/client/po/pt-gnumed.mo differ
diff --git a/client/po/pt.po b/client/po/pt.po
index 82e95bc..ed58d56 100644
--- a/client/po/pt.po
+++ b/client/po/pt.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2010-07-17 11:08+0000\n"
 "Last-Translator: Luis Mendonça <Unknown>\n"
 "Language-Team: Portuguese <pt at li.org>\n"
@@ -7051,7 +7051,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -7328,7 +7328,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr "Consultas: %s (%s - %s):"
 
 msgid "Additional notes"
@@ -14357,6 +14357,10 @@ msgid ""
 " %s"
 msgstr "Selecione diretório temporário ..."
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Agrupar pacientes"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -15182,12 +15186,11 @@ msgid "Deleting document"
 msgstr "Apagando documento"
 
 #, fuzzy
-msgid "Study date"
-msgstr "Exsudato"
+msgid "Referrer"
+msgstr "Referências"
 
-#, fuzzy
-msgid "Study time"
-msgstr "Iniciar Nova"
+msgid "Time"
+msgstr ""
 
 msgid "Method"
 msgstr ""
@@ -15196,9 +15199,6 @@ msgstr ""
 msgid "Body part"
 msgstr "(%s pacientes)"
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -15229,12 +15229,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s (%s este ano)"
 
 msgid "no studies"
@@ -15282,10 +15278,18 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "&Local"
 
 #, fuzzy
+msgid "Study"
+msgstr "Exsudato"
+
+#, fuzzy
+msgid "Series"
+msgstr "Categori­a"
+
+#, fuzzy
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr "Selecione o episódio para o qual você quer mover a descrição"
 
@@ -19723,6 +19727,10 @@ msgstr "Interromper"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Imterromper e NÃO ligar ao GNUmed"
 
+#, fuzzy
+#~ msgid "Study time"
+#~ msgstr "Iniciar Nova"
+
 #~ msgid "age"
 #~ msgstr "idade"
 
diff --git a/client/po/pt_BR-gnumed.mo b/client/po/pt_BR-gnumed.mo
index a5f0be4..a377c8d 100644
Binary files a/client/po/pt_BR-gnumed.mo and b/client/po/pt_BR-gnumed.mo differ
diff --git a/client/po/pt_BR.po b/client/po/pt_BR.po
index e82bf06..6ce4e9a 100644
--- a/client/po/pt_BR.po
+++ b/client/po/pt_BR.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2012-06-01 01:18+0000\n"
 "Last-Translator: Rogerio Luz Coelho <dr.rogerioluzcoelho at gmail.com>\n"
 "Language-Team: Brazilian Portuguese <pt_BR at li.org>\n"
@@ -7224,7 +7224,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -7502,7 +7502,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr " Duração: %s (%s - %s)"
 
 msgid "Additional notes"
@@ -14544,6 +14544,10 @@ msgid ""
 " %s"
 msgstr "salvar entrada no prontuário médico"
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Agrupar pacientes"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -15367,12 +15371,12 @@ msgid "Deleting document"
 msgstr "Apagando documento"
 
 #, fuzzy
-msgid "Study date"
-msgstr "Exsudato"
+msgid "Referrer"
+msgstr "Referências"
 
 #, fuzzy
-msgid "Study time"
-msgstr "Iniciar Nova"
+msgid "Time"
+msgstr "Timeline"
 
 msgid "Method"
 msgstr ""
@@ -15381,10 +15385,6 @@ msgstr ""
 msgid "Body part"
 msgstr "mostrar porção"
 
-#, fuzzy
-msgid "Time"
-msgstr "Timeline"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -15415,12 +15415,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s (%s desse ano)"
 
 msgid "no studies"
@@ -15468,10 +15464,18 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "%s atrás"
 
 #, fuzzy
+msgid "Study"
+msgstr "Exsudato"
+
+#, fuzzy
+msgid "Series"
+msgstr "Categorias"
+
+#, fuzzy
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr "Selecione o episódio para o qual você quer mover a descrição"
 
@@ -19911,6 +19915,10 @@ msgstr "Cancelar"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Cancelar e NÃO conectar ao GNUmed."
 
+#, fuzzy
+#~ msgid "Study time"
+#~ msgstr "Iniciar Nova"
+
 #~ msgid "age"
 #~ msgstr "idade"
 
diff --git a/client/po/ro-gnumed.mo b/client/po/ro-gnumed.mo
index 8766231..b7d5f0c 100644
Binary files a/client/po/ro-gnumed.mo and b/client/po/ro-gnumed.mo differ
diff --git a/client/po/ro.po b/client/po/ro.po
index acd9933..8017c63 100644
--- a/client/po/ro.po
+++ b/client/po/ro.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6395,7 +6395,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6653,7 +6653,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr ""
 
 msgid "Additional notes"
@@ -13177,6 +13177,9 @@ msgid ""
 " %s"
 msgstr ""
 
+msgid "Browse patient data pack ?"
+msgstr ""
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -13930,10 +13933,10 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
-msgid "Study time"
+msgid "Time"
 msgstr ""
 
 msgid "Method"
@@ -13942,9 +13945,6 @@ msgstr ""
 msgid "Body part"
 msgstr ""
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -13975,11 +13975,7 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s series"
-msgstr ""
-
-#, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr ""
 
 msgid "no studies"
@@ -14023,7 +14019,13 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
+msgstr ""
+
+msgid "Study"
+msgstr ""
+
+msgid "Series"
 msgstr ""
 
 msgid "Select the directory from which to recursively upload DICOM files."
diff --git a/client/po/ru-gnumed.mo b/client/po/ru-gnumed.mo
index 214529f..d8f0915 100644
Binary files a/client/po/ru-gnumed.mo and b/client/po/ru-gnumed.mo differ
diff --git a/client/po/ru.po b/client/po/ru.po
index b437507..381f94f 100644
--- a/client/po/ru.po
+++ b/client/po/ru.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2012-01-21 13:50+0000\n"
 "Last-Translator: YvLy <Unknown>\n"
 "Language-Team: Russian <ru at li.org>\n"
@@ -7520,7 +7520,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -7794,7 +7794,7 @@ msgid ", planned for %s%s"
 msgstr "для [%s]/%s пациент не найден"
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr " Продолжительность: %s (%s - %s)"
 
 msgid "Additional notes"
@@ -15411,6 +15411,10 @@ msgid ""
 " %s"
 msgstr "Сохраняет документ в каталоге ..."
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Тэги пациента"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -16334,12 +16338,12 @@ msgid "Deleting document"
 msgstr "Удаление документа"
 
 #, fuzzy
-msgid "Study date"
-msgstr "Эксудативный"
+msgid "Referrer"
+msgstr "Направления"
 
 #, fuzzy
-msgid "Study time"
-msgstr "Запустить новое"
+msgid "Time"
+msgstr "Время:"
 
 msgid "Method"
 msgstr ""
@@ -16349,10 +16353,6 @@ msgid "Body part"
 msgstr "%s частей"
 
 #, fuzzy
-msgid "Time"
-msgstr "Время:"
-
-#, fuzzy
 msgid "Cannot connect without port (try 8042)."
 msgstr "Невозможно подготовить без сценария подготовки."
 
@@ -16383,12 +16383,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s (%s текущий год)"
 
 msgid "no studies"
@@ -16437,10 +16433,18 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "%s тому назад"
 
 #, fuzzy
+msgid "Study"
+msgstr "Эксудативный"
+
+#, fuzzy
+msgid "Series"
+msgstr "Категория"
+
+#, fuzzy
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr "Выберите эпизод, в котором зарегистрировать этот документ ..."
 
@@ -21282,6 +21286,10 @@ msgstr "Отменить"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Отменить и НЕ подключаться к GNUmed."
 
+#, fuzzy
+#~ msgid "Study time"
+#~ msgstr "Запустить новое"
+
 #~ msgid "age"
 #~ msgstr "возраст"
 
diff --git a/client/po/ru_RU-gnumed.mo b/client/po/ru_RU-gnumed.mo
index a06888e..464c82c 100644
Binary files a/client/po/ru_RU-gnumed.mo and b/client/po/ru_RU-gnumed.mo differ
diff --git a/client/po/ru_RU.po b/client/po/ru_RU.po
index a0c596a..a877fcf 100644
--- a/client/po/ru_RU.po
+++ b/client/po/ru_RU.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: 2012-05-30 18:43+0000\n"
 "Last-Translator: YvLy <Unknown>\n"
 "Language-Team: Russian <ru at li.org>\n"
@@ -7508,7 +7508,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -7782,7 +7782,7 @@ msgid ", planned for %s%s"
 msgstr "для [%s]/%s пациент не найден"
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr " Продолжительность: %s (%s - %s)"
 
 msgid "Additional notes"
@@ -15329,6 +15329,10 @@ msgid ""
 " %s"
 msgstr "Сохраняет документ в каталоге ..."
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Отображение тэгов пациента"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -16243,12 +16247,12 @@ msgid "Deleting document"
 msgstr "Удаление документа"
 
 #, fuzzy
-msgid "Study date"
-msgstr "Эксудативный"
+msgid "Referrer"
+msgstr "Направления"
 
 #, fuzzy
-msgid "Study time"
-msgstr "Запустить новое"
+msgid "Time"
+msgstr "Время:"
 
 msgid "Method"
 msgstr ""
@@ -16258,10 +16262,6 @@ msgid "Body part"
 msgstr "%s частей"
 
 #, fuzzy
-msgid "Time"
-msgstr "Время:"
-
-#, fuzzy
 msgid "Cannot connect without port (try 8042)."
 msgstr "Не удалось подготовить без сценария подготовки."
 
@@ -16292,12 +16292,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s (%s текущий год)"
 
 msgid "no studies"
@@ -16346,10 +16342,18 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "%s тому назад"
 
 #, fuzzy
+msgid "Study"
+msgstr "Эксудативный"
+
+#, fuzzy
+msgid "Series"
+msgstr "Категория"
+
+#, fuzzy
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr "Выберите эпизод, в котором зарегистрировать этот документ ..."
 
@@ -21170,6 +21174,10 @@ msgstr "Отменить"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Отменить и НЕ подключаться к GNUmed."
 
+#, fuzzy
+#~ msgid "Study time"
+#~ msgstr "Запустить новое"
+
 #~ msgid "age"
 #~ msgstr "возраст"
 
diff --git a/client/po/sq-gnumed.mo b/client/po/sq-gnumed.mo
index 73ba2d1..b799b68 100644
Binary files a/client/po/sq-gnumed.mo and b/client/po/sq-gnumed.mo differ
diff --git a/client/po/sq.po b/client/po/sq.po
index d461b6c..ce2f608 100644
--- a/client/po/sq.po
+++ b/client/po/sq.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:56+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6581,7 +6581,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6848,7 +6848,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr " Kohezgjatja: %s (%s - %s)"
 
 msgid "Additional notes"
@@ -13515,6 +13515,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Përshkrim"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -14284,12 +14288,12 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
 #, fuzzy
-msgid "Study time"
-msgstr "Koha e fillimit "
+msgid "Time"
+msgstr "Linje kohore"
 
 msgid "Method"
 msgstr ""
@@ -14298,10 +14302,6 @@ msgstr ""
 msgid "Body part"
 msgstr "1 pjese"
 
-#, fuzzy
-msgid "Time"
-msgstr "Linje kohore"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14331,12 +14331,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr " Kohezgjatja: %s (%s - %s)"
 
 msgid "no studies"
@@ -14383,9 +14379,17 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "%s më parë"
 
+#, fuzzy
+msgid "Study"
+msgstr "Koha e fillimit "
+
+#, fuzzy
+msgid "Series"
+msgstr "Kategoritë"
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
diff --git a/client/po/sr-gnumed.mo b/client/po/sr-gnumed.mo
index ed46942..9475446 100644
Binary files a/client/po/sr-gnumed.mo and b/client/po/sr-gnumed.mo differ
diff --git a/client/po/sr.po b/client/po/sr.po
index 34320f4..505f983 100644
--- a/client/po/sr.po
+++ b/client/po/sr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:57+0200\n"
 "PO-Revision-Date: 2011-08-25 16:54+0000\n"
 "Last-Translator: Karolina Kalic <Unknown>\n"
 "Language-Team: Serbian <sr at li.org>\n"
@@ -6546,7 +6546,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6813,7 +6813,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr "  ваше време: %s - %s  (@%s = %s%s)\n"
 
 msgid "Additional notes"
@@ -13496,6 +13496,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Приказивање вакцина."
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -14285,10 +14289,10 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
-msgid "Study time"
+msgid "Time"
 msgstr ""
 
 msgid "Method"
@@ -14298,9 +14302,6 @@ msgstr ""
 msgid "Body part"
 msgstr "део"
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14330,12 +14331,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "Документа: %s"
 
 msgid "no studies"
@@ -14382,9 +14379,15 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "Документа: %s"
 
+msgid "Study"
+msgstr ""
+
+msgid "Series"
+msgstr ""
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
diff --git a/client/po/sv-gnumed.mo b/client/po/sv-gnumed.mo
index 321bf13..2beb2ee 100644
Binary files a/client/po/sv-gnumed.mo and b/client/po/sv-gnumed.mo differ
diff --git a/client/po/sv.po b/client/po/sv.po
index 2e07c99..217091a 100644
--- a/client/po/sv.po
+++ b/client/po/sv.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:57+0200\n"
 "PO-Revision-Date: 2012-04-07 10:15+0000\n"
 "Last-Translator: Rikard Edgren <Unknown>\n"
 "Language-Team: Swedish <kde-i18n-doc at kde.org>\n"
@@ -6773,7 +6773,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -7049,7 +7049,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr " Spann: %s (%s - %s)"
 
 msgid "Additional notes"
@@ -13800,6 +13800,10 @@ msgid ""
 " %s"
 msgstr ""
 
+#, fuzzy
+msgid "Browse patient data pack ?"
+msgstr "Beskrivning"
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -14573,12 +14577,12 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
 #, fuzzy
-msgid "Study time"
-msgstr "Starttid "
+msgid "Time"
+msgstr "Tidslinje"
 
 msgid "Method"
 msgstr ""
@@ -14587,10 +14591,6 @@ msgstr ""
 msgid "Body part"
 msgstr "del"
 
-#, fuzzy
-msgid "Time"
-msgstr "Tidslinje"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14621,12 +14621,8 @@ msgid ""
 "PACS: more than one patient with matching IDs found, carefully check studies"
 msgstr ""
 
-#, python-format
-msgid "%s series"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr "%s (%s innevarande år)"
 
 msgid "no studies"
@@ -14676,10 +14672,18 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr "Enhet: %s (%s)"
 
 #, fuzzy
+msgid "Study"
+msgstr "Starttid "
+
+#, fuzzy
+msgid "Series"
+msgstr "Kategorier"
+
+#, fuzzy
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 "\n"
diff --git a/client/po/tr-gnumed.mo b/client/po/tr-gnumed.mo
index 72ec479..821e880 100644
Binary files a/client/po/tr-gnumed.mo and b/client/po/tr-gnumed.mo differ
diff --git a/client/po/tr.po b/client/po/tr.po
index 6661f8c..4d69374 100644
--- a/client/po/tr.po
+++ b/client/po/tr.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:57+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6417,7 +6417,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6675,7 +6675,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr ""
 
 msgid "Additional notes"
@@ -13202,6 +13202,9 @@ msgid ""
 " %s"
 msgstr ""
 
+msgid "Browse patient data pack ?"
+msgstr ""
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -13956,12 +13959,12 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
 #, fuzzy
-msgid "Study time"
-msgstr "Başlangıç zamanı "
+msgid "Time"
+msgstr "Zaman Çizelgesi"
 
 msgid "Method"
 msgstr ""
@@ -13969,10 +13972,6 @@ msgstr ""
 msgid "Body part"
 msgstr ""
 
-#, fuzzy
-msgid "Time"
-msgstr "Zaman Çizelgesi"
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -14003,11 +14002,7 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s series"
-msgstr ""
-
-#, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr ""
 
 msgid "no studies"
@@ -14051,9 +14046,17 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
 msgstr ""
 
+#, fuzzy
+msgid "Study"
+msgstr "Başlangıç zamanı "
+
+#, fuzzy
+msgid "Series"
+msgstr "Kategoriler"
+
 msgid "Select the directory from which to recursively upload DICOM files."
 msgstr ""
 
diff --git a/client/po/uk-gnumed.mo b/client/po/uk-gnumed.mo
index 7d67ab8..a3a18f1 100644
Binary files a/client/po/uk-gnumed.mo and b/client/po/uk-gnumed.mo differ
diff --git a/client/po/uk.po b/client/po/uk.po
index cac8ca8..7faf361 100644
--- a/client/po/uk.po
+++ b/client/po/uk.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:57+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6395,7 +6395,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6652,7 +6652,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr ""
 
 msgid "Additional notes"
@@ -13175,6 +13175,9 @@ msgid ""
 " %s"
 msgstr ""
 
+msgid "Browse patient data pack ?"
+msgstr ""
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -13928,10 +13931,10 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
-msgid "Study time"
+msgid "Time"
 msgstr ""
 
 msgid "Method"
@@ -13940,9 +13943,6 @@ msgstr ""
 msgid "Body part"
 msgstr ""
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -13973,11 +13973,7 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s series"
-msgstr ""
-
-#, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr ""
 
 msgid "no studies"
@@ -14021,7 +14017,13 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
+msgstr ""
+
+msgid "Study"
+msgstr ""
+
+msgid "Series"
 msgstr ""
 
 msgid "Select the directory from which to recursively upload DICOM files."
diff --git a/client/po/zh_TW-gnumed.mo b/client/po/zh_TW-gnumed.mo
index c123814..a0d4675 100644
Binary files a/client/po/zh_TW-gnumed.mo and b/client/po/zh_TW-gnumed.mo differ
diff --git a/client/po/zh_TW.po b/client/po/zh_TW.po
index c151b7e..cddd27c 100644
--- a/client/po/zh_TW.po
+++ b/client/po/zh_TW.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-05-26 12:47+0200\n"
+"POT-Creation-Date: 2016-07-07 14:57+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -6399,7 +6399,7 @@ msgid "BMI: weight not in kg or g"
 msgstr ""
 
 #, python-format
-msgid "BMI (Quetelet): formula does not apply at age [%s] (age < 18)"
+msgid "BMI (Quetelet): formula does not apply at age [%s] (0 < age < 18)"
 msgstr ""
 
 #, python-format
@@ -6659,7 +6659,7 @@ msgid ", planned for %s%s"
 msgstr ""
 
 #, python-format
-msgid "%s ago (for %s: %s %s %s)"
+msgid "%s %s ago (for %s: %s %s %s)"
 msgstr ""
 
 msgid "Additional notes"
@@ -13192,6 +13192,9 @@ msgid ""
 " %s"
 msgstr ""
 
+msgid "Browse patient data pack ?"
+msgstr ""
+
 msgid "If you wish to include an existing directory select it here:"
 msgstr ""
 
@@ -13946,10 +13949,10 @@ msgstr ""
 msgid "Deleting document"
 msgstr ""
 
-msgid "Study date"
+msgid "Referrer"
 msgstr ""
 
-msgid "Study time"
+msgid "Time"
 msgstr ""
 
 msgid "Method"
@@ -13958,9 +13961,6 @@ msgstr ""
 msgid "Body part"
 msgstr ""
 
-msgid "Time"
-msgstr ""
-
 msgid "Cannot connect without port (try 8042)."
 msgstr ""
 
@@ -13991,11 +13991,7 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s series"
-msgstr ""
-
-#, python-format
-msgid "%%s (%s series)"
+msgid "%s series%s"
 msgstr ""
 
 msgid "no studies"
@@ -14039,7 +14035,13 @@ msgid "All DICOM studies of [%s] from Orthanc PACS \"%s\" (AET \"%s\")"
 msgstr ""
 
 #, python-format
-msgid "%s%s images"
+msgid "%s image(s)%s"
+msgstr ""
+
+msgid "Study"
+msgstr ""
+
+msgid "Series"
 msgstr ""
 
 msgid "Select the directory from which to recursively upload DICOM files."
diff --git a/client/pycommon/gmI18N.py b/client/pycommon/gmI18N.py
index c1508f2..10c9907 100644
--- a/client/pycommon/gmI18N.py
+++ b/client/pycommon/gmI18N.py
@@ -358,11 +358,11 @@ def __install_domain(domain, prefer_local_catalog, language=u'?'):
 		#    strip one directory level
 		#    this is a rather neat trick :-)
 		loc_dir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..', 'po'))
-		_log.debug('looking above binary install directory [%s]' % loc_dir)
+		_log.debug('looking one level above binary install directory: %s', loc_dir)
 		candidate_PO_dirs.append(loc_dir)
 		# - in path to binary
 		loc_dir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), 'po'))
-		_log.debug('looking in binary install directory [%s]' % loc_dir)
+		_log.debug('looking in binary install directory: %s', loc_dir)
 		candidate_PO_dirs.append(loc_dir)
 
 	# - standard places
@@ -400,8 +400,8 @@ def __install_domain(domain, prefer_local_catalog, language=u'?'):
 
 	# now try to actually install it
 	for candidate_PO_dir in candidate_PO_dirs:
-		_log.debug('trying with (%s, %s, %s)', candidate_PO_dir, language, domain)
-		_log.debug(' -> %s/%s/LC_MESSAGES/%s.mo', candidate_PO_dir, language, domain)
+		_log.debug('trying with (base=%s, %s, domain=%s)', candidate_PO_dir, language, domain)
+		_log.debug(' -> %s.mo', os.path.join(candidate_PO_dir, language, domain))
 		if not os.path.exists(candidate_PO_dir):
 			continue
 		try:
diff --git a/client/pycommon/gmMimeLib.py b/client/pycommon/gmMimeLib.py
index c773ec5..417f853 100644
--- a/client/pycommon/gmMimeLib.py
+++ b/client/pycommon/gmMimeLib.py
@@ -1,6 +1,8 @@
 # -*- coding: utf-8 -*-
 
 """This module encapsulates mime operations.
+
+	http://www.dwheeler.com/essays/open-files-urls.html
 """
 #=======================================================================================
 __author__ = "Karsten Hilbert <Karsten.Hilbert at gmx.net>"
@@ -185,7 +187,8 @@ open_cmds = {
 	'gnome-open': 'gnome-open "%s"',		# GNOME
 	'exo-open': 'exo-open "%s"',
 	'op': 'op "%s"',
-	'open': 'open "%s"'						# MacOSX: "open -a AppName file" (-a allows to override the default app for the file type)
+	'open': 'open "%s"',					# MacOSX: "open -a AppName file" (-a allows to override the default app for the file type)
+	'cmd.exe': 'cmd.exe /c "%s"'			# Windows
 	#'run-mailcap'
 	#'explorer'
 }
@@ -200,7 +203,7 @@ def _get_system_startfile_cmd(filename):
 	if _system_startfile_cmd is not None:
 		return True, _system_startfile_cmd % filename
 
-	open_cmd_candidates = [u'xdg-open', u'kfmclient', u'gnome-open', u'exo-open', u'op', u'open']
+	open_cmd_candidates = open_cmds.keys()
 
 	for candidate in open_cmd_candidates:
 		found, binary = gmShellAPI.detect_external_binary(binary = candidate)
@@ -327,6 +330,7 @@ def call_viewer_on_file(aFile = None, block=None):
 	_log.warning("no viewer found via standard mailcap system")
 	if os.name == "posix":
 		_log.warning("you should add a viewer for this mime type to your mailcap file")
+
 	_log.info("let's see what the OS can do about that")
 
 	# does the file already have an extension ?
@@ -351,21 +355,19 @@ def call_viewer_on_file(aFile = None, block=None):
 
 	try:
 		os.startfile(file_to_display)
+		return True, ''
+	except AttributeError:
+		_log.exception('os.startfile() does not exist on this platform')
 	except:
 		_log.exception('os.startfile(%s) failed', file_to_display)
-		msg = _("Unable to display the file:\n\n"
-				" [%s]\n\n"
-				"Your system does not seem to have a (working)\n"
-				"viewer registered for the file type\n"
-				" [%s]"
-		) % (file_to_display, mime_type)
-		return False, msg
-
-	# don't kill the file from under the (possibly async) viewer
-#	if file_to_display != aFile:
-#		os.remove(file_to_display)
-
-	return True, ''
+
+	msg = _("Unable to display the file:\n\n"
+			" [%s]\n\n"
+			"Your system does not seem to have a (working)\n"
+			"viewer registered for the file type\n"
+			" [%s]"
+	) % (file_to_display, mime_type)
+	return False, msg
 
 #=======================================================================================
 if __name__ == "__main__":
diff --git a/client/pycommon/gmTools.py b/client/pycommon/gmTools.py
index 8c574d1..bbf50cc 100644
--- a/client/pycommon/gmTools.py
+++ b/client/pycommon/gmTools.py
@@ -67,18 +67,19 @@ u_greek_ALPHA = u'\u0391'
 u_greek_alpha = u'\u03b1'
 u_greek_OMEGA = u'\u03A9'
 u_greek_omega = u'\u03c9'
-u_triangular_bullet = u'\u2023'				# triangular bullet  (>)
-u_ellipsis = u'\u2026'						# ...
-u_euro = u'\u20AC'							# EURO sign
-u_numero = u'\u2116'						# No. / # sign
-u_down_left_arrow = u'\u21B5'				# <-'
-u_left_arrow = u'\u2190'					# <--
+u_triangular_bullet = u'\u2023'					# triangular bullet  (>)
+u_ellipsis = u'\u2026'							# ...
+u_euro = u'\u20AC'								# EURO sign
+u_numero = u'\u2116'							# No. / # sign
+u_down_left_arrow = u'\u21B5'					# <-'
+u_left_arrow = u'\u2190'						# <--
 u_up_arrow = u'\u2191'
-u_arrow2right = u'\u2192'					# -->
+u_arrow2right = u'\u2192'						# -->
 u_down_arrow = u'\u2193'
-u_left_arrow_with_tail = u'\u21a2'			# <--<
-u_sum = u'\u2211'							# sigma
-u_almost_equal_to = u'\u2248'				# approximately / nearly / roughly
+u_left_arrow_with_tail = u'\u21a2'				# <--<
+u_arrow2right_until_vertical_bar = u'\u21e5'	# -->|
+u_sum = u'\u2211'								# sigma
+u_almost_equal_to = u'\u2248'					# approximately / nearly / roughly
 u_corresponds_to = u'\u2258'
 u_infinity = u'\u221E'
 u_diameter = u'\u2300'
diff --git a/client/wxGladeWidgets/wxgPACSPluginPnl.py b/client/wxGladeWidgets/wxgPACSPluginPnl.py
index ac24746..a37b589 100644
--- a/client/wxGladeWidgets/wxgPACSPluginPnl.py
+++ b/client/wxGladeWidgets/wxgPACSPluginPnl.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: UTF-8 -*-
 #
-# generated by wxGlade 0.7.0
+# generated by wxGlade 0.7.2
 #
 
 import wx
@@ -39,6 +39,7 @@ class wxgPACSPluginPnl(wx.Panel):
 		self._BTN_upload = wx.Button(self, wx.ID_ANY, _("Upload"), style=wx.BU_EXACTFIT)
 		self._LCTRL_studies = cReportListCtrl(self, wx.ID_ANY, style=wx.BORDER_NONE | wx.LC_REPORT)
 		self._LCTRL_series = cReportListCtrl(self, wx.ID_ANY, style=wx.BORDER_NONE | wx.LC_REPORT)
+		self._TCTRL_details = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.BORDER_NONE | wx.TE_BESTWRAP | wx.TE_MULTILINE | wx.TE_READONLY)
 
 		self.__set_properties()
 		self.__do_layout()
@@ -75,11 +76,15 @@ class wxgPACSPluginPnl(wx.Panel):
 		self._BTN_save_selected_studies.SetToolTipString(_("Save selected studies to disk."))
 		self._BTN_save_selected_studies.Enable(False)
 		self._BTN_upload.SetToolTipString(_("Upload DICOM files from a directory, recursively, into the Orthanc PACS\n\nThe currently active patient does not matter. Orthanc will associate uploaded files with the patient found within the DICOM metadata. It will create new patients as needed."))
+		self._TCTRL_details.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_BACKGROUND))
+		self._TCTRL_details.SetFont(wx.Font(9, wx.MODERN, wx.NORMAL, wx.NORMAL, 0, ""))
 		# end wxGlade
 
 	def __do_layout(self):
 		# begin wxGlade: wxgPACSPluginPnl.__do_layout
 		__szr_main = wx.BoxSizer(wx.VERTICAL)
+		__szr_details = wx.BoxSizer(wx.HORIZONTAL)
+		__szr_studies_series = wx.BoxSizer(wx.VERTICAL)
 		__szr_buttons = wx.BoxSizer(wx.HORIZONTAL)
 		__szr_PACS_details = wx.BoxSizer(wx.HORIZONTAL)
 		__lbl_host = wx.StaticText(self, wx.ID_ANY, _("Host:"))
@@ -111,8 +116,11 @@ class wxgPACSPluginPnl(wx.Panel):
 		__szr_buttons.Add((20, 20), 1, wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 0)
 		__szr_buttons.Add(self._BTN_upload, 0, wx.ALIGN_CENTER_VERTICAL, 0)
 		__szr_main.Add(__szr_buttons, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 3)
-		__szr_main.Add(self._LCTRL_studies, 2, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 3)
-		__szr_main.Add(self._LCTRL_series, 3, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 3)
+		__szr_studies_series.Add(self._LCTRL_studies, 3, wx.EXPAND, 3)
+		__szr_studies_series.Add(self._LCTRL_series, 2, wx.EXPAND | wx.TOP, 3)
+		__szr_details.Add(__szr_studies_series, 1, wx.EXPAND | wx.RIGHT, 5)
+		__szr_details.Add(self._TCTRL_details, 1, wx.EXPAND, 0)
+		__szr_main.Add(__szr_details, 1, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 3)
 		self.SetSizer(__szr_main)
 		__szr_main.Fit(self)
 		self.Layout()
diff --git a/client/wxpython/gmDateTimeInput.py b/client/wxpython/gmDateTimeInput.py
index 183c59b..2a2fda0 100644
--- a/client/wxpython/gmDateTimeInput.py
+++ b/client/wxpython/gmDateTimeInput.py
@@ -354,6 +354,7 @@ class cDateInputPhraseWheel(gmPhraseWheel.cPhraseWheel):
 		)
 		val = gmDateTime.pydt_strftime(date, format = '%Y-%m-%d', accuracy = gmDateTime.acc_days)
 		self.SetText(value = val, data = date, suppress_smarts = True)
+
 	#--------------------------------------------------------
 	# phrasewheel internal API
 	#--------------------------------------------------------
@@ -367,12 +368,14 @@ class cDateInputPhraseWheel(gmPhraseWheel.cPhraseWheel):
 
 		# let the base class do its thing
 		super(cDateInputPhraseWheel, self)._on_lose_focus(event)
+
 	#--------------------------------------------------------
 	def _picklist_item2display_string(self, item=None):
 		data = item['data']
 		if data is not None:
 			return gmDateTime.pydt_strftime(data, format = '%Y-%m-%d', accuracy = gmDateTime.acc_days)
 		return item['field_label']
+
 	#--------------------------------------------------------
 	def _on_key_down(self, event):
 
@@ -384,6 +387,7 @@ class cDateInputPhraseWheel(gmPhraseWheel.cPhraseWheel):
 				return
 
 		super(cDateInputPhraseWheel, self)._on_key_down(event)
+
 	#--------------------------------------------------------
 	def _get_data_tooltip(self):
 		if len(self._data) == 0:
@@ -400,6 +404,7 @@ class cDateInputPhraseWheel(gmPhraseWheel.cPhraseWheel):
 			format = '%A, %d. %B %Y (%x)',
 			accuracy = gmDateTime.acc_days
 		)
+
 	#--------------------------------------------------------
 	# external API
 	#--------------------------------------------------------
@@ -419,6 +424,7 @@ class cDateInputPhraseWheel(gmPhraseWheel.cPhraseWheel):
 			value = u''
 
 		super(self.__class__, self).SetValue(value)
+
 	#--------------------------------------------------------
 	def SetText(self, value=u'', data=None, suppress_smarts=False):
 
@@ -434,18 +440,21 @@ class cDateInputPhraseWheel(gmPhraseWheel.cPhraseWheel):
 				value = gmDateTime.pydt_strftime(data, format = '%Y-%m-%d', accuracy = gmDateTime.acc_days)
 
 		super(self.__class__, self).SetText(value = value, data = data, suppress_smarts = suppress_smarts)
+
 	#--------------------------------------------------------
 	def SetData(self, data=None):
 		if data is None:
 			gmPhraseWheel.cPhraseWheel.SetText(self, u'', None)
 			return
 		self.SetText(data = data)
+
 	#--------------------------------------------------------
 	def GetData(self):
 		if len(self._data) == 0:
 			self._set_data_to_first_match()
 
 		return super(self.__class__, self).GetData()
+
 	#--------------------------------------------------------
 	def is_valid_timestamp(self, allow_empty=True):
 		if len(self._data) > 0:
@@ -475,6 +484,7 @@ class cDateInputPhraseWheel(gmPhraseWheel.cPhraseWheel):
 		self.SetValue(gmDateTime.pydt_strftime(date, format = '%Y-%m-%d', accuracy = gmDateTime.acc_days))#, none_str = u'')
 		self.display_as_valid(True)
 		return True
+
 	#--------------------------------------------------------
 	# properties
 	#--------------------------------------------------------
diff --git a/client/wxpython/gmDocumentWidgets.py b/client/wxpython/gmDocumentWidgets.py
index 3ea3b6c..a94e0ea 100644
--- a/client/wxpython/gmDocumentWidgets.py
+++ b/client/wxpython/gmDocumentWidgets.py
@@ -1,8 +1,13 @@
-"""GNUmed medical document handling widgets.
-"""
-#================================================================
+# -*- coding: utf-8 -*-
+#============================================================
+from __future__ import print_function
+
+__doc__ = """GNUmed medical document handling widgets."""
+
+__license__ = "GPL v2 or later"
 __author__ = "Karsten Hilbert <Karsten.Hilbert at gmx.net>"
 
+#============================================================
 import os.path
 import os
 import sys
@@ -1680,6 +1685,7 @@ class cDocTree(wx.TreeCtrl, gmRegetMixin.cRegetOnPaintMixin, treemixin.Expansion
 #		wx.EVT_MENU(self.__desc_menu, ID, self.__del_doc_desc)
 
 #		self.__desc_menu.AppendSeparator()
+
 	#--------------------------------------------------------
 	def __populate_tree(self):
 
@@ -1802,7 +1808,7 @@ class cDocTree(wx.TreeCtrl, gmRegetMixin.cRegetOnPaintMixin, treemixin.Expansion
 			else:
 				doc_label = _('%s%7s %s:%s (%s)') % (
 					gmTools.bool2subst(doc.has_unreviewed_parts, gmTools.u_writing_hand, u'', u'?'),
-					doc['clin_when'].strftime('%m/%Y'),
+					doc['clin_when'].strftime('%Y-%m'),
 					doc['l10n_type'][:26],
 					gmTools.coalesce(initial = doc['comment'], instead = u'', template_initial = u' %s'),
 					no_parts
@@ -1819,10 +1825,6 @@ class cDocTree(wx.TreeCtrl, gmRegetMixin.cRegetOnPaintMixin, treemixin.Expansion
 
 			# now add parts as child nodes
 			for part in parts:
-#				if part['clinically_relevant']:
-#					rel = ' [%s]' % _('Cave')
-#				else:
-#					rel = ''
 				f_ext = u''
 				if part['filename'] is not None:
 					f_ext = os.path.splitext(part['filename'])[1].strip('.').strip()
@@ -2491,16 +2493,19 @@ class cDocTree(wx.TreeCtrl, gmRegetMixin.cRegetOnPaintMixin, treemixin.Expansion
 				) % {'action': action, 'l10n_action': l10n_action},
 				_('Processing document: %s') % l10n_action
 			)
+
 	#--------------------------------------------------------
-	# FIXME: icons in the plugin toolbar
 	def __print_doc(self, evt):
 		self.__process_doc(action = u'print', l10n_action = _('print'))
+
 	#--------------------------------------------------------
 	def __fax_doc(self, evt):
 		self.__process_doc(action = u'fax', l10n_action = _('fax'))
+
 	#--------------------------------------------------------
 	def __mail_doc(self, evt):
 		self.__process_doc(action = u'mail', l10n_action = _('mail'))
+
 	#--------------------------------------------------------
 	def __add_part(self, evt):
 		dlg = wx.FileDialog (
@@ -2515,6 +2520,7 @@ class cDocTree(wx.TreeCtrl, gmRegetMixin.cRegetOnPaintMixin, treemixin.Expansion
 		if result != wx.ID_CANCEL:
 			self.__curr_node_data.add_parts_from_files(files = dlg.GetPaths(), reviewer = gmStaff.gmCurrentProvider()['pk_staff'])
 		dlg.Destroy()
+
 	#--------------------------------------------------------
 	def __add_part_from_clipboard(self, evt):
 		clip = gmGuiHelpers.clipboard2file()
@@ -2636,7 +2642,7 @@ class cDocTree(wx.TreeCtrl, gmRegetMixin.cRegetOnPaintMixin, treemixin.Expansion
 			enc = emr.active_encounter
 			gmDocuments.delete_document(document_id = self.__curr_node_data['pk_doc'], encounter_id = enc['pk_encounter'])
 
-
+#============================================================
 #============================================================
 # PACS
 #============================================================
@@ -2657,8 +2663,10 @@ class cPACSPluginPnl(wxgPACSPluginPnl, gmRegetMixin.cRegetOnPaintMixin):
 	# internal helpers
 	#--------------------------------------------------------
 	def __init_ui(self):
-		self._LCTRL_studies.set_columns(columns = [_('Study date'), _('Description'), _('Study time'), _('Patient'), _('DOB'), _('Gender')])
-		self._LCTRL_series.set_columns(columns = [_(u'Method'), _(u'Body part'), _('Description'), _('Time'), _('Date')])
+		self._LCTRL_studies.set_columns(columns = [_('Date'), _('Description'), _('Organization'), _('Referrer')])
+
+		self._LCTRL_series.set_columns(columns = [_(u'Time'), _(u'Method'), _(u'Body part'), _(u'Description')])
+		self._LCTRL_series.select_callback = self._on_series_list_item_selected
 
 	#--------------------------------------------------------
 	def __reset_patient_data(self):
@@ -2671,6 +2679,7 @@ class cPACSPluginPnl(wxgPACSPluginPnl, gmRegetMixin.cRegetOnPaintMixin):
 		self._BTN_save_selected_studies.Disable()
 		self._LCTRL_studies.set_string_items(items = [])
 		self._LCTRL_series.set_string_items(items = [])
+		self._TCTRL_details.Value = u''
 		#self.Layout()
 
 	#--------------------------------------------------------
@@ -2770,25 +2779,19 @@ class cPACSPluginPnl(wxgPACSPluginPnl, gmRegetMixin.cRegetOnPaintMixin):
 							study['date'][4:6],
 							study['date'][6:8]
 						),
-						gmTools.coalesce (
-							study['description'],
-							_(u'%s series') % len(study['series']),
-							_(u'%%s (%s series)') % len(study['series'])
+						_(u'%s series%s') % (
+							len(study['series']),
+							gmTools.coalesce(study['description'], u'', u': %s')
 						),
-						u'%s:%s:%s' % (
-							study['time'][:2],
-							study['time'][2:4],
-							study['time'][4:6]
-						),
-						pat['name'],
-						pat['date_of_birth'],
-						pat['gender']
+						gmTools.coalesce(study['radiology_org'], u''),
+						gmTools.coalesce(study['referring_doc'], u'')
 					] )
 					study_list_data.append(study)
 
 		self._LCTRL_studies.set_string_items(items = study_list_items)
 		self._LCTRL_studies.set_column_widths()
 		self._LCTRL_studies.set_data(data = study_list_data)
+		self._LCTRL_studies.SortListItems(col = 0, ascending = 0)
 
 		if len(study_list_items) == 0:
 			self._LBL_no_of_studies.SetLabel(_('no studies'))
@@ -2805,6 +2808,9 @@ class cPACSPluginPnl(wxgPACSPluginPnl, gmRegetMixin.cRegetOnPaintMixin):
 			self._BTN_export_all_studies.Enable()
 			self._BTN_save_selected_studies.Enable()
 
+		self._LCTRL_series.set_string_items(items = [])
+		self._TCTRL_details.Value = u''
+
 		self.Layout()
 		return True
 
@@ -2945,7 +2951,7 @@ class cPACSPluginPnl(wxgPACSPluginPnl, gmRegetMixin.cRegetOnPaintMixin):
 		wx.EndBusyCursor()
 
 	#--------------------------------------------------------
-	def _on_save_selected_studies_button_pressed(self, event):  # wxGlade: wxgPACSPluginPnl.<event_handler>
+	def _on_save_selected_studies_button_pressed(self, event):
 		event.Skip()
 		if self.__pacs is None:
 			return
@@ -3034,41 +3040,65 @@ class cPACSPluginPnl(wxgPACSPluginPnl, gmRegetMixin.cRegetOnPaintMixin):
 		series_list_items = []
 		series_list_data = []
 		for series in study_data['series']:
+
 			series_time = u''
-			if series['time'] is not None:
-				if series['time'] != study_data['time']:
-					series_time = u'%s:%s:%s' % (
-						series['time'][:2],
-						series['time'][2:4],
-						series['time'][4:6]
-					)
-			series_date = u''
-			if series['date'] is not None:
-				if series['date'] != study_data['date']:
-					series_date = u'%s-%s-%s' % (
-						series['date'][:4],
-						series['date'][4:6],
-						series['date'][6:8]
-					)
+			if series['time'] is None:
+				series['time'] = study_data['time']
+			series_time = u'%s:%s:%s' % (
+				series['time'][:2],
+				series['time'][2:4],
+				series['time'][4:6]
+			)
+
+			series_desc = u''
+			if series['description'] is not None:
+				series_desc = series['description'].strip()
+			if series['protocol'] is not None:
+				if len(series_desc) > 0:
+					series_desc += u' [%s]' % (series['protocol'].strip())
+				else:
+					series_desc = series['protocol'].strip()
+			if len(series_desc) > 0:
+				series_desc = u': ' + series_desc
+			series_desc = _(u'%s image(s)%s') % (series['instances'], series_desc)
+
 			series_list_items.append ([
-				u'%s%s%s' % (
-					series['modality'],
-					gmTools.coalesce(series['protocol'], u'', u' [%s]'),
-					gmTools.coalesce(series['station'], u'', u' @ %s')
-				),
-				gmTools.coalesce(series['body_part'], u''),
-				_(u'%s%s images') % (
-					gmTools.coalesce(series['description'], u'', u'%s: '),
-					series['instances']
-				),
 				series_time,
-				series_date
+				gmTools.coalesce(series['modality'], u''),
+				gmTools.coalesce(series['body_part'], u''),
+				series_desc
 			])
 			series_list_data.append(series)
 
 		self._LCTRL_series.set_string_items(items = series_list_items)
 		self._LCTRL_series.set_column_widths()
 		self._LCTRL_series.set_data(data = series_list_data)
+		self._LCTRL_series.SortListItems(col = 0)
+		self._TCTRL_details.Value = u'%s\n%s' % (
+			_(u'Study'),
+			gmTools.format_dict_like(study_data['all_tags'], tabular = True, value_delimiters = None, left_margin = 2)
+		)
+
+	#--------------------------------------------------------
+	def _on_series_list_item_selected(self, event):
+		event.Skip()
+		if self.__pacs is None:
+			return
+
+		study_data = self._LCTRL_studies.get_selected_item_data(only_one = True)
+		if study_data is None:
+			return
+
+		series = self._LCTRL_series.get_selected_item_data(only_one = True)
+		if series is None:
+			return
+
+		self._TCTRL_details.Value = u'%s\n%s\n\n%s\n%s' % (
+			_(u'Study'),
+			gmTools.format_dict_like(study_data['all_tags'], tabular = True, value_delimiters = None, left_margin = 2),
+			_(u'Series'),
+			gmTools.format_dict_like(series['all_tags'], tabular = True, value_delimiters = None, left_margin = 2)
+		)
 
 	#--------------------------------------------------------
 	def _on_modify_orthanc_content_button_pressed(self, event):
diff --git a/client/wxpython/gmEMRStructWidgets.py b/client/wxpython/gmEMRStructWidgets.py
index c72eb55..5dd569a 100644
--- a/client/wxpython/gmEMRStructWidgets.py
+++ b/client/wxpython/gmEMRStructWidgets.py
@@ -24,10 +24,17 @@ import wx
 # GNUmed
 if __name__ == '__main__':
 	sys.path.insert(0, '../../')
+
 from Gnumed.pycommon import gmI18N
+from Gnumed.pycommon import gmDateTime
+
+if __name__ == '__main__':
+	gmI18N.activate_locale()
+	gmI18N.install_domain()
+	gmDateTime.init()
+
 from Gnumed.pycommon import gmExceptions
 from Gnumed.pycommon import gmCfg
-from Gnumed.pycommon import gmDateTime
 from Gnumed.pycommon import gmTools
 from Gnumed.pycommon import gmDispatcher
 from Gnumed.pycommon import gmMatchProvider
@@ -649,7 +656,7 @@ class cHospitalStayPhraseWheel(gmPhraseWheel.cPhraseWheel):
 
 		gmPhraseWheel.cPhraseWheel.__init__ (self, *args, **kwargs)
 
-		ctxt = {'ctxt_pat': {'where_part': u'pk_patient = %(pat)s and', 'placeholder': u'pat'}}
+		ctxt = {'ctxt_pat': {'where_part': u'(pk_patient = %(pat)s) AND', 'placeholder': u'pat'}}
 
 		mp = gmMatchProvider.cMatchProvider_SQL2 (
 			queries = [
@@ -673,15 +680,15 @@ FROM (
 		 FROM
 		 	clin.v_hospital_stays
 		 WHERE
-			%(ctxt_pat)s
-
-			hospital %(fragment_condition)s
-				OR
-			ward %(fragment_condition)s
-				OR
-			episode %(fragment_condition)s
-				OR
-			health_issue %(fragment_condition)s
+			%(ctxt_pat)s (
+				hospital %(fragment_condition)s
+					OR
+				ward %(fragment_condition)s
+					OR
+				episode %(fragment_condition)s
+					OR
+				health_issue %(fragment_condition)s
+			)
 		) AS the_stays
 ) AS distinct_stays
 ORDER BY descr
@@ -2030,6 +2037,12 @@ class cDiagnosticCertaintyClassificationPhraseWheel(gmPhraseWheel.cPhraseWheel):
 #----------------------------------------------------------------
 if __name__ == '__main__':
 
+	if len(sys.argv) < 2:
+		sys.exit()
+
+	if sys.argv[1] != 'test':
+		sys.exit()
+
 	from Gnumed.business import gmPersonSearch
 	from Gnumed.wxpython import gmPatSearchWidgets
 
@@ -2118,18 +2131,12 @@ if __name__ == '__main__':
 		edit_procedure(parent=app.frame)
 	#================================================================
 
-	if (len(sys.argv) > 1) and (sys.argv[1] == 'test'):
-
-		gmI18N.activate_locale()
-		gmI18N.install_domain()
-		gmDateTime.init()
-
-		# obtain patient
-		pat = gmPersonSearch.ask_for_patient()
-		if pat is None:
-			print "No patient. Exiting gracefully..."
-			sys.exit(0)
-		gmPatSearchWidgets.set_active_patient(patient=pat)
+	# obtain patient
+	pat = gmPersonSearch.ask_for_patient()
+	if pat is None:
+		print "No patient. Exiting gracefully..."
+		sys.exit(0)
+	gmPatSearchWidgets.set_active_patient(patient=pat)
 
 #	try:
 		# lauch emr dialogs test application
@@ -2140,11 +2147,9 @@ if __name__ == '__main__':
 		# but re-raise them
 #		raise
 
-		#test_epsiode_edit_area_pnl()
-		#test_episode_edit_area_dialog()
-		#test_health_issue_edit_area_dlg()
-		#test_episode_selection_prw()
-		#test_hospital_stay_prw()
-		test_edit_procedure()
-
-#================================================================
+	#test_epsiode_edit_area_pnl()
+	#test_episode_edit_area_dialog()
+	#test_health_issue_edit_area_dlg()
+	#test_episode_selection_prw()
+	test_hospital_stay_prw()
+	#est_edit_procedure()
diff --git a/client/wxpython/gmExportAreaWidgets.py b/client/wxpython/gmExportAreaWidgets.py
index 70c5ee7..f48076b 100644
--- a/client/wxpython/gmExportAreaWidgets.py
+++ b/client/wxpython/gmExportAreaWidgets.py
@@ -23,6 +23,7 @@ from Gnumed.pycommon import gmMimeLib
 from Gnumed.pycommon import gmDateTime
 from Gnumed.pycommon import gmPrinting
 from Gnumed.pycommon import gmShellAPI
+from Gnumed.pycommon import gmNetworkTools
 
 from Gnumed.business import gmPerson
 from Gnumed.business import gmExportArea
@@ -150,6 +151,7 @@ class cExportAreaPluginPnl(wxgExportAreaPluginPnl.wxgExportAreaPluginPnl, gmRege
 			return
 		for item in items:
 			gmExportArea.delete_export_item(pk_export_item = item['pk_export_item'])
+
 	#--------------------------------------------------------
 	def _on_print_items_button_pressed(self, event):
 		event.Skip()
@@ -175,12 +177,14 @@ class cExportAreaPluginPnl(wxgExportAreaPluginPnl.wxgExportAreaPluginPnl, gmRege
 
 		self.save_soap_note(soap = _('Printed:\n - %s') % u'\n - '.join([ i['description'] for i in items ]))
 		return True
+
 	#--------------------------------------------------------
 	def _on_remote_print_button_pressed(self, event):
 		event.Skip()
 		items = self._LCTRL_items.get_selected_item_data(only_one = False)
 		for item in items:
 			item.is_print_job = True
+
 	#--------------------------------------------------------
 	def _on_save_items_button_pressed(self, event):
 		event.Skip()
@@ -244,12 +248,21 @@ class cExportAreaPluginPnl(wxgExportAreaPluginPnl.wxgExportAreaPluginPnl, gmRege
 			u'\n - '.join([ i['description'] for i in items ])
 		))
 
-		gmGuiHelpers.gm_show_info (
-			title = _('Saving export area documents'),
-			info = _('Saved documents into directory:\n\n %s') % export_dir
-		)
+		title = _('Saving export area documents')
+		msg = _('Saved documents into directory:\n\n %s') % export_dir
+		if include_metadata:
+			browse_index = gmGuiHelpers.gm_show_question (
+				title = title,
+				question = msg + u'\n\n' + _('Browse patient data pack ?'),
+				cancel_button = False
+			)
+			if browse_index:
+				gmNetworkTools.open_url_in_browser(url = u'file://%s' % os.path.join(export_dir, u'index.html'))
+		else:
+			gmGuiHelpers.gm_show_info(title = title, info = msg)
 
 		return True
+
 	#--------------------------------------------------------
 	def _on_burn_items_button_pressed(self, event):
 		event.Skip()
@@ -296,11 +309,22 @@ class cExportAreaPluginPnl(wxgExportAreaPluginPnl.wxgExportAreaPluginPnl, gmRege
 			return False
 
 		self.save_soap_note(soap = _('Burned onto CD/DVD:\n - %s') % u'\n - '.join([ i['description'] for i in items ]))
+
+		browse_index = gmGuiHelpers.gm_show_question (
+			title = title,
+			question = _('Browse patient data pack ?'),
+			cancel_button = False
+		)
+		if browse_index:
+			gmNetworkTools.open_url_in_browser(url = u'file://%s' % os.path.join(export_dir, u'index.html'))
+
 		return True
+
 	#--------------------------------------------------------
-	def _on_archive_items_button_pressed(self, event):  # wxGlade: wxgExportAreaPluginPnl.<event_handler>
+	def _on_archive_items_button_pressed(self, event):
 		print "Event handler '_on_archive_items_button_pressed' not implemented!"
 		event.Skip()
+
 	#--------------------------------------------------------
 	def _on_mail_items_button_pressed(self, event):
 		event.Skip()
@@ -335,6 +359,7 @@ class cExportAreaPluginPnl(wxgExportAreaPluginPnl.wxgExportAreaPluginPnl, gmRege
 
 		self.save_soap_note(soap = _('Mailed:\n - %s') % u'\n - '.join([ i['description'] for i in items ]))
 		return True
+
 	#--------------------------------------------------------
 	def _on_fax_items_button_pressed(self, event):
 		event.Skip()
@@ -381,9 +406,11 @@ class cExportAreaPluginPnl(wxgExportAreaPluginPnl.wxgExportAreaPluginPnl, gmRege
 			u'\n - '.join([ i['description'] for i in items ])
 		))
 		return True
+
 	#--------------------------------------------------------
 	def repopulate_ui(self):
 		self._populate_with_data()
+
 	#--------------------------------------------------------
 	# internal API
 	#--------------------------------------------------------
diff --git a/client/wxpython/gmHabitWidgets.py b/client/wxpython/gmHabitWidgets.py
index 82110b3..1617fda 100644
--- a/client/wxpython/gmHabitWidgets.py
+++ b/client/wxpython/gmHabitWidgets.py
@@ -78,6 +78,9 @@ def manage_substance_abuse(parent=None, patient=None):
 		lctrl.set_data(intakes)
 
 	#------------------------------------------------------------
+	if len(patient.emr.abused_substances) == 0:
+		edit()
+
 	msg = _('Substances abused by the patient:')
 
 	return gmListWidgets.get_choices_from_list (
diff --git a/client/wxpython/gmListWidgets.py b/client/wxpython/gmListWidgets.py
index 579d338..0fd3c16 100644
--- a/client/wxpython/gmListWidgets.py
+++ b/client/wxpython/gmListWidgets.py
@@ -1285,6 +1285,7 @@ class cReportListCtrl(listmixins.ListCtrlAutoWidthMixin, listmixins.ColumnSorter
 		for idx in range(len(columns)):
 			self.InsertColumn(idx, columns[idx])
 
+		listmixins.ColumnSorterMixin.__init__(self, 0)
 		self._invalidate_sorting_metadata()
 
 	#------------------------------------------------------------
diff --git a/client/wxpython/gmMedicationWidgets.py b/client/wxpython/gmMedicationWidgets.py
index 02786b5..5443f18 100644
--- a/client/wxpython/gmMedicationWidgets.py
+++ b/client/wxpython/gmMedicationWidgets.py
@@ -346,6 +346,8 @@ class cSubstanceIntakeEAPnl(wxgCurrentMedicationEAPnl.wxgCurrentMedicationEAPnl,
 		# this we want to adjust later
 		self._PRW_aim.add_callback_on_set_focus(callback = self._on_enter_aim)
 
+		self._DP_discontinued.add_callback_on_selection(callback = self._on_discontinued_date_changed)
+
 	#----------------------------------------------------------------
 	def __refresh_precautions(self):
 
@@ -711,6 +713,7 @@ class cSubstanceIntakeEAPnl(wxgCurrentMedicationEAPnl.wxgCurrentMedicationEAPnl,
 		self._PRW_start_certainty.Enable(True)
 		self._DP_discontinued.SetData(None)
 		self._PRW_discontinue_reason.SetValue(u'')
+		self._PRW_discontinue_reason.Enable(False)
 
 		self.__refresh_drug_details()
 		self.__refresh_precautions()
@@ -1259,6 +1262,7 @@ def update_substance_intake_list_from_prescription(parent=None, prescribed_drugs
 		intake.save()
 
 	return
+
 #------------------------------------------------------------
 class cCurrentSubstancesGrid(wx.grid.Grid):
 	"""A grid class for displaying current substance intake.
@@ -1427,9 +1431,6 @@ class cCurrentSubstancesGrid(wx.grid.Grid):
 				atcs = []
 				if med['atc_substance'] is not None:
 					atcs.append(med['atc_substance'])
-				#if med['atc_brand'] is not None:
-				#	atcs.append(med['atc_brand'])
-				#allg = emr.is_allergic_to(atcs = tuple(atcs), inns = (med['substance'],), brand = med['brand'])
 				allg = emr.is_allergic_to(atcs = tuple(atcs), inns = (med['substance'],))
 				if allg not in [None, False]:
 					attr = self.GetOrCreateCellAttr(row_idx, 0)
@@ -1512,7 +1513,6 @@ class cCurrentSubstancesGrid(wx.grid.Grid):
 				self.SetCellValue(row_idx, 3, gmTools.coalesce(med['schedule'], u''))
 
 				self.SetCellValue(row_idx, 4, med.medically_formatted_start_end)
-#				self.SetCellValue(row_idx, 4, med.medically_formatted_start)
 #
 #				if med['is_long_term']:
 #					self.SetCellValue(row_idx, 5, gmTools.u_infinity)
diff --git a/external-tools/check-prerequisites.sh b/external-tools/check-prerequisites.sh
index bd657e1..f84c2a3 100755
--- a/external-tools/check-prerequisites.sh
+++ b/external-tools/check-prerequisites.sh
@@ -243,17 +243,6 @@ else
 	echo "found"
 fi
 
-echo -n " 'dcmgpdir' command... "
-BIN=`which dcmgpdir`
-if [ "x${BIN}x" == "xx" ]; then
-	echo ""
-	echo "  INFO : You don't seem to have the 'dcmgpdir' command installed."
-	echo "  INFO : It can be used by GNUmed to create DICOMDIR files from"
-	echo "  INFO : a range of DICOM image files."
-else
-	echo "found"
-fi
-
 echo -n " 'dmtxwrite' command... "
 BIN=`which dmtxwrite`
 if [ "x${BIN}x" == "xx" ]; then
@@ -336,16 +325,6 @@ else
 	echo "found"
 fi
 
-echo -n " 'gm-create_dicomdir' command... "
-BIN=`which gm-create_dicomdir`
-if [ "x${BIN}x" == "xx" ]; then
-	echo ""
-	echo "  INFO : You don't seem to have the 'gm-create_dicomdir' command installed."
-	echo "  INFO : It is used to create DICOMDIR files from within GNUmed."
-else
-	echo "found"
-fi
-
 echo -n " 'gm-describe_file' command... "
 BIN=`which gm-describe_file`
 if [ "x${BIN}x" == "xx" ]; then
@@ -366,7 +345,30 @@ else
 	echo "found"
 fi
 
+#=================================================================
 # obsolete
+
+#echo -n " 'gm-create_dicomdir' command... "
+#BIN=`which gm-create_dicomdir`
+#if [ "x${BIN}x" == "xx" ]; then
+#	echo ""
+#	echo "  INFO : You don't seem to have the 'gm-create_dicomdir' command installed."
+#	echo "  INFO : It is used to create DICOMDIR files from within GNUmed."
+#else
+#	echo "found"
+#fi
+
+#echo -n " 'dcmgpdir' command... "
+#BIN=`which dcmgpdir`
+#if [ "x${BIN}x" == "xx" ]; then
+#	echo ""
+#	echo "  INFO : You don't seem to have the 'dcmgpdir' command installed."
+#	echo "  INFO : It can be used by GNUmed to create DICOMDIR files from"
+#	echo "  INFO : a range of DICOM image files."
+#else
+#	echo "found"
+#fi
+
 #echo -n " 'gm-download_data' command... "
 #BIN=`which gm-download_data`
 #if [ "x${BIN}x" == "xx" ]; then
diff --git a/external-tools/gm-describe_file b/external-tools/gm-describe_file
index 8aefc2f..199fa6b 100755
--- a/external-tools/gm-describe_file
+++ b/external-tools/gm-describe_file
@@ -7,19 +7,36 @@ if test -z "${DESCRIPTION_FILE}" ; then
 	DESCRIPTION_FILE="${FILE_2_DESCRIBE}.txt"
 fi
 
+# file
 echo "---- file ----" > ${DESCRIPTION_FILE}
 file "${FILE_2_DESCRIBE}" >> "${DESCRIPTION_FILE}" 2>> "${DESCRIPTION_FILE}"
 echo "" >> "${DESCRIPTION_FILE}"
 
-exiftool -g1 -ee -m -u "${FILE_2_DESCRIBE}" >> "${DESCRIPTION_FILE}" 2>> "${DESCRIPTION_FILE}"
-echo "" >> "${DESCRIPTION_FILE}"
+# exiftool
+BIN=`which exiftool`
+if [ "x${BIN}x" != "xx" ]; then
+	exiftool -g1 -ee -m -u "${FILE_2_DESCRIBE}" >> "${DESCRIPTION_FILE}" 2>> "${DESCRIPTION_FILE}"
+	echo "" >> "${DESCRIPTION_FILE}"
+fi
 
 #echo "---- identify ----" >> "${DESCRIPTION_FILE}"
 # takes a long time on larger images / PDF files
 #identify -verbose "${FILE_2_DESCRIBE}" >> "${DESCRIPTION_FILE}" 2>> "${DESCRIPTION_FILE}"
 #echo "" >> "${DESCRIPTION_FILE}"
 
-echo "---- sfinfo ----" >> "${DESCRIPTION_FILE}"
-sfinfo "${FILE_2_DESCRIBE}" >> "${DESCRIPTION_FILE}" 2>> "${DESCRIPTION_FILE}"
+# ffprobe
+BIN=`which ffprobe`
+if [ "x${BIN}x" != "xx" ]; then
+	echo "---- ffprobe ----" >> "${DESCRIPTION_FILE}"
+	ffprobe -v verbose -hide_banner -pretty "${FILE_2_DESCRIBE}" >> "${DESCRIPTION_FILE}" 2>> "${DESCRIPTION_FILE}"
+	echo "" >> "${DESCRIPTION_FILE}"
+fi
+
+# sfinfo
+BIN=`which sfinfo`
+	if [ "x${BIN}x" != "xx" ]; then
+	echo "---- sfinfo ----" >> "${DESCRIPTION_FILE}"
+	sfinfo "${FILE_2_DESCRIBE}" >> "${DESCRIPTION_FILE}" 2>> "${DESCRIPTION_FILE}"
+fi
 
 exit 0

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/gnumed-client.git



More information about the debian-med-commit mailing list