[med-svn] [Git][med-team/gnumed-server][upstream] New upstream version 22.15

Andreas Tille gitlab at salsa.debian.org
Sun Jan 24 07:34:35 GMT 2021



Andreas Tille pushed to branch upstream at Debian Med / gnumed-server


Commits:
0de59c05 by Andreas Tille at 2021-01-24T08:27:47+01:00
New upstream version 22.15
- - - - -


9 changed files:

- server/bootstrap/fixup_db-v22.conf
- server/bootstrap/update_db-v21_v22.conf
- server/doc/schema/gnumed-entire_schema.html
- server/pycommon/gmCrypto.py
- server/pycommon/gmLog2.py
- server/pycommon/gmMimeLib.py
- + server/sql/v21-v22/fixups/v22-add_generic_covid_vaccine.sql
- + server/sql/v21-v22/fixups/v22-dem-v_message_inbox-fixup.sql
- server/sql/v21-v22/fixups/v22-release_notes-fixup.sql


Changes:

=====================================
server/bootstrap/fixup_db-v22.conf
=====================================
@@ -31,6 +31,8 @@ v22-ref-paperwork_templates-fixups.sql
 v22-invoice_id_grants-fixup.sql
 v22-i18n-lang_funcs-fixup.sql
 v22-clin-v_candidate_diagnoses-fixup.sql
+v22-dem-v_message_inbox-fixup.sql
+v22-add_generic_covid_vaccine.sql
 v22-release_notes-fixup.sql
 $schema$
 


=====================================
server/bootstrap/update_db-v21_v22.conf
=====================================
@@ -163,6 +163,8 @@ v22-ref-paperwork_templates-fixups.sql
 v22-invoice_id_grants-fixup.sql
 v22-i18n-lang_funcs-fixup.sql
 v22-clin-v_candidate_diagnoses-fixup.sql
+v22-dem-v_message_inbox-fixup.sql
+v22-add_generic_covid_vaccine.sql
 v22-release_notes-fixup.sql
 $schema$
 


=====================================
server/doc/schema/gnumed-entire_schema.html
=====================================
@@ -112,7 +112,7 @@
   <body>
 
     <!-- Primary Index -->
-	<p><br><br>Dumped on 2020-11-09</p>
+	<p><br><br>Dumped on 2021-01-23</p>
 <h1><a name="index">Index of database - gnumed_v22</a></h1>
 <ul>
     


=====================================
server/pycommon/gmCrypto.py
=====================================
@@ -543,6 +543,10 @@ def encrypt_directory_content(directory=None, receiver_key_ids=None, passphrase=
 
 	return True
 
+#---------------------------------------------------------------------------
+def pdf_is_encrypted(filename:str=None) -> bool:
+	pass
+
 #===========================================================================
 # main
 #---------------------------------------------------------------------------


=====================================
server/pycommon/gmLog2.py
=====================================
@@ -141,7 +141,11 @@ def log_instance_state(instance):
 	logger = logging.getLogger('gm.logging')
 	logger.debug('state of %s', instance)
 	for attr in [ a for a in dir(instance) if not a.startswith('__') ]:
-		logger.debug('  %s: %s', attr, getattr(instance, attr))
+		try:
+			val = getattr(instance, attr)
+		except AttributeError:
+			val = '<cannot access>'
+		logger.debug('  %s: %s', attr, val)
 
 #===============================================================
 def log_stack_trace(message=None, t=None, v=None, tb=None):
@@ -167,7 +171,11 @@ def log_stack_trace(message=None, t=None, v=None, tb=None):
 	logger.debug('type: %s', t)
 	logger.debug('list of attributes:')
 	for attr in [ a for a in dir(v) if not a.startswith('__') ]:
-		logger.debug('  %s: %s', attr, getattr(v, attr))
+		try:
+			val = getattr(v, attr)
+		except AttributeError:
+			val = '<cannot access>'
+		logger.debug('  %s: %s', attr, val)
 
 	# make sure we don't leave behind a binding
 	# to the traceback as warned against in


=====================================
server/pycommon/gmMimeLib.py
=====================================
@@ -266,6 +266,7 @@ def convert_file(filename=None, target_mime=None, target_filename=None, target_e
 			tmp, converted_ext = os.path.splitext(target_filename)
 	if converted_ext is None:
 		converted_ext = target_extension		# can still stay None
+	converted_ext = gmTools.coalesce(converted_ext, '').strip().lstrip('.')
 	converted_fname = gmTools.get_unique_filename(suffix = converted_ext)
 	_log.debug('attempting conversion: [%s] -> [<%s>:%s]', filename, target_mime, gmTools.coalesce(target_filename, converted_fname))
 	script_name = 'gm-convert_file'
@@ -281,7 +282,7 @@ def convert_file(filename=None, target_mime=None, target_filename=None, target_e
 		binary,
 		filename,
 		target_mime,
-		converted_ext.lstrip('.'),
+		converted_ext,
 		converted_fname
 	]
 	success, returncode, stdout = gmShellAPI.run_process(cmd_line = cmd_line, verbose = True)


=====================================
server/sql/v21-v22/fixups/v22-add_generic_covid_vaccine.sql
=====================================
@@ -0,0 +1,382 @@
+-- ==============================================================
+-- GNUmed database schema change script
+--
+-- License: GPL v2 or later
+-- Author: karsten.hilbert at gmx.net
+--
+-- Add generic CoViD-2019 vaccine.
+--
+-- ==============================================================
+\set ON_ERROR_STOP 1
+--set default_transaction_read_only to off;
+
+-- --------------------------------------------------------------
+-- generic vaccine "substance" (= indications)
+-- --------------------------------------------------------------
+-- in case <sars-cov-2-mrna> already exists: add ATC
+UPDATE ref.substance SET atc = 'J07BX03' WHERE lower(description) = lower('SARS-CoV-2 spike protein mRNA') AND atc IS NULL;
+
+INSERT INTO ref.substance (description, atc)
+	SELECT
+		'SARS-CoV-2 spike protein mRNA',
+		'J07BX03'
+	WHERE NOT EXISTS (
+		SELECT 1 FROM ref.substance WHERE
+			atc = 'J07BX03'
+				AND
+			description = 'SARS-CoV-2 spike protein mRNA'
+	);
+
+-- generic English
+SELECT i18n.upd_tx('en', 'J07BX03-target', 'CoViD-2019');
+-- user language, if any, fails if not set
+SELECT i18n.upd_tx('J07BX03-target', 'CoViD-2019');
+
+-- --------------------------------------------------------------
+-- generic vaccine
+-- --------------------------------------------------------------
+-- need to disable trigger before running
+ALTER TABLE ref.drug_product
+	DISABLE TRIGGER tr_assert_product_has_components
+;
+
+-- --------------------------------------------------------------
+-- in case <generic covid vaccine> exists: add ATC
+UPDATE ref.drug_product SET atc_code = 'J07BX03' WHERE
+	atc_code IS NULL
+		AND
+	description = 'generic covid vaccine'
+		AND
+	preparation = 'vaccine'
+		AND
+	is_fake IS TRUE;
+
+INSERT INTO ref.drug_product (description, preparation, is_fake, atc_code)
+	SELECT
+		'generic covid vaccine',
+		'vaccine',
+		TRUE,
+		'J07BX03'
+	WHERE NOT EXISTS (
+		SELECT 1 FROM ref.drug_product WHERE
+			description = 'generic covid vaccine'
+				AND
+			preparation = 'vaccine'
+				AND
+			is_fake = TRUE
+				AND
+			atc_code = 'J07BX03'
+	);
+
+-- create dose, assumes substance exists
+INSERT INTO ref.dose (fk_substance, amount, unit, dose_unit)
+	SELECT
+		(SELECT pk FROM ref.substance WHERE atc = 'J07BX03' AND description = 'SARS-CoV-2 spike protein mRNA' LIMIT 1),
+		1,
+		'dose',
+		'shot'
+	WHERE NOT EXISTS (
+		SELECT 1 FROM ref.dose WHERE
+			fk_substance = (SELECT pk FROM ref.substance WHERE atc = 'J07BX03' AND description = 'SARS-CoV-2 spike protein mRNA' LIMIT 1)
+				AND
+			amount = 1
+				AND
+			unit = 'dose'
+				AND
+			dose_unit IS NOT DISTINCT FROM 'shot'
+	);
+
+-- link dose to product
+INSERT INTO ref.lnk_dose2drug (fk_dose, fk_drug_product)
+	SELECT
+		(SELECT pk from ref.dose WHERE
+			fk_substance = (SELECT pk FROM ref.substance WHERE atc = 'J07BX03' AND description = 'SARS-CoV-2 spike protein mRNA' LIMIT 1)
+				AND
+			amount = 1
+				AND
+			unit = 'dose'
+				AND
+			dose_unit IS NOT DISTINCT FROM 'shot'
+		),
+		(SELECT pk FROM ref.drug_product WHERE
+			description = 'generic covid vaccine'
+				AND
+			preparation = 'vaccine'
+				AND
+			is_fake = TRUE
+				AND
+			atc_code = 'J07BX03'
+		)
+	WHERE NOT EXISTS (
+		SELECT 1 FROM ref.lnk_dose2drug WHERE
+			fk_dose = (
+				SELECT PK from ref.dose WHERE
+					fk_substance = (SELECT pk FROM ref.substance WHERE atc = 'J07BX03' AND description = 'SARS-CoV-2 spike protein mRNA' LIMIT 1)
+						AND
+					amount = 1
+						AND
+					unit = 'dose'
+						AND
+					dose_unit IS NOT DISTINCT FROM 'shot'
+			)
+				AND
+			fk_drug_product = (
+				SELECT pk FROM ref.drug_product WHERE
+					description = 'generic covid vaccine'
+						AND
+					preparation = 'vaccine'
+						AND
+					is_fake = TRUE
+						AND
+					atc_code = 'J07BX03'
+			)
+	);
+
+-- add vaccine if necessary
+INSERT INTO ref.vaccine (is_live, fk_drug_product)
+	SELECT
+		False,
+		(SELECT pk FROM ref.drug_product WHERE
+			description = 'generic covid vaccine'
+				AND
+			preparation = 'vaccine'
+				AND
+			is_fake = TRUE
+				AND
+			atc_code = 'J07BX03'
+		)
+	WHERE NOT EXISTS (
+		SELECT 1 FROM ref.vaccine WHERE
+			is_live IS False
+				AND
+			fk_drug_product = (
+				SELECT pk FROM ref.drug_product WHERE
+					description = 'generic covid vaccine'
+						AND
+					preparation = 'vaccine'
+						AND
+					is_fake = TRUE
+						AND
+					atc_code = 'J07BX03'
+			)
+	);
+
+-- --------------------------------------------------------------
+-- Comirnaty
+
+-- in case <Comirnaty> exists: add ATC
+UPDATE ref.drug_product SET atc_code = 'J07BX03' WHERE
+	atc_code IS NULL
+		AND
+	description = 'Comirnaty'
+		AND
+	preparation = 'vaccine'
+		AND
+	is_fake IS FALSE;
+
+INSERT INTO ref.drug_product (description, preparation, is_fake, atc_code)
+	SELECT
+		'Comirnaty',
+		'vaccine',
+		FALSE,
+		'J07BX03'
+	WHERE NOT EXISTS (
+		SELECT 1 FROM ref.drug_product WHERE
+			description = 'Comirnaty'
+				AND
+			preparation = 'vaccine'
+				AND
+			is_fake = FALSE
+				AND
+			atc_code = 'J07BX03'
+	);
+
+-- link dose to product
+INSERT INTO ref.lnk_dose2drug (fk_dose, fk_drug_product)
+	SELECT
+		(SELECT pk from ref.dose WHERE
+			fk_substance = (SELECT pk FROM ref.substance WHERE atc = 'J07BX03' AND description = 'SARS-CoV-2 spike protein mRNA' LIMIT 1)
+				AND
+			amount = 1
+				AND
+			unit = 'dose'
+				AND
+			dose_unit IS NOT DISTINCT FROM 'shot'
+		),
+		(SELECT pk FROM ref.drug_product WHERE
+			description = 'Comirnaty'
+				AND
+			preparation = 'vaccine'
+				AND
+			is_fake = FALSE
+				AND
+			atc_code = 'J07BX03'
+		)
+	WHERE NOT EXISTS (
+		SELECT 1 FROM ref.lnk_dose2drug WHERE
+			fk_dose = (
+				SELECT PK from ref.dose WHERE
+					fk_substance = (SELECT pk FROM ref.substance WHERE atc = 'J07BX03' AND description = 'SARS-CoV-2 spike protein mRNA' LIMIT 1)
+						AND
+					amount = 1
+						AND
+					unit = 'dose'
+						AND
+					dose_unit IS NOT DISTINCT FROM 'shot'
+			)
+				AND
+			fk_drug_product = (
+				SELECT pk FROM ref.drug_product WHERE
+					description = 'Comirnaty'
+						AND
+					preparation = 'vaccine'
+						AND
+					is_fake = FALSE
+						AND
+					atc_code = 'J07BX03'
+			)
+	);
+
+-- add vaccine if necessary
+INSERT INTO ref.vaccine (is_live, fk_drug_product)
+	SELECT
+		False,
+		(SELECT pk FROM ref.drug_product WHERE
+			description = 'Comirnaty'
+				AND
+			preparation = 'vaccine'
+				AND
+			is_fake = FALSE
+				AND
+			atc_code = 'J07BX03'
+		)
+	WHERE NOT EXISTS (
+		SELECT 1 FROM ref.vaccine WHERE
+			is_live IS False
+				AND
+			fk_drug_product = (
+				SELECT pk FROM ref.drug_product WHERE
+					description = 'Comirnaty'
+						AND
+					preparation = 'vaccine'
+						AND
+					is_fake = FALSE
+						AND
+					atc_code = 'J07BX03'
+			)
+	);
+
+-- --------------------------------------------------------------
+-- mRNA-1273-Moderna
+
+-- in case <mRNA-1273-Moderna> exists: add ATC
+UPDATE ref.drug_product SET atc_code = 'J07BX03' WHERE
+	atc_code IS NULL
+		AND
+	description = 'mRNA-1273-Moderna'
+		AND
+	preparation = 'vaccine'
+		AND
+	is_fake IS FALSE;
+
+INSERT INTO ref.drug_product (description, preparation, is_fake, atc_code)
+	SELECT
+		'mRNA-1273-Moderna',
+		'vaccine',
+		FALSE,
+		'J07BX03'
+	WHERE NOT EXISTS (
+		SELECT 1 FROM ref.drug_product WHERE
+			description = 'mRNA-1273-Moderna'
+				AND
+			preparation = 'vaccine'
+				AND
+			is_fake = FALSE
+				AND
+			atc_code = 'J07BX03'
+	);
+
+-- link dose to product
+INSERT INTO ref.lnk_dose2drug (fk_dose, fk_drug_product)
+	SELECT
+		(SELECT pk from ref.dose WHERE
+			fk_substance = (SELECT pk FROM ref.substance WHERE atc = 'J07BX03' AND description = 'SARS-CoV-2 spike protein mRNA' LIMIT 1)
+				AND
+			amount = 1
+				AND
+			unit = 'dose'
+				AND
+			dose_unit IS NOT DISTINCT FROM 'shot'
+		),
+		(SELECT pk FROM ref.drug_product WHERE
+			description = 'mRNA-1273-Moderna'
+				AND
+			preparation = 'vaccine'
+				AND
+			is_fake = FALSE
+				AND
+			atc_code = 'J07BX03'
+		)
+	WHERE NOT EXISTS (
+		SELECT 1 FROM ref.lnk_dose2drug WHERE
+			fk_dose = (
+				SELECT PK from ref.dose WHERE
+					fk_substance = (SELECT pk FROM ref.substance WHERE atc = 'J07BX03' AND description = 'SARS-CoV-2 spike protein mRNA' LIMIT 1)
+						AND
+					amount = 1
+						AND
+					unit = 'dose'
+						AND
+					dose_unit IS NOT DISTINCT FROM 'shot'
+			)
+				AND
+			fk_drug_product = (
+				SELECT pk FROM ref.drug_product WHERE
+					description = 'mRNA-1273-Moderna'
+						AND
+					preparation = 'vaccine'
+						AND
+					is_fake = FALSE
+						AND
+					atc_code = 'J07BX03'
+			)
+	);
+
+-- add vaccine if necessary
+INSERT INTO ref.vaccine (is_live, fk_drug_product)
+	SELECT
+		False,
+		(SELECT pk FROM ref.drug_product WHERE
+			description = 'mRNA-1273-Moderna'
+				AND
+			preparation = 'vaccine'
+				AND
+			is_fake = FALSE
+				AND
+			atc_code = 'J07BX03'
+		)
+	WHERE NOT EXISTS (
+		SELECT 1 FROM ref.vaccine WHERE
+			is_live IS False
+				AND
+			fk_drug_product = (
+				SELECT pk FROM ref.drug_product WHERE
+					description = 'mRNA-1273-Moderna'
+						AND
+					preparation = 'vaccine'
+						AND
+					is_fake = FALSE
+						AND
+					atc_code = 'J07BX03'
+			)
+	);
+
+-- --------------------------------------------------------------
+-- want to re-enable trigger as now all inserted
+-- vaccines satisfy the conditions
+ALTER TABLE ref.drug_product
+	ENABLE TRIGGER tr_assert_product_has_components
+;
+
+-- --------------------------------------------------------------
+select gm.log_script_insertion('v22-add_generic_covid_vaccine.sql', '22.5');


=====================================
server/sql/v21-v22/fixups/v22-dem-v_message_inbox-fixup.sql
=====================================
@@ -0,0 +1,253 @@
+-- ==============================================================
+-- GNUmed database schema change script
+--
+-- License: GPL v2 or later
+-- Author: karsten.hilbert at gmx.net
+--
+-- ==============================================================
+\set ON_ERROR_STOP 1
+--set default_transaction_read_only to off;
+
+-- --------------------------------------------------------------
+drop view if exists dem.v_message_inbox cascade;
+
+
+create view dem.v_message_inbox as
+
+SELECT
+	all_msgs.*,
+	d_n.lastnames,
+	d_n.firstnames,
+	d_n.preferred
+		AS preferred_name,
+	d_n.comment
+		AS comment_name,
+	d_i.gender,
+	_(d_i.gender)
+		AS l10n_gender,
+	date_trunc('day'::text, d_i.dob) + COALESCE(d_i.tob, d_i.dob::time without time zone)::interval
+		AS dob,
+	d_i.deceased,
+	d_i.title,
+	d_i.comment
+		AS comment_identity
+FROM (
+
+	select
+		mi.modified_when
+			as received_when,
+		coalesce (
+			(select short_alias from dem.staff where db_user = mi.modified_by),
+			'<' || mi.modified_by || '>'
+		)
+			as modified_by,
+		(select short_alias from dem.staff where dem.staff.pk = mi.fk_staff)
+			as provider,
+		mi.importance,
+		vit.category,
+		vit.l10n_category,
+		vit.type,
+		vit.l10n_type,
+		mi.comment,
+		mi.ufk_context
+			as pk_context,
+		mi.data
+			as data,
+		mi.pk
+			as pk_inbox_message,
+		mi.fk_staff
+			as pk_staff,
+		vit.pk_category,
+		mi.fk_inbox_item_type
+			as pk_type,
+		mi.fk_patient
+			as pk_patient,
+		false
+			as is_virtual,
+		mi.due_date
+			as due_date,
+		mi.expiry_date
+			as expiry_date,
+		case
+			when due_date is null then false
+			 when due_date > now() then false
+			  when expiry_date is null then true
+			   when expiry_date < now() then false
+			else true
+		end
+			as is_overdue,
+		case
+			when expiry_date is null then false
+			 when expiry_date > now() then false
+			else true
+		end
+			as is_expired,
+		case
+			when due_date is null then null
+			 when due_date > now() then due_date - now()
+			else now() - due_date
+		end
+			as interval_due,
+		gm.xid2int(mi.xmin)
+			as xmin_message_inbox
+	from
+		dem.message_inbox mi,
+		dem.v_inbox_item_type vit
+	where
+		mi.fk_inbox_item_type = vit.pk_type
+
+UNION ALL
+
+	select * from blobs.v_unreviewed_docs_inbox
+
+UNION ALL (
+
+	select
+		now() as received_when,
+		vtr.modified_by as modified_by,
+		(select short_alias from dem.staff where dem.staff.pk = vtr.pk_intended_reviewer)
+			as provider,
+		1	as importance,
+		'clinical'
+			as category,
+		_('clinical')
+			as l10n_category,
+		'review results'
+			as type,
+		_('review results')
+			as l10n_type,
+		(select _('unreviewed (abnormal) results for patient') || ' ['
+			|| dn.lastnames || ', '
+			|| dn.firstnames || ']'
+		 from dem.names dn
+		 where
+		 	dn.id_identity = vtr.pk_patient
+		 		and
+		 	dn.active is True
+		)
+			as comment,
+		NULL::integer[]
+			as pk_context,
+		NULL::text
+			as data,
+		NULL::integer
+			as pk_inbox_message,
+		vtr.pk_intended_reviewer
+			as pk_staff,
+		(select pk_category from dem.v_inbox_item_type where type = 'review results')
+			as pk_category,
+		(select pk_type from dem.v_inbox_item_type where type = 'review results')
+			as pk_type,
+		vtr.pk_patient as pk_patient,
+		true
+			as is_virtual,
+		now()::timestamp with time zone - '1 hour'::interval
+			as due_date,
+		NULL::timestamp with time zone
+			as expiry_date,
+		TRUE::boolean
+			as is_overdue,
+		FALSE::boolean
+			as is_expired,
+		'1 hour'::interval
+			as interval_due,
+		NULL::integer
+			as xmin_message_inbox
+	from
+		clin.v_test_results vtr
+	where
+		reviewed is false
+			and
+		(
+			(is_technically_abnormal is true)
+				or
+			((is_technically_abnormal is null) and (abnormality_indicator is not null))
+		)
+
+	UNION
+
+	select
+		now() as received_when,
+		vtr.modified_by as modified_by,
+		(select short_alias from dem.staff where dem.staff.pk = vtr.pk_intended_reviewer)
+			as provider,
+		0	as importance,
+		'clinical'
+			as category,
+		_('clinical')
+			as l10n_category,
+		'review results'
+			as type,
+		_('review results')
+			as l10n_type,
+		(select _('unreviewed (normal) results for patient') || ' ['
+			|| dn.lastnames || ', '
+			|| dn.firstnames || ']'
+		 from dem.names dn
+		 where
+		 	dn.id_identity = vtr.pk_patient
+		 		and
+		 	dn.active is True
+		)
+			as comment,
+		NULL::integer[]
+			as pk_context,
+		NULL::text
+			as data,
+		NULL::integer
+			as pk_inbox_message,
+		vtr.pk_intended_reviewer
+			as pk_staff,
+		(select pk_category from dem.v_inbox_item_type where type = 'review results')
+			as pk_category,
+		(select pk_type from dem.v_inbox_item_type where type = 'review results')
+			as pk_type,
+		vtr.pk_patient as pk_patient,
+		true
+			as is_virtual,
+		now()::timestamp with time zone - '1 hour'::interval
+			as due_date,
+		NULL::timestamp with time zone
+			as expiry_date,
+		TRUE::boolean
+			as is_overdue,
+		FALSE::boolean
+			as is_expired,
+		'1 hour'::interval
+			as interval_due,
+		NULL::integer
+			as xmin_message_inbox
+	from
+		clin.v_test_results vtr
+	where
+		reviewed is false
+			and
+		(
+			(is_technically_abnormal is false)
+				or
+			((is_technically_abnormal is null) and (abnormality_indicator is null))
+		)
+	)
+
+) AS all_msgs
+
+	LEFT OUTER JOIN dem.identity d_i ON (all_msgs.pk_patient = d_i.pk)
+		LEFT OUTER JOIN dem.names d_n ON (d_i.pk = d_n.id_identity)
+
+WHERE
+	-- name must be active=True or active=None (no patient)
+	-- do _not_ include active=False as that would produce
+	-- duplicates when there are several names for a patient
+	d_n.active IS DISTINCT FROM FALSE
+;
+
+
+comment on view dem.v_message_inbox is
+'Denormalized messages for the providers and/or patients.
+Using UNION makes sure we get the right level of uniqueness.';
+
+
+grant select on dem.v_message_inbox to group "gm-doctors";
+
+-- ==============================================================
+select gm.log_script_insertion('v22-dem-v_message_inbox-fixup.sql', '22.5');


=====================================
server/sql/v21-v22/fixups/v22-release_notes-fixup.sql
=====================================
@@ -17,22 +17,22 @@ INSERT INTO dem.message_inbox (
 ) VALUES (
 	(select pk from dem.staff where db_user = 'any-doc'),
 	(select pk_type from dem.v_inbox_item_type where type = 'memo' and category = 'administrative'),
-	'Release Notes for GNUmed 1.8.4 (database v22.14)',
-	'GNUmed 1.8.4 Release Notes:
+	'Release Notes for GNUmed 1.8.5 (database v22.15)',
+	'GNUmed 1.8.5 Release Notes:
 
-	1.8.4
+	1.8.5
 
-IMPROVED: exceptions: always include exception/traceback in mail
-IMPROVED: PACS: robustify DICOM upload
+FIX: image conversion w/o target extension [thanks ...]
+FIX: SVG icon [thanks freddii]
+FIX: lab: tab "most-recent": [x]ing "show missing" throws exception
+FIX: log: exception on inaccessible attributes
 
-FIX: placeholders: exception on parsing some option styles
-FIX: address: nominatim.openstreetmap.org API has changed
-FIX: documents: properly wipe details display between patients
+NEW: add CoVid-2019 vaccines
 
-	22.14
+	22.15
 
-FIX: bootstrapper exception calling capture_conn_state()
+FIX: message inbox view
 ');
 
 -- --------------------------------------------------------------
-select gm.log_script_insertion('v22-release_notes-fixup.sql', '22.14 at 1.8.4');
+select gm.log_script_insertion('v22-release_notes-fixup.sql', '22.15 at 1.8.5');



View it on GitLab: https://salsa.debian.org/med-team/gnumed-server/-/commit/0de59c055f0d7391ccfc0447c147edf1c46d2930

-- 
View it on GitLab: https://salsa.debian.org/med-team/gnumed-server/-/commit/0de59c055f0d7391ccfc0447c147edf1c46d2930
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20210124/a5016283/attachment-0001.html>


More information about the debian-med-commit mailing list