Dumped on 2024-11-22
table for referrals to defined individuals
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone | NOT NULL DEFAULT now() | |
clin.encounter.pk | fk_encounter | integer | NOT NULL |
clin.episode.pk | fk_episode | integer | NOT NULL |
narrative | text |
inherited from clin.clin_root_item; stores text of referral letter |
|
soap_cat | text | ||
id | serial | PRIMARY KEY | |
dem.identity.pk | fk_referee | integer |
NOT NULL
person to whom the referral is directed |
clin.form_instances.pk | fk_form | integer |
NOT NULL
foreign key to the form instance of this referral. |
Table au.referral Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
this table holds all the fields needed for auditing
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | serial | PRIMARY KEY | |
row_version | integer |
NOT NULL
the version of the row; mainly just a count |
|
modified_when | timestamp with time zone |
NOT NULL
DEFAULT now()
when has this row been committed (created/modified) |
|
modified_by | name |
NOT NULL
DEFAULT "current_user"()
by whom has this row been committed (created/modified) |
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Each table that needs standard auditing must have a log table inheriting from this table. Log tables have the same name with a prepended "log_". However, log_* tables shall not have constraints.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | serial | PRIMARY KEY | |
orig_version | integer |
NOT NULL
the version of this row in the original table previous to the modification |
|
orig_when | timestamp with time zone |
NOT NULL
previous modification date in the original table |
|
orig_by | name |
NOT NULL
who committed the row to the original table |
|
orig_tableoid | oid |
NOT NULL
the table oid of the original table, use this to identify the source table |
|
audit_action | text |
NOT NULL
either "update" or "delete" |
|
audit_when | timestamp with time zone |
NOT NULL
DEFAULT now()
when committed to this table for auditing |
|
audit_by | name |
NOT NULL
DEFAULT "current_user"()
committed to this table for auditing by whom |
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
All tables that need standard auditing must be recorded in this table. Audit triggers will be generated automatically for all tables recorded here.
F-Key | Name | Type | Description |
---|---|---|---|
id | serial | PRIMARY KEY | |
schema | name | UNIQUE#1 NOT NULL DEFAULT 'public'::name | |
table_name | name | UNIQUE#1 NOT NULL |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
user_action | text |
Table audit.log_access_log Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
id_street | integer | ||
aux_street | text | ||
number | text | ||
subunit | text | ||
addendum | text | ||
lat_lon | point |
Table audit.log_address Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
pk | integer | ||
substance | text | ||
substance_code | text | ||
generics | text | ||
allergene | text | ||
atc_code | text | ||
fk_type | integer | ||
generic_specific | boolean | ||
definite | boolean |
Table audit.log_allergy Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
has_allergy | integer | ||
comment | text | ||
last_confirmed | timestamp with time zone | ||
fk_encounter | integer |
Table audit.log_allergy_state Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
query | text | ||
title | text | ||
hint | text | ||
url | text | ||
is_active | boolean | ||
source | text | ||
lang | text | ||
recommendation_query | text |
Table audit.log_auto_hint Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
code | text | ||
kurzform | text | ||
name | text |
Table audit.log_beh_fall_typ Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
invoice_id | text | ||
close_date | timestamp with time zone | ||
apply_vat | boolean | ||
fk_receiver_identity | integer | ||
fk_receiver_address | integer | ||
fk_doc | integer | ||
comment | text |
Table audit.log_bill Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_provider | integer | ||
fk_encounter | integer | ||
date_to_bill | date | ||
description | text | ||
net_amount_per_unit | numeric | ||
currency | text | ||
status | text | ||
fk_billable | integer | ||
fk_bill | integer | ||
unit_count | integer | ||
amount_multiplier | numeric |
Table audit.log_bill_item Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
pk_coding_system | integer | ||
code | text | ||
term | text | ||
fk_data_source | integer | ||
comment | text | ||
pk | integer | ||
amount | numeric | ||
currency | text | ||
vat_multiplier | numeric | ||
active | boolean | ||
discountable | boolean |
Table audit.log_billable Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
description | text | ||
preparation | text | ||
atc_code | text | ||
is_fake | boolean | ||
fk_data_source | integer | ||
external_code | text | ||
external_code_type | text |
Table audit.log_branded_drug Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
pk | integer |
Table audit.log_clin_aux_note Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_narrative | integer | ||
laterality | bpchar | ||
is_chronic | boolean | ||
is_active | boolean | ||
is_definite | boolean | ||
clinically_relevant | boolean |
Table audit.log_clin_diag Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
type | text | ||
code | text |
Table audit.log_clin_item_type Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
pk | integer |
Table audit.log_clin_narrative Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
description | text | ||
atc_code | text | ||
amount | numeric | ||
unit | text |
Table audit.log_consumable_substance Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
description | text | ||
atc_code | text |
Table audit.log_consumed_substance Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
name_short | text | ||
name_long | text | ||
version | text | ||
description | text | ||
source | text | ||
lang | text |
Table audit.log_data_source Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_doc | integer | ||
text | text |
Table audit.log_doc_desc Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_encounter | integer | ||
fk_episode | integer | ||
fk_type | integer | ||
comment | text | ||
clin_when | timestamp with time zone | ||
ext_ref | text | ||
fk_org_unit | integer |
Table audit.log_doc_med Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_patient | integer | ||
fk_type | integer | ||
fk_location | integer | ||
source_time_zone | interval | ||
reason_for_encounter | text | ||
assessment_of_encounter | text | ||
started | timestamp with time zone | ||
last_affirmed | timestamp with time zone |
Table audit.log_encounter Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_health_issue | integer | ||
description | text | ||
is_open | boolean | ||
fk_encounter | integer | ||
diagnostic_certainty_classification | text | ||
summary | text |
Table audit.log_episode Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_encounter | integer | ||
fk_health_issue | integer | ||
issue | text | ||
fk_org_unit | integer | ||
provider | text | ||
comment | text |
Table audit.log_external_care Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
pk | integer | ||
fk_relation_type | integer | ||
age_noted | text | ||
age_of_death | interval | ||
contributed_to_death | boolean | ||
name_relative | text | ||
dob_relative | timestamp with time zone | ||
comment | text |
Table audit.log_family_history Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
description | text | ||
is_genetic | boolean |
Table audit.log_fhx_relation_type Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_instance | integer | ||
fk_form_field | integer | ||
value | text |
Table audit.log_form_data Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
pk | integer | ||
fk_form_def | integer | ||
form_name | text |
Table audit.log_form_instances Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
tag | text | ||
label | text | ||
sort_weight | integer | ||
comment | text |
Table audit.log_gender_label Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
description | text | ||
laterality | character varying | ||
age_noted | interval | ||
is_active | boolean | ||
clinically_relevant | boolean | ||
is_confidential | boolean | ||
is_cause_of_death | boolean | ||
fk_encounter | integer | ||
grouping | text | ||
diagnostic_certainty_classification | text | ||
summary | text |
Table audit.log_health_issue Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
pk | integer | ||
discharge | timestamp with time zone | ||
fk_org_unit | integer |
Table audit.log_hospital_stay Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_narrative_condition | integer | ||
fk_relative | integer | ||
name_relative | text | ||
dob_relative | timestamp with time zone | ||
condition | text | ||
age_noted | text | ||
age_of_death | interval | ||
is_cause_of_death | boolean |
Table audit.log_hx_family_item Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
deleted | boolean | ||
gender | text | ||
dob | timestamp with time zone | ||
fk_marital_status | integer | ||
cob | bpchar | ||
deceased | timestamp with time zone | ||
title | text | ||
tob | time without time zone | ||
emergency_contact | text | ||
fk_emergency_contact | integer | ||
comment | text | ||
fk_primary_provider | integer | ||
dob_is_estimated | boolean |
Table audit.log_identity Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_identity | integer | ||
fk_tag | integer | ||
comment | text |
Table audit.log_identity_tag Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
description | text | ||
is_user | boolean |
Table audit.log_inbox_item_category Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_inbox_item_category | integer | ||
description | text | ||
is_user | boolean |
Table audit.log_inbox_item_type Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_patient_candidates | integer[] | ||
request_id | text | ||
firstnames | text | ||
lastnames | text | ||
dob | date | ||
postcode | text | ||
other_info | text | ||
type | text | ||
data | bytea | ||
gender | text | ||
requestor | text | ||
external_data_id | text | ||
fk_identity_disambiguated | integer |
Table audit.log_incoming_data_unmatchable Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_patient_candidates | integer[] | ||
request_id | text | ||
firstnames | text | ||
lastnames | text | ||
dob | date | ||
postcode | text | ||
other_info | text | ||
type | text | ||
data | bytea | ||
gender | text | ||
requestor | text | ||
external_data_id | text | ||
fk_identity_disambiguated | integer | ||
comment | text | ||
fk_provider_disambiguated | integer |
Table audit.log_incoming_data_unmatched Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
pk | integer | ||
fk_test_org | integer | ||
request_id | text | ||
fk_requestor | integer | ||
lab_request_id | text | ||
lab_rxd_when | timestamp with time zone | ||
results_reported_when | timestamp with time zone | ||
request_status | text | ||
is_pending | boolean | ||
diagnostic_service_section | text | ||
ordered_service | text | ||
note_test_org | text |
Table audit.log_lab_request Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
id_test | integer |
Table audit.log_lab_test_gnr Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_lnk_code2item | integer | ||
fk_generic_code | integer | ||
fk_item | integer | ||
code_modifier | text | ||
pk | integer |
Table audit.log_lnk_code2aoe Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_lnk_code2item | integer | ||
fk_generic_code | integer | ||
fk_item | integer | ||
code_modifier | text | ||
pk | integer |
Table audit.log_lnk_code2episode Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_lnk_code2item | integer | ||
fk_generic_code | integer | ||
fk_item | integer | ||
code_modifier | text | ||
pk | integer |
Table audit.log_lnk_code2fhx Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_lnk_code2item | integer | ||
fk_generic_code | integer | ||
fk_item | integer | ||
code_modifier | text | ||
pk | integer |
Table audit.log_lnk_code2h_issue Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_lnk_code2item | integer | ||
fk_generic_code | integer | ||
fk_item | integer | ||
code_modifier | text | ||
pk | integer |
Table audit.log_lnk_code2narrative Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_lnk_code2item | integer | ||
fk_generic_code | integer | ||
fk_item | integer | ||
code_modifier | text | ||
pk | integer |
Table audit.log_lnk_code2procedure Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_lnk_code2item | integer | ||
fk_generic_code | integer | ||
fk_item | integer | ||
code_modifier | text | ||
pk | integer |
Table audit.log_lnk_code2rfe Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_lnk_code2item | integer | ||
fk_generic_code | integer | ||
fk_item | integer | ||
code_modifier | text | ||
pk | integer |
Table audit.log_lnk_code2tst_pnl Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_vaccination_course | integer | ||
fk_constraint | integer |
Table audit.log_lnk_constraint2vacc_course Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
id_identity | integer | ||
external_id | text | ||
fk_origin | integer | ||
comment | text |
Table audit.log_lnk_identity2ext_id Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
pk | integer | ||
fk_identity | integer | ||
fk_primary_doc | integer |
Table audit.log_lnk_identity2primary_doc Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_identity | integer | ||
fk_occupation | integer | ||
activities | text |
Table audit.log_lnk_job2person Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_org_unit | integer | ||
url | text | ||
fk_type | integer | ||
is_confidential | boolean | ||
comment | text |
Table audit.log_lnk_org_unit2comm Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_org_unit | integer | ||
external_id | text | ||
fk_type | integer | ||
comment | text |
Table audit.log_lnk_org_unit2ext_id Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_patient | integer | ||
fk_course | integer |
Table audit.log_lnk_pat2vaccination_course Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
id_identity | integer | ||
id_relative | integer | ||
id_relation_type | integer | ||
started | date | ||
ended | date |
Table audit.log_lnk_person2relative Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_brand | integer | ||
fk_substance | integer |
Table audit.log_lnk_substance2brand Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
id_test | integer | ||
id_norm | integer |
Table audit.log_lnk_tst2norm Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_type | integer | ||
fk_item | integer |
Table audit.log_lnk_type2item Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_course | integer | ||
fk_schedule | integer |
Table audit.log_lnk_vaccination_course2schedule Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
fk_vaccine | integer | ||
fk_indication | integer |
Table audit.log_lnk_vaccine2inds Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_staff | integer | ||
fk_inbox_item_type | integer | ||
comment | text | ||
data | text | ||
importance | smallint | ||
fk_patient | integer | ||
ufk_context | integer[] | ||
due_date | date | ||
expiry_date | date |
Table audit.log_message_inbox Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
name | text |
Table audit.log_occupation Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_health_issue | integer | ||
fk_encounter | integer | ||
clin_where | text | ||
comment | text |
Table audit.log_operation Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
description | text | ||
fk_category | integer | ||
fk_data_source | integer |
Table audit.log_org Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
description | text | ||
fk_org | integer | ||
fk_address | integer | ||
fk_category | integer |
Table audit.log_org_unit Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_template_type | integer | ||
instance_type | text | ||
name_short | text | ||
name_long | text | ||
external_version | text | ||
gnumed_revision | double precision | ||
engine | text | ||
in_use | boolean | ||
filename | text | ||
data | bytea | ||
edit_after_substitution | boolean |
Table audit.log_paperwork_templates Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_identity | integer | ||
edc | date |
Table audit.log_patient Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_fall | integer | ||
paid_amount | numeric | ||
paid_when | date | ||
paid_with | integer |
Table audit.log_prax_geb_paid Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_org_unit | integer |
Table audit.log_praxis_branch Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
pk | integer | ||
clin_where | text | ||
fk_hospital_stay | integer | ||
clin_end | timestamp with time zone | ||
is_ongoing | boolean | ||
fk_org_unit | integer |
Table audit.log_procedure Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
id | integer | ||
fk_referee | integer | ||
fk_form | integer |
Table audit.log_referral Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
code | text | ||
country | bpchar | ||
name | text |
Table audit.log_region Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
inverse | integer | ||
biological | boolean | ||
biol_verified | boolean | ||
description | text |
Table audit.log_relation_types Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
label | text | ||
cmd | text |
Table audit.log_report_query Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_identity | integer | ||
db_user | name | ||
short_alias | text | ||
comment | text | ||
is_active | boolean |
Table audit.log_staff Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
id_urb | integer | ||
name | text | ||
postcode | text | ||
suburb | text | ||
lat_lon | point |
Table audit.log_street Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_brand | integer | ||
description | text | ||
atc_code | text |
Table audit.log_substance_in_brand Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
pk | integer | ||
fk_substance | integer | ||
preparation | text | ||
schedule | text | ||
aim | text | ||
duration | interval | ||
intake_is_approved_of | boolean | ||
is_long_term | boolean | ||
discontinued | timestamp with time zone | ||
discontinue_reason | text | ||
fk_drug_component | integer | ||
comment_on_start | text | ||
harmful_use_type | integer |
Table audit.log_substance_intake Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_encounter | integer | ||
fk_hint | integer | ||
suppressed_by | name | ||
suppressed_when | timestamp with time zone | ||
rationale | text | ||
md5_sum | text |
Table audit.log_suppressed_hint Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
description | text | ||
filename | text | ||
image | bytea |
Table audit.log_tag_image Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_org_unit | integer | ||
fk_adm_contact | integer | ||
fk_med_contact | integer | ||
comment | text | ||
contact | text |
Table audit.log_test_org Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
description | text | ||
comment | text | ||
fk_test_types | integer[] |
Table audit.log_test_panel Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
pk | integer | ||
fk_type | integer | ||
val_num | numeric | ||
val_alpha | text | ||
val_unit | text | ||
val_normal_min | numeric | ||
val_normal_max | numeric | ||
val_normal_range | text | ||
val_target_min | numeric | ||
val_target_max | numeric | ||
val_target_range | text | ||
abnormality_indicator | text | ||
norm_ref_group | text | ||
note_test_org | text | ||
material | text | ||
material_detail | text | ||
fk_intended_reviewer | integer | ||
fk_request | integer | ||
status | text | ||
source_data | text | ||
val_grouping | text |
Table audit.log_test_result Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_test_org | integer | ||
name | text | ||
comment | text | ||
reference_unit | text | ||
loinc | text | ||
abbrev | text | ||
fk_meta_test_type | integer |
Table audit.log_test_type Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
fk_region | integer | ||
postcode | text | ||
lat_lon | point | ||
name | text |
Table audit.log_urb Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
description | text | ||
atcs_single_indication | text[] | ||
atcs_combi_indication | text[] |
Table audit.log_vacc_indication Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
abbreviation | text | ||
description | text |
Table audit.log_vacc_route Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_item | integer | ||
clin_when | timestamp with time zone | ||
fk_encounter | integer | ||
fk_episode | integer | ||
narrative | text | ||
soap_cat | text | ||
pk | integer | ||
fk_patient | integer | ||
fk_provider | integer | ||
fk_vaccine | integer | ||
site | text | ||
batch_no | text | ||
reaction | text |
Table audit.log_vaccination Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_recommended_by | integer | ||
fk_indication | integer | ||
is_active | boolean | ||
comment | text |
Table audit.log_vaccination_course Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
description | text |
Table audit.log_vaccination_course_constraint Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
id | integer | ||
fk_course | integer | ||
is_booster | boolean | ||
seq_no | integer | ||
min_age_due | interval | ||
max_age_due | interval | ||
min_interval | interval | ||
comment | text |
Table audit.log_vaccination_definition Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
name | text | ||
comment | text |
Table audit.log_vaccination_schedule Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
id_route | integer | ||
is_live | boolean | ||
min_age | interval | ||
max_age | interval | ||
comment | text | ||
fk_brand | integer |
Table audit.log_vaccine Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_vaccine | integer | ||
batch_no | text |
Table audit.log_vaccine_batches Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
fk_patient | integer | ||
registered | timestamp with time zone | ||
urgency | integer | ||
list_position | integer | ||
comment | text | ||
area | text |
Table audit.log_waiting_list Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_trail_pk_audit_seq'::regclass) | |
orig_version | integer |
NOT NULL
the .row_version in the original row before the audited action took place, should be equal to .row_version |
|
orig_when | timestamp with time zone |
NOT NULL
the .modified_when in the original row before the audited action took place, should be equal to .modified_when |
|
orig_by | name |
NOT NULL
the .modified_by in the original row before the audited action took place, should be equal to .modified_by |
|
orig_tableoid | oid |
NOT NULL
the TG_RELID when the audit trigger was run |
|
audit_action | text | NOT NULL | |
audit_when | timestamp with time zone | NOT NULL DEFAULT now() | |
audit_by | name | NOT NULL DEFAULT "current_user"() | |
row_version | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk | integer | ||
xfk_identity | integer | ||
pupic | text | ||
data | text |
Table audit.log_xlnk_identity Inherits audit_trail,
Name | Constraint |
---|---|
audit_audit_trail_orig_before_audit_when | CHECK (((orig_when <= audit_when) IS TRUE)) |
audit_audit_trail_sane_audit_when | CHECK (((audit_when <= clock_timestamp()) IS TRUE)) |
audit_audit_trail_sane_orig_when | CHECK (((orig_when <= clock_timestamp()) IS TRUE)) |
audit_trail_audit_action_check | CHECK ((audit_action = ANY (ARRAY['UPDATE'::text, 'DELETE'::text]))) |
F-Key | Name | Type | Description |
---|---|---|---|
event_when | text | ||
event_by | text | ||
event_table | regclass | ||
row_version_before | integer | ||
row_version_after | integer | ||
event | text | ||
audit_when_ts | timestamp with time zone | ||
pk_audit | integer |
SELECT to_char (aat.audit_when ,'YYYY-MM-DD HH24:MI'::text ) AS event_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = aat.audit_by) ) , ( ('<'::text || (aat.audit_by)::text ) || '>'::text ) ) AS event_by , (aat.orig_tableoid)::regclass AS event_table , aat.orig_version AS row_version_before , CASE WHEN (aat.audit_action = 'DELETE'::text) THEN NULL::integer ELSE (aat.orig_version + 1) END AS row_version_after , aat.audit_action AS event , aat.audit_when AS audit_when_ts , aat.pk_audit FROM audit.audit_trail aat UNION ALL SELECT to_char (gal.modified_when ,'YYYY-MM-DD HH24:MI'::text ) AS event_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = gal.modified_by) ) , ( ('<'::text || (gal.modified_by)::text ) || '>'::text ) ) AS event_by , 'gm.access_log'::regclass AS event_table , NULL::integer AS row_version_before , 0 AS row_version_after , gal.user_action AS event , gal.modified_when AS audit_when_ts , gal.pk_audit FROM gm.access_log gal WHERE (gal.row_version = 0) UNION ALL SELECT to_char (aaf.modified_when ,'YYYY-MM-DD HH24:MI'::text ) AS event_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = aaf.modified_by) ) , ( ('<'::text || (aaf.modified_by)::text ) || '>'::text ) ) AS event_by , (aaf.tableoid)::regclass AS event_table , NULL::integer AS row_version_before , 0 AS row_version_after , 'INSERT'::text AS event , aaf.modified_when AS audit_when_ts , aaf.pk_audit FROM audit.audit_fields aaf WHERE (aaf.row_version = 0);
sanity-checking convenience function for marking tables for auditing, schema is always "public"
select audit.add_table_for_audit('public', $1);
sanity-checking convenience function for marking tables for auditing
DECLARE _relnamespace alias for $1; _relname ALIAS FOR $2; dummy RECORD; tmp text; BEGIN -- does table exist ? select relname into dummy from pg_class where relname = _relname and relnamespace = (select oid from pg_namespace where nspname = _relnamespace) ; if not found then tmp := _relnamespace || '.' || _relname; raise exception 'audit.add_table_for_audit: Table [%] does not exist.', tmp; return false; end if; -- already queued for auditing ? select 1 into dummy from audit.audited_tables where table_name = _relname and schema = _relnamespace; if found then return true; end if; -- add definition insert into audit.audited_tables ( schema, table_name ) values ( _relnamespace, _relname ); return true; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_access_log ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, user_action ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.user_action ); return OLD; END;
BEGIN INSERT INTO audit.log_active_substance ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, description, atc_code ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.description, OLD.atc_code ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_address ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_street, aux_street, number, subunit, addendum, lat_lon ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_street, OLD.aux_street, OLD.number, OLD.subunit, OLD.addendum, OLD.lat_lon ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_allergy ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, substance, substance_code, generics, allergene, atc_code, fk_type, generic_specific, definite ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.substance, OLD.substance_code, OLD.generics, OLD.allergene, OLD.atc_code, OLD.fk_type, OLD.generic_specific, OLD.definite ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_allergy_state ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, has_allergy, comment, last_confirmed, fk_encounter ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.has_allergy, OLD.comment, OLD.last_confirmed, OLD.fk_encounter ); return OLD; END;
BEGIN INSERT INTO audit.log_atc_group ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, code, description ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.code, OLD.description ); return OLD; END;
BEGIN INSERT INTO audit.log_atc_substance ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, code, name, ddd_amount, fk_ddd_unit, route, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.code, OLD.name, OLD.ddd_amount, OLD.fk_ddd_unit, OLD.route, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_auto_hint ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, query, title, hint, url, is_active, source, lang, recommendation_query ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.query, OLD.title, OLD.hint, OLD.url, OLD.is_active, OLD.source, OLD.lang, OLD.recommendation_query ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_beh_fall_typ ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, code, kurzform, name ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.code, OLD.kurzform, OLD.name ); return OLD; END;
BEGIN INSERT INTO audit.log_behandlungsfall ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient, fk_falltyp, started, must_pay_prax_geb ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient, OLD.fk_falltyp, OLD.started, OLD.must_pay_prax_geb ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_bill ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, invoice_id, close_date, apply_vat, fk_receiver_identity, fk_receiver_address, fk_doc, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.invoice_id, OLD.close_date, OLD.apply_vat, OLD.fk_receiver_identity, OLD.fk_receiver_address, OLD.fk_doc, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_bill_item ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_provider, fk_encounter, date_to_bill, description, net_amount_per_unit, currency, status, fk_billable, fk_bill, unit_count, amount_multiplier ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_provider, OLD.fk_encounter, OLD.date_to_bill, OLD.description, OLD.net_amount_per_unit, OLD.currency, OLD.status, OLD.fk_billable, OLD.fk_bill, OLD.unit_count, OLD.amount_multiplier ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_branded_drug ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, preparation, atc_code, is_fake, fk_data_source, external_code, external_code_type ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.preparation, OLD.atc_code, OLD.is_fake, OLD.fk_data_source, OLD.external_code, OLD.external_code_type ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_clin_aux_note ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_clin_diag ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_narrative, laterality, is_chronic, is_active, is_definite, clinically_relevant ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_narrative, OLD.laterality, OLD.is_chronic, OLD.is_active, OLD.is_definite, OLD.clinically_relevant ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_clin_item_type ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, type, code ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.type, OLD.code ); return OLD; END;
BEGIN INSERT INTO audit.log_clin_medication ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, last_prescribed, fk_last_script, discontinued, brandname, generic, adjuvant, dosage_form, ufk_drug, drug_db, atc_code, is_cr, dosage, period, dosage_unit, directions, is_prn ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.last_prescribed, OLD.fk_last_script, OLD.discontinued, OLD.brandname, OLD.generic, OLD.adjuvant, OLD.dosage_form, OLD.ufk_drug, OLD.drug_db, OLD.atc_code, OLD.is_cr, OLD.dosage, OLD.period, OLD.dosage_unit, OLD.directions, OLD.is_prn ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_clin_narrative ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk ); return OLD; END;
BEGIN INSERT INTO audit.log_coded_phrase ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, term, code, xfk_coding_system ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.term, OLD.code, OLD.xfk_coding_system ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_consumable_substance ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, atc_code, amount, unit ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.atc_code, OLD.amount, OLD.unit ); return OLD; END;
BEGIN INSERT INTO audit.log_consumed_substance ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, description, atc_code ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.description, OLD.atc_code ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_data_source ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, name_long, name_short, version, description, source, lang ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.name_long, OLD.name_short, OLD.version, OLD.description, OLD.source, OLD.lang ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_doc_desc ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_doc, text ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_doc, OLD.text ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_doc_med ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_encounter, fk_episode, fk_type, comment, clin_when, ext_ref, fk_org_unit ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_encounter, OLD.fk_episode, OLD.fk_type, OLD.comment, OLD.clin_when, OLD.ext_ref, OLD.fk_org_unit ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_encounter ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient, fk_type, fk_location, source_time_zone, reason_for_encounter, assessment_of_encounter, started, last_affirmed ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient, OLD.fk_type, OLD.fk_location, OLD.source_time_zone, OLD.reason_for_encounter, OLD.assessment_of_encounter, OLD.started, OLD.last_affirmed ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_episode ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_health_issue, description, is_open, fk_encounter, diagnostic_certainty_classification, summary ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_health_issue, OLD.description, OLD.is_open, OLD.fk_encounter, OLD.diagnostic_certainty_classification, OLD.summary ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_external_care ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_encounter, fk_health_issue, issue, fk_org_unit, provider, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_encounter, OLD.fk_health_issue, OLD.issue, OLD.fk_org_unit, OLD.provider, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_family_history ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_relation_type, age_noted, age_of_death, contributed_to_death, name_relative, dob_relative, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_relation_type, OLD.age_noted, OLD.age_of_death, OLD.contributed_to_death, OLD.name_relative, OLD.dob_relative, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_fhx_relation_type ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, is_genetic ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.is_genetic ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_form_data ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_instance, fk_form_field, value ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_instance, OLD.fk_form_field, OLD.value ); return OLD; END;
BEGIN INSERT INTO audit.log_form_defs ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, fk_type, country, locale, soap_cat, name_short, name_long, revision, template, engine, in_use, url, is_user ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.fk_type, OLD.country, OLD.locale, OLD.soap_cat, OLD.name_short, OLD.name_long, OLD.revision, OLD.template, OLD.engine, OLD.in_use, OLD.url, OLD.is_user ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_form_instances ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_form_def, form_name ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_form_def, OLD.form_name ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_gender_label ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, tag, label, sort_weight, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.tag, OLD.label, OLD.sort_weight, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_health_issue ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, laterality, age_noted, is_active, clinically_relevant, is_confidential, is_cause_of_death, fk_encounter, grouping, diagnostic_certainty_classification, summary ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.laterality, OLD.age_noted, OLD.is_active, OLD.clinically_relevant, OLD.is_confidential, OLD.is_cause_of_death, OLD.fk_encounter, OLD.grouping, OLD.diagnostic_certainty_classification, OLD.summary ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_hospital_stay ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, discharge, fk_org_unit ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.discharge, OLD.fk_org_unit ); return OLD; END;
BEGIN INSERT INTO audit.log_hx_family_item ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, fk_narrative_condition, fk_relative, name_relative, dob_relative, condition, age_noted, age_of_death, is_cause_of_death ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.fk_narrative_condition, OLD.fk_relative, OLD.name_relative, OLD.dob_relative, OLD.condition, OLD.age_noted, OLD.age_of_death, OLD.is_cause_of_death ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_identity ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, deleted, gender, dob, fk_marital_status, cob, deceased, title, tob, emergency_contact, fk_emergency_contact, comment, fk_primary_provider, dob_is_estimated ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.deleted, OLD.gender, OLD.dob, OLD.fk_marital_status, OLD.cob, OLD.deceased, OLD.title, OLD.tob, OLD.emergency_contact, OLD.fk_emergency_contact, OLD.comment, OLD.fk_primary_provider, OLD.dob_is_estimated ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_identity_tag ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_identity, fk_tag, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_identity, OLD.fk_tag, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_inbox_item_category ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, is_user ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.is_user ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_inbox_item_type ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_inbox_item_category, description, is_user ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_inbox_item_category, OLD.description, OLD.is_user ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_incoming_data_unmatchable ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient_candidates, request_id, firstnames, lastnames, dob, postcode, other_info, type, data, gender, requestor, external_data_id, fk_identity_disambiguated ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient_candidates, OLD.request_id, OLD.firstnames, OLD.lastnames, OLD.dob, OLD.postcode, OLD.other_info, OLD.type, OLD.data, OLD.gender, OLD.requestor, OLD.external_data_id, OLD.fk_identity_disambiguated ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_incoming_data_unmatched ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient_candidates, request_id, firstnames, lastnames, dob, postcode, other_info, type, data, gender, requestor, external_data_id, fk_identity_disambiguated, comment, fk_provider_disambiguated ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient_candidates, OLD.request_id, OLD.firstnames, OLD.lastnames, OLD.dob, OLD.postcode, OLD.other_info, OLD.type, OLD.data, OLD.gender, OLD.requestor, OLD.external_data_id, OLD.fk_identity_disambiguated, OLD.comment, OLD.fk_provider_disambiguated ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lab_request ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_test_org, request_id, fk_requestor, lab_request_id, lab_rxd_when, results_reported_when, request_status, is_pending, diagnostic_service_section, ordered_service, note_test_org ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_test_org, OLD.request_id, OLD.fk_requestor, OLD.lab_request_id, OLD.lab_rxd_when, OLD.results_reported_when, OLD.request_status, OLD.is_pending, OLD.diagnostic_service_section, OLD.ordered_service, OLD.note_test_org ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lab_test_gnr ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_test ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_test ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_code2aoe ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_code2episode ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_code2fhx ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_code2h_issue ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_code2narrative ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_code2procedure ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_code2rfe ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_code2tst_pnl ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_constraint2vacc_course ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_vaccination_course, fk_constraint ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_vaccination_course, OLD.fk_constraint ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_identity2ext_id ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_identity, external_id, fk_origin, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_identity, OLD.external_id, OLD.fk_origin, OLD.comment ); return OLD; END;
BEGIN INSERT INTO audit.log_lnk_identity2primary_doc ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_identity, fk_primary_doc ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_identity, OLD.fk_primary_doc ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_job2person ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_identity, fk_occupation, activities ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_identity, OLD.fk_occupation, OLD.activities ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_org_unit2comm ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_org_unit, url, fk_type, is_confidential, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_org_unit, OLD.url, OLD.fk_type, OLD.is_confidential, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_org_unit2ext_id ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_org_unit, external_id, fk_type, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_org_unit, OLD.external_id, OLD.fk_type, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_pat2vaccination_course ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient, fk_course ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient, OLD.fk_course ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_person2relative ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_identity, id_relative, id_relation_type, started, ended ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_identity, OLD.id_relative, OLD.id_relation_type, OLD.started, OLD.ended ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_substance2brand ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_brand, fk_substance ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_brand, OLD.fk_substance ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_tst2norm ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_test, id_norm ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_test, OLD.id_norm ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_type2item ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_type, fk_item ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_type, OLD.fk_item ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_vaccination_course2schedule ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_course, fk_schedule ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_course, OLD.fk_schedule ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_lnk_vaccine2inds ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, fk_vaccine, fk_indication ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.fk_vaccine, OLD.fk_indication ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_message_inbox ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_staff, fk_inbox_item_type, comment, data, importance, fk_patient, ufk_context, due_date, expiry_date ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_staff, OLD.fk_inbox_item_type, OLD.comment, OLD.data, OLD.importance, OLD.fk_patient, OLD.ufk_context, OLD.due_date, OLD.expiry_date ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_occupation ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, name ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.name ); return OLD; END;
BEGIN INSERT INTO audit.log_operation ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, fk_health_issue, fk_encounter, clin_where, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.fk_health_issue, OLD.fk_encounter, OLD.clin_where, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_org ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, fk_category, fk_data_source ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.fk_category, OLD.fk_data_source ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_org_unit ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, fk_org, fk_address, fk_category ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.fk_org, OLD.fk_address, OLD.fk_category ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_paperwork_templates ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_template_type, instance_type, name_short, name_long, external_version, gnumed_revision, engine, in_use, filename, data, edit_after_substitution ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_template_type, OLD.instance_type, OLD.name_short, OLD.name_long, OLD.external_version, OLD.gnumed_revision, OLD.engine, OLD.in_use, OLD.filename, OLD.data, OLD.edit_after_substitution ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_patient ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_identity, edc ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_identity, OLD.edc ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_prax_geb_paid ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_fall, paid_amount, paid_when, paid_with ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_fall, OLD.paid_amount, OLD.paid_when, OLD.paid_with ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_praxis_branch ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_org_unit ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_org_unit ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_procedure ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_hospital_stay, clin_end, is_ongoing, fk_org_unit ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_hospital_stay, OLD.clin_end, OLD.is_ongoing, OLD.fk_org_unit ); return OLD; END;
BEGIN INSERT INTO audit.log_ref_source ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, name_short, name_long, version, description, source ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.name_short, OLD.name_long, OLD.version, OLD.description, OLD.source ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_referral ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, id, fk_referee, fk_form ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.id, OLD.fk_referee, OLD.fk_form ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_region ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, code, country, name ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.code, OLD.country, OLD.name ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_relation_types ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, inverse, biological, biol_verified, description ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.inverse, OLD.biological, OLD.biol_verified, OLD.description ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_report_query ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, label, cmd ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.label, OLD.cmd ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_staff ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_identity, db_user, short_alias, comment, is_active ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_identity, OLD.db_user, OLD.short_alias, OLD.comment, OLD.is_active ); return OLD; END;
BEGIN INSERT INTO audit.log_staff_role ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, name, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.name, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_street ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_urb, name, postcode, suburb, lat_lon ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_urb, OLD.name, OLD.postcode, OLD.suburb, OLD.lat_lon ); return OLD; END;
BEGIN INSERT INTO audit.log_substance_in_brand ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, fk_brand, description, atc_code ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.fk_brand, OLD.description, OLD.atc_code ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_substance_intake ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_substance, preparation, schedule, aim, duration, intake_is_approved_of, is_long_term, discontinued, discontinue_reason, fk_drug_component, comment_on_start, harmful_use_type ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_substance, OLD.preparation, OLD.schedule, OLD.aim, OLD.duration, OLD.intake_is_approved_of, OLD.is_long_term, OLD.discontinued, OLD.discontinue_reason, OLD.fk_drug_component, OLD.comment_on_start, OLD.harmful_use_type ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_suppressed_hint ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_encounter, fk_hint, suppressed_by, suppressed_when, rationale, md5_sum ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_encounter, OLD.fk_hint, OLD.suppressed_by, OLD.suppressed_when, OLD.rationale, OLD.md5_sum ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_tag_image ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, filename, image ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.filename, OLD.image ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_test_org ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_org_unit, fk_adm_contact, fk_med_contact, comment, contact ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_org_unit, OLD.fk_adm_contact, OLD.fk_med_contact, OLD.comment, OLD.contact ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_test_panel ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, comment, fk_test_types ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.comment, OLD.fk_test_types ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_test_result ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_type, val_num, val_alpha, val_unit, val_normal_min, val_normal_max, val_normal_range, val_target_min, val_target_max, val_target_range, abnormality_indicator, norm_ref_group, note_test_org, material, material_detail, fk_intended_reviewer, fk_request, status, source_data, val_grouping ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_type, OLD.val_num, OLD.val_alpha, OLD.val_unit, OLD.val_normal_min, OLD.val_normal_max, OLD.val_normal_range, OLD.val_target_min, OLD.val_target_max, OLD.val_target_range, OLD.abnormality_indicator, OLD.norm_ref_group, OLD.note_test_org, OLD.material, OLD.material_detail, OLD.fk_intended_reviewer, OLD.fk_request, OLD.status, OLD.source_data, OLD.val_grouping ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_test_type ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_test_org, name, comment, reference_unit, loinc, abbrev, fk_meta_test_type ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_test_org, OLD.name, OLD.comment, OLD.reference_unit, OLD.loinc, OLD.abbrev, OLD.fk_meta_test_type ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_urb ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, fk_region, postcode, lat_lon, name ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.fk_region, OLD.postcode, OLD.lat_lon, OLD.name ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_vacc_indication ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, description, atcs_single_indication, atcs_combi_indication ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.description, OLD.atcs_single_indication, OLD.atcs_combi_indication ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_vacc_route ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, abbreviation, description ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.abbreviation, OLD.description ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_vaccination ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_provider, fk_vaccine, site, batch_no, reaction ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_provider, OLD.fk_vaccine, OLD.site, OLD.batch_no, OLD.reaction ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_vaccination_course ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_recommended_by, fk_indication, is_active, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_recommended_by, OLD.fk_indication, OLD.is_active, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_vaccination_course_constraint ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_vaccination_definition ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, fk_course, is_booster, seq_no, min_age_due, max_age_due, min_interval, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.fk_course, OLD.is_booster, OLD.seq_no, OLD.min_age_due, OLD.max_age_due, OLD.min_interval, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_vaccination_schedule ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, name, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.name, OLD.comment ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_vaccine ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, id_route, is_live, min_age, max_age, comment, fk_brand ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.id_route, OLD.is_live, OLD.min_age, OLD.max_age, OLD.comment, OLD.fk_brand ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_vaccine_batches ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_vaccine, batch_no ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_vaccine, OLD.batch_no ); return OLD; END;
DECLARE _is_allowed_deleter boolean; BEGIN -- is the session user allowed to delete data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_deleter; IF _is_allowed_deleter IS FALSE THEN RAISE EXCEPTION 'DELETE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return OLD; END IF; INSERT INTO audit.log_waiting_list ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient, registered, urgency, list_position, comment, area ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient, OLD.registered, OLD.urgency, OLD.list_position, OLD.comment, OLD.area ); return OLD; END;
BEGIN INSERT INTO audit.log_xlnk_identity ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, xfk_identity, pupic, data ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.xfk_identity, OLD.pupic, OLD.data ); return OLD; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_inserter boolean; BEGIN -- is the session user allowed to insert data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_inserter; IF _is_allowed_inserter IS FALSE THEN RAISE EXCEPTION 'INSERT: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
BEGIN NEW.row_version := 0; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_access_log ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, user_action ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.user_action ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_active_substance ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, description, atc_code ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.description, OLD.atc_code ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_address ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_street, aux_street, number, subunit, addendum, lat_lon ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_street, OLD.aux_street, OLD.number, OLD.subunit, OLD.addendum, OLD.lat_lon ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_allergy ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, substance, substance_code, generics, allergene, atc_code, fk_type, generic_specific, definite ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.substance, OLD.substance_code, OLD.generics, OLD.allergene, OLD.atc_code, OLD.fk_type, OLD.generic_specific, OLD.definite ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_allergy_state ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, has_allergy, comment, last_confirmed, fk_encounter ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.has_allergy, OLD.comment, OLD.last_confirmed, OLD.fk_encounter ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_atc_group ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, code, description ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.code, OLD.description ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_atc_substance ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, code, name, ddd_amount, fk_ddd_unit, route, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.code, OLD.name, OLD.ddd_amount, OLD.fk_ddd_unit, OLD.route, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_auto_hint ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, query, title, hint, url, is_active, source, lang, recommendation_query ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.query, OLD.title, OLD.hint, OLD.url, OLD.is_active, OLD.source, OLD.lang, OLD.recommendation_query ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_beh_fall_typ ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, code, kurzform, name ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.code, OLD.kurzform, OLD.name ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_behandlungsfall ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient, fk_falltyp, started, must_pay_prax_geb ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient, OLD.fk_falltyp, OLD.started, OLD.must_pay_prax_geb ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_bill ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, invoice_id, close_date, apply_vat, fk_receiver_identity, fk_receiver_address, fk_doc, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.invoice_id, OLD.close_date, OLD.apply_vat, OLD.fk_receiver_identity, OLD.fk_receiver_address, OLD.fk_doc, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_bill_item ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_provider, fk_encounter, date_to_bill, description, net_amount_per_unit, currency, status, fk_billable, fk_bill, unit_count, amount_multiplier ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_provider, OLD.fk_encounter, OLD.date_to_bill, OLD.description, OLD.net_amount_per_unit, OLD.currency, OLD.status, OLD.fk_billable, OLD.fk_bill, OLD.unit_count, OLD.amount_multiplier ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_branded_drug ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, preparation, atc_code, is_fake, fk_data_source, external_code, external_code_type ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.preparation, OLD.atc_code, OLD.is_fake, OLD.fk_data_source, OLD.external_code, OLD.external_code_type ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_clin_aux_note ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_clin_diag ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_narrative, laterality, is_chronic, is_active, is_definite, clinically_relevant ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_narrative, OLD.laterality, OLD.is_chronic, OLD.is_active, OLD.is_definite, OLD.clinically_relevant ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_clin_item_type ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, type, code ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.type, OLD.code ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_clin_medication ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, last_prescribed, fk_last_script, discontinued, brandname, generic, adjuvant, dosage_form, ufk_drug, drug_db, atc_code, is_cr, dosage, period, dosage_unit, directions, is_prn ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.last_prescribed, OLD.fk_last_script, OLD.discontinued, OLD.brandname, OLD.generic, OLD.adjuvant, OLD.dosage_form, OLD.ufk_drug, OLD.drug_db, OLD.atc_code, OLD.is_cr, OLD.dosage, OLD.period, OLD.dosage_unit, OLD.directions, OLD.is_prn ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_clin_narrative ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_coded_phrase ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, term, code, xfk_coding_system ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.term, OLD.code, OLD.xfk_coding_system ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_consumable_substance ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, atc_code, amount, unit ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.atc_code, OLD.amount, OLD.unit ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_consumed_substance ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, description, atc_code ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.description, OLD.atc_code ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_data_source ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, name_long, name_short, version, description, source, lang ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.name_long, OLD.name_short, OLD.version, OLD.description, OLD.source, OLD.lang ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_doc_desc ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_doc, text ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_doc, OLD.text ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_doc_med ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_encounter, fk_episode, fk_type, comment, clin_when, ext_ref, fk_org_unit ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_encounter, OLD.fk_episode, OLD.fk_type, OLD.comment, OLD.clin_when, OLD.ext_ref, OLD.fk_org_unit ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_encounter ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient, fk_type, fk_location, source_time_zone, reason_for_encounter, assessment_of_encounter, started, last_affirmed ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient, OLD.fk_type, OLD.fk_location, OLD.source_time_zone, OLD.reason_for_encounter, OLD.assessment_of_encounter, OLD.started, OLD.last_affirmed ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_episode ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_health_issue, description, is_open, fk_encounter, diagnostic_certainty_classification, summary ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_health_issue, OLD.description, OLD.is_open, OLD.fk_encounter, OLD.diagnostic_certainty_classification, OLD.summary ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_external_care ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_encounter, fk_health_issue, issue, fk_org_unit, provider, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_encounter, OLD.fk_health_issue, OLD.issue, OLD.fk_org_unit, OLD.provider, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_family_history ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_relation_type, age_noted, age_of_death, contributed_to_death, name_relative, dob_relative, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_relation_type, OLD.age_noted, OLD.age_of_death, OLD.contributed_to_death, OLD.name_relative, OLD.dob_relative, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_fhx_relation_type ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, is_genetic ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.is_genetic ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_form_data ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_instance, fk_form_field, value ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_instance, OLD.fk_form_field, OLD.value ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_form_defs ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, fk_type, country, locale, soap_cat, name_short, name_long, revision, template, engine, in_use, url, is_user ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.fk_type, OLD.country, OLD.locale, OLD.soap_cat, OLD.name_short, OLD.name_long, OLD.revision, OLD.template, OLD.engine, OLD.in_use, OLD.url, OLD.is_user ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_form_instances ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_form_def, form_name ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_form_def, OLD.form_name ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_gender_label ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, tag, label, sort_weight, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.tag, OLD.label, OLD.sort_weight, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_health_issue ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, laterality, age_noted, is_active, clinically_relevant, is_confidential, is_cause_of_death, fk_encounter, grouping, diagnostic_certainty_classification, summary ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.laterality, OLD.age_noted, OLD.is_active, OLD.clinically_relevant, OLD.is_confidential, OLD.is_cause_of_death, OLD.fk_encounter, OLD.grouping, OLD.diagnostic_certainty_classification, OLD.summary ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_hospital_stay ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, discharge, fk_org_unit ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.discharge, OLD.fk_org_unit ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_hx_family_item ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, fk_narrative_condition, fk_relative, name_relative, dob_relative, condition, age_noted, age_of_death, is_cause_of_death ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.fk_narrative_condition, OLD.fk_relative, OLD.name_relative, OLD.dob_relative, OLD.condition, OLD.age_noted, OLD.age_of_death, OLD.is_cause_of_death ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_identity ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, deleted, gender, dob, fk_marital_status, cob, deceased, title, tob, emergency_contact, fk_emergency_contact, comment, fk_primary_provider, dob_is_estimated ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.deleted, OLD.gender, OLD.dob, OLD.fk_marital_status, OLD.cob, OLD.deceased, OLD.title, OLD.tob, OLD.emergency_contact, OLD.fk_emergency_contact, OLD.comment, OLD.fk_primary_provider, OLD.dob_is_estimated ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_identity_tag ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_identity, fk_tag, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_identity, OLD.fk_tag, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_inbox_item_category ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, is_user ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.is_user ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_inbox_item_type ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_inbox_item_category, description, is_user ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_inbox_item_category, OLD.description, OLD.is_user ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_incoming_data_unmatchable ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient_candidates, request_id, firstnames, lastnames, dob, postcode, other_info, type, data, gender, requestor, external_data_id, fk_identity_disambiguated ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient_candidates, OLD.request_id, OLD.firstnames, OLD.lastnames, OLD.dob, OLD.postcode, OLD.other_info, OLD.type, OLD.data, OLD.gender, OLD.requestor, OLD.external_data_id, OLD.fk_identity_disambiguated ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_incoming_data_unmatched ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient_candidates, request_id, firstnames, lastnames, dob, postcode, other_info, type, data, gender, requestor, external_data_id, fk_identity_disambiguated, comment, fk_provider_disambiguated ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient_candidates, OLD.request_id, OLD.firstnames, OLD.lastnames, OLD.dob, OLD.postcode, OLD.other_info, OLD.type, OLD.data, OLD.gender, OLD.requestor, OLD.external_data_id, OLD.fk_identity_disambiguated, OLD.comment, OLD.fk_provider_disambiguated ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lab_request ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_test_org, request_id, fk_requestor, lab_request_id, lab_rxd_when, results_reported_when, request_status, is_pending, diagnostic_service_section, ordered_service, note_test_org ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_test_org, OLD.request_id, OLD.fk_requestor, OLD.lab_request_id, OLD.lab_rxd_when, OLD.results_reported_when, OLD.request_status, OLD.is_pending, OLD.diagnostic_service_section, OLD.ordered_service, OLD.note_test_org ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lab_test_gnr ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_test ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_test ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_code2aoe ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_code2episode ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_code2fhx ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_code2h_issue ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_code2narrative ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_code2procedure ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_code2rfe ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_code2tst_pnl ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_lnk_code2item, fk_generic_code, fk_item, code_modifier, pk ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_lnk_code2item, OLD.fk_generic_code, OLD.fk_item, OLD.code_modifier, OLD.pk ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_constraint2vacc_course ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_vaccination_course, fk_constraint ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_vaccination_course, OLD.fk_constraint ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_identity2ext_id ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_identity, external_id, fk_origin, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_identity, OLD.external_id, OLD.fk_origin, OLD.comment ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_identity2primary_doc ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_identity, fk_primary_doc ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_identity, OLD.fk_primary_doc ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_job2person ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_identity, fk_occupation, activities ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_identity, OLD.fk_occupation, OLD.activities ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_org_unit2comm ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_org_unit, url, fk_type, is_confidential, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_org_unit, OLD.url, OLD.fk_type, OLD.is_confidential, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_org_unit2ext_id ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_org_unit, external_id, fk_type, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_org_unit, OLD.external_id, OLD.fk_type, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_pat2vaccination_course ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient, fk_course ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient, OLD.fk_course ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_person2relative ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_identity, id_relative, id_relation_type, started, ended ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_identity, OLD.id_relative, OLD.id_relation_type, OLD.started, OLD.ended ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_substance2brand ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_brand, fk_substance ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_brand, OLD.fk_substance ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_tst2norm ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_test, id_norm ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_test, OLD.id_norm ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_type2item ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_type, fk_item ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_type, OLD.fk_item ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_vaccination_course2schedule ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_course, fk_schedule ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_course, OLD.fk_schedule ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_lnk_vaccine2inds ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, fk_vaccine, fk_indication ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.fk_vaccine, OLD.fk_indication ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_message_inbox ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_staff, fk_inbox_item_type, comment, data, importance, fk_patient, ufk_context, due_date, expiry_date ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_staff, OLD.fk_inbox_item_type, OLD.comment, OLD.data, OLD.importance, OLD.fk_patient, OLD.ufk_context, OLD.due_date, OLD.expiry_date ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_occupation ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, name ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.name ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_operation ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, fk_health_issue, fk_encounter, clin_where, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.fk_health_issue, OLD.fk_encounter, OLD.clin_where, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_org ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, fk_category, fk_data_source ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.fk_category, OLD.fk_data_source ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_org_unit ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, fk_org, fk_address, fk_category ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.fk_org, OLD.fk_address, OLD.fk_category ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_paperwork_templates ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_template_type, instance_type, name_short, name_long, external_version, gnumed_revision, engine, in_use, filename, data, edit_after_substitution ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_template_type, OLD.instance_type, OLD.name_short, OLD.name_long, OLD.external_version, OLD.gnumed_revision, OLD.engine, OLD.in_use, OLD.filename, OLD.data, OLD.edit_after_substitution ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_patient ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_identity, edc ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_identity, OLD.edc ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_prax_geb_paid ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_fall, paid_amount, paid_when, paid_with ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_fall, OLD.paid_amount, OLD.paid_when, OLD.paid_with ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_praxis_branch ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_org_unit ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_org_unit ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_procedure ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_hospital_stay, clin_end, is_ongoing, fk_org_unit ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_hospital_stay, OLD.clin_end, OLD.is_ongoing, OLD.fk_org_unit ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_ref_source ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, name_short, name_long, version, description, source ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.name_short, OLD.name_long, OLD.version, OLD.description, OLD.source ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_referral ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, id, fk_referee, fk_form ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.id, OLD.fk_referee, OLD.fk_form ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_region ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, code, country, name ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.code, OLD.country, OLD.name ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_relation_types ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, inverse, biological, biol_verified, description ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.inverse, OLD.biological, OLD.biol_verified, OLD.description ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_report_query ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, label, cmd ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.label, OLD.cmd ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_staff ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_identity, db_user, short_alias, comment, is_active ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_identity, OLD.db_user, OLD.short_alias, OLD.comment, OLD.is_active ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_staff_role ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, name, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.name, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_street ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, id_urb, name, postcode, suburb, lat_lon ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.id_urb, OLD.name, OLD.postcode, OLD.suburb, OLD.lat_lon ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_substance_in_brand ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, fk_brand, description, atc_code ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.fk_brand, OLD.description, OLD.atc_code ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_substance_intake ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_substance, preparation, schedule, aim, duration, intake_is_approved_of, is_long_term, discontinued, discontinue_reason, fk_drug_component, comment_on_start, harmful_use_type ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_substance, OLD.preparation, OLD.schedule, OLD.aim, OLD.duration, OLD.intake_is_approved_of, OLD.is_long_term, OLD.discontinued, OLD.discontinue_reason, OLD.fk_drug_component, OLD.comment_on_start, OLD.harmful_use_type ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_suppressed_hint ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_encounter, fk_hint, suppressed_by, suppressed_when, rationale, md5_sum ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_encounter, OLD.fk_hint, OLD.suppressed_by, OLD.suppressed_when, OLD.rationale, OLD.md5_sum ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_tag_image ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, filename, image ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.filename, OLD.image ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_test_org ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_org_unit, fk_adm_contact, fk_med_contact, comment, contact ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_org_unit, OLD.fk_adm_contact, OLD.fk_med_contact, OLD.comment, OLD.contact ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_test_panel ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description, comment, fk_test_types ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description, OLD.comment, OLD.fk_test_types ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_test_result ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_type, val_num, val_alpha, val_unit, val_normal_min, val_normal_max, val_normal_range, val_target_min, val_target_max, val_target_range, abnormality_indicator, norm_ref_group, note_test_org, material, material_detail, fk_intended_reviewer, fk_request, status, source_data, val_grouping ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_type, OLD.val_num, OLD.val_alpha, OLD.val_unit, OLD.val_normal_min, OLD.val_normal_max, OLD.val_normal_range, OLD.val_target_min, OLD.val_target_max, OLD.val_target_range, OLD.abnormality_indicator, OLD.norm_ref_group, OLD.note_test_org, OLD.material, OLD.material_detail, OLD.fk_intended_reviewer, OLD.fk_request, OLD.status, OLD.source_data, OLD.val_grouping ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_test_type ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_test_org, name, comment, reference_unit, loinc, abbrev, fk_meta_test_type ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_test_org, OLD.name, OLD.comment, OLD.reference_unit, OLD.loinc, OLD.abbrev, OLD.fk_meta_test_type ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_urb ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, fk_region, postcode, lat_lon, name ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.fk_region, OLD.postcode, OLD.lat_lon, OLD.name ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_vacc_indication ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, description, atcs_single_indication, atcs_combi_indication ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.description, OLD.atcs_single_indication, OLD.atcs_combi_indication ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_vacc_route ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, abbreviation, description ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.abbreviation, OLD.description ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_vaccination ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_item, clin_when, fk_encounter, fk_episode, narrative, soap_cat, pk, fk_provider, fk_vaccine, site, batch_no, reaction ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_item, OLD.clin_when, OLD.fk_encounter, OLD.fk_episode, OLD.narrative, OLD.soap_cat, OLD.pk, OLD.fk_provider, OLD.fk_vaccine, OLD.site, OLD.batch_no, OLD.reaction ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_vaccination_course ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_recommended_by, fk_indication, is_active, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_recommended_by, OLD.fk_indication, OLD.is_active, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_vaccination_course_constraint ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, description ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.description ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_vaccination_definition ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, id, fk_course, is_booster, seq_no, min_age_due, max_age_due, min_interval, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.id, OLD.fk_course, OLD.is_booster, OLD.seq_no, OLD.min_age_due, OLD.max_age_due, OLD.min_interval, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_vaccination_schedule ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, name, comment ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.name, OLD.comment ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_vaccine ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, id_route, is_live, min_age, max_age, comment, fk_brand ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.id_route, OLD.is_live, OLD.min_age, OLD.max_age, OLD.comment, OLD.fk_brand ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_vaccine_batches ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_vaccine, batch_no ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_vaccine, OLD.batch_no ); return NEW; END;
DECLARE _is_allowed_updater boolean; BEGIN -- is the session user allowed to update data ? SELECT gm.account_is_dbowner_or_staff(SESSION_USER) INTO STRICT _is_allowed_updater; IF _is_allowed_updater IS FALSE THEN RAISE EXCEPTION 'UPDATE: gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff', SESSION_USER USING ERRCODE = 'integrity_constraint_violation' ; return NEW; END IF; NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_waiting_list ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk, fk_patient, registered, urgency, list_position, comment, area ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk, OLD.fk_patient, OLD.registered, OLD.urgency, OLD.list_position, OLD.comment, OLD.area ); return NEW; END;
BEGIN NEW.row_version := OLD.row_version + 1; NEW.modified_when := CURRENT_TIMESTAMP; NEW.modified_by := SESSION_USER; INSERT INTO audit.log_xlnk_identity ( orig_version, orig_when, orig_by, orig_tableoid, audit_action, pk_audit, row_version, modified_when, modified_by, pk, xfk_identity, pupic, data ) VALUES ( OLD.row_version, OLD.modified_when, OLD.modified_by, TG_RELID, TG_OP, OLD.pk_audit, OLD.row_version, OLD.modified_when, OLD.modified_by, OLD.pk, OLD.xfk_identity, OLD.pupic, OLD.data ); return NEW; END;
sanity-checking convenience function for registering a table for auditing
DECLARE _schema alias for $1; _table alias for $2; BEGIN -- does table exist ? perform 1 from pg_class where relname = _table and relnamespace = (select oid from pg_namespace where nspname = _schema) ; if not found then raise exception 'audit.register_table_for_auditing(): table [%.%] does not exist', _schema, _table; return false; end if; -- already queued for auditing ? perform 1 from audit.audited_tables where table_name = _table and schema = _schema; if found then return true; end if; -- add definition insert into audit.audited_tables ( schema, table_name ) values ( _schema, _table ); return true; END;
Holds everything related to billing.
actual bills
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
invoice_id | text |
UNIQUE
the ID of the bill |
|
close_date | timestamp with time zone |
cannot add further bill_items after this date if not NULL |
|
apply_vat | boolean |
whether or not to apply VAT on the invoice |
|
dem.identity.pk | fk_receiver_identity | integer |
link to the receiver as a GNUmed identity, if known |
dem.lnk_person_org_address.id | fk_receiver_address | integer |
links the address of the receiver of the invoice |
blobs.doc_med.pk | fk_doc | integer |
links to the document which contains the invoice PDF |
comment | text |
arbitrary comments on bills |
Table bill.bill Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
bill_bill_sane_apply_vat | CHECK (((apply_vat IS NOT NULL) OR ((apply_vat IS NULL) AND (fk_doc IS NULL)))) |
bill_bill_sane_comment | CHECK ((gm.is_null_or_non_empty_string(comment) IS TRUE)) |
bill_bill_sane_invoice_id | CHECK ((gm.is_null_or_blank_string(invoice_id) IS FALSE)) |
bill_bill_sane_recv_adr | CHECK (((fk_receiver_address IS NOT NULL) OR (close_date IS NULL))) |
Tables referencing this one via Foreign Key Constraints:
items patients currently *are* billed for
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
dem.staff.pk | fk_provider | integer |
NOT NULL
by whom or on whose behalf did the billable activity happen |
clin.encounter.pk | fk_encounter | integer |
NOT NULL
the encounter during which the billable action for this item took place |
date_to_bill | date |
The date the bill item was caused. If NULL, use .fk_encounter -> .started |
|
description | text |
Can be used to further explain the bill item over and above .fk_billable.description. |
|
net_amount_per_unit | numeric |
NOT NULL
How much to charge for one unit of this bill item. |
|
currency | text |
NOT NULL
Which currency to charge in. Must not be NULL if .net_amount_per_unit is not NULL. |
|
status | text |
DEFAULT 'new'::text
the status of this item |
|
ref.billable.pk | fk_billable | integer |
NOT NULL
Links to the billable item this bill item stands for. |
bill.bill.pk | fk_bill | integer |
Links to the bill this bill item is on if any. |
unit_count | integer |
NOT NULL
DEFAULT 1
The number of times this item is to be billed. 0 can be used for informative items. |
|
amount_multiplier | numeric |
NOT NULL
DEFAULT 1
A multiplier to apply to .net_amount_per_unit. Can be used for discounts, rebates, or increases. Must be > 0. |
Table bill.bill_item Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
bill_bill_item_sane_count | CHECK ((unit_count > '-1'::integer)) |
bill_bill_item_sane_currency | CHECK ((gm.is_null_or_blank_string(currency) IS FALSE)) |
bill_bill_item_sane_desc | CHECK ((gm.is_null_or_non_empty_string(description) IS TRUE)) |
bill_bill_item_sane_multiplier | CHECK ((amount_multiplier > (0)::numeric)) |
valid_stati | CHECK ((status = ANY (ARRAY['new'::text, 'transferred'::text]))) |
actual bills
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
clin.encounter_type.pk | fk_encounter_type | integer |
NOT NULL
Links to encounter type this billable is associated with. |
ref.billable.pk | fk_billable | integer |
NOT NULL
Links to the billable item the encounter type is associated with. |
F-Key | Name | Type | Description |
---|---|---|---|
pk_bill_item | integer | ||
billable_code | text | ||
billable_description | text | ||
item_detail | text | ||
date_to_bill | timestamp with time zone | ||
net_amount_per_unit | numeric | ||
unit_count | integer | ||
amount_multiplier | numeric | ||
total_amount | numeric | ||
vat | numeric | ||
currency | text | ||
raw_date_to_bill | date | ||
billable_amount | numeric | ||
vat_multiplier | numeric | ||
billable_currency | text | ||
billable_comment | text | ||
billable_active | boolean | ||
billable_discountable | boolean | ||
catalog_long | text | ||
catalog_short | text | ||
catalog_version | text | ||
catalog_language | text | ||
pk_patient | integer | ||
pk_encounter_type | integer | ||
pk_provider | integer | ||
pk_encounter_to_bill | integer | ||
pk_bill | integer | ||
pk_billable | integer | ||
pk_data_source | integer | ||
xmin_bill_item | xid |
SELECT b_bi.pk AS pk_bill_item , r_b.code AS billable_code , r_b.term AS billable_description , b_bi.description AS item_detail , COALESCE ( (b_bi.date_to_bill)::timestamp with time zone , c_enc.started ) AS date_to_bill , b_bi.net_amount_per_unit , b_bi.unit_count , b_bi.amount_multiplier , ( ( (b_bi.unit_count)::numeric * b_bi.net_amount_per_unit ) * b_bi.amount_multiplier ) AS total_amount , ( ( ( (b_bi.unit_count)::numeric * b_bi.net_amount_per_unit ) * b_bi.amount_multiplier ) * r_b.vat_multiplier ) AS vat , b_bi.currency , b_bi.date_to_bill AS raw_date_to_bill , r_b.amount AS billable_amount , r_b.vat_multiplier , r_b.currency AS billable_currency , r_b.comment AS billable_comment , r_b.active AS billable_active , r_b.discountable AS billable_discountable , r_ds.name_long AS catalog_long , r_ds.name_short AS catalog_short , r_ds.version AS catalog_version , r_ds.lang AS catalog_language , c_enc.fk_patient AS pk_patient , c_enc.fk_type AS pk_encounter_type , b_bi.fk_provider AS pk_provider , b_bi.fk_encounter AS pk_encounter_to_bill , b_bi.fk_bill AS pk_bill , r_b.pk AS pk_billable , r_b.fk_data_source AS pk_data_source , b_bi.xmin AS xmin_bill_item FROM ( ( (bill.bill_item b_bi JOIN ref.billable r_b ON ( (b_bi.fk_billable = r_b.pk) ) ) LEFT JOIN ref.data_source r_ds ON ( (r_b.fk_data_source = r_ds.pk) ) ) LEFT JOIN clin.encounter c_enc ON ( (b_bi.fk_encounter = c_enc.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_bill | integer | ||
invoice_id | text | ||
pk_receiver_identity | integer | ||
total_amount | numeric | ||
total_vat | numeric | ||
total_amount_with_vat | numeric | ||
percent_vat | numeric | ||
currency | text | ||
close_date | timestamp with time zone | ||
apply_vat | boolean | ||
comment | text | ||
pk_receiver_address | integer | ||
pk_doc | integer | ||
pk_patient | integer | ||
pk_bill_items | integer[] | ||
xmin_bill | xid |
SELECT b_b.pk AS pk_bill , b_b.invoice_id , b_b.fk_receiver_identity AS pk_receiver_identity , ( SELECT round (sum (v_bill_items.total_amount) , 2 ) AS round FROM bill.v_bill_items WHERE (v_bill_items.pk_bill = b_b.pk) ) AS total_amount , ( SELECT round (sum (v_bill_items.vat) , 2 ) AS round FROM bill.v_bill_items WHERE (v_bill_items.pk_bill = b_b.pk) ) AS total_vat , ( SELECT round (sum ( (v_bill_items.total_amount + v_bill_items.vat) ) , 2 ) AS round FROM bill.v_bill_items WHERE (v_bill_items.pk_bill = b_b.pk) ) AS total_amount_with_vat , ( SELECT (v_bill_items.vat_multiplier * (100)::numeric ) FROM bill.v_bill_items WHERE (v_bill_items.pk_bill = b_b.pk) LIMIT 1 ) AS percent_vat , ( SELECT v_bill_items.currency FROM bill.v_bill_items WHERE (v_bill_items.pk_bill = b_b.pk) LIMIT 1 ) AS currency , b_b.close_date , b_b.apply_vat , b_b.comment , b_b.fk_receiver_address AS pk_receiver_address , b_b.fk_doc AS pk_doc , ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = ( SELECT bill_item.fk_encounter FROM bill.bill_item WHERE (bill_item.fk_bill = b_b.pk) LIMIT 1 ) ) ) AS pk_patient , ( SELECT array_agg (sorted_values.pk_bill_item) AS array_agg FROM ( SELECT b_vbi.pk_bill_item FROM bill.v_bill_items b_vbi WHERE (b_vbi.pk_bill = b_b.pk) ORDER BY b_vbi.date_to_bill , b_vbi.billable_code ) sorted_values ) AS pk_bill_items , b_b.xmin AS xmin_bill FROM bill.bill b_b;
select value from ( select id.pk_id, id.value::integer from dem.v_external_ids4identity id join dem.identity d_i on (id.value = d_i.pk::text) where id.pk_type = (select pk from dem.enum_ext_id_types where name = 'bill receiver' and issuer = 'GNUmed') and id.pk_identity = $1 union all select 0, $1 ) me limit 1;
Prevent bills to become void of items due to deletions/updates of bill items.
DECLARE _item_count integer; _msg text; BEGIN if TG_OP = 'UPDATE' then if OLD.fk_bill IS NULL then return NULL; end if; if OLD.fk_bill IS NOT DISTINCT FROM NEW.fk_bill then return NULL; end if; else if OLD.fk_bill is NULL then return NULL; end if; end if; -- we now either: -- DELETE with .fk_bill NOT NULL -- or: -- UPDATE with an .fk_bill change (including towards fk_bill = NULL) -- let us check whether the (previous) bill still exists -- at all or whether we are deleting the bill (and thereby -- setting our .fk_bill to NULL) -- only works at or below REPEATABLE READ after deletion of bill perform 1 from bill.bill where pk = OLD.fk_bill; if FOUND is FALSE then return NULL; end if; select count(1) into _item_count from bill.bill_item where fk_bill = OLD.fk_bill and pk != OLD.pk; if _item_count > 0 then return NULL; end if; _msg := '[bill.trf_prevent_empty_bills]: cannot remove (by ' || '<' || TG_OP || '>' ||') the only item (bill.bill_item.pk=' || coalesce(OLD.pk::text, '<NULL>'::text) || ') from bill (bill.bill_item.fk_bill=bill.bill.pk=' || coalesce(OLD.fk_bill::text, '<NULL>'::text) || ') '; raise exception unique_violation using message = _msg; return NULL; END;
Prevent bills to link to invoices of another patient.
DECLARE _doc_patient integer; _bill_patient integer; _msg text; BEGIN if NEW.fk_doc IS NULL then return NEW; end if; if TG_OP = 'UPDATE' then if OLD.fk_doc IS NOT DISTINCT FROM NEW.fk_doc then return NEW; end if; end if; -- we now either: -- INSERT with .fk_doc NOT NULL -- or: -- UPDATE with an .fk_bill change to a NON-NULL value select pk_patient into _doc_patient from blobs.v_doc_med where pk_doc = NEW.fk_doc; select pk_patient into _bill_patient from bill.v_bills where pk_bill = NEW.pk; if _doc_patient = _bill_patient then return NEW; end if; _msg := '[bill.trf_prevent_mislinked_bills]: patient mismatch between ' || 'bill (pk=' || NEW.pk || ', patient=' || _bill_patient || ') ' || 'and invoice (pk=' || NEW.fk_doc || ', patient=' || _doc_patient || ')'; raise exception integrity_constraint_violation using message = _msg; return NULL; END;
A textual description of the content such as a result summary. Several of these may belong to one document object.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
blobs.doc_med.pk | fk_doc | integer | UNIQUE#1 |
text | text | UNIQUE#1 |
Table blobs.doc_desc Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
a medical document object possibly containing several data objects such as several pages of a paper document
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.encounter.pk | fk_encounter | integer |
NOT NULL
the encounter in which this document was entered into the system |
clin.episode.pk | fk_episode | integer |
NOT NULL
the episode this document pertains to, this may not be the only one applicable to the document (think discharge letters), see also lnk_doc_med2episode |
blobs.doc_type.pk | fk_type | integer |
NOT NULL
semantic type of document (not type of file or mime type), such as "referral letter", "discharge summary", etc. |
comment | text |
additional short comment such as "abdominal", "ward 3, Dr. Stein", etc. |
|
clin_when | timestamp with time zone |
NOT NULL
DEFAULT now()
date of document content creation (such as exam date), NOT date of document creation or date of import; may be imprecise such as "7/99" |
|
ext_ref | text |
external reference string of physical document, original paper copy can be found with this |
|
dem.org_unit.pk | fk_org_unit | integer |
Optional link to the org unit this document originates from.\n Note that the document may contain data from several units but\n there will always be one "sender". |
Table blobs.doc_med Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
possibly several of these form a medical document such as multiple scanned pages/images
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
blobs.doc_med.pk | fk_doc | integer | NOT NULL |
seq_idx | integer |
index of this object in the sequence of objects for this document |
|
comment | text |
optional tiny comment for this object, such as "page 1" |
|
dem.staff.pk | fk_intended_reviewer | integer |
NOT NULL
who is *supposed* to review this item |
data | bytea |
NOT NULL
actual binary object data; here is why we use bytea: == -------------------------------------------------- To: leon@oss.minimetria.com Cc: pgsql-sql@postgresql.org Subject: Re: [SQL] Recommendation on bytea or blob for binary data like images Date: Fri, 02 Sep 2005 16:33:09 -0400 Message-ID: <17794.1125693189@sss.pgh.pa.us> From: Tom Lane <tgl@sss.pgh.pa.us> List-Archive: <http://archives.postgresql.org/pgsql-sql> List-Help: <mailto:majordomo@postgresql.org?body=help> List-ID: <pgsql-sql.postgresql.org> leon@oss.minimetria.com writes: > Hi, I"d like to know what the official recommendation is on which binary > datatype to use for common small-binary size use. If bytea will work for you, it"s definitely the thing to use. The only real drawback to bytea is that there"s currently no API to read and write bytea values in a streaming fashion. If your objects are small enough that you can load and store them as units, bytea is fine. BLOBs, on the other hand, have a number of drawbacks --- hard to dump, impossible to secure, etc. regards, tom lane == -------------------------------------------------- |
|
filename | text |
the filename from when the data was imported - if any, can be NULL, useful for re-export since legacy devices/applications might expect particular file names and not use mime types for file detection |
Name | Constraint |
---|---|
doc_obj_filename_check | CHECK ((btrim(COALESCE(filename, 'NULL'::text)) <> ''::text)) |
this table enumerates the document types known to the system
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
name | text |
UNIQUE
NOT NULL
the name/label of the document type |
Tables referencing this one via Foreign Key Constraints:
links documents to any hospital stay they might pertain to
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.hospital_stay.pk | fk_stay | integer | NOT NULL |
blobs.doc_med.pk | fk_document | integer | UNIQUE NOT NULL |
Table blobs.lnk_doc2hospital_stay Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
this allows linking documents to episodes, each document can apply to several episodes but only once each
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.episode.pk | fk_episode | integer | UNIQUE#1 NOT NULL |
blobs.doc_med.pk | fk_doc_med | integer | UNIQUE#1 NOT NULL |
Table blobs.lnk_doc_med2episode Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
review table for documents (per object such as a page)
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | integer | PRIMARY KEY DEFAULT nextval('clin.review_root_pk_seq'::regclass) | |
blobs.doc_obj.pk | fk_reviewed_row | integer | UNIQUE#1 NOT NULL |
fk_reviewer | integer | UNIQUE#1 NOT NULL | |
is_technically_abnormal | boolean | NOT NULL | |
clinically_relevant | boolean | NOT NULL | |
comment | text |
Table blobs.reviewed_doc_objs Inherits review_root,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
aggregates some document data descriptions
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
pk_doc | integer | ||
description | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
pk_doc_desc | integer |
SELECT vdm.pk_patient , dd.fk_doc AS pk_doc , dd.text AS description , vdm.pk_encounter , vdm.pk_episode , vdm.pk_health_issue , dd.pk AS pk_doc_desc FROM blobs.doc_desc dd , blobs.v_doc_med vdm WHERE (dd.fk_doc = vdm.pk_doc);
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
pk_doc | integer | ||
clin_when | timestamp with time zone | ||
type | text | ||
l10n_type | text | ||
ext_ref | text | ||
comment | text | ||
episode | text | ||
health_issue | text | ||
episode_open | boolean | ||
unit | text | ||
organization | text | ||
pk_type | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
pk_org_unit | integer | ||
pk_org | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
xmin_doc_med | xid |
SELECT c_enc.fk_patient AS pk_patient , b_dm.pk AS pk_doc , b_dm.clin_when , b_dt.name AS type , _ (b_dt.name) AS l10n_type , b_dm.ext_ref , b_dm.comment , c_epi.description AS episode , c_hi.description AS health_issue , c_epi.is_open AS episode_open , d_ou.description AS unit , d_o.description AS organization , b_dm.fk_type AS pk_type , b_dm.fk_encounter AS pk_encounter , b_dm.fk_episode AS pk_episode , c_epi.fk_health_issue AS pk_health_issue , b_dm.fk_org_unit AS pk_org_unit , d_ou.fk_org AS pk_org , b_dm.modified_when , b_dm.modified_by , b_dm.xmin AS xmin_doc_med FROM ( ( ( ( ( (blobs.doc_med b_dm JOIN blobs.doc_type b_dt ON ( (b_dm.fk_type = b_dt.pk) ) ) JOIN clin.encounter c_enc ON ( (b_dm.fk_encounter = c_enc.pk) ) ) JOIN clin.episode c_epi ON ( (b_dm.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_hi.pk = c_epi.fk_health_issue) ) ) LEFT JOIN dem.org_unit d_ou ON ( (b_dm.fk_org_unit = d_ou.pk) ) ) LEFT JOIN dem.org d_o ON ( (d_ou.fk_org = d_o.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , b_dm.modified_when , b_dm.clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = b_dm.modified_by) ) , ( ('<'::text || (b_dm.modified_by)::text ) || '>'::text ) ) AS modified_by , NULL::text AS soap_cat , ('"'::text || ( ( ( ( ( ( ( ( ( ( ( ( ( (_ (b_dt.name) || '" '::text ) || _ ('with'::text) ) || ' '::text ) || ( SELECT count (1) AS count FROM blobs.doc_obj b_do WHERE (b_do.fk_doc = b_dm.pk) ) ) || ' '::text ) || _ ('part(s)'::text ) ) || ' '::text ) || ' '::text ) || to_char (b_dm.clin_when ,'YYYY-MM-DD HH24:MI'::text ) ) || ' '::text ) || COALESCE ( ( (' ['::text || b_dm.ext_ref) || ']'::text ) ,''::text ) ) || COALESCE ( ( ( ( ( (' @ '::text || d_ou.description) || ' '::text ) || _ ('of'::text) ) || ' '::text ) || d_o.description ) ,''::text ) ) || ' '::text ) || COALESCE ( (' '::text || b_dm.comment) ,''::text ) ) ) AS narrative , b_dm.fk_encounter AS pk_encounter , b_dm.fk_episode AS pk_episode , c_epi.fk_health_issue AS pk_health_issue , b_dm.pk AS src_pk , 'blobs.doc_med'::text AS src_table , b_dm.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ ( c_ety.description) AS encounter_l10n_type FROM ( ( ( ( ( ( (blobs.doc_med b_dm JOIN clin.encounter c_enc ON ( (b_dm.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN blobs.doc_type b_dt ON ( (b_dm.fk_type = b_dt.pk) ) ) JOIN clin.episode c_epi ON ( (b_dm.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) ) LEFT JOIN dem.org_unit d_ou ON ( (b_dm.fk_org_unit = d_ou.pk) ) ) LEFT JOIN dem.org d_o ON ( (d_ou.fk_org = d_o.pk) ) ) ;
list active document types, those that are activated for use
F-Key | Name | Type | Description |
---|---|---|---|
pk_doc_type | integer | ||
type | text | ||
l10n_type | text | ||
is_user_defined | boolean | ||
is_in_use | boolean | ||
xmin_doc_type | xid |
SELECT dt.pk AS pk_doc_type , dt.name AS type , _ (dt.name) AS l10n_type , (NOT (EXISTS ( SELECT 1 FROM ref.document_type WHERE (document_type.description = dt.name) ) ) ) AS is_user_defined , (EXISTS ( SELECT 1 FROM blobs.doc_med WHERE (doc_med.fk_type = dt.pk) ) ) AS is_in_use , dt.xmin AS xmin_doc_type FROM blobs.doc_type dt;
shows the latest picture of the patient, currently the highest seq_idx of the newest document of type "patient photograph"
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
doc_comment | text | ||
date_taken | timestamp with time zone | ||
ext_ref | text | ||
obj_seq_idx | integer | ||
obj_comment | text | ||
pk_doc | integer | ||
pk_obj | integer | ||
image | bytea |
SELECT vo4d.pk_patient , vo4d.doc_comment , vo4d.date_generated AS date_taken , vo4d.ext_ref , vo4d.seq_idx AS obj_seq_idx , vo4d.obj_comment , vo4d.pk_doc , vo4d.pk_obj , bdo.data AS image FROM blobs.v_obj4doc_no_data vo4d , blobs.doc_obj bdo WHERE ( (vo4d.type = 'patient photograph'::text) AND (vo4d.seq_idx = ( SELECT max (vo4d1.seq_idx) AS max FROM blobs.v_obj4doc_no_data vo4d1 WHERE ( (vo4d1.pk_patient = vo4d.pk_patient) AND (vo4d1.type = 'patient photograph'::text) ) GROUP BY vo4d1.date_generated ORDER BY vo4d1.date_generated DESC LIMIT 1 ) ) AND (bdo.pk = vo4d.pk_obj) );
denormalized metadata for blobs.doc_obj but without the data itself
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
pk_obj | integer | ||
seq_idx | integer | ||
size | integer | ||
date_generated | timestamp with time zone | ||
type | text | ||
l10n_type | text | ||
ext_ref | text | ||
episode | text | ||
doc_comment | text | ||
obj_comment | text | ||
filename | text | ||
pk_intended_reviewer | integer | ||
reviewed | boolean | ||
reviewed_by_you | boolean | ||
reviewed_by_intended_reviewer | boolean | ||
pk_doc | integer | ||
pk_type | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
xmin_doc_obj | xid |
SELECT b_vdm.pk_patient , b_do.pk AS pk_obj , b_do.seq_idx , octet_length (COALESCE (b_do.data ,'\x'::bytea ) ) AS size , b_vdm.clin_when AS date_generated , b_vdm.type , b_vdm.l10n_type , b_vdm.ext_ref , b_vdm.episode , b_vdm.comment AS doc_comment , b_do.comment AS obj_comment , b_do.filename , b_do.fk_intended_reviewer AS pk_intended_reviewer , (EXISTS ( SELECT 1 FROM blobs.reviewed_doc_objs WHERE (reviewed_doc_objs.fk_reviewed_row = b_do.pk) ) ) AS reviewed , (EXISTS ( SELECT 1 FROM blobs.reviewed_doc_objs WHERE ( (reviewed_doc_objs.fk_reviewed_row = b_do.pk) AND (reviewed_doc_objs.fk_reviewer = ( SELECT staff.pk FROM dem.staff WHERE (staff.db_user = "current_user" () ) ) ) ) ) ) AS reviewed_by_you , (EXISTS ( SELECT 1 FROM blobs.reviewed_doc_objs WHERE ( (reviewed_doc_objs.fk_reviewed_row = b_do.pk) AND (reviewed_doc_objs.fk_reviewer = b_do.fk_intended_reviewer) ) ) ) AS reviewed_by_intended_reviewer , b_vdm.pk_doc , b_vdm.pk_type , b_vdm.pk_encounter , b_vdm.pk_episode , b_vdm.pk_health_issue , b_do.xmin AS xmin_doc_obj FROM (blobs.v_doc_med b_vdm JOIN blobs.doc_obj b_do ON ( (b_do.fk_doc = b_vdm.pk_doc) ) ) WHERE (b_vdm.pk_doc = b_do.fk_doc);
F-Key | Name | Type | Description |
---|---|---|---|
pk_doc_obj | integer | ||
reviewer | text | ||
is_technically_abnormal | boolean | ||
clinically_relevant | boolean | ||
is_review_by_responsible_reviewer | boolean | ||
is_your_review | boolean | ||
comment | text | ||
reviewed_when | timestamp with time zone | ||
modified_by | name | ||
pk_review_root | integer | ||
pk_reviewer | integer | ||
pk_patient | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer |
SELECT rdo.fk_reviewed_row AS pk_doc_obj , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.pk = rdo.fk_reviewer) ) , ( ('<#'::text || rdo.fk_reviewer) || '>'::text ) ) AS reviewer , rdo.is_technically_abnormal , rdo.clinically_relevant , (EXISTS ( SELECT 1 FROM blobs.doc_obj WHERE ( (doc_obj.pk = rdo.fk_reviewed_row) AND (doc_obj.fk_intended_reviewer = rdo.fk_reviewer) ) ) ) AS is_review_by_responsible_reviewer , (EXISTS ( SELECT 1 FROM dem.staff WHERE ( (staff.pk = rdo.fk_reviewer) AND (staff.db_user = "current_user" () ) ) ) ) AS is_your_review , rdo.comment , rdo.modified_when AS reviewed_when , rdo.modified_by , rdo.pk AS pk_review_root , rdo.fk_reviewer AS pk_reviewer , ( SELECT v_obj4doc_no_data.pk_patient FROM blobs.v_obj4doc_no_data WHERE (v_obj4doc_no_data.pk_obj = rdo.fk_reviewed_row) ) AS pk_patient , ( SELECT v_obj4doc_no_data.pk_encounter FROM blobs.v_obj4doc_no_data WHERE (v_obj4doc_no_data.pk_obj = rdo.fk_reviewed_row) ) AS pk_encounter , ( SELECT v_obj4doc_no_data.pk_episode FROM blobs.v_obj4doc_no_data WHERE (v_obj4doc_no_data.pk_obj = rdo.fk_reviewed_row) ) AS pk_episode , ( SELECT v_obj4doc_no_data.pk_health_issue FROM blobs.v_obj4doc_no_data WHERE (v_obj4doc_no_data.pk_obj = rdo.fk_reviewed_row) ) AS pk_health_issue FROM blobs.reviewed_doc_objs rdo;
F-Key | Name | Type | Description |
---|---|---|---|
pk_doc | integer | ||
pk_intended_reviewer | integer | ||
pk_patient | integer |
SELECT DISTINCT ON (b_do.fk_doc) b_do.fk_doc AS pk_doc , min (b_do.fk_intended_reviewer) AS pk_intended_reviewer , min (c_e.fk_patient) AS pk_patient FROM ( (blobs.doc_obj b_do JOIN blobs.doc_med b_dm ON ( (b_dm.pk = b_do.fk_doc) ) ) JOIN clin.encounter c_e ON ( (b_dm.fk_encounter = c_e.pk) ) ) WHERE (NOT (EXISTS ( SELECT 1 FROM blobs.reviewed_doc_objs b_rdo WHERE (b_rdo.fk_reviewed_row = b_do.pk) ) ) ) GROUP BY b_do.fk_doc;
F-Key | Name | Type | Description |
---|---|---|---|
received_when | timestamp with time zone | ||
modified_by | text | ||
provider | text | ||
importance | integer | ||
category | text | ||
l10n_category | text | ||
type | text | ||
l10n_type | text | ||
comment | text | ||
pk_context | integer[] | ||
data | text | ||
pk_inbox_message | integer | ||
pk_staff | integer | ||
pk_category | integer | ||
pk_type | integer | ||
pk_patient | integer | ||
is_virtual | boolean | ||
due_date | timestamp with time zone | ||
expiry_date | timestamp with time zone | ||
is_overdue | boolean | ||
is_expired | boolean | ||
interval_due | interval | ||
xmin_message_inbox | integer |
SELECT now () AS received_when , '<system>'::text AS modified_by , NULL::text AS provider , 0 AS importance , 'clinical'::text AS category , _ ('clinical'::text) AS l10n_category , 'review docs'::text AS type , _ ('review docs'::text) AS l10n_type , ( SELECT ( ( ( ( ( (b_vuds.no_of_docs || ' '::text) || _ ('unreviewed documents for patient'::text) ) || ' '::text ) || d_n.lastnames ) || ', '::text ) || d_n.firstnames ) ) AS comment , NULL::integer[] AS pk_context , NULL::text AS data , NULL::integer AS pk_inbox_message , ( SELECT staff.pk FROM dem.staff WHERE (staff.db_user = "current_user" () ) ) AS pk_staff , ( SELECT v_inbox_item_type.pk_category FROM dem.v_inbox_item_type WHERE (v_inbox_item_type.type = 'review docs'::text) ) AS pk_category , ( SELECT v_inbox_item_type.pk_type FROM dem.v_inbox_item_type WHERE (v_inbox_item_type.type = 'review docs'::text) ) AS pk_type , b_vuds.pk_patient , true AS is_virtual , (now () - '01:00:00'::interval ) AS due_date , NULL::timestamp with time zone AS expiry_date , true AS is_overdue , false AS is_expired , '01:00:00'::interval AS interval_due , NULL::integer AS xmin_message_inbox FROM (blobs.v_unreviewed_docs_summary b_vuds JOIN dem.names d_n ON ( (b_vuds.pk_patient = d_n.id_identity) ) ) WHERE (d_n.active IS TRUE);
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
no_of_docs | bigint |
SELECT b_vud.pk_patient , count (1) AS no_of_docs FROM blobs.v_unreviewed_docs b_vud GROUP BY b_vud.pk_patient;
DECLARE _pk_doc alias for $1; _pk_encounter alias for $2; _del_note text; _doc_row record; _obj_row record; tmp text; BEGIN select * into _doc_row from blobs.doc_med where pk = _pk_doc; _del_note := _('Deletion of document') || E': ' || ' ' || to_char(_doc_row.clin_when, 'YYYY-MM-DD HH24:MI') || ' "' || (select _(dt.name) from blobs.doc_type dt where pk = _doc_row.fk_type) || '"' || coalesce(' (' || _doc_row.ext_ref || ')', '') || coalesce(E' ' || _doc_row.comment, '') ; FOR _obj_row IN select * from blobs.doc_obj where fk_doc = _pk_doc order by seq_idx LOOP _del_note := _del_note || E' ' || ' #' || coalesce(_obj_row.seq_idx, '-1') || ': "' || coalesce(_obj_row.comment, '') || E'" ' || ' ' || coalesce(_obj_row.filename, '') || E' '; end LOOP; insert into clin.clin_narrative (fk_encounter, fk_episode, narrative, soap_cat) values ( _pk_encounter, _doc_row.fk_episode, _del_note, NULL ); -- should auto-cascade: --delete from blobs.doc_obj where fk_doc = _pk_doc; -- should auto-NULL: --bill.bill.fk_doc delete from blobs.doc_med where pk = _pk_doc; return True; END;
DECLARE _pk_doc_part alias for $1; _pk_encounter alias for $2; _del_note text; _doc_row record; _obj_row record; tmp text; BEGIN select * into _obj_row from blobs.doc_obj where pk = _pk_doc_part; select * into _doc_row from blobs.doc_med where pk = _obj_row.fk_doc; _del_note := _('Deletion of part from document') || E': ' || ' ' || to_char(_doc_row.clin_when, 'YYYY-MM-DD HH24:MI') || ' "' || (select _(dt.name) from blobs.doc_type dt where pk = _doc_row.fk_type) || '"' || coalesce(' (' || _doc_row.ext_ref || ')', '') || coalesce(E' ' || _doc_row.comment, '') || E' ' || ' #' || coalesce(_obj_row.seq_idx, '-1') || ': "' || coalesce(_obj_row.comment, '') || E'" ' || ' ' || coalesce(_obj_row.filename, '') || E' ' ; insert into clin.clin_narrative (fk_encounter, fk_episode, narrative, soap_cat) values ( _pk_encounter, _doc_row.fk_episode, _del_note, NULL ); delete from blobs.doc_obj where pk = _pk_doc_part; return True; END;
This trigger function is called before a lnk_doc_med2episode row is inserted or updated. It makes sure the episode does not duplicate the primary episode for this document listed in doc_med. If it does the insert/update is skipped.
BEGIN -- if already in doc_med perform 1 from blobs.doc_med dm where dm.fk_episode = NEW.fk_episode and dm.pk = NEW.fk_doc_med; if FOUND then -- skip the insert/update return null; end if; return NEW; END;
BEGIN if (NEW.data != OLD.data) or ((NEW.data != OLD.data) is NULL) then delete from blobs.reviewed_doc_objs where fk_reviewed_row = OLD.pk; end if; return NEW; END;
This trigger function is called when a doc_med row is inserted or updated. It makes sure the primary episode listed in doc_med is not duplicated in lnk_doc_med2episode for the same document. If it exists in the latter it is removed from there.
BEGIN -- if update if TG_OP = 'UPDATE' then -- and no change if NEW.fk_episode = OLD.fk_episode then -- then do nothing return NEW; end if; end if; -- if already in link table perform 1 from blobs.lnk_doc_med2episode ldm2e where ldm2e.fk_episode = NEW.fk_episode and ldm2e.fk_doc_med = NEW.pk; if FOUND then -- delete from link table delete from blobs.lnk_doc_med2episode where fk_episode = NEW.fk_episode and fk_doc_med = NEW.pk; end if; return NEW; END;
Set the default on blobs.doc_obj.fk_intended_reviewer.
DECLARE _pk_patient integer; _pk_provider integer; BEGIN -- explicitely set ? if NEW.fk_intended_reviewer is not NULL then return NEW; end if; -- find patient via document select fk_patient into _pk_patient from clin.encounter where clin.encounter.pk = ( select fk_encounter from blobs.doc_med where pk = NEW.fk_doc ); -- does patient have primary provider ? select fk_primary_provider into _pk_provider from dem.identity where dem.identity.pk = _pk_patient; if _pk_provider is not NULL then NEW.fk_intended_reviewer := _pk_provider; return NEW; end if; -- else use CURRENT_USER select pk into _pk_provider from dem.staff where dem.staff.db_user = current_user; NEW.fk_intended_reviewer := _pk_provider; return NEW; END;
declare msg text; begin if NEW.seq_idx is NULL then return NEW; end if; perform 1 from blobs.doc_obj where pk <> NEW.pk and fk_doc = NEW.fk_doc and seq_idx = NEW.seq_idx; if FOUND then msg := '[blobs.trf_verify_page_number]: uniqueness violation: seq_idx [' || NEW.seq_idx || '] already exists for fk_doc [' || NEW.fk_doc || ']'; raise exception '%', msg; end if; return NEW; end;
This schema holds all the configuration data.
stores opaque configuration data, either text or binary, note that it will be difficult to share such options among different types of clients
F-Key | Name | Type | Description |
---|---|---|---|
cfg.cfg_item.pk | fk_item | integer | NOT NULL |
value | bytea | NOT NULL | |
pk | serial | PRIMARY KEY |
this table holds all "instances" of cfg.cfg_template
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
cfg.cfg_template.pk | fk_template | integer |
UNIQUE#1
NOT NULL
this points to the class of this option, think of this as a base object, this also defines the data type |
owner | name |
UNIQUE#1
NOT NULL
DEFAULT "current_user"()
the database level user this option belongs to; this is the "role" of the user from the perspective of the database; can be "default" at the application level to indicate that it does not care |
|
workplace | text |
UNIQUE#1
- the logical workplace this option pertains to - can be a hostname but should be a logical rather than a physical identifier as machines get moved, workplaces do not, kind of like a "role" for the machine - associate this with a physical workplace through a local config file or environment variable |
|
cookie | text |
UNIQUE#1
an arbitrary, opaque entity the client code can use to associate this config item with even finer grained context; could be the pertinent patient ID for patient specific options |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
cfg.cfg_item.pk | fk_item | integer | NOT NULL |
value | numeric | NOT NULL | |
pk | serial | PRIMARY KEY |
F-Key | Name | Type | Description |
---|---|---|---|
cfg.cfg_item.pk | fk_item | integer | NOT NULL |
value | text[] | NOT NULL | |
pk | serial | PRIMARY KEY |
F-Key | Name | Type | Description |
---|---|---|---|
cfg.cfg_item.pk | fk_item | integer | NOT NULL |
value | text | NOT NULL | |
pk | serial | PRIMARY KEY |
meta definition of config items
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
name | text |
NOT NULL
DEFAULT 'must set this !'::text
the name of the option; this MUST be set to something meaningful |
|
cfg.cfg_type_enum.name | type | text |
NOT NULL
type of the value |
cfg_group | text |
NOT NULL
DEFAULT 'xxxDEFAULTxxx'::text
just for logical grouping of options according to task sets to facilitate better config management |
|
description | text |
NOT NULL
DEFAULT 'programmer is an avid Camel Book Reader'::text
arbitrary description (user visible) |
Tables referencing this one via Foreign Key Constraints:
enumeration of config option data types
F-Key | Name | Type | Description |
---|---|---|---|
name | text | UNIQUE NOT NULL |
Tables referencing this one via Foreign Key Constraints:
maps a service name to a database location for a particular user, includes user credentials for that database
F-Key | Name | Type | Description |
---|---|---|---|
id | serial | PRIMARY KEY | |
profile | character(25) |
DEFAULT 'default'::bpchar
allows multiple profiles per user/ pseudo user, one user may have different configuration profiles depending on role, need and location |
|
username | character(25) |
DEFAULT "current_user"()
user name as used within the GNUmed system |
|
ddb | integer |
which GNUmed service are we mapping to a database here |
|
db | integer |
how to reach the database host for this service |
|
crypt_pwd | text |
password for user and database, encrypted |
|
crypt_algo | text |
encryption algorithm used for password encryption |
|
pwd_hash | text |
hash of the unencrypted password |
|
hash_algo | text |
algorithm used for password hashing |
Stores a banner to show when clients log on.
F-Key | Name | Type | Description |
---|---|---|---|
message | text |
The actual message to show. |
|
singularizer | boolean |
UNIQUE
DEFAULT true
Makes sure there only ever is one such banner at any given time. |
Name | Constraint |
---|---|
db_logon_banner_message_check | CHECK ((btrim(message) <> ''::text)) |
db_logon_banner_singularizer_check | CHECK ((singularizer IS TRUE)) |
This table stores SQL commands to be used in frontend report style queries.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
label | text | UNIQUE NOT NULL | |
cmd | text | NOT NULL |
Table cfg.report_query Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
report_query_cmd_check | CHECK ((btrim(COALESCE(cmd, 'NULL'::text)) <> ''::text)) |
report_query_label_check | CHECK ((btrim(COALESCE(label, 'NULL'::text)) <> ''::text)) |
F-Key | Name | Type | Description |
---|---|---|---|
option | text | ||
description | text | ||
owner | name | ||
workplace | text | ||
cookie | text | ||
type | text | ||
group | text | ||
pk_cfg_template | integer | ||
pk_cfg_item | integer |
SELECT cfg_t.name AS option , cfg_t.description , cfg_i.owner , cfg_i.workplace , cfg_i.cookie , cfg_t.type , cfg_t.cfg_group AS "group" , cfg_t.pk AS pk_cfg_template , cfg_i.pk AS pk_cfg_item FROM cfg.cfg_template cfg_t , cfg.cfg_item cfg_i WHERE (cfg_i.fk_template = cfg_t.pk);
F-Key | Name | Type | Description |
---|---|---|---|
option | text | ||
value | bytea | ||
description | text | ||
owner | name | ||
workplace | text | ||
cookie | text | ||
group | text | ||
pk_cfg_template | integer | ||
pk_cfg_item | integer |
SELECT cfg_t.name AS option , cfg_v.value , cfg_t.description , cfg_i.owner , cfg_i.workplace , cfg_i.cookie , cfg_t.cfg_group AS "group" , cfg_t.pk AS pk_cfg_template , cfg_i.pk AS pk_cfg_item FROM cfg.cfg_template cfg_t , cfg.cfg_item cfg_i , cfg.cfg_data cfg_v WHERE ( (cfg_i.fk_template = cfg_t.pk) AND (cfg_v.fk_item = cfg_i.pk) );
F-Key | Name | Type | Description |
---|---|---|---|
option | text | ||
value | numeric | ||
description | text | ||
owner | name | ||
workplace | text | ||
cookie | text | ||
group | text | ||
pk_cfg_template | integer | ||
pk_cfg_item | integer |
SELECT cfg_t.name AS option , cfg_v.value , cfg_t.description , cfg_i.owner , cfg_i.workplace , cfg_i.cookie , cfg_t.cfg_group AS "group" , cfg_t.pk AS pk_cfg_template , cfg_i.pk AS pk_cfg_item FROM cfg.cfg_template cfg_t , cfg.cfg_item cfg_i , cfg.cfg_numeric cfg_v WHERE ( (cfg_i.fk_template = cfg_t.pk) AND (cfg_v.fk_item = cfg_i.pk) );
F-Key | Name | Type | Description |
---|---|---|---|
option | text | ||
value | text[] | ||
description | text | ||
owner | name | ||
workplace | text | ||
cookie | text | ||
group | text | ||
pk_cfg_template | integer | ||
pk_cfg_item | integer |
SELECT cfg_t.name AS option , cfg_v.value , cfg_t.description , cfg_i.owner , cfg_i.workplace , cfg_i.cookie , cfg_t.cfg_group AS "group" , cfg_t.pk AS pk_cfg_template , cfg_i.pk AS pk_cfg_item FROM cfg.cfg_template cfg_t , cfg.cfg_item cfg_i , cfg.cfg_str_array cfg_v WHERE ( (cfg_i.fk_template = cfg_t.pk) AND (cfg_v.fk_item = cfg_i.pk) );
F-Key | Name | Type | Description |
---|---|---|---|
option | text | ||
value | text | ||
description | text | ||
owner | name | ||
workplace | text | ||
cookie | text | ||
group | text | ||
pk_cfg_template | integer | ||
pk_cfg_item | integer |
SELECT cfg_t.name AS option , cfg_v.value , cfg_t.description , cfg_i.owner , cfg_i.workplace , cfg_i.cookie , cfg_t.cfg_group AS "group" , cfg_t.pk AS pk_cfg_template , cfg_i.pk AS pk_cfg_item FROM cfg.cfg_template cfg_t , cfg.cfg_item cfg_i , cfg.cfg_string cfg_v WHERE ( (cfg_i.fk_template = cfg_t.pk) AND (cfg_v.fk_item = cfg_i.pk) );
declare _option alias for $1; _val_type alias for $2; _workplace alias for $3; _cookie alias for $4; _owner alias for $5; real_owner text; pk_template integer; pk_item integer; begin -- check template select into pk_template pk from cfg.cfg_template where name = _option and type = _val_type; if not FOUND then insert into cfg.cfg_template (name, type) values (_option, _val_type); select into pk_template currval('cfg.cfg_template_pk_seq'); end if; if _owner is null then select into real_owner CURRENT_USER; else real_owner := _owner; end if; -- check item if _cookie is NULL then select into pk_item pk from cfg.cfg_item where fk_template = pk_template and owner = real_owner and workplace = _workplace and cookie is null; else select into pk_item pk from cfg.cfg_item where fk_template = pk_template and owner = real_owner and workplace = _workplace and cookie = _cookie; end if; if FOUND then return pk_item; end if; insert into cfg.cfg_item ( fk_template, workplace, cookie, owner ) values ( pk_template, _workplace, _cookie, real_owner ); select into pk_item currval('cfg.cfg_item_pk_seq'); return pk_item; end;
set option, owner = NULL means CURRENT_USER
declare _option alias for $1; _value alias for $2; _workplace alias for $3; _cookie alias for $4; _owner alias for $5; val_type text; pk_item integer; rows integer; cmd text; begin -- determine data type if _value is of (text, char, varchar, name) then val_type := 'string'; elsif _value is of (smallint, integer, bigint, numeric, boolean) then val_type := 'numeric'; elsif _value is of (bytea) then val_type := 'data'; elsif _value is of (text[]) then val_type := 'str_array'; else raise exception 'cfg.set_option(text, any, text, text, text): invalid type of value'; end if; -- create template/item if need be select into pk_item cfg.create_cfg_item(_option, val_type, _workplace, _cookie, _owner); -- set item value cmd := 'select 1 from cfg.cfg_' || val_type || ' where fk_item=' || pk_item || ';'; execute cmd; get diagnostics rows = row_count; found := rows <> 0; if FOUND then if val_type = 'str_array' then cmd := 'update cfg.cfg_str_array set value=''{"' || array_to_string(_value, '","') || '"}'' where fk_item=' || pk_item || ';'; elsif val_type = 'data' then cmd := 'update cfg.cfg_data set value=''' || encode(_value, 'escape') || ''' where fk_item=' || pk_item || ';'; else cmd := 'update cfg.cfg_' || val_type || ' set value=' || quote_literal(_value) || ' where fk_item=' || pk_item || ';'; end if; execute cmd; return True; end if; if val_type = 'str_array' then cmd := 'insert into cfg.cfg_str_array(fk_item, value) values (' || pk_item || ', ''{"' || array_to_string(_value, '","') || '"}'');'; elsif val_type = 'data' then cmd := 'insert into cfg.cfg_data(fk_item, value) values (' || pk_item || ', ''' || encode(_value, 'escape') || ''');'; else cmd := 'insert into cfg.cfg_' || val_type || ' (fk_item, value) values (' || pk_item || ', ' || quote_literal(_value) || ');'; end if; execute cmd; return True; end;
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
value | text | UNIQUE NOT NULL |
Tables referencing this one via Foreign Key Constraints:
patient allergy details
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone | NOT NULL DEFAULT now() | |
clin.encounter.pk | fk_encounter | integer | NOT NULL |
clin.episode.pk | fk_episode | integer | NOT NULL |
narrative | text |
used as field "reaction" |
|
soap_cat | text | DEFAULT 'o'::text | |
pk | serial | PRIMARY KEY | |
substance | text |
NOT NULL
real-world name of substance the patient reacted to, brand name if drug |
|
substance_code | text |
data source specific opaque product code; must provide a link to a unique product/substance in the database in use; should follow the parseable convention of "<source>::<source version>::<identifier>", e.g. "MIMS::2003-1::190" for Zantac; it is left as an exercise to the application to know what to do with this information |
|
generics | text |
names of generic compounds if drug; brand names change/disappear, generic names do not |
|
allergene | text |
name of allergenic ingredient in substance if known |
|
atc_code | text |
ATC code of allergene or substance if approprate, applicable for penicilline, not so for cat fur |
|
clin._enum_allergy_type.pk | fk_type | integer |
NOT NULL
allergy/sensitivity |
generic_specific | boolean |
DEFAULT false
only meaningful for *drug*/*generic* reactions: 1) true: applies to one in "generics" forming "substance", if more than one generic listed in "generics" then "allergene" *must* contain the generic in question; 2) false: applies to drug class of "substance"; |
|
definite | boolean |
DEFAULT false
true: definite, false: not definite |
Table clin.allergy Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
has_allergy | integer |
patient allergenic state: - null: unknown, not asked, no data available - -1: unknown, asked, no data obtained - 0: known, asked, has no known allergies - 1: known, asked, does have allergies |
|
comment | text |
A comment on the state, such as "patient says no allergies but I think he is holding back some". |
|
last_confirmed | timestamp with time zone |
When was the state of allergies last confirmed. Must be not NULL if has_allergy is not NULL. |
|
clin.encounter.pk | fk_encounter | integer | NOT NULL |
Table clin.allergy_state Inherits audit_fields,
Name | Constraint |
---|---|
allergy_state_check | CHECK (((has_allergy IS NULL) OR ((has_allergy IS NOT NULL) AND (last_confirmed IS NOT NULL)))) |
allergy_state_has_allergy_check | CHECK ((has_allergy = ANY (ARRAY[NULL::integer, 0, 1]))) |
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Other tables link to this if they need more free text fields.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone | NOT NULL DEFAULT now() | |
clin.encounter.pk | fk_encounter | integer | NOT NULL |
clin.episode.pk | fk_episode | integer | NOT NULL |
narrative | text | ||
soap_cat | text | ||
pk | serial | PRIMARY KEY |
Table clin.clin_aux_note Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
stores additional detail on those clin.clin_narrative rows where soap_cat=a that are true diagnoses, true diagnoses DO have a code from one of the coding systems
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.clin_narrative.pk | fk_narrative | integer | UNIQUE NOT NULL |
laterality | character(1) | DEFAULT NULL::bpchar | |
is_chronic | boolean |
NOT NULL
DEFAULT false
whether this diagnosis is chronic, eg. no complete cure is to be expected, regardless of whether it is *active* right now (think of active/non-active phases of Multiple Sclerosis which is sure chronic) |
|
is_active | boolean |
NOT NULL
DEFAULT true
whether diagnosis is currently active or dormant |
|
is_definite | boolean | NOT NULL DEFAULT false | |
clinically_relevant | boolean |
NOT NULL
DEFAULT true
whether this diagnosis is considered clinically relevant, eg. significant; currently active diagnoses are considered to always be relevant, while inactive ones may or may not be |
Table clin.clin_diag Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_diag_laterality_check | CHECK (((laterality = ANY (ARRAY['l'::bpchar, 'r'::bpchar, 'b'::bpchar, '?'::bpchar])) OR (laterality IS NULL))) |
if_active_then_relevant | CHECK (((is_active = false) OR ((is_active = true) AND (clinically_relevant = true)))) |
stores arbitrary types for tagging clinical items
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
type | text |
UNIQUE
NOT NULL
DEFAULT 'history'::text
the full name of the item type such as "family history" |
|
code | text |
UNIQUE
NOT NULL
DEFAULT 'Hx'::text
shorthand for the type, eg "FHx" |
Table clin.clin_item_type Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
Used to store clinical free text *not* associated with any other table. Used to implement a simple SOAP structure. Also other tags can be associated via link tables.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone |
NOT NULL
DEFAULT now()
when did the item reach clinical reality |
|
clin.encounter.pk | fk_encounter | integer | NOT NULL |
clin.episode.pk | fk_episode | integer | NOT NULL |
narrative | text | ||
soap_cat | text | ||
pk | serial | PRIMARY KEY |
Table clin.clin_narrative Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
narrative_neither_null_nor_empty | CHECK ((btrim(COALESCE(narrative, ''::text)) <> ''::text)) |
ancestor table for clinical items of any kind, basic unit of clinical information, do *not* store data in here directly, use child tables, contains all the clinical narrative aggregated for full text search, ancestor for all tables that want to store clinical free text
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | serial |
PRIMARY KEY
the primary key, not named "id" or "pk" as usual since child tables will have "id"/"pk"-named primary keys already and we would get duplicate columns while inheriting from this table |
|
clin_when | timestamp with time zone |
NOT NULL
DEFAULT now()
when this clinical item became known, can be different from when it was entered into the system (= audit.audit_fields.modified_when) |
|
clin.encounter.pk | fk_encounter | integer |
NOT NULL
the encounter this item belongs to |
clin.episode.pk | fk_episode | integer |
NOT NULL
the episode this item belongs to |
narrative | text |
each clinical item by default inherits a free text field for clinical narrative |
|
soap_cat | text |
each clinical item must be either one of the S, O, A, P, U categories or NULL to indicate a non-clinical item, U meaning Unspecified-but-clinical |
Table clin.clin_root_item Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
a clinical encounter between a person and the health care system
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.patient.fk_identity | fk_patient | integer |
NOT NULL
PK of subject of care, should be PUPIC, actually |
clin.encounter_type.pk | fk_type | integer |
NOT NULL
DEFAULT 1
PK of type of this encounter |
dem.org_unit.pk | fk_location | integer |
NOT NULL
PK of location *of care*, e.g. where the provider is at |
source_time_zone | interval |
time zone of location, used to approximate source time zone for all timestamps in this encounter |
|
reason_for_encounter | text |
the RFE for the encounter as related by either the patient or the provider (say, in a chart review) |
|
assessment_of_encounter | text |
the Assessment of Encounter (eg consultation summary) as determined by the provider, may simply be a concatenation of soAp narrative, this assessment should go across all problems |
|
started | timestamp with time zone | NOT NULL DEFAULT now() | |
last_affirmed | timestamp with time zone | NOT NULL DEFAULT now() |
Table clin.encounter Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_enc_sane_duration | CHECK ((last_affirmed >= started)) |
encounter_assessment_of_encounter_check | CHECK ((btrim(COALESCE(assessment_of_encounter, 'xxxDEFAULTxxx'::text)) <> ''::text)) |
encounter_reason_for_encounter_check | CHECK ((btrim(COALESCE(reason_for_encounter, 'xxxDEFAULTxxx'::text)) <> ''::text)) |
Tables referencing this one via Foreign Key Constraints:
these are the types of encounter
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
description | text | UNIQUE NOT NULL |
Clinical episodes such as "Otitis media", "traffic accident 7/99", "Hepatitis B". This covers a range of time in which activity of illness was noted for the problem episode.description.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.health_issue.pk | fk_health_issue | integer |
health issue this episode belongs to |
description | text |
NOT NULL
description/name of this episode |
|
is_open | boolean |
DEFAULT true
whether the episode is open (eg. there is activity for it), means open in a temporal sense as in "not closed yet"; only one episode can be open per health issue |
|
clin.encounter.pk | fk_encounter | integer |
NOT NULL
The encounter during which this episode was added (begun). |
diagnostic_certainty_classification | text |
The certainty at which this problem is believed to be a diagnosis: A: sign (Symptom) B: cluster of signs (Symptomkomplex) C: syndromic diagnosis (Bild einer Diagnose) D: proven diagnosis (diagnostisch gesichert) |
|
summary | text |
Used for tracking the summary of this episode. |
Table clin.episode Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
episode_sane_summary | CHECK (gm.is_null_or_non_empty_string(summary)) |
sane_description | CHECK ((gm.is_null_or_blank_string(description) IS FALSE)) |
valid_diagnostic_certainty_classification | CHECK ((diagnostic_certainty_classification = ANY (ARRAY['A'::text, 'B'::text, 'C'::text, 'D'::text, NULL::text]))) |
Tables referencing this one via Foreign Key Constraints:
A table to hold binary data for patients intended for export as print/mail/fax/removable media/...
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
clin.patient.fk_identity | fk_identity | integer |
UNIQUE#1
the patient this item pertains to, DELETE does not cascade because we may have wanted to export data before deleting a patient ... |
created_by | name |
NOT NULL
DEFAULT "current_user"()
who put this item here |
|
created_when | timestamp with time zone |
NOT NULL
DEFAULT statement_timestamp()
when was this item put here |
|
designation | text |
the intended use for this item if any, say "print" for printing |
|
description | text |
UNIQUE#1
a unique-per-patient description of the item |
|
blobs.doc_obj.pk | fk_doc_obj | integer |
UNIQUE
points to a document object |
data | bytea |
binary data representing the actual export item (unless fk_doc_obj points to a document object) |
|
filename | text |
a filename, possibly from an import, if applicable, mainly used to please non-mime pseudo operating systems |
Name | Constraint |
---|---|
clin_export_item_fk_obj_or_data | CHECK ((((data IS NULL) AND (fk_doc_obj IS NOT NULL)) OR ((data IS NOT NULL) AND (fk_doc_obj IS NULL)))) |
clin_export_item_fk_obj_or_filename | CHECK ((((filename IS NULL) AND (fk_doc_obj IS NOT NULL)) OR ((filename IS NOT NULL) AND (fk_doc_obj IS NULL)))) |
clin_export_item_fk_obj_or_fk_identity | CHECK ((((fk_identity IS NULL) AND (fk_doc_obj IS NOT NULL)) OR ((fk_identity IS NOT NULL) AND (fk_doc_obj IS NULL)))) |
clin_export_item_sane_by | CHECK ((length((created_by)::text) > 0)) |
clin_export_item_sane_data | CHECK (((data IS NULL) OR (length(data) > 0))) |
clin_export_item_sane_description | CHECK ((gm.is_null_or_blank_string(description) IS FALSE)) |
clin_export_item_sane_designation | CHECK ((gm.is_null_or_non_empty_string(designation) IS TRUE)) |
clin_export_item_sane_filename | CHECK ((gm.is_null_or_non_empty_string(filename) IS TRUE)) |
lists external care situations for patients
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.encounter.pk | fk_encounter | integer |
NOT NULL
the encounter during which this external care item was first documented |
clin.health_issue.pk | fk_health_issue | integer |
UNIQUE#1
link to a health issue, if any |
issue | text |
description of the issue of external care |
|
dem.org_unit.pk | fk_org_unit | integer |
UNIQUE#1
NOT NULL
link to the org unit where care is rendered |
provider | text |
name of actual provider at .fk_org_unit |
|
comment | text |
comment on the patient/provider relationship, say role/issues cared for/... |
Table clin.external_care Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_ext_care_issue_xor_fk_issue | CHECK ((((fk_health_issue IS NULL) AND (issue IS NOT NULL)) OR ((fk_health_issue IS NOT NULL) AND (issue IS NULL)))) |
clin_ext_care_sane_comment | CHECK ((gm.is_null_or_non_empty_string(comment) IS TRUE)) |
clin_ext_care_sane_issue | CHECK ((gm.is_null_or_non_empty_string(issue) IS TRUE)) |
clin_ext_care_sane_provider | CHECK ((gm.is_null_or_non_empty_string(provider) IS TRUE)) |
This table stores family history items on persons not otherwise in the database.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone |
NOT NULL
DEFAULT now()
When the family history item became known to the patient (not the afflicted relative). |
|
clin.encounter.pk | fk_encounter | integer |
NOT NULL
encounter during which family history item became known |
clin.episode.pk | fk_episode | integer |
NOT NULL
episode to which family history item is of importance |
narrative | text |
the condition this relative suffered from |
|
soap_cat | text | ||
pk | serial | PRIMARY KEY | |
clin.fhx_relation_type.pk | fk_relation_type | integer |
NOT NULL
foreign key to the type of relation the patient has to the afflicated relative |
age_noted | text |
age at which the condition was noted in the relative if known |
|
age_of_death | interval |
age at which the relative died if known |
|
contributed_to_death | boolean |
whether the condition contributed to the death of the relative if known |
|
name_relative | text |
name of the relative suffering the condition |
|
dob_relative | timestamp with time zone |
date of birth of the relative if known |
|
comment | text |
Table clin.family_history Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
c_family_history_sane_age_noted | CHECK ((gm.is_null_or_non_empty_string(age_noted) IS TRUE)) |
c_family_history_sane_condition | CHECK ((gm.is_null_or_blank_string(narrative) IS FALSE)) |
c_family_history_sane_name | CHECK ((gm.is_null_or_non_empty_string(name_relative) IS TRUE)) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
narrative_neither_null_nor_empty | CHECK ((btrim(COALESCE(narrative, ''::text)) <> ''::text)) |
Tables referencing this one via Foreign Key Constraints:
Enumerates inter-person relations for family history linking.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
description | text |
UNIQUE#1
Description of the relation type, specific or unspecific: sister, father, ..., maternal family, ... |
|
is_genetic | boolean |
UNIQUE#1
NOT NULL
Whether or not this type of relation is biologic/genetic or not. Note that non-genetic relations may still pose a risk because of infectious diseases. |
Table clin.fhx_relation_type Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
c_fhx_relation_type_sane_desc | CHECK ((gm.is_null_or_blank_string(description) IS FALSE)) |
Tables referencing this one via Foreign Key Constraints:
holds the values used in form instances, for later re-use/validation
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.form_instances.pk | fk_instance | integer |
UNIQUE#1
NOT NULL
the form instance this value was used in |
public.form_fields.pk | fk_form_field | integer |
UNIQUE#1
NOT NULL
points to the definition of the field in the form which in turn defines the place holder in the template to replace with <value> |
value | text |
NOT NULL
the value to replace the place holder with |
Table clin.form_data Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
instances of forms, like a log of all processed forms
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone | NOT NULL DEFAULT now() | |
clin.encounter.pk | fk_encounter | integer | NOT NULL |
clin.episode.pk | fk_episode | integer | NOT NULL |
narrative | text |
can be used as a status field, eg. "printed", "faxed" etc. |
|
soap_cat | text | ||
pk | serial | PRIMARY KEY | |
ref.paperwork_templates.pk | fk_form_def | integer |
NOT NULL
points to the definition of this instance, this FK will fail once we start separating services, make it into a x_db_fk then |
form_name | text |
NOT NULL
a string uniquely identifying the form template, necessary for the audit trail |
Table clin.form_instances Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
form_is_plan | CHECK ((soap_cat = 'p'::text)) |
Tables referencing this one via Foreign Key Constraints:
This is pretty much what others would call "Past Medical History" or "Foundational illness", eg. longer-ranging, underlying, encompassing issues with one's health such as "immunodeficiency", "type 2 diabetes". In Belgium it is called "problem". L.L.Weed includes lots of little things into it, we do not.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
description | text |
NOT NULL
descriptive name of this health issue, may change over time as evidence increases |
|
laterality | character varying(2) |
DEFAULT NULL::character varying
NULL: don't know s: sinister - left d: dexter - right sd: sinister and dexter - both sides na: not applicable |
|
age_noted | interval |
at what age the patient acquired the condition |
|
is_active | boolean |
DEFAULT true
whether this health issue (problem) is active |
|
clinically_relevant | boolean |
DEFAULT true
whether this health issue (problem) has any clinical relevance |
|
is_confidential | boolean | DEFAULT false | |
is_cause_of_death | boolean | NOT NULL DEFAULT false | |
clin.encounter.pk | fk_encounter | integer |
NOT NULL
The encounter during which this health issue was added. |
grouping | text |
This can be used to entirely arbitrarily group health issues felt to belong to each other. |
|
diagnostic_certainty_classification | text |
The certainty at which this issue is believed to be a diagnosis: A: sign (Symptom) B: cluster of signs (Symptomkomplex) C: syndromic diagnosis (Bild einer Diagnose) D: proven diagnosis (diagnostisch gesichert) |
|
summary | text |
Used for tracking the summary of this health issue. |
Table clin.health_issue Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
health_issue_laterality_check | CHECK (((laterality)::text = ANY (ARRAY[(NULL::character varying)::text, ('s'::character varying)::text, ('d'::character varying)::text, ('sd'::character varying)::text, ('na'::character varying)::text]))) |
health_issue_sane_summary | CHECK (gm.is_null_or_non_empty_string(summary)) |
issue_name_not_empty | CHECK ((btrim(description) <> ''::text)) |
sane_grouping | CHECK (gm.is_null_or_non_empty_string("grouping")) |
valid_diagnostic_certainty_classification | CHECK ((diagnostic_certainty_classification = ANY (ARRAY['A'::text, 'B'::text, 'C'::text, 'D'::text, NULL::text]))) |
Tables referencing this one via Foreign Key Constraints:
collects data on hospitalisations of patients, reasons are linked via a link table
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone |
NOT NULL
DEFAULT now()
to be used as when the patient was admitted |
|
clin.encounter.pk | fk_encounter | integer | NOT NULL |
clin.episode.pk | fk_episode | integer | NOT NULL |
narrative | text |
a comment on the hospital stay |
|
soap_cat | text | ||
pk | serial | PRIMARY KEY | |
discharge | timestamp with time zone |
when was the patient discharged |
|
dem.org_unit.pk | fk_org_unit | integer |
NOT NULL
links to the hospital the patient was admitted to |
Table clin.hospital_stay Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
sane_duration | CHECK (((discharge IS NULL) OR (discharge > clin_when))) |
sane_hospital | CHECK (gm.is_null_or_non_empty_string(narrative)) |
this table holds test results that could not be matched to any patient, it is intended to prevent overflow of incoming_data_unmatched with unmatchable data
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
fk_patient_candidates | integer[] | ||
request_id | text | ||
firstnames | text | ||
lastnames | text | ||
dob | date | ||
postcode | text | ||
other_info | text | ||
type | text | ||
data | bytea | NOT NULL | |
gender | text | ||
requestor | text | ||
external_data_id | text | ||
fk_identity_disambiguated | integer |
Table clin.incoming_data_unmatchable Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
this table holds incoming data (lab results, documents) that could not be matched to one single patient automatically, it is intended to facilitate manual matching, - use "modified_when" for import time
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
fk_patient_candidates | integer[] |
a matching algorithm can be applied to produce a list of likely candidate patients, the question remains whether this should not be done at runtime |
|
request_id | text |
request ID as found in <data> |
|
firstnames | text |
first names as found in <data> |
|
lastnames | text |
last names as found in <data> |
|
dob | date |
date of birth as found in <data> |
|
postcode | text |
postcode as found in <data> |
|
other_info | text |
other identifying information as found in <data> |
|
type | text |
the type of <data>, eg HL7, LDT, ..., useful for selecting an importer |
|
data | bytea |
NOT NULL
the raw data |
|
gender | text |
Gender of patient in source data if available. |
|
requestor | text |
Requestor of data (e.g. who ordered test results) if available in source data. |
|
external_data_id | text |
ID of content of .data in external system (e.g. importer) where appropriate |
|
clin.patient.fk_identity | fk_identity_disambiguated | integer |
ID of patient the data is judged to really belong to. |
comment | text |
a free text comment on this row, eg. why is it here |
|
dem.staff.pk | fk_provider_disambiguated | integer |
The provider the data is relevant to. |
Table clin.incoming_data_unmatched Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
unmatched_data_sane_comment | CHECK ((gm.is_null_or_non_empty_string(comment) IS TRUE)) |
test request metadata
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone |
NOT NULL
DEFAULT now()
the time the sample for this request was taken LDT: 8432:8433 HL7: OBR.quantity_timing |
|
clin.encounter.pk | fk_encounter | integer | NOT NULL |
clin.episode.pk | fk_episode | integer | NOT NULL |
narrative | text |
free text comment on request |
|
soap_cat | text | DEFAULT 'p'::text | |
pk | serial | PRIMARY KEY | |
clin.test_org.pk | fk_test_org | integer | UNIQUE#1 |
request_id | text |
UNIQUE#1
NOT NULL
ID this request had when sent to the lab LDT: 8310 HL7: OBR.filler_order_number |
|
dem.identity.pk | fk_requestor | integer |
who requested the test - really needed ? |
lab_request_id | text |
ID this request had internally at the lab LDT: 8311 |
|
lab_rxd_when | timestamp with time zone |
when did the lab receive the request+sample LDT: 8301 HL7: OBR.requested_date_time |
|
results_reported_when | timestamp with time zone |
when was the report on the result generated, LDT: 8302 HL7: OBR.results_report_status_change |
|
request_status | text |
NOT NULL
pending, final, preliminary, partial LDT: 8401 |
|
is_pending | boolean |
NOT NULL
DEFAULT true
true if any (even partial) results are still pending |
|
diagnostic_service_section | text |
The (section of) the diagnostic service which performed the test. - HL7 2.3: OBR:24 Diagnostic Service Section ID - somewhat redundant with fk_test_org, which, however, points to more normalized data |
|
ordered_service | text |
The (battery of) test(s)/service(s) ordered. - HL7 2.3: OBR:4 Universal Service ID |
|
note_test_org | text |
A comment on this lab request by the performing organization (lab). |
Table clin.lab_request Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_lab_req_sane_test_org_note | CHECK ((gm.is_null_or_non_empty_string(note_test_org) IS TRUE)) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
lab_request_request_id_check | CHECK ((btrim(request_id) <> ''::text)) |
lab_request_request_status_check | CHECK ((request_status = ANY (ARRAY['pending'::text, 'preliminary'::text, 'partial'::text, 'final'::text]))) |
Tables referencing this one via Foreign Key Constraints:
Links codes to encounter.aoe.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_lnk_code2item | integer | NOT NULL DEFAULT nextval('clin.lnk_code2item_root_pk_lnk_code2item_seq'::regclass) | |
fk_generic_code | integer |
UNIQUE#1
NOT NULL
Custom foreign key to ref.coding_system_root. |
|
clin.encounter.pk | fk_item | integer |
UNIQUE#1
Foreign key to clin.encounter |
code_modifier | text | ||
pk | serial | PRIMARY KEY |
Table clin.lnk_code2aoe Inherits lnk_code2item_root,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Links codes to episodes.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_lnk_code2item | integer | NOT NULL DEFAULT nextval('clin.lnk_code2item_root_pk_lnk_code2item_seq'::regclass) | |
fk_generic_code | integer |
UNIQUE#1
NOT NULL
Custom foreign key to ref.coding_system_root. |
|
clin.episode.pk | fk_item | integer |
UNIQUE#1
Foreign key to clin.episode |
code_modifier | text | ||
pk | serial | PRIMARY KEY |
Table clin.lnk_code2episode Inherits lnk_code2item_root,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Links codes to family history items.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_lnk_code2item | integer | NOT NULL DEFAULT nextval('clin.lnk_code2item_root_pk_lnk_code2item_seq'::regclass) | |
fk_generic_code | integer |
UNIQUE#1
NOT NULL
Custom foreign key to ref.coding_system_root. |
|
clin.family_history.pk | fk_item | integer |
UNIQUE#1
Foreign key to clin.family_history |
code_modifier | text | ||
pk | serial | PRIMARY KEY |
Table clin.lnk_code2fhx Inherits lnk_code2item_root,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Links codes to health issues.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_lnk_code2item | integer | NOT NULL DEFAULT nextval('clin.lnk_code2item_root_pk_lnk_code2item_seq'::regclass) | |
fk_generic_code | integer |
UNIQUE#1
NOT NULL
Custom foreign key to ref.coding_system_root. |
|
clin.health_issue.pk | fk_item | integer |
UNIQUE#1
Foreign key to clin.health_issue |
code_modifier | text | ||
pk | serial | PRIMARY KEY |
Table clin.lnk_code2h_issue Inherits lnk_code2item_root,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
The parent table of all tables linking codes to EMR structures. Coding tables check this table for existence of their PK in .fk_generic_code in order to prevent cascading DELETEs/UPDATEs from breaking referential integrity. EMR structure tables foreign key into children of this table in order to link structures to codes.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_lnk_code2item | serial | PRIMARY KEY | |
fk_generic_code | integer |
Custom foreign key to ref.coding_system_root.pk_coding_system. |
|
fk_item | integer |
Foreign key to clin.* tables |
|
code_modifier | text |
Usage specific modifier on the base code, say, certainty or laterality of ICD-10 codes. |
Table clin.lnk_code2item_root Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Links codes to SOAP narrative.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_lnk_code2item | integer | NOT NULL DEFAULT nextval('clin.lnk_code2item_root_pk_lnk_code2item_seq'::regclass) | |
fk_generic_code | integer |
UNIQUE#1
NOT NULL
Custom foreign key to ref.coding_system_root. |
|
clin.clin_narrative.pk | fk_item | integer |
UNIQUE#1
Foreign key to clin.clin_narrative |
code_modifier | text | ||
pk | serial | PRIMARY KEY |
Table clin.lnk_code2narrative Inherits lnk_code2item_root,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Links codes to procedures. OPS comes to mind.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_lnk_code2item | integer | NOT NULL DEFAULT nextval('clin.lnk_code2item_root_pk_lnk_code2item_seq'::regclass) | |
fk_generic_code | integer |
UNIQUE#1
NOT NULL
Custom foreign key to ref.coding_system_root. |
|
clin.procedure.pk | fk_item | integer |
UNIQUE#1
Foreign key to clin.procedure |
code_modifier | text | ||
pk | serial | PRIMARY KEY |
Table clin.lnk_code2procedure Inherits lnk_code2item_root,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Links codes to encounters.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_lnk_code2item | integer | NOT NULL DEFAULT nextval('clin.lnk_code2item_root_pk_lnk_code2item_seq'::regclass) | |
fk_generic_code | integer |
UNIQUE#1
NOT NULL
Custom foreign key to ref.coding_system_root. |
|
clin.encounter.pk | fk_item | integer |
UNIQUE#1
Foreign key to clin.encounter |
code_modifier | text | ||
pk | serial | PRIMARY KEY |
Table clin.lnk_code2rfe Inherits lnk_code2item_root,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Links codes to test panels.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_lnk_code2item | integer | NOT NULL DEFAULT nextval('clin.lnk_code2item_root_pk_lnk_code2item_seq'::regclass) | |
fk_generic_code | integer |
UNIQUE#1
NOT NULL
Custom foreign key to ref.coding_system_root. |
|
clin.test_panel.pk | fk_item | integer |
UNIQUE#1
Foreign key to clin.test_panel |
code_modifier | text | ||
pk | serial | PRIMARY KEY |
Table clin.lnk_code2tst_pnl Inherits lnk_code2item_root,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
links constraints to courses
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.vaccination_course.pk | fk_vaccination_course | integer | UNIQUE#1 NOT NULL |
clin.vaccination_course_constraint.pk | fk_constraint | integer | UNIQUE#1 NOT NULL |
Table clin.lnk_constraint2vacc_course Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
links patients to vaccination courses they are actually on, this allows for per-patient selection of courses to be followed, eg. children at different ages may be on different vaccination courses or some people are on a course due to a trip abroad while most others are not
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.patient.fk_identity | fk_patient | integer | UNIQUE#1 NOT NULL |
clin.vaccination_course.pk | fk_course | integer | UNIQUE#1 NOT NULL |
Table clin.lnk_pat2vaccination_course Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.episode.pk | fk_episode | integer | |
clin.substance_intake.pk | fk_substance | integer |
Table clin.lnk_substance2episode Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
links test result evaluation norms to tests
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
clin.test_type.pk | id_test | integer |
UNIQUE#1
NOT NULL
which test does the linked norm apply to |
id_norm | integer |
UNIQUE#1
NOT NULL
the norm to apply to the linked test |
Table clin.lnk_tst2norm Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
allow to link many-to-many between clin.clin_root_item and clin.clin_item_type
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.clin_item_type.pk | fk_type | integer | UNIQUE#1 NOT NULL |
fk_item | integer |
UNIQUE#1
NOT NULL
the item this type is linked to, since PostgreSQL apparently cannot reference a value inserted from a child table (?) we must simulate referential integrity checks with a custom trigger, this, however, does not deal with update/delete cascading :-( |
Table clin.lnk_type2item Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
this table links vaccination courses for a single epitope into schedules defined and recommended by a vaccination council or similar entity
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.vaccination_course.pk | fk_course | integer | UNIQUE NOT NULL |
clin.vaccination_schedule.pk | fk_schedule | integer | NOT NULL |
Table clin.lnk_vaccination_course2schedule Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
links vaccines to their indications
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
clin.vaccine.pk | fk_vaccine | integer | UNIQUE#1 NOT NULL |
clin.vacc_indication.id | fk_indication | integer | UNIQUE#1 NOT NULL |
Table clin.lnk_vaccine2inds Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
this table merges test types from various test orgs which are intended to measure the same value but have differing names into one logical test type, this is not intended to be used for aggregating semantically different test types into "profiles"
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
abbrev | text | UNIQUE#1 NOT NULL | |
name | text | UNIQUE#1 NOT NULL | |
loinc | text | ||
comment | text |
Tables referencing this one via Foreign Key Constraints:
A table to hold unique-per-identity *clinical* items, such as Expected Due Date.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
dem.identity.pk | fk_identity | integer |
UNIQUE
NOT NULL
the dem.identity.pk of this patient |
edc | date |
Table clin.patient Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_patient_sane_edc | CHECK (((edc IS NULL) OR ((clin.get_dod(fk_identity) IS NULL) AND ((clin.get_dob(fk_identity) IS NULL) OR (edc > (clin.get_dob(fk_identity) + '5 years'::interval)))))) |
Tables referencing this one via Foreign Key Constraints:
This table holds procedure/operations performed on the patient both in hospital or in community care.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone | NOT NULL DEFAULT now() | |
clin.encounter.pk | fk_encounter | integer | NOT NULL |
clin.episode.pk | fk_episode | integer | NOT NULL |
narrative | text |
Which procedure/operation was performed. |
|
soap_cat | text | DEFAULT 'p'::text | |
pk | serial | PRIMARY KEY | |
clin.hospital_stay.pk | fk_hospital_stay | integer |
At which hospital was the procedure performed, unless clin_where is not null, if null it was an ambulatory procedure. |
clin_end | timestamp with time zone |
When did this procedure end/is expected to end. - NULL if unknown or .clin_when (=start) is sufficient (eg. insignificant duration) |
|
is_ongoing | boolean |
NOT NULL
DEFAULT false
Whether this procedure is still going on (such as desensibilisation, chemotherapy, etc). |
|
dem.org_unit.pk | fk_org_unit | integer |
links to the or unit the procedure was performed at |
Table clin.procedure Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_procedure_lnk_org_or_stay | CHECK ((((fk_hospital_stay IS NULL) AND (fk_org_unit IS NOT NULL)) OR ((fk_hospital_stay IS NOT NULL) AND (fk_org_unit IS NULL)))) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
procedure_sane_end | CHECK (((clin_end IS NULL) OR (clin_end >= clin_when))) |
sane_procedure | CHECK ((gm.is_null_or_blank_string(narrative) IS FALSE)) |
sane_soap_cat | CHECK ((soap_cat = ANY (ARRAY['a'::text, 'p'::text]))) |
Tables referencing this one via Foreign Key Constraints:
this table tracks whether a particular clinical item was reviewed by a clinician or not
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
fk_reviewed_row | integer |
UNIQUE#1
NOT NULL
the row the review status is for: to be qualified as a proper foreign key in child tables |
|
dem.staff.pk | fk_reviewer | integer |
UNIQUE#1
NOT NULL
who has reviewed the item |
is_technically_abnormal | boolean |
NOT NULL
whether test provider flagged this result as abnormal, *not* a clinical assessment but rather a technical one LDT: exist(8422) |
|
clinically_relevant | boolean |
NOT NULL
whether this result is considered relevant clinically, need not correspond to the value of "techically_abnormal" since abnormal values may be irrelevant while normal ones can be of significance |
|
comment | text |
Table clin.review_root Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
review table for test results
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | integer | PRIMARY KEY DEFAULT nextval('clin.review_root_pk_seq'::regclass) | |
clin.test_result.pk | fk_reviewed_row | integer | UNIQUE#1 UNIQUE NOT NULL |
dem.staff.pk | fk_reviewer | integer | UNIQUE#1 NOT NULL DEFAULT clin.f_fk_reviewer_default() |
is_technically_abnormal | boolean | NOT NULL | |
clinically_relevant | boolean | NOT NULL | |
comment | text |
Table clin.reviewed_test_results Inherits review_root,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
rank | integer | NOT NULL | |
soap_cat | character(1) |
Name | Constraint |
---|---|
clin_soap_cat_ranks_sane_cats | CHECK (((soap_cat IS NULL) OR (lower((soap_cat)::text) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
clin_soap_cat_ranks_sane_ranks | CHECK ((rank = ANY (ARRAY[1, 2, 3, 4, 5, 6]))) |
The substances a patient is actually currently taking.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone |
NOT NULL
DEFAULT now()
When was this substance started. |
|
clin.encounter.pk | fk_encounter | integer |
NOT NULL
The encounter use of this substance was documented under. |
clin.episode.pk | fk_episode | integer | NOT NULL |
narrative | text |
Any notes on this substance use. |
|
soap_cat | text | DEFAULT 'p'::text | |
pk | serial | PRIMARY KEY | |
ref.consumable_substance.pk | fk_substance | integer |
NOT NULL
Links to a substance the patient is taking. ********************************************* DO NOT TRY TO USE THIS TO FIND OUT THE BRAND. IT WILL BE WRONG. ********************************************* |
preparation | text |
How this substance is delivered, tablet, pill, liquid, cream. |
|
schedule | text |
The schedule, if any, the substance is to be taken by. An XML snippet to be interpreted by the middleware. |
|
aim | text |
The aim of taking this substance. |
|
duration | interval |
How long is this substances intended to be taken. |
|
intake_is_approved_of | boolean |
NOT NULL
Whether or not intake of this substance is recommended/approved of by the provider |
|
is_long_term | boolean |
whether this is expected to be a regular/ongoing/chronic/long-term/repeat/permament/perpetual/life-long substance intake |
|
discontinued | timestamp with time zone |
When was this intake discontinued ? |
|
discontinue_reason | text |
Why was this intake discontinued ? |
|
ref.lnk_substance2brand.pk | fk_drug_component | integer |
Links to the component of a branded drug taken by a patient. |
comment_on_start | text |
Comment (uncertainty level) on .clin_when = started. "?" = "entirely unknown". |
|
harmful_use_type | integer |
NULL=not considered=medication, 0=no or not considered harmful, 1=presently harmful use, 2=presently addicted, 3=previously addicted |
Table clin.substance_intake Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_patient_sane_use_type | CHECK (((harmful_use_type IS NULL) OR ((harmful_use_type >= 0) AND (harmful_use_type <= 3)))) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
clin_subst_intake_sane_prep | CHECK ((((fk_drug_component IS NULL) AND (preparation IS NOT NULL)) OR ((fk_drug_component IS NOT NULL) AND (preparation IS NULL)))) |
clin_substance_intake_sane_start_comment | CHECK (gm.is_null_or_non_empty_string(comment_on_start)) |
discontinued_after_started | CHECK (((clin_when IS NULL) OR (discontinued IS NULL) OR ((discontinued >= clin_when) AND (discontinued <= now())))) |
medication_is_plan | CHECK ((soap_cat = 'p'::text)) |
sane_aim | CHECK ((gm.is_null_or_non_empty_string(aim) IS TRUE)) |
sane_discontinue_reason | CHECK ((((discontinued IS NULL) AND (discontinue_reason IS NULL)) OR ((discontinued IS NOT NULL) AND (gm.is_null_or_non_empty_string(discontinue_reason) IS TRUE)))) |
sane_schedule | CHECK ((gm.is_null_or_non_empty_string(schedule) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
A table to hold hints suppressed per patient
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.encounter.pk | fk_encounter | integer |
NOT NULL
the encounter during which this hint was first suppressed |
ref.auto_hint.pk | fk_hint | integer |
NOT NULL
the hint that is suppressed |
suppressed_by | name |
NOT NULL
DEFAULT "current_user"()
who suppressed this hint |
|
suppressed_when | timestamp with time zone |
NOT NULL
DEFAULT statement_timestamp()
when was this hint suppressed |
|
rationale | text |
rationale on why this hint is suppressed in this patient |
|
md5_sum | text |
md5 of relevant fields of this hint |
Table clin.suppressed_hint Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_suppressed_hint_sane_by | CHECK ((length((suppressed_by)::text) > 0)) |
clin_suppressed_hint_sane_md5 | CHECK ((gm.is_null_or_blank_string(md5_sum) IS FALSE)) |
clin_suppressed_hint_sane_rationale | CHECK ((gm.is_null_or_blank_string(rationale) IS FALSE)) |
organisation providing results
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
dem.org_unit.pk | fk_org_unit | integer |
UNIQUE
NOT NULL
link to a unit of an organization more closely defining this lab |
dem.identity.pk | fk_adm_contact | integer |
whom to call for admin questions (modem link, etc.) |
dem.identity.pk | fk_med_contact | integer |
whom to call for medical questions (result verification, additional test requests) |
comment | text |
useful for, say, dummy records where you want to mark up stuff like "pharmacy such-and-such" if you don't have it in your contacts |
|
contact | text |
free-text contact information for this lab |
Table clin.test_org Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
sane_comment | CHECK ((gm.is_null_or_non_empty_string(comment) IS TRUE)) |
sane_contact | CHECK ((gm.is_null_or_non_empty_string(contact) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
Panels of tests. The same test can appear in several panels.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
description | text |
A description/label for this panel. |
|
comment | text |
An arbitrary comment on this panel. |
|
fk_test_types | integer[] |
Links to test types which belong to this panel. |
Table clin.test_panel Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_test_panel_sane_cmt | CHECK ((gm.is_null_or_non_empty_string(comment) IS TRUE)) |
clin_test_panel_sane_desc | CHECK ((gm.is_null_or_blank_string(description) IS FALSE)) |
Tables referencing this one via Foreign Key Constraints:
the results of a single measurement
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone |
NOT NULL
DEFAULT now()
the time when this result was *actually* obtained, if this is a lab result this should be between lab_request.clin_when and lab_request.results_reported_when, HL7: OBR.observation_date_time |
|
clin.encounter.pk | fk_encounter | integer | NOT NULL |
clin.episode.pk | fk_episode | integer | NOT NULL |
narrative | text |
clinical comment, progress note |
|
soap_cat | text | DEFAULT 'o'::text | |
pk | serial | PRIMARY KEY | |
clin.test_type.pk | fk_type | integer |
NOT NULL
the type of test this result is from |
val_num | numeric |
numeric value if any, HL7: OBX.observation_results if OBX.value_type == NM |
|
val_alpha | text |
alphanumeric value if any, HL7: OBX.observation_results if OBX.value_type == FT |
|
val_unit | text |
the unit this result came in HL7: OBX.units |
|
val_normal_min | numeric |
lower bound of normal range if numerical as defined by provider for this result |
|
val_normal_max | numeric |
upper bound of normal range if numerical as defined by provider for this result |
|
val_normal_range | text |
range of normal values if alphanumerical as defined by provider for this result, eg. "less than 0.5 but detectable" HL7: OBX.reference_range |
|
val_target_min | numeric |
lower bound of target range if numerical as defined by clinician caring this patient |
|
val_target_max | numeric |
upper bound of target range if numerical as defined by clinician caring for this patient |
|
val_target_range | text |
range of target values if alphanumerical as defined by clinician caring for this patient |
|
abnormality_indicator | text |
how the test provider flagged this result as abnormal, *not* a clinical assessment but rather a technical one LDT: 8422 |
|
norm_ref_group | text |
what sample of the population does this normal range applay to, eg what type of patient was assumed when interpreting this result, LDT: 8407 |
|
note_test_org | text |
A comment on the test result provided by the tester or testing entity. |
|
material | text |
the submitted material, eg. smear, serum, urine, etc., LDT: 8430 |
|
material_detail | text |
details re the material, eg. site taken from, etc. LDT: 8431 |
|
dem.staff.pk | fk_intended_reviewer | integer |
NOT NULL
who is *supposed* to review this item |
clin.lab_request.pk | fk_request | integer |
The request this result was ordered under if any. |
status | text |
The result status (say, HL7 OBX 11 Observ result status (#00579, table 0085). |
|
source_data | text |
The source data for this observation (say, HL7 OBX). |
|
val_grouping | text |
A grouping for related values (say, HL7 OBX Obs Sub ID, think antibiogram). |
Table clin.test_result Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
clin_test_result_sane_source_data | CHECK (gm.is_null_or_non_empty_string(source_data)) |
clin_test_result_sane_status | CHECK (gm.is_null_or_non_empty_string(status)) |
clin_test_result_sane_val_grouping | CHECK (gm.is_null_or_non_empty_string(val_grouping)) |
numval_needs_unit | CHECK ((((val_num IS NOT NULL) AND (btrim(COALESCE(val_unit, ''::text)) <> ''::text)) OR (val_num IS NULL))) |
test_result_check | CHECK (((val_num IS NOT NULL) OR (val_alpha IS NOT NULL) OR ((val_num IS NULL) AND (val_alpha <> ''::text) AND (val_alpha IS NOT NULL)))) |
Tables referencing this one via Foreign Key Constraints:
measurement type, like a "method" in a lab
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.test_org.pk | fk_test_org | integer |
UNIQUE#1
UNIQUE#2
NOT NULL
organisation carrying out this type of measurement, eg. a particular lab |
name | text |
UNIQUE#2
NOT NULL
descriptive name of this measurement type, HL7: OBX.observation_identifier |
|
comment | text |
arbitrary comment on this type of measurement/test such as "outdated" or "only reliable when ..." |
|
reference_unit | text |
The chosen reference unit for this test type, preferably SI, used for comparing results delivered in differing units. This does not relate to what unit the test provider delivers results in but rather the unit we think those results need to be converted to in order to be comparable to OTHER results. |
|
loinc | text | ||
abbrev | text | UNIQUE#1 NOT NULL | |
clin.meta_test_type.pk | fk_meta_test_type | integer |
Link to the meta test type (if any) this test type is to be aggregated under. |
Table clin.test_type Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
pk_substance_intake | integer | ||
pk_patient | integer | ||
soap_cat | text | ||
brand | text | ||
preparation | text | ||
substance | text | ||
amount | numeric | ||
unit | text | ||
atc_substance | text | ||
atc_brand | text | ||
external_code_brand | text | ||
external_code_type_brand | text | ||
started | timestamp with time zone | ||
comment_on_start | text | ||
start_is_unknown | boolean | ||
start_is_approximate | boolean | ||
intake_is_approved_of | boolean | ||
harmful_use_type | integer | ||
last_checked_when | timestamp with time zone | ||
schedule | text | ||
duration | interval | ||
discontinued | timestamp with time zone | ||
discontinue_reason | text | ||
is_long_term | boolean | ||
aim | text | ||
episode | text | ||
health_issue | text | ||
notes | text | ||
fake_brand | boolean | ||
is_currently_active | boolean | ||
seems_inactive | boolean | ||
pk_brand | integer | ||
pk_data_source | integer | ||
pk_substance | integer | ||
pk_drug_component | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
row_version | integer | ||
xmin_substance_intake | xid |
SELECT c_si.pk AS pk_substance_intake , ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = c_si.fk_encounter) ) AS pk_patient , c_si.soap_cat , r_bd.description AS brand , r_bd.preparation , r_cs.description AS substance , r_cs.amount , r_cs.unit , r_cs.atc_code AS atc_substance , r_bd.atc_code AS atc_brand , r_bd.external_code AS external_code_brand , r_bd.external_code_type AS external_code_type_brand , CASE WHEN (c_si.comment_on_start = '?'::text) THEN NULL::timestamp with time zone ELSE c_si.clin_when END AS started , c_si.comment_on_start , CASE WHEN (c_si.comment_on_start = '?'::text) THEN true ELSE false END AS start_is_unknown , CASE WHEN (c_si.comment_on_start IS NULL) THEN false ELSE true END AS start_is_approximate , c_si.intake_is_approved_of , c_si.harmful_use_type , NULL::timestamp with time zone AS last_checked_when , c_si.schedule , c_si.duration , c_si.discontinued , c_si.discontinue_reason , c_si.is_long_term , c_si.aim , cep.description AS episode , c_hi.description AS health_issue , c_si.narrative AS notes , r_bd.is_fake AS fake_brand , CASE WHEN (c_si.discontinued IS NULL) THEN true ELSE false END AS is_currently_active , CASE WHEN (c_si.discontinued IS NOT NULL) THEN true WHEN (c_si.clin_when IS NULL) THEN CASE WHEN (c_si.is_long_term IS TRUE) THEN false ELSE NULL::boolean END WHEN ( (c_si.clin_when > now () ) IS TRUE ) THEN true WHEN ( ( (c_si.clin_when + c_si.duration) < now () ) IS TRUE ) THEN true WHEN ( ( (c_si.clin_when + c_si.duration) > now () ) IS TRUE ) THEN false ELSE NULL::boolean END AS seems_inactive , r_ls2b.fk_brand AS pk_brand , r_bd.fk_data_source AS pk_data_source , r_ls2b.fk_substance AS pk_substance , r_ls2b.pk AS pk_drug_component , c_si.fk_encounter AS pk_encounter , c_si.fk_episode AS pk_episode , cep.fk_health_issue AS pk_health_issue , c_si.modified_when , c_si.modified_by , c_si.row_version , c_si.xmin AS xmin_substance_intake FROM ( ( ( ( (clin.substance_intake c_si JOIN ref.lnk_substance2brand r_ls2b ON ( (c_si.fk_drug_component = r_ls2b.pk) ) ) JOIN ref.branded_drug r_bd ON ( (r_ls2b.fk_brand = r_bd.pk) ) ) JOIN ref.consumable_substance r_cs ON ( (r_ls2b.fk_substance = r_cs.pk) ) ) LEFT JOIN clin.episode cep ON ( (c_si.fk_episode = cep.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_hi.pk = cep.fk_health_issue) ) ) WHERE (c_si.fk_drug_component IS NOT NULL);
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | text | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_p.fk_identity AS pk_patient , c_p.modified_when , c_p.modified_when AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_p.modified_by) ) , ( ('<'::text || (c_p.modified_by)::text ) || '>'::text ) ) AS modified_by , 's'::text AS soap_cat , (_ ('EDC'::text) || to_char ( (c_p.edc)::timestamp with time zone ,': YYYY Mon DD'::text ) ) AS narrative , ( SELECT c_e.pk FROM clin.encounter c_e WHERE (c_e.fk_patient = c_p.fk_identity) ORDER BY c_e.started DESC LIMIT 1 ) AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , c_p.pk AS src_pk , 'clin.patient'::text AS src_table , c_p.row_version , NULL::text AS health_issue , NULL::text AS issue_laterality , NULL::boolean AS issue_active , NULL::boolean AS issue_clinically_relevant , NULL::boolean AS issue_confidential , NULL::text AS episode , NULL::boolean AS episode_open , NULL::timestamp with time zone AS encounter_started , NULL::timestamp with time zone AS encounter_last_affirmed , NULL::text AS encounter_type , NULL::text AS encounter_l10n_type FROM clin.patient c_p WHERE (c_p.edc IS NOT NULL);
Clinical patient data formatted into one string per clinical entity even if it constains several user- visible fields. Mainly useful for display as a simple EMR journal.
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT v_pat_narrative_journal.pk_patient , v_pat_narrative_journal.modified_when , v_pat_narrative_journal.clin_when , v_pat_narrative_journal.modified_by , v_pat_narrative_journal.soap_cat , v_pat_narrative_journal.narrative , v_pat_narrative_journal.pk_encounter , v_pat_narrative_journal.pk_episode , v_pat_narrative_journal.pk_health_issue , v_pat_narrative_journal.src_pk , v_pat_narrative_journal.src_table , v_pat_narrative_journal.row_version , v_pat_narrative_journal.health_issue , v_pat_narrative_journal.issue_laterality , v_pat_narrative_journal.issue_active , v_pat_narrative_journal.issue_clinically_relevant , v_pat_narrative_journal.issue_confidential , v_pat_narrative_journal.episode , v_pat_narrative_journal.episode_open , v_pat_narrative_journal.encounter_started , v_pat_narrative_journal.encounter_last_affirmed , v_pat_narrative_journal.encounter_type , v_pat_narrative_journal.encounter_l10n_type FROM clin.v_pat_narrative_journal UNION ALL SELECT v_health_issues_journal.pk_patient , v_health_issues_journal.modified_when , v_health_issues_journal.clin_when , v_health_issues_journal.modified_by , v_health_issues_journal.soap_cat , v_health_issues_journal.narrative , v_health_issues_journal.pk_encounter , v_health_issues_journal.pk_episode , v_health_issues_journal.pk_health_issue , v_health_issues_journal.src_pk , v_health_issues_journal.src_table , v_health_issues_journal.row_version , v_health_issues_journal.health_issue , v_health_issues_journal.issue_laterality , v_health_issues_journal.issue_active , v_health_issues_journal.issue_clinically_relevant , v_health_issues_journal.issue_confidential , v_health_issues_journal.episode , v_health_issues_journal.episode_open , v_health_issues_journal.encounter_started , v_health_issues_journal.encounter_last_affirmed , v_health_issues_journal.encounter_type , v_health_issues_journal.encounter_l10n_type FROM clin.v_health_issues_journal UNION ALL SELECT v_pat_encounters_journal.pk_patient , v_pat_encounters_journal.modified_when , v_pat_encounters_journal.clin_when , v_pat_encounters_journal.modified_by , v_pat_encounters_journal.soap_cat , v_pat_encounters_journal.narrative , v_pat_encounters_journal.pk_encounter , v_pat_encounters_journal.pk_episode , v_pat_encounters_journal.pk_health_issue , v_pat_encounters_journal.src_pk , v_pat_encounters_journal.src_table , v_pat_encounters_journal.row_version , v_pat_encounters_journal.health_issue , v_pat_encounters_journal.issue_laterality , v_pat_encounters_journal.issue_active , v_pat_encounters_journal.issue_clinically_relevant , v_pat_encounters_journal.issue_confidential , v_pat_encounters_journal.episode , v_pat_encounters_journal.episode_open , v_pat_encounters_journal.encounter_started , v_pat_encounters_journal.encounter_last_affirmed , v_pat_encounters_journal.encounter_type , v_pat_encounters_journal.encounter_l10n_type FROM clin.v_pat_encounters_journal UNION ALL SELECT v_pat_episodes_journal.pk_patient , v_pat_episodes_journal.modified_when , v_pat_episodes_journal.clin_when , v_pat_episodes_journal.modified_by , v_pat_episodes_journal.soap_cat , v_pat_episodes_journal.narrative , v_pat_episodes_journal.pk_encounter , v_pat_episodes_journal.pk_episode , v_pat_episodes_journal.pk_health_issue , v_pat_episodes_journal.src_pk , v_pat_episodes_journal.src_table , v_pat_episodes_journal.row_version , v_pat_episodes_journal.health_issue , v_pat_episodes_journal.issue_laterality , v_pat_episodes_journal.issue_active , v_pat_episodes_journal.issue_clinically_relevant , v_pat_episodes_journal.issue_confidential , v_pat_episodes_journal.episode , v_pat_episodes_journal.episode_open , v_pat_episodes_journal.encounter_started , v_pat_episodes_journal.encounter_last_affirmed , v_pat_episodes_journal.encounter_type , v_pat_episodes_journal.encounter_l10n_type FROM clin.v_pat_episodes_journal UNION ALL SELECT v_family_history_journal.pk_patient , v_family_history_journal.modified_when , v_family_history_journal.clin_when , v_family_history_journal.modified_by , v_family_history_journal.soap_cat , v_family_history_journal.narrative , v_family_history_journal.pk_encounter , v_family_history_journal.pk_episode , v_family_history_journal.pk_health_issue , v_family_history_journal.src_pk , v_family_history_journal.src_table , v_family_history_journal.row_version , v_family_history_journal.health_issue , v_family_history_journal.issue_laterality , v_family_history_journal.issue_active , v_family_history_journal.issue_clinically_relevant , v_family_history_journal.issue_confidential , v_family_history_journal.episode , v_family_history_journal.episode_open , v_family_history_journal.encounter_started , v_family_history_journal.encounter_last_affirmed , v_family_history_journal.encounter_type , v_family_history_journal.encounter_l10n_type FROM clin.v_family_history_journal UNION ALL SELECT v_pat_allergies_journal.pk_patient , v_pat_allergies_journal.modified_when , v_pat_allergies_journal.clin_when , v_pat_allergies_journal.modified_by , v_pat_allergies_journal.soap_cat , v_pat_allergies_journal.narrative , v_pat_allergies_journal.pk_encounter , v_pat_allergies_journal.pk_episode , v_pat_allergies_journal.pk_health_issue , v_pat_allergies_journal.src_pk , v_pat_allergies_journal.src_table , v_pat_allergies_journal.row_version , v_pat_allergies_journal.health_issue , v_pat_allergies_journal.issue_laterality , v_pat_allergies_journal.issue_active , v_pat_allergies_journal.issue_clinically_relevant , v_pat_allergies_journal.issue_confidential , v_pat_allergies_journal.episode , v_pat_allergies_journal.episode_open , v_pat_allergies_journal.encounter_started , v_pat_allergies_journal.encounter_last_affirmed , v_pat_allergies_journal.encounter_type , v_pat_allergies_journal.encounter_l10n_type FROM clin.v_pat_allergies_journal UNION ALL SELECT v_pat_allergy_state_journal.pk_patient , v_pat_allergy_state_journal.modified_when , v_pat_allergy_state_journal.clin_when , v_pat_allergy_state_journal.modified_by , v_pat_allergy_state_journal.soap_cat , v_pat_allergy_state_journal.narrative , v_pat_allergy_state_journal.pk_encounter , v_pat_allergy_state_journal.pk_episode , v_pat_allergy_state_journal.pk_health_issue , v_pat_allergy_state_journal.src_pk , v_pat_allergy_state_journal.src_table , v_pat_allergy_state_journal.row_version , v_pat_allergy_state_journal.health_issue , v_pat_allergy_state_journal.issue_laterality , v_pat_allergy_state_journal.issue_active , v_pat_allergy_state_journal.issue_clinically_relevant , v_pat_allergy_state_journal.issue_confidential , v_pat_allergy_state_journal.episode , v_pat_allergy_state_journal.episode_open , v_pat_allergy_state_journal.encounter_started , v_pat_allergy_state_journal.encounter_last_affirmed , v_pat_allergy_state_journal.encounter_type , v_pat_allergy_state_journal.encounter_l10n_type FROM clin.v_pat_allergy_state_journal UNION ALL SELECT v_test_results_journal.pk_patient , v_test_results_journal.modified_when , v_test_results_journal.clin_when , v_test_results_journal.modified_by , v_test_results_journal.soap_cat , v_test_results_journal.narrative , v_test_results_journal.pk_encounter , v_test_results_journal.pk_episode , v_test_results_journal.pk_health_issue , v_test_results_journal.src_pk , v_test_results_journal.src_table , v_test_results_journal.row_version , v_test_results_journal.health_issue , v_test_results_journal.issue_laterality , v_test_results_journal.issue_active , v_test_results_journal.issue_clinically_relevant , v_test_results_journal.issue_confidential , v_test_results_journal.episode , v_test_results_journal.episode_open , v_test_results_journal.encounter_started , v_test_results_journal.encounter_last_affirmed , v_test_results_journal.encounter_type , v_test_results_journal.encounter_l10n_type FROM clin.v_test_results_journal UNION ALL SELECT v_hospital_stays_journal.pk_patient , v_hospital_stays_journal.modified_when , v_hospital_stays_journal.clin_when , v_hospital_stays_journal.modified_by , v_hospital_stays_journal.soap_cat , v_hospital_stays_journal.narrative , v_hospital_stays_journal.pk_encounter , v_hospital_stays_journal.pk_episode , v_hospital_stays_journal.pk_health_issue , v_hospital_stays_journal.src_pk , v_hospital_stays_journal.src_table , v_hospital_stays_journal.row_version , v_hospital_stays_journal.health_issue , v_hospital_stays_journal.issue_laterality , v_hospital_stays_journal.issue_active , v_hospital_stays_journal.issue_clinically_relevant , v_hospital_stays_journal.issue_confidential , v_hospital_stays_journal.episode , v_hospital_stays_journal.episode_open , v_hospital_stays_journal.encounter_started , v_hospital_stays_journal.encounter_last_affirmed , v_hospital_stays_journal.encounter_type , v_hospital_stays_journal.encounter_l10n_type FROM clin.v_hospital_stays_journal UNION ALL SELECT v_doc_med_journal.pk_patient , v_doc_med_journal.modified_when , v_doc_med_journal.clin_when , v_doc_med_journal.modified_by , v_doc_med_journal.soap_cat , v_doc_med_journal.narrative , v_doc_med_journal.pk_encounter , v_doc_med_journal.pk_episode , v_doc_med_journal.pk_health_issue , v_doc_med_journal.src_pk , v_doc_med_journal.src_table , v_doc_med_journal.row_version , v_doc_med_journal.health_issue , v_doc_med_journal.issue_laterality , v_doc_med_journal.issue_active , v_doc_med_journal.issue_clinically_relevant , v_doc_med_journal.issue_confidential , v_doc_med_journal.episode , v_doc_med_journal.episode_open , v_doc_med_journal.encounter_started , v_doc_med_journal.encounter_last_affirmed , v_doc_med_journal.encounter_type , v_doc_med_journal.encounter_l10n_type FROM blobs.v_doc_med_journal UNION ALL SELECT v_substance_intake_journal.pk_patient , v_substance_intake_journal.modified_when , v_substance_intake_journal.clin_when , v_substance_intake_journal.modified_by , v_substance_intake_journal.soap_cat , v_substance_intake_journal.narrative , v_substance_intake_journal.pk_encounter , v_substance_intake_journal.pk_episode , v_substance_intake_journal.pk_health_issue , v_substance_intake_journal.src_pk , v_substance_intake_journal.src_table , v_substance_intake_journal.row_version , v_substance_intake_journal.health_issue , v_substance_intake_journal.issue_laterality , v_substance_intake_journal.issue_active , v_substance_intake_journal.issue_clinically_relevant , v_substance_intake_journal.issue_confidential , v_substance_intake_journal.episode , v_substance_intake_journal.episode_open , v_substance_intake_journal.encounter_started , v_substance_intake_journal.encounter_last_affirmed , v_substance_intake_journal.encounter_type , v_substance_intake_journal.encounter_l10n_type FROM clin.v_substance_intake_journal UNION ALL SELECT v_procedures_journal.pk_patient , v_procedures_journal.modified_when , v_procedures_journal.clin_when , v_procedures_journal.modified_by , v_procedures_journal.soap_cat , v_procedures_journal.narrative , v_procedures_journal.pk_encounter , v_procedures_journal.pk_episode , v_procedures_journal.pk_health_issue , v_procedures_journal.src_pk , v_procedures_journal.src_table , v_procedures_journal.row_version , v_procedures_journal.health_issue , v_procedures_journal.issue_laterality , v_procedures_journal.issue_active , v_procedures_journal.issue_clinically_relevant , v_procedures_journal.issue_confidential , v_procedures_journal.episode , v_procedures_journal.episode_open , v_procedures_journal.encounter_started , v_procedures_journal.encounter_last_affirmed , v_procedures_journal.encounter_type , v_procedures_journal.encounter_l10n_type FROM clin.v_procedures_journal UNION ALL SELECT v_vaccinations_journal.pk_patient , v_vaccinations_journal.modified_when , v_vaccinations_journal.clin_when , v_vaccinations_journal.modified_by , v_vaccinations_journal.soap_cat , v_vaccinations_journal.narrative , v_vaccinations_journal.pk_encounter , v_vaccinations_journal.pk_episode , v_vaccinations_journal.pk_health_issue , v_vaccinations_journal.src_pk , v_vaccinations_journal.src_table , v_vaccinations_journal.row_version , v_vaccinations_journal.health_issue , v_vaccinations_journal.issue_laterality , v_vaccinations_journal.issue_active , v_vaccinations_journal.issue_clinically_relevant , v_vaccinations_journal.issue_confidential , v_vaccinations_journal.episode , v_vaccinations_journal.episode_open , v_vaccinations_journal.encounter_started , v_vaccinations_journal.encounter_last_affirmed , v_vaccinations_journal.encounter_type , v_vaccinations_journal.encounter_l10n_type FROM clin.v_vaccinations_journal UNION ALL SELECT v_suppressed_hints_journal.pk_patient , v_suppressed_hints_journal.modified_when , v_suppressed_hints_journal.clin_when , v_suppressed_hints_journal.modified_by , v_suppressed_hints_journal.soap_cat , v_suppressed_hints_journal.narrative , v_suppressed_hints_journal.fk_encounter AS pk_encounter , v_suppressed_hints_journal.pk_episode , v_suppressed_hints_journal.pk_health_issue , v_suppressed_hints_journal.src_pk , v_suppressed_hints_journal.src_table , v_suppressed_hints_journal.row_version , v_suppressed_hints_journal.health_issue , v_suppressed_hints_journal.issue_laterality , v_suppressed_hints_journal.issue_active , v_suppressed_hints_journal.issue_clinically_relevant , v_suppressed_hints_journal.issue_confidential , v_suppressed_hints_journal.episode , v_suppressed_hints_journal.episode_open , v_suppressed_hints_journal.encounter_started , v_suppressed_hints_journal.encounter_last_affirmed , v_suppressed_hints_journal.encounter_type , v_suppressed_hints_journal.encounter_l10n_type FROM clin.v_suppressed_hints_journal UNION ALL SELECT v_external_care_journal.pk_patient , v_external_care_journal.modified_when , v_external_care_journal.clin_when , v_external_care_journal.modified_by , v_external_care_journal.soap_cat , v_external_care_journal.narrative , v_external_care_journal.pk_encounter , v_external_care_journal.pk_episode , v_external_care_journal.pk_health_issue , v_external_care_journal.src_pk , v_external_care_journal.src_table , v_external_care_journal.row_version , v_external_care_journal.health_issue , v_external_care_journal.issue_laterality , v_external_care_journal.issue_active , v_external_care_journal.issue_clinically_relevant , v_external_care_journal.issue_confidential , v_external_care_journal.episode , v_external_care_journal.episode_open , v_external_care_journal.encounter_started , v_external_care_journal.encounter_last_affirmed , v_external_care_journal.encounter_type , v_external_care_journal.encounter_l10n_type FROM clin.v_external_care_journal UNION ALL SELECT v_edc_journal.pk_patient , v_edc_journal.modified_when , v_edc_journal.clin_when , v_edc_journal.modified_by , v_edc_journal.soap_cat , v_edc_journal.narrative , v_edc_journal.pk_encounter , v_edc_journal.pk_episode , v_edc_journal.pk_health_issue , v_edc_journal.src_pk , v_edc_journal.src_table , v_edc_journal.row_version , v_edc_journal.health_issue , v_edc_journal.issue_laterality , v_edc_journal.issue_active , v_edc_journal.issue_clinically_relevant , v_edc_journal.issue_confidential , v_edc_journal.episode , v_edc_journal.episode_open , v_edc_journal.encounter_started , v_edc_journal.encounter_last_affirmed , v_edc_journal.encounter_type , v_edc_journal.encounter_l10n_type FROM clin.v_edc_journal UNION ALL SELECT v_reminders_journal.pk_patient , v_reminders_journal.modified_when , v_reminders_journal.clin_when , v_reminders_journal.modified_by , v_reminders_journal.soap_cat , v_reminders_journal.narrative , v_reminders_journal.pk_encounter , v_reminders_journal.pk_episode , v_reminders_journal.pk_health_issue , v_reminders_journal.src_pk , v_reminders_journal.src_table , v_reminders_journal.row_version , v_reminders_journal.health_issue , v_reminders_journal.issue_laterality , v_reminders_journal.issue_active , v_reminders_journal.issue_clinically_relevant , v_reminders_journal.issue_confidential , v_reminders_journal.episode , v_reminders_journal.episode_open , v_reminders_journal.encounter_started , v_reminders_journal.encounter_last_affirmed , v_reminders_journal.encounter_type , v_reminders_journal.encounter_l10n_type FROM clin.v_reminders_journal;
F-Key | Name | Type | Description |
---|---|---|---|
pk_export_item | integer | ||
pk_identity | integer | ||
created_by | text | ||
created_when | timestamp with time zone | ||
designation | text | ||
description | text | ||
pk_doc_obj | integer | ||
md5_sum | text | ||
size | integer | ||
filename | text | ||
xmin_export_item | xid | ||
title | text | ||
firstnames | text | ||
lastnames | text | ||
preferred | text | ||
gender | text | ||
dob | timestamp with time zone |
SELECT inner_export_items.pk_export_item , inner_export_items.pk_identity , inner_export_items.created_by , inner_export_items.created_when , inner_export_items.designation , inner_export_items.description , inner_export_items.pk_doc_obj , inner_export_items.md5_sum , inner_export_items.size , inner_export_items.filename , inner_export_items.xmin_export_item , d_vp.title , d_vp.firstnames , d_vp.lastnames , d_vp.preferred , d_vp.gender , d_vp.dob FROM ( ( SELECT c_ei.pk AS pk_export_item , COALESCE (c_ei.fk_identity , ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = ( SELECT doc_med.fk_encounter FROM blobs.doc_med WHERE (doc_med.pk = ( SELECT doc_obj.fk_doc FROM blobs.doc_obj WHERE (doc_obj.pk = c_ei.fk_doc_obj) ) ) ) ) ) ) AS pk_identity , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_ei.created_by) ) , (c_ei.created_by)::text ) AS created_by , c_ei.created_when , c_ei.designation , c_ei.description , c_ei.fk_doc_obj AS pk_doc_obj , md5 (COALESCE (c_ei.data , COALESCE ( ( SELECT b_do.data FROM blobs.doc_obj b_do WHERE (b_do.pk = c_ei.fk_doc_obj) ) ,'\x'::bytea ) ) ) AS md5_sum , octet_length (COALESCE (c_ei.data ,'\x'::bytea ) ) AS size , COALESCE (c_ei.filename , ( SELECT b_do.filename FROM blobs.doc_obj b_do WHERE (b_do.pk = c_ei.fk_doc_obj) ) ) AS filename , c_ei.xmin AS xmin_export_item FROM clin.export_item c_ei ) inner_export_items JOIN dem.v_all_persons d_vp ON ( (d_vp.pk_identity = inner_export_items.pk_identity) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_external_care | integer | ||
pk_identity | integer | ||
issue | text | ||
provider | text | ||
unit | text | ||
organization | text | ||
comment | text | ||
pk_health_issue | integer | ||
pk_org_unit | integer | ||
pk_encounter | integer | ||
xmin_external_care | xid | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
row_version | integer |
SELECT c_ec.pk AS pk_external_care , ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = c_ec.fk_encounter) ) AS pk_identity , COALESCE (c_ec.issue , c_hi.description ) AS issue , c_ec.provider , d_ou.description AS unit , d_o.description AS organization , c_ec.comment , c_ec.fk_health_issue AS pk_health_issue , c_ec.fk_org_unit AS pk_org_unit , c_ec.fk_encounter AS pk_encounter , c_ec.xmin AS xmin_external_care , c_ec.modified_when , c_ec.modified_by , c_ec.row_version FROM ( ( (clin.external_care c_ec LEFT JOIN clin.health_issue c_hi ON ( (c_hi.pk = c_ec.fk_health_issue) ) ) LEFT JOIN dem.org_unit d_ou ON ( (c_ec.fk_org_unit = d_ou.pk) ) ) LEFT JOIN dem.org d_o ON ( (d_ou.fk_org = d_o.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_ec.modified_when , c_ec.modified_when AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_ec.modified_by) ) , ( ('<'::text || (c_ec.modified_by)::text ) || '>'::text ) ) AS modified_by , 's'::text AS soap_cat , ( ( ( ( ( ( ( ( ( ( ( ( (_ ('External care'::text) || COALESCE ( ( ( (' '::text || _ ('by'::text) ) || ' '::text ) || c_ec.provider ) ,''::text ) ) || ' @ '::text ) || d_ou.description ) || ' '::text ) || _ ('of'::text) ) || ' '::text ) || d_o.description ) || ' '::text ) || _ ('Issue:'::text) ) || ' '::text ) || COALESCE (c_hi.description , c_ec.issue ) ) || ' '::text ) || COALESCE ( ( (_ ('Comment:'::text) || ' '::text ) || c_ec.comment ) ,''::text ) ) AS narrative , c_ec.fk_encounter AS pk_encounter , NULL::integer AS pk_episode , c_ec.fk_health_issue AS pk_health_issue , c_ec.pk AS src_pk , 'clin.external_care'::text AS src_table , c_ec.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , NULL::text AS episode , NULL::boolean AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( ( (clin.external_care c_ec JOIN clin.encounter c_enc ON ( (c_ec.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_ec.fk_health_issue = c_hi.pk) ) ) LEFT JOIN dem.org_unit d_ou ON ( (c_ec.fk_org_unit = d_ou.pk) ) ) LEFT JOIN dem.org d_o ON ( (d_ou.fk_org = d_o.pk) ) );
family history denormalized
F-Key | Name | Type | Description |
---|---|---|---|
pk_family_history | integer | ||
pk_patient | integer | ||
soap_cat | text | ||
relation | text | ||
l10n_relation | text | ||
condition | text | ||
age_noted | text | ||
age_of_death | interval | ||
contributed_to_death | boolean | ||
comment | text | ||
episode | text | ||
when_known_to_patient | timestamp with time zone | ||
name_relative | text | ||
dob_relative | timestamp with time zone | ||
is_genetic_relative | boolean | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
pk_fhx_relation_type | integer | ||
modified_when | timestamp with time zone | ||
pk_generic_codes | integer[] | ||
xmin_family_history | xid |
SELECT c_fh.pk AS pk_family_history , cenc.fk_patient AS pk_patient , c_fh.soap_cat , c_fhrt.description AS relation , _ (c_fhrt.description) AS l10n_relation , c_fh.narrative AS condition , c_fh.age_noted , c_fh.age_of_death , c_fh.contributed_to_death , c_fh.comment , cep.description AS episode , c_fh.clin_when AS when_known_to_patient , c_fh.name_relative , c_fh.dob_relative , c_fhrt.is_genetic AS is_genetic_relative , c_fh.fk_encounter AS pk_encounter , c_fh.fk_episode AS pk_episode , cep.fk_health_issue AS pk_health_issue , c_fhrt.pk AS pk_fhx_relation_type , c_fh.modified_when , COALESCE ( ( SELECT array_agg (c_lc2fhx.fk_generic_code) AS array_agg FROM clin.lnk_code2fhx c_lc2fhx WHERE (c_lc2fhx.fk_item = c_fh.pk) ) , ARRAY[]::integer[] ) AS pk_generic_codes , c_fh.xmin AS xmin_family_history FROM ( ( (clin.family_history c_fh JOIN clin.encounter cenc ON ( (c_fh.fk_encounter = cenc.pk) ) ) JOIN clin.episode cep ON ( (c_fh.fk_episode = cep.pk) ) ) LEFT JOIN clin.fhx_relation_type c_fhrt ON ( (c_fh.fk_relation_type = c_fhrt.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_fh.modified_when , c_fh.clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_fh.modified_by) ) , ( ('<'::text || (c_fh.modified_by)::text ) || '>'::text ) ) AS modified_by , c_fh.soap_cat , ( ( ( ( ( ( ( ( ( ( ( (_ (c_fhrt.description) || COALESCE ( (' @ '::text || c_fh.age_noted) ,''::text ) ) || ': '::text ) || c_fh.narrative ) || ' '::text ) || ' '::text ) || CASE WHEN (c_fh.contributed_to_death IS TRUE) THEN (_ ('contributed to death'::text) || ' '::text ) ELSE ''::text END ) || COALESCE ( ('@ '::text || (justify_interval (c_fh.age_of_death) )::text ) ,''::text ) ) || ' '::text ) || COALESCE ( ( (' '::text || c_fh.name_relative) || ','::text ) ,''::text ) ) || COALESCE ( (' '::text || to_char (c_fh.dob_relative ,'YYYY-MM-DD'::text ) ) ,''::text ) ) || COALESCE ( (' '::text || c_fh.comment) ,''::text ) ) || COALESCE ( ( ('; '::text || array_to_string ( ( SELECT array_agg ( ( ( ( ( ( ( ( (r_csr.code || ' ('::text) || r_ds.name_short ) || ' - '::text ) || r_ds.version ) || ' - '::text ) || r_ds.lang ) || '): '::text ) || r_csr.term ) ) AS array_agg FROM ( (clin.lnk_code2fhx c_lc2fhx JOIN ref.coding_system_root r_csr ON ( (c_lc2fhx.fk_generic_code = r_csr.pk_coding_system) ) ) JOIN ref.data_source r_ds ON ( (r_ds.pk = r_csr.fk_data_source) ) ) WHERE (c_lc2fhx.fk_item = c_fh.pk) ) ,'; '::text ) ) || ';'::text ) ,''::text ) ) AS narrative , c_fh.fk_encounter AS pk_encounter , c_fh.fk_episode AS pk_episode , c_epi.fk_health_issue AS pk_health_issue , c_fh.pk AS src_pk , 'clin.family_history'::text AS src_table , c_fh.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( ( (clin.family_history c_fh JOIN clin.encounter c_enc ON ( (c_fh.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_fh.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.fhx_relation_type c_fhrt ON ( (c_fh.fk_relation_type = c_fhrt.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
pk_health_issue | integer | ||
description | text | ||
summary | text | ||
laterality | character varying(2) | ||
age_noted | interval | ||
is_active | boolean | ||
clinically_relevant | boolean | ||
is_confidential | boolean | ||
is_cause_of_death | boolean | ||
pk_encounter | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
row_version | integer | ||
grouping | text | ||
diagnostic_certainty_classification | text | ||
has_open_episode | boolean | ||
pk_generic_codes | integer[] | ||
xmin_health_issue | xid |
SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = c_hi.fk_encounter) ) AS pk_patient , c_hi.pk AS pk_health_issue , c_hi.description , c_hi.summary , c_hi.laterality , c_hi.age_noted , c_hi.is_active , c_hi.clinically_relevant , c_hi.is_confidential , c_hi.is_cause_of_death , c_hi.fk_encounter AS pk_encounter , c_hi.modified_when , c_hi.modified_by , c_hi.row_version , c_hi."grouping" , c_hi.diagnostic_certainty_classification , (EXISTS ( SELECT 1 FROM clin.episode c_ep WHERE ( (c_ep.fk_health_issue = c_hi.pk) AND (c_ep.is_open IS TRUE) ) LIMIT 1 ) ) AS has_open_episode , COALESCE ( ( SELECT array_agg (c_lc2h.fk_generic_code) AS array_agg FROM clin.lnk_code2h_issue c_lc2h WHERE (c_lc2h.fk_item = c_hi.pk) ) , ARRAY[]::integer[] ) AS pk_generic_codes , c_hi.xmin AS xmin_health_issue FROM clin.health_issue c_hi;
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_hi.modified_when , COALESCE ( ( SELECT (identity.dob + c_hi.age_noted) FROM dem.identity WHERE (identity.pk = ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = c_hi.fk_encounter) ) ) ) , c_enc.started ) AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_hi.modified_by) ) , ( ('<'::text || (c_hi.modified_by)::text ) || '>'::text ) ) AS modified_by , 'a'::text AS soap_cat , ( ( ( ( ( ( ( ( ( ( ( ( (_ ('Health Issue'::text) || ' ('::text) || CASE WHEN c_hi.is_active THEN _ ('active'::text) ELSE _ ('inactive'::text) END ) || ', '::text ) || CASE WHEN c_hi.clinically_relevant THEN _ ('clinically relevant'::text) ELSE _ ('clinically not relevant'::text) END ) || COALESCE ( ( ', '::text || c_hi.diagnostic_certainty_classification ) ,''::text ) ) || '): '::text ) || c_hi.description ) || COALESCE ( ( ( ( ('; '::text || _ ('noted at age'::text) ) || ': '::text ) || (c_hi.age_noted)::text ) || '; '::text ) ,'; '::text ) ) || COALESCE ( ( ( (_ ('Laterality'::text) || ': '::text ) || (c_hi.laterality)::text ) || ' / '::text ) ,''::text ) ) || CASE WHEN c_hi.is_confidential THEN (_ ('confidential'::text) || ' / '::text ) ELSE ''::text END ) || CASE WHEN c_hi.is_cause_of_death THEN _ ('cause of death'::text) ELSE ''::text END ) || COALESCE ( ( ( ('; '::text || _ ('Summary'::text) ) || ': '::text ) || c_hi.summary ) ,''::text ) ) || COALESCE ( ( ('; '::text || array_to_string ( ( SELECT array_agg ( ( ( ( ( ( ( ( (r_csr.code || ' ('::text) || r_ds.name_short ) || ' - '::text ) || r_ds.version ) || ' - '::text ) || r_ds.lang ) || '): '::text ) || r_csr.term ) ) AS array_agg FROM ( (clin.lnk_code2h_issue c_lc2h JOIN ref.coding_system_root r_csr ON ( (c_lc2h.fk_generic_code = r_csr.pk_coding_system) ) ) JOIN ref.data_source r_ds ON ( (r_ds.pk = r_csr.fk_data_source) ) ) WHERE (c_lc2h.fk_item = c_hi.pk) ) ,'; '::text ) ) || ';'::text ) ,''::text ) ) AS narrative , c_hi.fk_encounter AS pk_encounter , NULL::integer AS pk_episode , c_hi.pk AS pk_health_issue , c_hi.pk AS src_pk , 'clin.health_issue'::text AS src_table , c_hi.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , NULL::text AS episode , NULL::boolean AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( (clin.health_issue c_hi JOIN clin.encounter c_enc ON ( (c_hi.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_hospital_stay | integer | ||
pk_patient | integer | ||
hospital | text | ||
ward | text | ||
comment | text | ||
admission | timestamp with time zone | ||
discharge | timestamp with time zone | ||
soap_cat | text | ||
episode | text | ||
health_issue | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
pk_org_unit | integer | ||
pk_org | integer | ||
modified_when | timestamp with time zone | ||
modified_by | text | ||
row_version | integer | ||
xmin_hospital_stay | xid |
SELECT c_hs.pk AS pk_hospital_stay , ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = c_hs.fk_encounter) ) AS pk_patient , d_o.description AS hospital , d_ou.description AS ward , c_hs.narrative AS comment , c_hs.clin_when AS admission , c_hs.discharge , c_hs.soap_cat , c_e.description AS episode , c_hi.description AS health_issue , c_hs.fk_encounter AS pk_encounter , c_hs.fk_episode AS pk_episode , c_hi.pk AS pk_health_issue , c_hs.fk_org_unit AS pk_org_unit , d_o.pk AS pk_org , c_hs.modified_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_hs.modified_by) ) , ( ('<'::text || (c_hs.modified_by)::text ) || '>'::text ) ) AS modified_by , c_hs.row_version , c_hs.xmin AS xmin_hospital_stay FROM ( ( ( (clin.hospital_stay c_hs LEFT JOIN clin.episode c_e ON ( (c_e.pk = c_hs.fk_episode) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_hi.pk = c_e.fk_health_issue) ) ) LEFT JOIN dem.org_unit d_ou ON ( (d_ou.pk = c_hs.fk_org_unit) ) ) LEFT JOIN dem.org d_o ON ( (d_o.pk = d_ou.fk_org) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT v_hospital_stays_journal_no_discharge.pk_patient , v_hospital_stays_journal_no_discharge.modified_when , v_hospital_stays_journal_no_discharge.clin_when , v_hospital_stays_journal_no_discharge.modified_by , v_hospital_stays_journal_no_discharge.soap_cat , v_hospital_stays_journal_no_discharge.narrative , v_hospital_stays_journal_no_discharge.pk_encounter , v_hospital_stays_journal_no_discharge.pk_episode , v_hospital_stays_journal_no_discharge.pk_health_issue , v_hospital_stays_journal_no_discharge.src_pk , v_hospital_stays_journal_no_discharge.src_table , v_hospital_stays_journal_no_discharge.row_version , v_hospital_stays_journal_no_discharge.health_issue , v_hospital_stays_journal_no_discharge.issue_laterality , v_hospital_stays_journal_no_discharge.issue_active , v_hospital_stays_journal_no_discharge.issue_clinically_relevant , v_hospital_stays_journal_no_discharge.issue_confidential , v_hospital_stays_journal_no_discharge.episode , v_hospital_stays_journal_no_discharge.episode_open , v_hospital_stays_journal_no_discharge.encounter_started , v_hospital_stays_journal_no_discharge.encounter_last_affirmed , v_hospital_stays_journal_no_discharge.encounter_type , v_hospital_stays_journal_no_discharge.encounter_l10n_type FROM clin.v_hospital_stays_journal_no_discharge UNION ALL SELECT v_hospital_stays_journal_one_day.pk_patient , v_hospital_stays_journal_one_day.modified_when , v_hospital_stays_journal_one_day.clin_when , v_hospital_stays_journal_one_day.modified_by , v_hospital_stays_journal_one_day.soap_cat , v_hospital_stays_journal_one_day.narrative , v_hospital_stays_journal_one_day.pk_encounter , v_hospital_stays_journal_one_day.pk_episode , v_hospital_stays_journal_one_day.pk_health_issue , v_hospital_stays_journal_one_day.src_pk , v_hospital_stays_journal_one_day.src_table , v_hospital_stays_journal_one_day.row_version , v_hospital_stays_journal_one_day.health_issue , v_hospital_stays_journal_one_day.issue_laterality , v_hospital_stays_journal_one_day.issue_active , v_hospital_stays_journal_one_day.issue_clinically_relevant , v_hospital_stays_journal_one_day.issue_confidential , v_hospital_stays_journal_one_day.episode , v_hospital_stays_journal_one_day.episode_open , v_hospital_stays_journal_one_day.encounter_started , v_hospital_stays_journal_one_day.encounter_last_affirmed , v_hospital_stays_journal_one_day.encounter_type , v_hospital_stays_journal_one_day.encounter_l10n_type FROM clin.v_hospital_stays_journal_one_day UNION ALL SELECT v_hospital_stays_journal_multi_day_adm.pk_patient , v_hospital_stays_journal_multi_day_adm.modified_when , v_hospital_stays_journal_multi_day_adm.clin_when , v_hospital_stays_journal_multi_day_adm.modified_by , v_hospital_stays_journal_multi_day_adm.soap_cat , v_hospital_stays_journal_multi_day_adm.narrative , v_hospital_stays_journal_multi_day_adm.pk_encounter , v_hospital_stays_journal_multi_day_adm.pk_episode , v_hospital_stays_journal_multi_day_adm.pk_health_issue , v_hospital_stays_journal_multi_day_adm.src_pk , v_hospital_stays_journal_multi_day_adm.src_table , v_hospital_stays_journal_multi_day_adm.row_version , v_hospital_stays_journal_multi_day_adm.health_issue , v_hospital_stays_journal_multi_day_adm.issue_laterality , v_hospital_stays_journal_multi_day_adm.issue_active , v_hospital_stays_journal_multi_day_adm.issue_clinically_relevant , v_hospital_stays_journal_multi_day_adm.issue_confidential , v_hospital_stays_journal_multi_day_adm.episode , v_hospital_stays_journal_multi_day_adm.episode_open , v_hospital_stays_journal_multi_day_adm.encounter_started , v_hospital_stays_journal_multi_day_adm.encounter_last_affirmed , v_hospital_stays_journal_multi_day_adm.encounter_type , v_hospital_stays_journal_multi_day_adm.encounter_l10n_type FROM clin.v_hospital_stays_journal_multi_day_adm UNION ALL SELECT v_hospital_stays_journal_multi_day_dis.pk_patient , v_hospital_stays_journal_multi_day_dis.modified_when , v_hospital_stays_journal_multi_day_dis.clin_when , v_hospital_stays_journal_multi_day_dis.modified_by , v_hospital_stays_journal_multi_day_dis.soap_cat , v_hospital_stays_journal_multi_day_dis.narrative , v_hospital_stays_journal_multi_day_dis.pk_encounter , v_hospital_stays_journal_multi_day_dis.pk_episode , v_hospital_stays_journal_multi_day_dis.pk_health_issue , v_hospital_stays_journal_multi_day_dis.src_pk , v_hospital_stays_journal_multi_day_dis.src_table , v_hospital_stays_journal_multi_day_dis.row_version , v_hospital_stays_journal_multi_day_dis.health_issue , v_hospital_stays_journal_multi_day_dis.issue_laterality , v_hospital_stays_journal_multi_day_dis.issue_active , v_hospital_stays_journal_multi_day_dis.issue_clinically_relevant , v_hospital_stays_journal_multi_day_dis.issue_confidential , v_hospital_stays_journal_multi_day_dis.episode , v_hospital_stays_journal_multi_day_dis.episode_open , v_hospital_stays_journal_multi_day_dis.encounter_started , v_hospital_stays_journal_multi_day_dis.encounter_last_affirmed , v_hospital_stays_journal_multi_day_dis.encounter_type , v_hospital_stays_journal_multi_day_dis.encounter_l10n_type FROM clin.v_hospital_stays_journal_multi_day_dis;
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_hs.modified_when , c_hs.clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_hs.modified_by) ) , ( ('<'::text || (c_hs.modified_by)::text ) || '>'::text ) ) AS modified_by , c_hs.soap_cat , ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (_ ('hospital stay'::text) || ' '::text ) || ' '::text ) || _ ('admitted'::text) ) || ': '::text ) || to_char (c_hs.clin_when ,'YYYY-MM-DD'::text ) ) || ' '::text ) || ' '::text ) || _ ('discharged'::text) ) || ': '::text ) || to_char (c_hs.discharge ,'YYYY-MM-DD'::text ) ) || ' '::text ) || ' '::text ) || _ ('hospital'::text) ) || ': "'::text ) || d_ou.description ) || ' @ '::text ) || d_o.description ) || '"'::text ) || ' '::text ) || COALESCE ( (' '::text || c_hs.narrative) ,''::text ) ) AS narrative , c_hs.fk_encounter AS pk_encounter , c_hs.fk_episode AS pk_episode , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = c_hs.fk_episode) ) AS pk_health_issue , c_hs.pk AS src_pk , 'clin.hospital_stay'::text AS src_table , c_hs.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( ( ( (clin.hospital_stay c_hs JOIN clin.encounter c_enc ON ( (c_hs.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_hs.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) ) LEFT JOIN dem.org_unit d_ou ON ( (d_ou.pk = c_hs.fk_org_unit) ) ) LEFT JOIN dem.org d_o ON ( (d_o.pk = d_ou.fk_org) ) ) WHERE ( (c_hs.discharge IS NOT NULL) AND (to_char (c_hs.clin_when ,'YYYYMMDD'::text ) <> to_char (c_hs.discharge ,'YYYYMMDD'::text ) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_hs.modified_when , c_hs.discharge AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_hs.modified_by) ) , ( ('<'::text || (c_hs.modified_by)::text ) || '>'::text ) ) AS modified_by , c_hs.soap_cat , ( ( ( ( (_ ('discharged from'::text) || ' "'::text ) || d_ou.description ) || ' @ '::text ) || d_o.description ) || '"'::text ) AS narrative , c_hs.fk_encounter AS pk_encounter , c_hs.fk_episode AS pk_episode , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = c_hs.fk_episode) ) AS pk_health_issue , c_hs.pk AS src_pk , 'clin.hospital_stay'::text AS src_table , c_hs.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( ( ( (clin.hospital_stay c_hs JOIN clin.encounter c_enc ON ( (c_hs.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_hs.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) ) LEFT JOIN dem.org_unit d_ou ON ( (d_ou.pk = c_hs.fk_org_unit) ) ) LEFT JOIN dem.org d_o ON ( (d_o.pk = d_ou.fk_org) ) ) WHERE ( (c_hs.discharge IS NOT NULL) AND (to_char (c_hs.clin_when ,'YYYYMMDD'::text ) <> to_char (c_hs.discharge ,'YYYYMMDD'::text ) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_hs.modified_when , c_hs.clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_hs.modified_by) ) , ( ('<'::text || (c_hs.modified_by)::text ) || '>'::text ) ) AS modified_by , c_hs.soap_cat , ( ( ( ( ( ( ( ( ( ( ( ( ( (_ ('hospital stay'::text) || ' '::text ) || ' '::text ) || _ ('admitted'::text) ) || ': '::text ) || to_char (c_hs.clin_when ,'YYYY-MM-DD'::text ) ) || ' '::text ) || ' '::text ) || _ ('hospital'::text) ) || ': "'::text ) || d_ou.description ) || ' @ '::text ) || d_o.description ) || '"'::text ) || COALESCE ( (' '::text || c_hs.narrative) ,''::text ) ) AS narrative , c_hs.fk_encounter AS pk_encounter , c_hs.fk_episode AS pk_episode , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = c_hs.fk_episode) ) AS pk_health_issue , c_hs.pk AS src_pk , 'clin.hospital_stay'::text AS src_table , c_hs.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( ( ( (clin.hospital_stay c_hs JOIN clin.encounter c_enc ON ( (c_hs.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_hs.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) ) LEFT JOIN dem.org_unit d_ou ON ( (d_ou.pk = c_hs.fk_org_unit) ) ) LEFT JOIN dem.org d_o ON ( (d_o.pk = d_ou.fk_org) ) ) WHERE (c_hs.discharge IS NULL);
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_hs.modified_when , c_hs.clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_hs.modified_by) ) , ( ('<'::text || (c_hs.modified_by)::text ) || '>'::text ) ) AS modified_by , c_hs.soap_cat , ( ( ( ( ( ( ( ( ( ( ( ( ( ( (_ ('hospital stay'::text) || ' '::text ) || ' '::text ) || _ ('admitted/discharged'::text) ) || ': '::text ) || to_char (c_hs.clin_when ,'YYYY-MM-DD'::text ) ) || ' '::text ) || ' '::text ) || _ ('hospital'::text) ) || ': "'::text ) || d_ou.description ) || ' @ '::text ) || d_o.description ) || '"'::text ) || ' '::text ) || COALESCE ( (' '::text || c_hs.narrative) ,''::text ) ) AS narrative , c_hs.fk_encounter AS pk_encounter , c_hs.fk_episode AS pk_episode , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = c_hs.fk_episode) ) AS pk_health_issue , c_hs.pk AS src_pk , 'clin.hospital_stay'::text AS src_table , c_hs.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( ( ( (clin.hospital_stay c_hs JOIN clin.encounter c_enc ON ( (c_hs.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_hs.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) ) LEFT JOIN dem.org_unit d_ou ON ( (d_ou.pk = c_hs.fk_org_unit) ) ) LEFT JOIN dem.org d_o ON ( (d_o.pk = d_ou.fk_org) ) ) WHERE ( (c_hs.discharge IS NOT NULL) AND (to_char (c_hs.clin_when ,'YYYYMMDD'::text ) = to_char (c_hs.discharge ,'YYYYMMDD'::text ) ) );
Shows incoming data but w/o the data field.
F-Key | Name | Type | Description |
---|---|---|---|
pk_incoming_data_unmatched | integer | ||
pk_patient_candidates | integer[] | ||
firstnames | text | ||
lastnames | text | ||
dob | date | ||
gender | text | ||
postcode | text | ||
other_info | text | ||
request_id | text | ||
requestor | text | ||
external_data_id | text | ||
comment | text | ||
pk_identity_disambiguated | integer | ||
pk_provider_disambiguated | integer | ||
data_type | text | ||
md5_sum | text | ||
data_size | integer | ||
xmin_incoming_data_unmatched | xid |
SELECT c_idu.pk AS pk_incoming_data_unmatched , c_idu.fk_patient_candidates AS pk_patient_candidates , c_idu.firstnames , c_idu.lastnames , c_idu.dob , c_idu.gender , c_idu.postcode , c_idu.other_info , c_idu.request_id , c_idu.requestor , c_idu.external_data_id , c_idu.comment , c_idu.fk_identity_disambiguated AS pk_identity_disambiguated , c_idu.fk_provider_disambiguated AS pk_provider_disambiguated , c_idu.type AS data_type , md5 (c_idu.data) AS md5_sum , octet_length (c_idu.data) AS data_size , c_idu.xmin AS xmin_incoming_data_unmatched FROM clin.incoming_data_unmatched c_idu;
Denormalizes indications per vaccine.
F-Key | Name | Type | Description |
---|---|---|---|
pk_vaccine | integer | ||
vaccine | text | ||
preparation | text | ||
atc_code | text | ||
is_fake_vaccine | boolean | ||
route_abbreviation | text | ||
route_description | text | ||
is_live | boolean | ||
min_age | interval | ||
max_age | interval | ||
comment | text | ||
indication | text | ||
l10n_indication | text | ||
atcs_single_indication | text[] | ||
atcs_combi_indication | text[] | ||
external_code | text | ||
external_code_type | text | ||
indications | text[] | ||
l10n_indications | text[] | ||
pk_indications | integer[] | ||
pk_route | integer | ||
pk_brand | integer | ||
pk_data_source | integer | ||
pk_indication | integer | ||
xmin_vaccine | xid |
SELECT cv.pk AS pk_vaccine , rbd.description AS vaccine , rbd.preparation , rbd.atc_code , rbd.is_fake AS is_fake_vaccine , cvr.abbreviation AS route_abbreviation , cvr.description AS route_description , cv.is_live , cv.min_age , cv.max_age , cv.comment , cvi.description AS indication , _ (cvi.description) AS l10n_indication , cvi.atcs_single_indication , cvi.atcs_combi_indication , rbd.external_code , rbd.external_code_type , ( SELECT array_agg (cvi2.description) AS array_agg FROM (clin.lnk_vaccine2inds clv2i_2 JOIN clin.vacc_indication cvi2 ON ( (clv2i_2.fk_indication = cvi2.id) ) ) WHERE (clv2i_2.fk_vaccine = cv.pk) ) AS indications , ( SELECT array_agg (_ (cvi2.description) ) AS array_agg FROM (clin.lnk_vaccine2inds clv2i_2 JOIN clin.vacc_indication cvi2 ON ( (clv2i_2.fk_indication = cvi2.id) ) ) WHERE (clv2i_2.fk_vaccine = cv.pk) ) AS l10n_indications , ( SELECT array_agg (clv2i_2.fk_indication) AS array_agg FROM (clin.lnk_vaccine2inds clv2i_2 JOIN clin.vacc_indication cvi2 ON ( (clv2i_2.fk_indication = cvi2.id) ) ) WHERE (clv2i_2.fk_vaccine = cv.pk) ) AS pk_indications , cv.id_route AS pk_route , cv.fk_brand AS pk_brand , rbd.fk_data_source AS pk_data_source , cvi.id AS pk_indication , cv.xmin AS xmin_vaccine FROM ( ( ( (clin.vaccine cv LEFT JOIN clin.vacc_route cvr ON ( (cvr.id = cv.id_route) ) ) JOIN ref.branded_drug rbd ON ( (rbd.pk = cv.fk_brand) ) ) JOIN clin.lnk_vaccine2inds clv2i ON ( (clv2i.fk_vaccine = cv.pk) ) ) JOIN clin.vacc_indication cvi ON ( (cvi.id = clv2i.fk_indication) ) );
Denormalized codes linked to EMR structures.
F-Key | Name | Type | Description |
---|---|---|---|
pk_item | integer | ||
item_table | regclass | ||
code | text | ||
base_code | text | ||
code_modifier | text | ||
term | text | ||
name_long | text | ||
name_short | text | ||
version | text | ||
lang | text | ||
code_table | regclass | ||
pk_generic_code | integer | ||
pk_data_source | integer | ||
pk_lnk_code2item | integer |
SELECT c_lc2ir.fk_item AS pk_item , (c_lc2ir.tableoid)::regclass AS item_table , (r_csr.code || COALESCE (c_lc2ir.code_modifier ,''::text ) ) AS code , r_csr.code AS base_code , c_lc2ir.code_modifier , r_csr.term , r_ds.name_long , r_ds.name_short , r_ds.version , r_ds.lang , (r_csr.tableoid)::regclass AS code_table , r_csr.pk_coding_system AS pk_generic_code , r_csr.fk_data_source AS pk_data_source , c_lc2ir.pk_lnk_code2item FROM ( (clin.lnk_code2item_root c_lc2ir JOIN ref.coding_system_root r_csr ON ( (r_csr.pk_coding_system = c_lc2ir.fk_generic_code) ) ) JOIN ref.data_source r_ds ON ( (r_ds.pk = r_csr.fk_data_source) ) );
Denormalizes indications per vaccine.
F-Key | Name | Type | Description |
---|---|---|---|
pk_vaccine | integer | ||
vaccine | text | ||
preparation | text | ||
atc_code | text | ||
is_fake_vaccine | boolean | ||
route_abbreviation | text | ||
route_description | text | ||
is_live | boolean | ||
min_age | interval | ||
max_age | interval | ||
comment | text | ||
indication | text | ||
l10n_indication | text | ||
atcs_single_indication | text[] | ||
atcs_combi_indication | text[] | ||
external_code | text | ||
external_code_type | text | ||
pk_route | integer | ||
pk_brand | integer | ||
pk_data_source | integer | ||
pk_indication | integer | ||
xmin_vaccine | xid |
SELECT cv.pk AS pk_vaccine , rbd.description AS vaccine , rbd.preparation , rbd.atc_code , rbd.is_fake AS is_fake_vaccine , cvr.abbreviation AS route_abbreviation , cvr.description AS route_description , cv.is_live , cv.min_age , cv.max_age , cv.comment , cvi.description AS indication , _ (cvi.description) AS l10n_indication , cvi.atcs_single_indication , cvi.atcs_combi_indication , rbd.external_code , rbd.external_code_type , cv.id_route AS pk_route , cv.fk_brand AS pk_brand , rbd.fk_data_source AS pk_data_source , cvi.id AS pk_indication , cv.xmin AS xmin_vaccine FROM ( ( ( (clin.vaccine cv LEFT JOIN clin.vacc_route cvr ON ( (cvr.id = cv.id_route) ) ) JOIN ref.branded_drug rbd ON ( (rbd.pk = cv.fk_brand) ) ) JOIN clin.lnk_vaccine2inds clv2i ON ( (clv2i.fk_vaccine = cv.pk) ) ) JOIN clin.vacc_indication cvi ON ( (cvi.id = clv2i.fk_indication) ) );
Lists the most recent encounters per patient. Logic of "most recent" is: for a patient: 1) select encounters with latest "last_affirmed", 2) from those select encounters with latest "started" 3) limit those to 1 if there are duplicates (same start and end of encounter!)
F-Key | Name | Type | Description |
---|---|---|---|
pk_encounter | integer | ||
pk_patient | integer | ||
reason_for_encounter | text | ||
assessment_of_encounter | text | ||
type | text | ||
l10n_type | text | ||
started | timestamp with time zone | ||
last_affirmed | timestamp with time zone | ||
pk_type | integer | ||
pk_location | integer |
SELECT ce1.pk AS pk_encounter , ce1.fk_patient AS pk_patient , ce1.reason_for_encounter , ce1.assessment_of_encounter , et.description AS type , _ (et.description) AS l10n_type , ce1.started , ce1.last_affirmed , ce1.fk_type AS pk_type , ce1.fk_location AS pk_location FROM clin.encounter ce1 , clin.encounter_type et WHERE ( (ce1.fk_type = et.pk) AND (ce1.started = ( SELECT max (ce2.started) AS max FROM clin.encounter ce2 WHERE (ce2.last_affirmed = ( SELECT max (ce3.last_affirmed) AS max FROM clin.encounter ce3 WHERE (ce3.fk_patient = ce1.fk_patient) ) ) LIMIT 1 ) ) );
patient narrative with denormalized context added
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
date | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
episode | text | ||
health_issue | text | ||
pk_item | integer | ||
pk_narrative | integer | ||
pk_health_issue | integer | ||
pk_episode | integer | ||
pk_encounter | integer | ||
xmin_clin_narrative | xid | ||
modified_when | timestamp with time zone | ||
row_version | integer | ||
pk_audit | integer | ||
modified_by_raw | name | ||
pk_generic_codes | integer[] |
SELECT c_enc.fk_patient AS pk_patient , c_n.clin_when AS date , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_n.modified_by) ) , ( ('<'::text || (c_n.modified_by)::text ) || '>'::text ) ) AS modified_by , c_n.soap_cat , c_n.narrative , c_epi.description AS episode , c_hi.description AS health_issue , c_n.pk_item , c_n.pk AS pk_narrative , c_epi.fk_health_issue AS pk_health_issue , c_n.fk_episode AS pk_episode , c_n.fk_encounter AS pk_encounter , c_n.xmin AS xmin_clin_narrative , c_n.modified_when , c_n.row_version , c_n.pk_audit , c_n.modified_by AS modified_by_raw , COALESCE ( ( SELECT array_agg (c_lc2n.fk_generic_code) AS array_agg FROM clin.lnk_code2narrative c_lc2n WHERE (c_lc2n.fk_item = c_n.pk) ) , ARRAY[]::integer[] ) AS pk_generic_codes FROM ( ( (clin.clin_narrative c_n LEFT JOIN clin.encounter c_enc ON ( (c_n.fk_encounter = c_enc.pk) ) ) LEFT JOIN clin.episode c_epi ON ( (c_n.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) );
unformatted *complete* narrative for patients including health issue/episode/encounter descriptions, mainly for searching the narrative in context
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text |
SELECT union_table.pk_patient , union_table.soap_cat , union_table.narrative , union_table.pk_encounter , union_table.pk_episode , union_table.pk_health_issue , union_table.src_pk , union_table.src_table FROM ( SELECT vpi.pk_patient , vpi.soap_cat , vpi.narrative , vpi.pk_encounter , vpi.pk_episode , vpi.pk_health_issue , vpi.pk_item AS src_pk , vpi.src_table FROM clin.v_pat_items vpi WHERE (vpi.src_table <> ALL (ARRAY['clin.allergy'::text ,'clin.test_result'::text ,'clin.procedure'::text ,'clin.substance_intake'::text ,'clin.family_history'::text] ) ) UNION ALL SELECT v_subst_intake4narr_search.pk_patient , v_subst_intake4narr_search.soap_cat , v_subst_intake4narr_search.narrative , v_subst_intake4narr_search.pk_encounter , v_subst_intake4narr_search.pk_episode , v_subst_intake4narr_search.pk_health_issue , v_subst_intake4narr_search.src_pk , v_subst_intake4narr_search.src_table FROM clin.v_subst_intake4narr_search WHERE (gm.is_null_or_blank_string (v_subst_intake4narr_search.narrative) IS FALSE ) UNION ALL SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = cpr.fk_encounter) ) AS pk_patient , cpr.soap_cat , cpr.narrative , cpr.fk_encounter AS pk_encounter , cpr.fk_episode AS pk_episode , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = cpr.fk_episode) ) AS pk_health_issue , cpr.pk AS src_pk , 'clin.procedure'::text AS src_table FROM clin.procedure cpr WHERE (cpr.narrative IS NOT NULL) UNION ALL SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = ctr.fk_encounter) ) AS pk_patient , ctr.soap_cat , ( ( ( ( ( ( ( (COALESCE (ctr.narrative ,''::text ) || COALESCE ( (' '::text || ctr.val_alpha) ,''::text ) ) || COALESCE ( (' '::text || ctr.val_unit) ,''::text ) ) || COALESCE ( (' '::text || ctr.val_normal_range) ,''::text ) ) || COALESCE ( (' '::text || ctr.val_target_range) ,''::text ) ) || COALESCE ( (' '::text || ctr.norm_ref_group) ,''::text ) ) || COALESCE ( (' '::text || ctr.note_test_org) ,''::text ) ) || COALESCE ( (' '::text || ctr.material) ,''::text ) ) || COALESCE ( (' '::text || ctr.material_detail) ,''::text ) ) AS narrative , ctr.fk_encounter AS pk_encounter , ctr.fk_episode AS pk_episode , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = ctr.fk_episode) ) AS pk_health_issue , ctr.pk AS src_pk , 'clin.test_result'::text AS src_table FROM clin.test_result ctr UNION ALL SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = ( SELECT test_result.fk_encounter FROM clin.test_result WHERE (test_result.pk = crtr.fk_reviewed_row) ) ) ) AS pk_patient , 'o'::text AS soap_cat , crtr.comment AS narrative , ( SELECT test_result.fk_encounter FROM clin.test_result WHERE (test_result.pk = crtr.fk_reviewed_row) ) AS pk_encounter , ( SELECT test_result.fk_episode FROM clin.test_result WHERE (test_result.pk = crtr.fk_reviewed_row) ) AS pk_episode , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = ( SELECT test_result.fk_episode FROM clin.test_result WHERE (test_result.pk = crtr.fk_reviewed_row) ) ) ) AS pk_health_issue , crtr.pk AS src_pk , 'clin.reviewed_test_results'::text AS src_table FROM clin.reviewed_test_results crtr UNION ALL SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = cas.fk_encounter) ) AS pk_patient , 'o'::text AS soap_cat , cas.comment AS narrative , cas.fk_encounter AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , cas.pk AS src_pk , 'clin.allergy_state'::text AS src_table FROM clin.allergy_state cas WHERE (cas.comment IS NOT NULL) UNION ALL SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = ca.fk_encounter) ) AS pk_patient , ca.soap_cat , ( ( ( ( (COALESCE (ca.narrative ,''::text ) || COALESCE ( (' '::text || ca.substance) ,''::text ) ) || COALESCE ( (' '::text || ca.substance_code) ,''::text ) ) || COALESCE ( (' '::text || ca.generics) ,''::text ) ) || COALESCE ( (' '::text || ca.allergene) ,''::text ) ) || COALESCE ( (' '::text || ca.atc_code) ,''::text ) ) AS narrative , ca.fk_encounter AS pk_encounter , ca.fk_episode AS pk_episode , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = ca.fk_episode) ) AS pk_health_issue , ca.pk AS src_pk , 'clin.allergy'::text AS src_table FROM clin.allergy ca UNION ALL SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = chi.fk_encounter) ) AS pk_patient , 'a'::text AS soap_cat , (chi.description || COALESCE ( (' '::text || chi.summary) ,''::text ) ) AS narrative , chi.fk_encounter AS pk_encounter , NULL::integer AS pk_episode , chi.pk AS pk_health_issue , chi.pk AS src_pk , 'clin.health_issue'::text AS src_table FROM clin.health_issue chi UNION ALL SELECT cenc.fk_patient AS pk_patient , 's'::text AS soap_cat , (COALESCE (cenc.reason_for_encounter ,''::text ) || COALESCE ( (' '::text || cenc.assessment_of_encounter) ,''::text ) ) AS narrative , cenc.pk AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , cenc.pk AS src_pk , 'clin.encounter'::text AS src_table FROM clin.encounter cenc UNION ALL SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = cep.fk_encounter) ) AS pk_patient , 's'::text AS soap_cat , (cep.description || COALESCE ( (' '::text || cep.summary) ,''::text ) ) AS narrative , cep.fk_encounter AS pk_encounter , cep.pk AS pk_episode , cep.fk_health_issue AS pk_health_issue , cep.pk AS src_pk , 'clin.episode'::text AS src_table FROM clin.episode cep UNION ALL SELECT c_vfhx.pk_patient , c_vfhx.soap_cat , ( ( ( ( ( (c_vfhx.relation || ' / '::text) || c_vfhx.l10n_relation ) || ' '::text ) || c_vfhx.name_relative ) || ': '::text ) || c_vfhx.condition ) AS narrative , c_vfhx.pk_encounter , c_vfhx.pk_episode , c_vfhx.pk_health_issue , c_vfhx.pk_family_history AS src_pk , 'clin.family_history'::text AS src_table FROM clin.v_family_history c_vfhx UNION ALL SELECT vdm.pk_patient , 'o'::text AS soap_cat , ( ( ( (vdm.l10n_type || ' '::text) || COALESCE (vdm.ext_ref ,''::text ) ) || ' '::text ) || COALESCE (vdm.comment ,''::text ) ) AS narrative , vdm.pk_encounter , vdm.pk_episode , vdm.pk_health_issue , vdm.pk_doc AS src_pk , 'blobs.doc_med'::text AS src_table FROM blobs.v_doc_med vdm UNION ALL SELECT vo4d.pk_patient , 'o'::text AS soap_cat , vo4d.obj_comment AS narrative , vo4d.pk_encounter , vo4d.pk_episode , vo4d.pk_health_issue , vo4d.pk_obj AS src_pk , 'blobs.doc_obj'::text AS src_table FROM blobs.v_obj4doc_no_data vo4d UNION ALL SELECT vdd.pk_patient , 'o'::text AS soap_cat , vdd.description AS narrative , vdd.pk_encounter , vdd.pk_episode , vdd.pk_health_issue , vdd.pk_doc_desc AS src_pk , 'blobs.doc_desc'::text AS src_table FROM blobs.v_doc_desc vdd UNION ALL SELECT vrdo.pk_patient , 's'::text AS soap_cat , vrdo.comment AS narrative , NULL::integer AS pk_encounter , vrdo.pk_episode , vrdo.pk_health_issue , vrdo.pk_review_root AS src_pk , 'blobs.v_reviewed_doc_objects'::text AS src_table FROM blobs.v_reviewed_doc_objects vrdo UNION ALL SELECT d_vit.pk_identity AS pk_patient , 's'::text AS soap_cat , (d_vit.l10n_description || COALESCE ( (' '::text || d_vit.comment) ,''::text ) ) AS narrative , NULL::integer AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , d_vit.pk_identity_tag AS src_pk , 'dem.v_identity_tags'::text AS src_table FROM dem.v_identity_tags d_vit UNION ALL SELECT c_vec.pk_identity AS pk_patient , 's'::text AS soap_cat , CASE WHEN (c_vec.pk_health_issue IS NULL) THEN ( (COALESCE (c_vec.issue ,''::text ) || COALESCE ( (' / '::text || c_vec.provider) ,''::text ) ) || COALESCE ( (' / '::text || c_vec.comment) ,''::text ) ) ELSE (COALESCE (c_vec.provider ,''::text ) || COALESCE ( (' / '::text || c_vec.comment) ,''::text ) ) END AS narrative , c_vec.pk_encounter , NULL::integer AS pk_episode , c_vec.pk_health_issue , c_vec.pk_external_care AS src_pk , 'clin.v_external_care'::text AS src_table FROM clin.v_external_care c_vec UNION ALL SELECT c_vei.pk_identity AS pk_patient , 's'::text AS soap_cat , CASE WHEN (c_vei.pk_doc_obj IS NULL) THEN (COALESCE (c_vei.description ,''::text ) || COALESCE ( (' / '::text || c_vei.filename) ,''::text ) ) ELSE COALESCE (c_vei.description ,''::text ) END AS narrative , NULL::integer AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , c_vei.pk_export_item AS src_pk , 'clin.v_export_items'::text AS src_table FROM clin.v_export_items c_vei UNION ALL SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = c_sh.fk_encounter) ) AS pk_patient , 'p'::text AS soap_cat , c_sh.rationale AS narrative , c_sh.fk_encounter AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , c_sh.pk AS src_pk , 'clin.suppressed_hint'::text AS src_table FROM clin.suppressed_hint c_sh ) union_table WHERE (btrim (COALESCE (union_table.narrative ,''::text ) ) <> ''::text );
F-Key | Name | Type | Description |
---|---|---|---|
pk_substance_intake | integer | ||
pk_patient | integer | ||
soap_cat | text | ||
brand | text | ||
preparation | text | ||
substance | text | ||
amount | numeric | ||
unit | text | ||
atc_substance | text | ||
atc_brand | text | ||
external_code_brand | text | ||
external_code_type_brand | text | ||
started | timestamp with time zone | ||
comment_on_start | text | ||
start_is_unknown | boolean | ||
start_is_approximate | boolean | ||
intake_is_approved_of | boolean | ||
harmful_use_type | integer | ||
last_checked_when | timestamp with time zone | ||
schedule | text | ||
duration | interval | ||
discontinued | timestamp with time zone | ||
discontinue_reason | text | ||
is_long_term | boolean | ||
aim | text | ||
episode | text | ||
health_issue | text | ||
notes | text | ||
fake_brand | boolean | ||
is_currently_active | boolean | ||
seems_inactive | boolean | ||
pk_brand | integer | ||
pk_data_source | integer | ||
pk_substance | integer | ||
pk_drug_component | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
row_version | integer | ||
xmin_substance_intake | xid |
SELECT c_si.pk AS pk_substance_intake , ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = c_si.fk_encounter) ) AS pk_patient , c_si.soap_cat , NULL::text AS brand , c_si.preparation , r_cs.description AS substance , r_cs.amount , r_cs.unit , r_cs.atc_code AS atc_substance , NULL::text AS atc_brand , NULL::text AS external_code_brand , NULL::text AS external_code_type_brand , CASE WHEN (c_si.comment_on_start = '?'::text) THEN NULL::timestamp with time zone ELSE c_si.clin_when END AS started , c_si.comment_on_start , CASE WHEN (c_si.comment_on_start = '?'::text) THEN true ELSE false END AS start_is_unknown , CASE WHEN (c_si.comment_on_start IS NULL) THEN false ELSE true END AS start_is_approximate , c_si.intake_is_approved_of , c_si.harmful_use_type , CASE WHEN (c_si.harmful_use_type IS NULL) THEN NULL::timestamp with time zone ELSE c_enc.started END AS last_checked_when , c_si.schedule , c_si.duration , c_si.discontinued , c_si.discontinue_reason , c_si.is_long_term , c_si.aim , cep.description AS episode , c_hi.description AS health_issue , c_si.narrative AS notes , NULL::boolean AS fake_brand , CASE WHEN (c_si.discontinued IS NULL) THEN true ELSE false END AS is_currently_active , CASE WHEN (c_si.discontinued IS NOT NULL) THEN true WHEN (c_si.clin_when IS NULL) THEN CASE WHEN (c_si.is_long_term IS TRUE) THEN false ELSE NULL::boolean END WHEN ( (c_si.clin_when > now () ) IS TRUE ) THEN true WHEN ( ( (c_si.clin_when + c_si.duration) < now () ) IS TRUE ) THEN true WHEN ( ( (c_si.clin_when + c_si.duration) > now () ) IS TRUE ) THEN false ELSE NULL::boolean END AS seems_inactive , NULL::integer AS pk_brand , NULL::integer AS pk_data_source , r_cs.pk AS pk_substance , NULL::integer AS pk_drug_component , c_si.fk_encounter AS pk_encounter , c_si.fk_episode AS pk_episode , cep.fk_health_issue AS pk_health_issue , c_si.modified_when , c_si.modified_by , c_si.row_version , c_si.xmin AS xmin_substance_intake FROM ( ( ( (clin.substance_intake c_si JOIN ref.consumable_substance r_cs ON ( (c_si.fk_substance = r_cs.pk) ) ) LEFT JOIN clin.episode cep ON ( (c_si.fk_episode = cep.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_hi.pk = cep.fk_health_issue) ) ) LEFT JOIN clin.encounter c_enc ON ( (c_si.fk_encounter = c_enc.pk) ) ) WHERE (c_si.fk_drug_component IS NULL);
denormalizes clin.allergy
F-Key | Name | Type | Description |
---|---|---|---|
pk_allergy | integer | ||
pk_patient | integer | ||
soap_cat | text | ||
descriptor | text | ||
allergene | text | ||
substance | text | ||
substance_code | text | ||
generics | text | ||
generic_specific | boolean | ||
atc_code | text | ||
type | text | ||
l10n_type | text | ||
definite | boolean | ||
reaction | text | ||
pk_type | integer | ||
pk_item | integer | ||
date | timestamp with time zone | ||
pk_health_issue | integer | ||
pk_episode | integer | ||
pk_encounter | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
xmin_allergy | xid |
SELECT a.pk AS pk_allergy , ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = a.fk_encounter) ) AS pk_patient , a.soap_cat , CASE WHEN (COALESCE (btrim (a.allergene) ,''::text ) = ''::text ) THEN a.substance ELSE a.allergene END AS descriptor , a.allergene , a.substance , a.substance_code , a.generics , a.generic_specific , a.atc_code , at.value AS type , _ (at.value) AS l10n_type , a.definite , a.narrative AS reaction , a.fk_type AS pk_type , a.pk_item , a.clin_when AS date , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = a.fk_episode) ) AS pk_health_issue , a.fk_episode AS pk_episode , a.fk_encounter AS pk_encounter , a.modified_when , a.modified_by , a.xmin AS xmin_allergy FROM clin.allergy a , clin._enum_allergy_type at WHERE (at.pk = a.fk_type);
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_all.modified_when , c_all.clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_all.modified_by) ) , ( ('<'::text || (c_all.modified_by)::text ) || '>'::text ) ) AS modified_by , c_all.soap_cat , ( ( ( ( ( ( ( ( ( ( ( (_ ('Allergy'::text) || ' ('::text) || _ (c_at.value) ) || '): '::text ) || COALESCE (c_all.narrative ,''::text ) ) || ' '::text ) || _ ('substance'::text) ) || ': '::text ) || c_all.substance ) || '; '::text ) || COALESCE ( ( ( (_ ('allergene'::text) || ': '::text ) || c_all.allergene ) || '; '::text ) ,''::text ) ) || COALESCE ( ( ( (_ ('generic'::text) || ': '::text ) || c_all.generics ) || '; '::text ) ,''::text ) ) || COALESCE ( ( ( (_ ('ATC code'::text) || ': '::text ) || c_all.atc_code ) || '; '::text ) ,''::text ) ) AS narrative , c_all.fk_encounter AS pk_encounter , c_all.fk_episode AS pk_episode , c_epi.fk_health_issue AS pk_health_issue , c_all.pk AS src_pk , 'clin.allergy'::text AS src_table , c_all.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( ( (clin.allergy c_all JOIN clin._enum_allergy_type c_at ON ( (c_all.fk_type = c_at.pk) ) ) JOIN clin.encounter c_enc ON ( (c_all.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_all.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
modified_by | text | ||
last_confirmed | timestamp with time zone | ||
has_allergy | integer | ||
comment | text | ||
pk_encounter | integer | ||
pk_allergy_state | integer | ||
xmin_allergy_state | xid |
SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = a.fk_encounter) ) AS pk_patient , a.modified_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = a.modified_by) ) , ( ('<'::text || (a.modified_by)::text ) || '>'::text ) ) AS modified_by , a.last_confirmed , a.has_allergy , a.comment , a.fk_encounter AS pk_encounter , a.pk AS pk_allergy_state , a.xmin AS xmin_allergy_state FROM clin.allergy_state a;
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | text | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_ast.modified_when , COALESCE (c_ast.last_confirmed , c_ast.modified_when ) AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_ast.modified_by) ) , ( ('<'::text || (c_ast.modified_by)::text ) || '>'::text ) ) AS modified_by , 'o'::text AS soap_cat , ( ( ( (_ ('Allergy state'::text) || ': '::text ) || CASE WHEN (c_ast.has_allergy IS NULL) THEN _ ( 'unknown, unasked'::text ) WHEN (c_ast.has_allergy = 0) THEN _ ('no known allergies'::text) WHEN (c_ast.has_allergy = 1) THEN _ ('does have allergies'::text) ELSE NULL::text END ) || COALESCE ( ( ( ( ' ('::text || _ ('last confirmed'::text) ) || to_char (c_ast.last_confirmed ,' YYYY-MM-DD HH24:MI'::text ) ) || ')'::text ) ,''::text ) ) || COALESCE ( (' '::text || c_ast.comment) ,''::text ) ) AS narrative , c_ast.fk_encounter AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , c_ast.pk AS src_pk , 'clin.allergy_state'::text AS src_table , c_ast.row_version , NULL::text AS health_issue , NULL::text AS issue_laterality , NULL::boolean AS issue_active , NULL::boolean AS issue_clinically_relevant , NULL::boolean AS issue_confidential , NULL::text AS episode , NULL::boolean AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( (clin.allergy_state c_ast JOIN clin.encounter c_enc ON ( (c_ast.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) UNION ALL SELECT c_enc.fk_patient AS pk_patient , now () AS modified_when , now () AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_ast.modified_by) ) , ( ('<'::text || (c_ast.modified_by)::text ) || '>'::text ) ) AS modified_by , 'o'::text AS soap_cat , ( ( ( ( ( ( ( ( (_ ('Allergy state'::text) || ' ('::text) || _ ('copy'::text) ) || '): '::text ) || CASE WHEN (c_ast.has_allergy IS NULL) THEN _ ( 'unknown, unasked'::text ) WHEN (c_ast.has_allergy = 0) THEN _ ('no known allergies'::text) WHEN (c_ast.has_allergy = 1) THEN _ ('does have allergies'::text) ELSE NULL::text END ) || COALESCE ( (' '::text || c_ast.comment) ,''::text ) ) || COALESCE ( ( (' '::text || _ ('last confirmed'::text) ) || to_char (c_ast.last_confirmed ,' YYYY-MM-DD HH24:MI'::text ) ) ,''::text ) ) || COALESCE ( ( (' '::text || _ ('entry last modified'::text) ) || to_char (c_ast.modified_when ,' YYYY-MM-DD HH24:MI'::text ) ) ,''::text ) ) || COALESCE ( ( (' '::text || _ ('encounter started'::text) ) || to_char (c_enc.started ,' YYYY-MM-DD HH24:MI'::text ) ) ,''::text ) ) || COALESCE ( ( (' '::text || _ ('encounter last affirmed'::text) ) || to_char (c_enc.last_affirmed ,' YYYY-MM-DD HH24:MI'::text ) ) ,''::text ) ) AS narrative , c_ast.fk_encounter AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , c_ast.pk AS src_pk , 'clin.allergy_state'::text AS src_table , c_ast.row_version , NULL::text AS health_issue , NULL::text AS issue_laterality , NULL::boolean AS issue_active , NULL::boolean AS issue_clinically_relevant , NULL::boolean AS issue_confidential , NULL::text AS episode , NULL::boolean AS episode_open , now () AS encounter_started , now () AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( (clin.allergy_state c_ast JOIN clin.encounter c_enc ON ( (c_ast.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) );
Details on encounters.
F-Key | Name | Type | Description |
---|---|---|---|
pk_encounter | integer | ||
pk_patient | integer | ||
started | timestamp with time zone | ||
type | text | ||
l10n_type | text | ||
reason_for_encounter | text | ||
assessment_of_encounter | text | ||
last_affirmed | timestamp with time zone | ||
source_time_zone | interval | ||
started_original_tz | timestamp without time zone | ||
last_affirmed_original_tz | timestamp without time zone | ||
praxis_branch | text | ||
praxis | text | ||
pk_org_unit | integer | ||
pk_org | integer | ||
pk_unit_type | integer | ||
pk_org_type | integer | ||
pk_type | integer | ||
pk_generic_codes_rfe | integer[] | ||
pk_generic_codes_aoe | integer[] | ||
xmin_encounter | xid | ||
row_version | integer | ||
pk_audit | integer | ||
modified_when | timestamp with time zone | ||
modified_by_raw | name | ||
modified_by | text |
SELECT c_enc.pk AS pk_encounter , c_enc.fk_patient AS pk_patient , c_enc.started , c_et.description AS type , _ (c_et.description) AS l10n_type , c_enc.reason_for_encounter , c_enc.assessment_of_encounter , c_enc.last_affirmed , c_enc.source_time_zone , ( SELECT timezone ( ( SELECT c_enc1.source_time_zone FROM clin.encounter c_enc1 WHERE (c_enc1.pk = c_enc.pk) ) , c_enc.started ) AS timezone ) AS started_original_tz , ( SELECT timezone ( ( SELECT c_enc1.source_time_zone FROM clin.encounter c_enc1 WHERE (c_enc1.pk = c_enc.pk) ) , c_enc.last_affirmed ) AS timezone ) AS last_affirmed_original_tz , COALESCE (d_ou.description ,'?'::text ) AS praxis_branch , COALESCE (d_o.description ,'?'::text ) AS praxis , c_enc.fk_location AS pk_org_unit , d_ou.fk_org AS pk_org , d_ou.fk_category AS pk_unit_type , d_o.fk_category AS pk_org_type , c_enc.fk_type AS pk_type , COALESCE ( ( SELECT array_agg (c_lc2r.fk_generic_code) AS array_agg FROM clin.lnk_code2rfe c_lc2r WHERE (c_lc2r.fk_item = c_enc.pk) ) , ARRAY[]::integer[] ) AS pk_generic_codes_rfe , COALESCE ( ( SELECT array_agg (c_lc2a.fk_generic_code) AS array_agg FROM clin.lnk_code2aoe c_lc2a WHERE (c_lc2a.fk_item = c_enc.pk) ) , ARRAY[]::integer[] ) AS pk_generic_codes_aoe , c_enc.xmin AS xmin_encounter , c_enc.row_version , c_enc.pk_audit , c_enc.modified_when , c_enc.modified_by AS modified_by_raw , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_enc.modified_by) ) , ( ('<'::text || (c_enc.modified_by)::text ) || '>'::text ) ) AS modified_by FROM ( ( (clin.encounter c_enc LEFT JOIN clin.encounter_type c_et ON ( (c_enc.fk_type = c_et.pk) ) ) LEFT JOIN dem.org_unit d_ou ON ( (c_enc.fk_location = d_ou.pk) ) ) LEFT JOIN dem.org d_o ON ( (d_ou.fk_org = d_o.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | text | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_enc.modified_when , c_enc.started AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_enc.modified_by) ) , ( ('<'::text || (c_enc.modified_by)::text ) || '>'::text ) ) AS modified_by , NULL::text AS soap_cat , ( ( ( ( ( ( ( ( (_ ('Encounter'::text) || ': '::text ) || ( SELECT _ (encounter_type.description) AS _ FROM clin.encounter_type WHERE (encounter_type.pk = c_enc.fk_type) ) ) || to_char (c_enc.started ,' YYYY-MM-DD HH24:MI'::text ) ) || to_char (c_enc.last_affirmed ,' - HH24:MI'::text ) ) || COALESCE ( ( ( ( ( ( ( ( (' @ '::text || _ ('branch'::text) ) || ' "'::text ) || d_ou.description ) || '" '::text ) || _ ('of'::text) ) || ' "'::text ) || d_o.description ) || '"'::text ) ,''::text ) ) || COALESCE ( ( ( (' '::text || _ ('RFE'::text) ) || ': '::text ) || c_enc.reason_for_encounter ) ,''::text ) ) || COALESCE ( ( (' '::text || array_to_string ( ( SELECT array_agg ( ( ( ( ( ( ( ( (r_csr.code || ' ('::text) || r_ds.name_short ) || ' - '::text ) || r_ds.version ) || ' - '::text ) || r_ds.lang ) || '): '::text ) || r_csr.term ) ) AS array_agg FROM ( (clin.lnk_code2rfe c_lc2r JOIN ref.coding_system_root r_csr ON ( (c_lc2r.fk_generic_code = r_csr.pk_coding_system) ) ) JOIN ref.data_source r_ds ON ( (r_ds.pk = r_csr.fk_data_source) ) ) WHERE (c_lc2r.fk_item = c_enc.pk) ) ,'; '::text ) ) || ';'::text ) ,''::text ) ) || COALESCE ( ( ( (' '::text || _ ('AOE'::text) ) || ': '::text ) || c_enc.assessment_of_encounter ) ,''::text ) ) || COALESCE ( ( (' '::text || array_to_string ( ( SELECT array_agg ( ( ( ( ( ( ( ( (r_csr.code || ' ('::text) || r_ds.name_short ) || ' - '::text ) || r_ds.version ) || ' - '::text ) || r_ds.lang ) || '): '::text ) || r_csr.term ) ) AS array_agg FROM ( (clin.lnk_code2aoe c_lc2a JOIN ref.coding_system_root r_csr ON ( (c_lc2a.fk_generic_code = r_csr.pk_coding_system) ) ) JOIN ref.data_source r_ds ON ( (r_ds.pk = r_csr.fk_data_source) ) ) WHERE (c_lc2a.fk_item = c_enc.pk) ) ,'; '::text ) ) || ';'::text ) ,''::text ) ) AS narrative , c_enc.pk AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , c_enc.pk AS src_pk , 'clin.encounter'::text AS src_table , c_enc.row_version , NULL::text AS health_issue , NULL::text AS issue_laterality , NULL::boolean AS issue_active , NULL::boolean AS issue_clinically_relevant , NULL::boolean AS issue_confidential , NULL::text AS episode , NULL::boolean AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( (clin.encounter c_enc JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) LEFT JOIN dem.org_unit d_ou ON ( (c_enc.fk_location = d_ou.pk) ) ) LEFT JOIN dem.org d_o ON ( (d_ou.fk_org = d_o.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
description | text | ||
summary | text | ||
episode_open | boolean | ||
health_issue | text | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
started_first | timestamp with time zone | ||
started_last | timestamp with time zone | ||
last_affirmed | timestamp with time zone | ||
pk_episode | integer | ||
pk_encounter | integer | ||
pk_health_issue | integer | ||
episode_modified_when | timestamp with time zone | ||
episode_modified_by | name | ||
diagnostic_certainty_classification | text | ||
diagnostic_certainty_classification_issue | text | ||
pk_generic_codes | integer[] | ||
xmin_episode | xid |
SELECT cenc.fk_patient AS pk_patient , cep.description , cep.summary , cep.is_open AS episode_open , NULL::text AS health_issue , NULL::boolean AS issue_active , NULL::boolean AS issue_clinically_relevant , ( SELECT min (cle.started) AS min FROM clin.encounter cle WHERE (cle.pk = cep.fk_encounter) LIMIT 1 ) AS started_first , ( SELECT max (cle.started) AS max FROM clin.encounter cle WHERE (cle.pk = cep.fk_encounter) LIMIT 1 ) AS started_last , ( SELECT max (cle.last_affirmed) AS max FROM clin.encounter cle WHERE (cle.pk = cep.fk_encounter) LIMIT 1 ) AS last_affirmed , cep.pk AS pk_episode , cep.fk_encounter AS pk_encounter , NULL::integer AS pk_health_issue , cep.modified_when AS episode_modified_when , cep.modified_by AS episode_modified_by , cep.diagnostic_certainty_classification , NULL::text AS diagnostic_certainty_classification_issue , COALESCE ( ( SELECT array_agg (c_lc2e.fk_generic_code) AS array_agg FROM clin.lnk_code2episode c_lc2e WHERE (c_lc2e.fk_item = cep.pk) ) , ARRAY[]::integer[] ) AS pk_generic_codes , cep.xmin AS xmin_episode FROM (clin.episode cep JOIN clin.encounter cenc ON ( (cep.fk_encounter = cenc.pk) ) ) WHERE (cep.fk_health_issue IS NULL) UNION ALL SELECT cenc.fk_patient AS pk_patient , cep.description , cep.summary , cep.is_open AS episode_open , chi.description AS health_issue , chi.is_active AS issue_active , chi.clinically_relevant AS issue_clinically_relevant , ( SELECT min (cle.started) AS min FROM clin.encounter cle WHERE (cle.pk = cep.fk_encounter) LIMIT 1 ) AS started_first , ( SELECT max (cle.started) AS max FROM clin.encounter cle WHERE (cle.pk = cep.fk_encounter) LIMIT 1 ) AS started_last , ( SELECT max (cle.last_affirmed) AS max FROM clin.encounter cle WHERE (cle.pk = cep.fk_encounter) LIMIT 1 ) AS last_affirmed , cep.pk AS pk_episode , cep.fk_encounter AS pk_encounter , cep.fk_health_issue AS pk_health_issue , cep.modified_when AS episode_modified_when , cep.modified_by AS episode_modified_by , cep.diagnostic_certainty_classification , chi.diagnostic_certainty_classification AS diagnostic_certainty_classification_issue , COALESCE ( ( SELECT array_agg (c_lc2e.fk_generic_code) AS array_agg FROM clin.lnk_code2episode c_lc2e WHERE (c_lc2e.fk_item = cep.pk) ) , ARRAY[]::integer[] ) AS pk_generic_codes , cep.xmin AS xmin_episode FROM ( (clin.episode cep JOIN clin.encounter cenc ON ( (cep.fk_encounter = cenc.pk) ) ) JOIN clin.health_issue chi ON ( (cep.fk_health_issue = chi.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_epi.modified_when , c_enc.started AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_epi.modified_by) ) , ( ('<'::text || (c_epi.modified_by)::text ) || '>'::text ) ) AS modified_by , 'a'::text AS soap_cat , ( ( ( ( ( ( ( (_ ('Episode'::text) || ' ('::text) || CASE WHEN c_epi.is_open THEN _ ('open'::text) ELSE _ ('closed'::text) END ) || COALESCE ( ( ', '::text || c_epi.diagnostic_certainty_classification ) ,''::text ) ) || '): '::text ) || c_epi.description ) || ';'::text ) || COALESCE ( ( ( ( (' '::text || _ ('Synopsis'::text) ) || ': '::text ) || c_epi.summary ) || ';'::text ) ,''::text ) ) || COALESCE ( ( (' '::text || array_to_string ( ( SELECT array_agg ( ( ( ( ( ( ( ( (r_csr.code || ' ('::text) || r_ds.name_short ) || ' - '::text ) || r_ds.version ) || ' - '::text ) || r_ds.lang ) || '): '::text ) || r_csr.term ) ) AS array_agg FROM ( (clin.lnk_code2episode c_lc2e JOIN ref.coding_system_root r_csr ON ( (c_lc2e.fk_generic_code = r_csr.pk_coding_system) ) ) JOIN ref.data_source r_ds ON ( (r_ds.pk = r_csr.fk_data_source) ) ) WHERE (c_lc2e.fk_item = c_epi.pk) ) ,'; '::text ) ) || ';'::text ) ,''::text ) ) AS narrative , c_epi.fk_encounter AS pk_encounter , c_epi.pk AS pk_episode , c_epi.fk_health_issue AS pk_health_issue , c_epi.pk AS src_pk , 'clin.episode'::text AS src_table , c_epi.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( (clin.episode c_epi JOIN clin.encounter c_enc ON ( (c_epi.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
modified_when | timestamp with time zone | ||
modified_by | name | ||
clin_when | timestamp with time zone | ||
is_modified | boolean | ||
pk_patient | integer | ||
pk_item | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
soap_cat | text | ||
narrative | text | ||
src_table | text |
SELECT cri.modified_when , cri.modified_by , cri.clin_when , CASE cri.row_version WHEN 0 THEN false ELSE true END AS is_modified , cenc.fk_patient AS pk_patient , cri.pk_item , cri.fk_encounter AS pk_encounter , cri.fk_episode AS pk_episode , cepi.fk_health_issue AS pk_health_issue , cri.soap_cat , cri.narrative , ( ( (pgn.nspname)::text || '.'::text ) || (pgc.relname)::text ) AS src_table FROM clin.clin_root_item cri , clin.encounter cenc , clin.episode cepi , (pg_class pgc LEFT JOIN pg_namespace pgn ON ( (pgc.relnamespace = pgn.oid) ) ) WHERE ( (cri.fk_encounter = cenc.pk) AND (cri.fk_episode = cepi.pk) AND (cri.tableoid = pgc.oid) );
Lists *latest* vaccinations with total count per indication.
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
pk_vaccination | integer | ||
date_given | timestamp with time zone | ||
vaccine | text | ||
indication | text | ||
l10n_indication | text | ||
site | text | ||
batch_no | text | ||
reaction | text | ||
comment | text | ||
soap_cat | text | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
row_version | integer | ||
pk_vaccine | integer | ||
pk_indication | integer | ||
pk_provider | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
xmin_vaccination | xid | ||
no_of_shots | bigint |
SELECT c_vpv4i.pk_patient , c_vpv4i.pk_vaccination , c_vpv4i.date_given , c_vpv4i.vaccine , c_vpv4i.indication , c_vpv4i.l10n_indication , c_vpv4i.site , c_vpv4i.batch_no , c_vpv4i.reaction , c_vpv4i.comment , c_vpv4i.soap_cat , c_vpv4i.modified_when , c_vpv4i.modified_by , c_vpv4i.row_version , c_vpv4i.pk_vaccine , c_vpv4i.pk_indication , c_vpv4i.pk_provider , c_vpv4i.pk_encounter , c_vpv4i.pk_episode , c_vpv4i.xmin_vaccination , shots_per_ind.no_of_shots FROM (clin.v_pat_vaccs4indication c_vpv4i JOIN ( SELECT count (1) AS no_of_shots , v_pat_vaccs4indication.pk_patient , v_pat_vaccs4indication.pk_indication FROM clin.v_pat_vaccs4indication GROUP BY v_pat_vaccs4indication.pk_patient , v_pat_vaccs4indication.pk_indication ) shots_per_ind ON ( ( (c_vpv4i.pk_patient = shots_per_ind.pk_patient) AND (c_vpv4i.pk_indication = shots_per_ind.pk_indication) ) ) ) WHERE (c_vpv4i.date_given = ( SELECT max (c_vpv4i_2.date_given) AS max FROM clin.v_pat_vaccs4indication c_vpv4i_2 WHERE ( (c_vpv4i.pk_patient = c_vpv4i_2.pk_patient) AND (c_vpv4i.pk_indication = c_vpv4i_2.pk_indication) ) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_n.modified_when , CASE WHEN (c_n.soap_cat = ANY (ARRAY['s'::text ,'o'::text ,'u'::text] ) ) THEN c_enc.started WHEN (c_n.soap_cat IS NULL) THEN c_enc.last_affirmed WHEN (c_n.soap_cat = ANY (ARRAY['a'::text ,'p'::text] ) ) THEN c_enc.last_affirmed ELSE NULL::timestamp with time zone END AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_n.modified_by) ) , ( ('<'::text || (c_n.modified_by)::text ) || '>'::text ) ) AS modified_by , c_n.soap_cat , c_n.narrative , c_n.fk_encounter AS pk_encounter , c_n.fk_episode AS pk_episode , c_epi.fk_health_issue AS pk_health_issue , c_n.pk AS src_pk , 'clin.clin_narrative'::text AS src_table , c_n.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( (clin.clin_narrative c_n JOIN clin.encounter c_enc ON ( (c_n.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_n.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) );
Lists vaccinations for patients
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
pk_vaccination | integer | ||
date_given | timestamp with time zone | ||
interval_since_given | interval | ||
vaccine | text | ||
indications | text[] | ||
l10n_indications | text[] | ||
site | text | ||
batch_no | text | ||
reaction | text | ||
comment | text | ||
soap_cat | text | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
row_version | integer | ||
pk_indications | integer[] | ||
pk_vaccine | integer | ||
pk_provider | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
xmin_vaccination | xid |
SELECT cenc.fk_patient AS pk_patient , clv.pk AS pk_vaccination , clv.clin_when AS date_given , (now () - clv.clin_when ) AS interval_since_given , rbd.description AS vaccine , ( SELECT array_agg (cvi.description) AS array_agg FROM (clin.lnk_vaccine2inds clvi JOIN clin.vacc_indication cvi ON ( (clvi.fk_indication = cvi.id) ) ) WHERE (clvi.fk_vaccine = clv.fk_vaccine) ) AS indications , ( SELECT array_agg (_ (cvi.description) ) AS array_agg FROM (clin.lnk_vaccine2inds clvi JOIN clin.vacc_indication cvi ON ( (clvi.fk_indication = cvi.id) ) ) WHERE (clvi.fk_vaccine = clv.fk_vaccine) ) AS l10n_indications , clv.site , clv.batch_no , clv.reaction , clv.narrative AS comment , clv.soap_cat , clv.modified_when , clv.modified_by , clv.row_version , ( SELECT array_agg (clvi.fk_indication) AS array_agg FROM (clin.lnk_vaccine2inds clvi JOIN clin.vacc_indication cvi ON ( (clvi.fk_indication = cvi.id) ) ) WHERE (clvi.fk_vaccine = clv.pk) ) AS pk_indications , clv.fk_vaccine AS pk_vaccine , clv.fk_provider AS pk_provider , clv.fk_encounter AS pk_encounter , clv.fk_episode AS pk_episode , clv.xmin AS xmin_vaccination FROM ( ( (clin.vaccination clv JOIN clin.encounter cenc ON ( (cenc.pk = clv.fk_encounter) ) ) JOIN clin.vaccine ON ( (vaccine.pk = clv.fk_vaccine) ) ) JOIN ref.branded_drug rbd ON ( (vaccine.fk_brand = rbd.pk) ) );
Lists vaccinations per indication for patients
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
pk_vaccination | integer | ||
date_given | timestamp with time zone | ||
vaccine | text | ||
indication | text | ||
l10n_indication | text | ||
site | text | ||
batch_no | text | ||
reaction | text | ||
comment | text | ||
soap_cat | text | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
row_version | integer | ||
pk_vaccine | integer | ||
pk_indication | integer | ||
pk_provider | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
xmin_vaccination | xid |
SELECT c_enc.fk_patient AS pk_patient , c_shot.pk AS pk_vaccination , c_shot.clin_when AS date_given , c_vlv2i.vaccine , c_vlv2i.indication , c_vlv2i.l10n_indication , c_shot.site , c_shot.batch_no , c_shot.reaction , c_shot.narrative AS comment , c_shot.soap_cat , c_shot.modified_when , c_shot.modified_by , c_shot.row_version , c_shot.fk_vaccine AS pk_vaccine , c_vlv2i.pk_indication , c_shot.fk_provider AS pk_provider , c_shot.fk_encounter AS pk_encounter , c_shot.fk_episode AS pk_episode , c_shot.xmin AS xmin_vaccination FROM ( (clin.vaccination c_shot JOIN clin.encounter c_enc ON ( (c_enc.pk = c_shot.fk_encounter) ) ) JOIN clin.v_lnk_vaccine2inds c_vlv2i ON ( (c_vlv2i.pk_vaccine = c_shot.fk_vaccine) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
problem | text | ||
summary | text | ||
type | text | ||
l10n_type | text | ||
problem_active | boolean | ||
clinically_relevant | boolean | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
diagnostic_certainty_classification | text | ||
pk_encounter | integer | ||
modified_when | timestamp with time zone |
SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = cep.fk_encounter) ) AS pk_patient , cep.description AS problem , cep.summary , 'episode'::text AS type , _ ('episode'::text) AS l10n_type , false AS problem_active , false AS clinically_relevant , cep.pk AS pk_episode , cep.fk_health_issue AS pk_health_issue , cep.diagnostic_certainty_classification , cep.fk_encounter AS pk_encounter , cep.modified_when FROM clin.episode cep WHERE (cep.is_open IS FALSE) UNION SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = chi.fk_encounter) ) AS pk_patient , chi.description AS problem , chi.summary , 'issue'::text AS type , _ ('health issue'::text) AS l10n_type , chi.is_active AS problem_active , false AS clinically_relevant , NULL::integer AS pk_episode , chi.pk AS pk_health_issue , chi.diagnostic_certainty_classification , chi.fk_encounter AS pk_encounter , chi.modified_when FROM clin.health_issue chi WHERE (chi.clinically_relevant IS FALSE);
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
problem | text | ||
summary | text | ||
type | text | ||
l10n_type | text | ||
problem_active | boolean | ||
clinically_relevant | boolean | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
diagnostic_certainty_classification | text | ||
pk_encounter | integer | ||
modified_when | timestamp with time zone |
SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = cep.fk_encounter) ) AS pk_patient , cep.description AS problem , cep.summary , 'episode'::text AS type , _ ('episode'::text) AS l10n_type , true AS problem_active , true AS clinically_relevant , cep.pk AS pk_episode , cep.fk_health_issue AS pk_health_issue , cep.diagnostic_certainty_classification , cep.fk_encounter AS pk_encounter , cep.modified_when FROM clin.episode cep WHERE (cep.is_open IS TRUE) UNION SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = chi.fk_encounter) ) AS pk_patient , chi.description AS problem , chi.summary , 'issue'::text AS type , _ ('health issue'::text) AS l10n_type , chi.is_active AS problem_active , true AS clinically_relevant , NULL::integer AS pk_episode , chi.pk AS pk_health_issue , chi.diagnostic_certainty_classification , chi.fk_encounter AS pk_encounter , chi.modified_when FROM clin.health_issue chi WHERE (chi.clinically_relevant IS TRUE);
F-Key | Name | Type | Description |
---|---|---|---|
pk_procedure | integer | ||
pk_patient | integer | ||
soap_cat | text | ||
clin_when | timestamp with time zone | ||
clin_end | timestamp with time zone | ||
is_ongoing | boolean | ||
performed_procedure | text | ||
unit | text | ||
organization | text | ||
episode | text | ||
health_issue | text | ||
modified_when | timestamp with time zone | ||
modified_by | text | ||
row_version | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_hospital_stay | integer | ||
pk_health_issue | integer | ||
pk_org | integer | ||
pk_org_unit | integer | ||
pk_generic_codes | integer[] | ||
xmin_procedure | xid |
SELECT v_procedures_at_hospital.pk_procedure , v_procedures_at_hospital.pk_patient , v_procedures_at_hospital.soap_cat , v_procedures_at_hospital.clin_when , v_procedures_at_hospital.clin_end , v_procedures_at_hospital.is_ongoing , v_procedures_at_hospital.performed_procedure , v_procedures_at_hospital.unit , v_procedures_at_hospital.organization , v_procedures_at_hospital.episode , v_procedures_at_hospital.health_issue , v_procedures_at_hospital.modified_when , v_procedures_at_hospital.modified_by , v_procedures_at_hospital.row_version , v_procedures_at_hospital.pk_encounter , v_procedures_at_hospital.pk_episode , v_procedures_at_hospital.pk_hospital_stay , v_procedures_at_hospital.pk_health_issue , v_procedures_at_hospital.pk_org , v_procedures_at_hospital.pk_org_unit , v_procedures_at_hospital.pk_generic_codes , v_procedures_at_hospital.xmin_procedure FROM clin.v_procedures_at_hospital UNION ALL SELECT v_procedures_not_at_hospital.pk_procedure , v_procedures_not_at_hospital.pk_patient , v_procedures_not_at_hospital.soap_cat , v_procedures_not_at_hospital.clin_when , v_procedures_not_at_hospital.clin_end , v_procedures_not_at_hospital.is_ongoing , v_procedures_not_at_hospital.performed_procedure , v_procedures_not_at_hospital.unit , v_procedures_not_at_hospital.organization , v_procedures_not_at_hospital.episode , v_procedures_not_at_hospital.health_issue , v_procedures_not_at_hospital.modified_when , v_procedures_not_at_hospital.modified_by , v_procedures_not_at_hospital.row_version , v_procedures_not_at_hospital.pk_encounter , v_procedures_not_at_hospital.pk_episode , v_procedures_not_at_hospital.pk_hospital_stay , v_procedures_not_at_hospital.pk_health_issue , v_procedures_not_at_hospital.pk_org , v_procedures_not_at_hospital.pk_org_unit , v_procedures_not_at_hospital.pk_generic_codes , v_procedures_not_at_hospital.xmin_procedure FROM clin.v_procedures_not_at_hospital;
F-Key | Name | Type | Description |
---|---|---|---|
pk_procedure | integer | ||
pk_patient | integer | ||
soap_cat | text | ||
clin_when | timestamp with time zone | ||
clin_end | timestamp with time zone | ||
is_ongoing | boolean | ||
performed_procedure | text | ||
unit | text | ||
organization | text | ||
episode | text | ||
health_issue | text | ||
modified_when | timestamp with time zone | ||
modified_by | text | ||
row_version | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_hospital_stay | integer | ||
pk_health_issue | integer | ||
pk_org | integer | ||
pk_org_unit | integer | ||
pk_generic_codes | integer[] | ||
xmin_procedure | xid |
SELECT c_pr.pk AS pk_procedure , c_enc.fk_patient AS pk_patient , c_pr.soap_cat , c_pr.clin_when , c_pr.clin_end , c_pr.is_ongoing , c_pr.narrative AS performed_procedure , c_vhs.ward AS unit , c_vhs.hospital AS organization , c_ep.description AS episode , c_hi.description AS health_issue , c_pr.modified_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_pr.modified_by) ) , ( ('<'::text || (c_pr.modified_by)::text ) || '>'::text ) ) AS modified_by , c_pr.row_version , c_pr.fk_encounter AS pk_encounter , c_pr.fk_episode AS pk_episode , c_pr.fk_hospital_stay AS pk_hospital_stay , c_ep.fk_health_issue AS pk_health_issue , c_vhs.pk_org , c_vhs.pk_org_unit , COALESCE ( ( SELECT array_agg (c_lc2p.fk_generic_code) AS array_agg FROM clin.lnk_code2procedure c_lc2p WHERE (c_lc2p.fk_item = c_pr.pk) ) , ARRAY[]::integer[] ) AS pk_generic_codes , c_pr.xmin AS xmin_procedure FROM ( ( ( (clin.procedure c_pr JOIN clin.encounter c_enc ON ( (c_pr.fk_encounter = c_enc.pk) ) ) JOIN clin.episode c_ep ON ( (c_pr.fk_episode = c_ep.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_ep.fk_health_issue = c_hi.pk) ) ) LEFT JOIN clin.v_hospital_stays c_vhs ON ( (c_pr.fk_hospital_stay = c_vhs.pk_hospital_stay) ) ) WHERE (c_pr.fk_hospital_stay IS NOT NULL);
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_pr.modified_when , c_pr.clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_pr.modified_by) ) , ( ('<'::text || (c_pr.modified_by)::text ) || '>'::text ) ) AS modified_by , c_pr.soap_cat , ( ( ( ( ( ( ( ( ( (_ ('Procedure'::text) || ' "'::text ) || c_pr.narrative ) || '"'::text ) || ' ('::text) || d_ou.description ) || ' @ '::text ) || d_o.description ) || COALESCE ( ( ( ( ', '::text || _ ('until'::text) ) || ' '::text ) || to_char (c_pr.clin_end ,'YYYY Mon DD'::text ) ) , CASE WHEN (c_pr.is_ongoing IS TRUE) THEN ( ', '::text || _ ('ongoing'::text) ) ELSE ''::text END ) ) || ')'::text ) || COALESCE ( ( (' '::text || array_to_string ( ( SELECT array_agg ( ( ( ( ( ( ( ( (r_csr.code || ' ('::text) || r_ds.name_short ) || ' - '::text ) || r_ds.version ) || ' - '::text ) || r_ds.lang ) || '): '::text ) || r_csr.term ) ) AS array_agg FROM ( (clin.lnk_code2procedure c_lc2p JOIN ref.coding_system_root r_csr ON ( (c_lc2p.fk_generic_code = r_csr.pk_coding_system) ) ) JOIN ref.data_source r_ds ON ( (r_ds.pk = r_csr.fk_data_source) ) ) WHERE (c_lc2p.fk_item = c_pr.pk) ) ,'; '::text ) ) || ';'::text ) ,''::text ) ) AS narrative , c_pr.fk_encounter AS pk_encounter , c_pr.fk_episode AS pk_episode , c_epi.fk_health_issue AS pk_health_issue , c_pr.pk AS src_pk , 'clin.procedure'::text AS src_table , c_pr.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( ( ( ( (clin.procedure c_pr JOIN clin.encounter c_enc ON ( (c_pr.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_pr.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) ) LEFT JOIN clin.hospital_stay c_hs ON ( (c_pr.fk_hospital_stay = c_hs.pk) ) ) LEFT JOIN dem.org_unit d_ou ON ( (c_hs.fk_org_unit = d_ou.pk) ) ) LEFT JOIN dem.org d_o ON ( (d_ou.fk_org = d_o.pk) ) ) WHERE (c_pr.fk_hospital_stay IS NOT NULL);
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT v_procedures_at_hospital_journal.pk_patient , v_procedures_at_hospital_journal.modified_when , v_procedures_at_hospital_journal.clin_when , v_procedures_at_hospital_journal.modified_by , v_procedures_at_hospital_journal.soap_cat , v_procedures_at_hospital_journal.narrative , v_procedures_at_hospital_journal.pk_encounter , v_procedures_at_hospital_journal.pk_episode , v_procedures_at_hospital_journal.pk_health_issue , v_procedures_at_hospital_journal.src_pk , v_procedures_at_hospital_journal.src_table , v_procedures_at_hospital_journal.row_version , v_procedures_at_hospital_journal.health_issue , v_procedures_at_hospital_journal.issue_laterality , v_procedures_at_hospital_journal.issue_active , v_procedures_at_hospital_journal.issue_clinically_relevant , v_procedures_at_hospital_journal.issue_confidential , v_procedures_at_hospital_journal.episode , v_procedures_at_hospital_journal.episode_open , v_procedures_at_hospital_journal.encounter_started , v_procedures_at_hospital_journal.encounter_last_affirmed , v_procedures_at_hospital_journal.encounter_type , v_procedures_at_hospital_journal.encounter_l10n_type FROM clin.v_procedures_at_hospital_journal UNION ALL SELECT v_procedures_not_at_hospital_journal.pk_patient , v_procedures_not_at_hospital_journal.modified_when , v_procedures_not_at_hospital_journal.clin_when , v_procedures_not_at_hospital_journal.modified_by , v_procedures_not_at_hospital_journal.soap_cat , v_procedures_not_at_hospital_journal.narrative , v_procedures_not_at_hospital_journal.pk_encounter , v_procedures_not_at_hospital_journal.pk_episode , v_procedures_not_at_hospital_journal.pk_health_issue , v_procedures_not_at_hospital_journal.src_pk , v_procedures_not_at_hospital_journal.src_table , v_procedures_not_at_hospital_journal.row_version , v_procedures_not_at_hospital_journal.health_issue , v_procedures_not_at_hospital_journal.issue_laterality , v_procedures_not_at_hospital_journal.issue_active , v_procedures_not_at_hospital_journal.issue_clinically_relevant , v_procedures_not_at_hospital_journal.issue_confidential , v_procedures_not_at_hospital_journal.episode , v_procedures_not_at_hospital_journal.episode_open , v_procedures_not_at_hospital_journal.encounter_started , v_procedures_not_at_hospital_journal.encounter_last_affirmed , v_procedures_not_at_hospital_journal.encounter_type , v_procedures_not_at_hospital_journal.encounter_l10n_type FROM clin.v_procedures_not_at_hospital_journal;
F-Key | Name | Type | Description |
---|---|---|---|
pk_procedure | integer | ||
pk_patient | integer | ||
soap_cat | text | ||
clin_when | timestamp with time zone | ||
clin_end | timestamp with time zone | ||
is_ongoing | boolean | ||
performed_procedure | text | ||
unit | text | ||
organization | text | ||
episode | text | ||
health_issue | text | ||
modified_when | timestamp with time zone | ||
modified_by | text | ||
row_version | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_hospital_stay | integer | ||
pk_health_issue | integer | ||
pk_org | integer | ||
pk_org_unit | integer | ||
pk_generic_codes | integer[] | ||
xmin_procedure | xid |
SELECT c_pr.pk AS pk_procedure , c_enc.fk_patient AS pk_patient , c_pr.soap_cat , c_pr.clin_when , c_pr.clin_end , c_pr.is_ongoing , c_pr.narrative AS performed_procedure , d_ou.description AS unit , d_o.description AS organization , c_ep.description AS episode , c_hi.description AS health_issue , c_pr.modified_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_pr.modified_by) ) , ( ('<'::text || (c_pr.modified_by)::text ) || '>'::text ) ) AS modified_by , c_pr.row_version , c_pr.fk_encounter AS pk_encounter , c_pr.fk_episode AS pk_episode , c_pr.fk_hospital_stay AS pk_hospital_stay , c_ep.fk_health_issue AS pk_health_issue , d_o.pk AS pk_org , d_ou.pk AS pk_org_unit , COALESCE ( ( SELECT array_agg (c_lc2p.fk_generic_code) AS array_agg FROM clin.lnk_code2procedure c_lc2p WHERE (c_lc2p.fk_item = c_pr.pk) ) , ARRAY[]::integer[] ) AS pk_generic_codes , c_pr.xmin AS xmin_procedure FROM ( ( ( ( (clin.procedure c_pr JOIN clin.encounter c_enc ON ( (c_pr.fk_encounter = c_enc.pk) ) ) JOIN clin.episode c_ep ON ( (c_pr.fk_episode = c_ep.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_ep.fk_health_issue = c_hi.pk) ) ) LEFT JOIN dem.org_unit d_ou ON ( (d_ou.pk = c_pr.fk_org_unit) ) ) LEFT JOIN dem.org d_o ON ( (d_o.pk = d_ou.fk_org) ) ) WHERE (c_pr.fk_hospital_stay IS NULL);
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_pr.modified_when , c_pr.clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_pr.modified_by) ) , ( ('<'::text || (c_pr.modified_by)::text ) || '>'::text ) ) AS modified_by , c_pr.soap_cat , ( ( ( ( ( ( ( ( ( (_ ('Procedure'::text) || ' "'::text ) || c_pr.narrative ) || '"'::text ) || ' ('::text) || d_ou.description ) || ' @ '::text ) || d_o.description ) || COALESCE ( ( ( ( ', '::text || _ ('until'::text) ) || ' '::text ) || to_char (c_pr.clin_end ,'YYYY Mon DD'::text ) ) , CASE WHEN (c_pr.is_ongoing IS TRUE) THEN ( ', '::text || _ ('ongoing'::text) ) ELSE ''::text END ) ) || ')'::text ) || COALESCE ( ( (' '::text || array_to_string ( ( SELECT array_agg ( ( ( ( ( ( ( ( (r_csr.code || ' ('::text) || r_ds.name_short ) || ' - '::text ) || r_ds.version ) || ' - '::text ) || r_ds.lang ) || '): '::text ) || r_csr.term ) ) AS array_agg FROM ( (clin.lnk_code2procedure c_lc2p JOIN ref.coding_system_root r_csr ON ( (c_lc2p.fk_generic_code = r_csr.pk_coding_system) ) ) JOIN ref.data_source r_ds ON ( (r_ds.pk = r_csr.fk_data_source) ) ) WHERE (c_lc2p.fk_item = c_pr.pk) ) ,'; '::text ) ) || ';'::text ) ,''::text ) ) AS narrative , c_pr.fk_encounter AS pk_encounter , c_pr.fk_episode AS pk_episode , c_epi.fk_health_issue AS pk_health_issue , c_pr.pk AS src_pk , 'clin.procedure'::text AS src_table , c_pr.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( ( ( (clin.procedure c_pr JOIN clin.encounter c_enc ON ( (c_pr.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_pr.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) ) LEFT JOIN dem.org_unit d_ou ON ( (c_pr.fk_org_unit = d_ou.pk) ) ) LEFT JOIN dem.org d_o ON ( (d_ou.fk_org = d_o.pk) ) ) WHERE (c_pr.fk_hospital_stay IS NULL);
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | text | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT d_mi.fk_patient AS pk_patient , d_mi.modified_when , d_mi.due_date AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = d_mi.modified_by) ) , ( ('<'::text || (d_mi.modified_by)::text ) || '>'::text ) ) AS modified_by , NULL::text AS soap_cat , ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (_ ('Due today'::text) || ' ('::text) || d_vit.l10n_category ) || ' - '::text ) || d_vit.l10n_type ) || ')'::text ) || ' '::text ) || COALESCE ( ( (' '::text || d_mi.comment) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( ( (' '::text || _ ('Will expire:'::text) ) || ' '::text ) || to_char ( (d_mi.expiry_date)::timestamp with time zone ,'YYYY-MM-DD'::text ) ) || ' '::text ) ,''::text ) ) || ' '::text ) || _ ('Importance:'::text) ) || ' '::text ) || d_mi.importance ) || ' '::text ) || COALESCE ( ( ( ( (' '::text || _ ('Context:'::text) ) || ' '::text ) || array_to_string (d_mi.ufk_context ,','::text ,'?'::text ) ) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( ( (' '::text || _ ('Data:'::text) ) || ' '::text ) || d_mi.data ) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( (' '::text || _ ('Provider:'::text) ) || ' '::text ) || d_st.short_alias ) ,''::text ) ) AS narrative , ( SELECT c_e.pk FROM clin.encounter c_e WHERE (c_e.fk_patient = d_mi.fk_patient) ORDER BY c_e.started DESC LIMIT 1 ) AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , d_mi.pk AS src_pk , 'dem.message_inbox'::text AS src_table , d_mi.row_version , NULL::text AS health_issue , NULL::text AS issue_laterality , NULL::boolean AS issue_active , NULL::boolean AS issue_clinically_relevant , NULL::boolean AS issue_confidential , NULL::text AS episode , NULL::boolean AS episode_open , ( SELECT c_e.started FROM clin.encounter c_e WHERE (c_e.fk_patient = d_mi.fk_patient) ORDER BY c_e.started DESC LIMIT 1 ) AS encounter_started , ( SELECT c_e.last_affirmed FROM clin.encounter c_e WHERE (c_e.fk_patient = d_mi.fk_patient) ORDER BY c_e.started DESC LIMIT 1 ) AS encounter_last_affirmed , NULL::text AS encounter_type , NULL::text AS encounter_l10n_type FROM ( (dem.message_inbox d_mi JOIN dem.v_inbox_item_type d_vit ON ( (d_mi.fk_inbox_item_type = d_vit.pk_type) ) ) LEFT JOIN dem.staff d_st ON ( (d_mi.fk_staff = d_st.pk) ) ) WHERE ( (d_mi.fk_patient IS NOT NULL) AND (d_vit.category = 'clinical'::text) AND (d_mi.due_date IS NOT NULL) ) UNION SELECT d_mi.fk_patient AS pk_patient , d_mi.modified_when , d_mi.expiry_date AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = d_mi.modified_by) ) , ( ('<'::text || (d_mi.modified_by)::text ) || '>'::text ) ) AS modified_by , NULL::text AS soap_cat , ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (_ ('Epires today'::text) || ' ('::text) || d_vit.l10n_category ) || ' - '::text ) || d_vit.l10n_type ) || ')'::text ) || ' '::text ) || COALESCE ( ( (' '::text || d_mi.comment) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( ( (' '::text || _ ('Was due:'::text) ) || ' '::text ) || to_char ( (d_mi.due_date)::timestamp with time zone ,'YYYY-MM-DD'::text ) ) || ' '::text ) ,''::text ) ) || ' '::text ) || _ ('Importance:'::text) ) || ' '::text ) || d_mi.importance ) || ' '::text ) || COALESCE ( ( ( ( (' '::text || _ ('Context:'::text) ) || ' '::text ) || array_to_string (d_mi.ufk_context ,','::text ,'?'::text ) ) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( ( (' '::text || _ ('Data:'::text) ) || ' '::text ) || d_mi.data ) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( (' '::text || _ ('Provider:'::text) ) || ' '::text ) || d_st.short_alias ) ,''::text ) ) AS narrative , ( SELECT c_e.pk FROM clin.encounter c_e WHERE (c_e.fk_patient = d_mi.fk_patient) ORDER BY c_e.started DESC LIMIT 1 ) AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , d_mi.pk AS src_pk , 'dem.message_inbox'::text AS src_table , d_mi.row_version , NULL::text AS health_issue , NULL::text AS issue_laterality , NULL::boolean AS issue_active , NULL::boolean AS issue_clinically_relevant , NULL::boolean AS issue_confidential , NULL::text AS episode , NULL::boolean AS episode_open , ( SELECT c_e.started FROM clin.encounter c_e WHERE (c_e.fk_patient = d_mi.fk_patient) ORDER BY c_e.started DESC LIMIT 1 ) AS encounter_started , ( SELECT c_e.last_affirmed FROM clin.encounter c_e WHERE (c_e.fk_patient = d_mi.fk_patient) ORDER BY c_e.started DESC LIMIT 1 ) AS encounter_last_affirmed , NULL::text AS encounter_type , NULL::text AS encounter_l10n_type FROM ( (dem.message_inbox d_mi JOIN dem.v_inbox_item_type d_vit ON ( (d_mi.fk_inbox_item_type = d_vit.pk_type) ) ) LEFT JOIN dem.staff d_st ON ( (d_mi.fk_staff = d_st.pk) ) ) WHERE ( (d_mi.fk_patient IS NOT NULL) AND (d_vit.category = 'clinical'::text) AND (d_mi.expiry_date IS NOT NULL) ) UNION SELECT d_mi.fk_patient AS pk_patient , d_mi.modified_when , d_mi.modified_when AS clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = d_mi.modified_by) ) , ( ('<'::text || (d_mi.modified_by)::text ) || '>'::text ) ) AS modified_by , NULL::text AS soap_cat , ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (_ ('Clinical reminder'::text) || ' ('::text) || d_vit.l10n_category ) || ' - '::text ) || d_vit.l10n_type ) || ')'::text ) || ' '::text ) || COALESCE ( ( (' '::text || d_mi.comment) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( ( (' '::text || _ ('Due:'::text) ) || ' '::text ) || to_char ( (d_mi.due_date)::timestamp with time zone ,'YYYY-MM-DD'::text ) ) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( ( (' '::text || _ ('Expires:'::text) ) || ' '::text ) || to_char ( (d_mi.expiry_date)::timestamp with time zone ,'YYYY-MM-DD'::text ) ) || ' '::text ) ,''::text ) ) || ' '::text ) || _ ('Importance:'::text) ) || ' '::text ) || d_mi.importance ) || ' '::text ) || COALESCE ( ( ( ( (' '::text || _ ('Context:'::text) ) || ' '::text ) || array_to_string (d_mi.ufk_context ,','::text ,'?'::text ) ) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( ( (' '::text || _ ('Data:'::text) ) || ' '::text ) || d_mi.data ) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( (' '::text || _ ('Provider:'::text) ) || ' '::text ) || d_st.short_alias ) ,''::text ) ) AS narrative , ( SELECT c_e.pk FROM clin.encounter c_e WHERE (c_e.fk_patient = d_mi.fk_patient) ORDER BY c_e.started DESC LIMIT 1 ) AS pk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , d_mi.pk AS src_pk , 'dem.message_inbox'::text AS src_table , d_mi.row_version , NULL::text AS health_issue , NULL::text AS issue_laterality , NULL::boolean AS issue_active , NULL::boolean AS issue_clinically_relevant , NULL::boolean AS issue_confidential , NULL::text AS episode , NULL::boolean AS episode_open , ( SELECT c_e.started FROM clin.encounter c_e WHERE (c_e.fk_patient = d_mi.fk_patient) ORDER BY c_e.started DESC LIMIT 1 ) AS encounter_started , ( SELECT c_e.last_affirmed FROM clin.encounter c_e WHERE (c_e.fk_patient = d_mi.fk_patient) ORDER BY c_e.started DESC LIMIT 1 ) AS encounter_last_affirmed , NULL::text AS encounter_type , NULL::text AS encounter_l10n_type FROM ( (dem.message_inbox d_mi JOIN dem.v_inbox_item_type d_vit ON ( (d_mi.fk_inbox_item_type = d_vit.pk_type) ) ) LEFT JOIN dem.staff d_st ON ( (d_mi.fk_staff = d_st.pk) ) ) WHERE ( (d_mi.fk_patient IS NOT NULL) AND (d_vit.category = 'clinical'::text) AND ( (d_mi.due_date IS NOT NULL) OR (d_mi.expiry_date IS NOT NULL) ) );
denormalization of parent table of reviewed items
F-Key | Name | Type | Description |
---|---|---|---|
src_schema | oid | ||
src_table | name | ||
pk_reviewed_row | integer | ||
is_technically_abnormal | boolean | ||
clinically_relevant | boolean | ||
reviewer | text | ||
comment | text | ||
pk_review_root | integer | ||
pk_reviewer | integer |
SELECT ( SELECT pg_class.relnamespace FROM pg_class WHERE (pg_class.oid = rr.tableoid) ) AS src_schema , ( SELECT pg_class.relname FROM pg_class WHERE (pg_class.oid = rr.tableoid) ) AS src_table , rr.fk_reviewed_row AS pk_reviewed_row , rr.is_technically_abnormal , rr.clinically_relevant , ( SELECT staff.short_alias FROM dem.staff WHERE (staff.pk = rr.fk_reviewer) ) AS reviewer , rr.comment , rr.pk AS pk_review_root , rr.fk_reviewer AS pk_reviewer FROM clin.review_root rr;
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text |
SELECT c_enc.fk_patient AS pk_patient , c_si.soap_cat , ( ( ( (COALESCE (c_si.narrative ,''::text ) || COALESCE ( (' / '::text || c_si.comment_on_start) ,''::text ) ) || COALESCE ( (' / '::text || c_si.schedule) ,''::text ) ) || COALESCE ( (' / '::text || c_si.aim) ,''::text ) ) || COALESCE ( (' / '::text || c_si.discontinue_reason) ,''::text ) ) AS narrative , c_si.fk_encounter AS pk_encounter , c_si.fk_episode AS pk_episode , c_epi.fk_health_issue AS pk_health_issue , c_si.pk AS src_pk , 'clin.substance_intake'::text AS src_table FROM ( (clin.substance_intake c_si JOIN clin.encounter c_enc ON ( (c_si.fk_encounter = c_enc.pk) ) ) JOIN clin.episode c_epi ON ( (c_si.fk_episode = c_epi.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_si.modified_when , c_si.clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_si.modified_by) ) , ( ('<'::text || (c_si.modified_by)::text ) || '>'::text ) ) AS modified_by , c_si.soap_cat , ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( CASE WHEN (c_si.is_long_term IS TRUE) THEN (_ ('long-term'::text) || ' '::text ) ELSE ''::text END || _ ('substance intake'::text) ) || ' '::text ) || CASE WHEN (c_si.intake_is_approved_of IS TRUE) THEN _ ('(approved of)'::text ) WHEN (c_si.intake_is_approved_of IS FALSE) THEN _ ('(not approved of)'::text ) ELSE _ ('(of unknown approval)'::text ) END ) || CASE WHEN (c_si.harmful_use_type IS NULL) THEN ''::text WHEN (c_si.harmful_use_type = 0) THEN _ ('no harmful use'::text) WHEN (c_si.harmful_use_type = 1) THEN _ ('harmful use'::text) WHEN (c_si.harmful_use_type = 2) THEN _ ('addiction'::text) WHEN (c_si.harmful_use_type = 3) THEN _ ('previous addiction'::text) ELSE NULL::text END ) || ': '::text ) || ' '::text ) || r_cs.description ) || COALESCE ( ( (' ['::text || r_cs.atc_code) || '] '::text ) ,' '::text ) ) || (r_cs.amount)::text ) || r_cs.unit ) || ' '::text ) || r_bd.preparation ) || COALESCE ( (' '::text || c_si.schedule) ,''::text ) ) || ', '::text ) || CASE WHEN (c_si.comment_on_start = '?'::text) THEN '?'::text WHEN (c_si.comment_on_start IS NULL) THEN to_char (c_si.clin_when ,'YYYY-MM-DD'::text ) ELSE ( ( ( ('~'::text || to_char (c_si.clin_when ,'YYYY-MM-DD'::text ) ) || ' ('::text) || c_si.comment_on_start ) || ')'::text ) END ) || COALESCE ( (' -> '::text || c_si.duration) ,''::text ) ) || ' '::text ) || COALESCE ( ( ( ( (' '::text || _ ('Discontinued'::text) ) || to_char (c_si.discontinued ,': YYYY-MM-DD'::text ) ) || COALESCE ( ( ( ' ('::text || c_si.discontinue_reason) || ')'::text ) ,''::text ) ) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( (' '::text || _ ('Aim'::text) ) || ': '::text ) || c_si.aim ) ,''::text ) ) || COALESCE ( ( ( (' '::text || _ ('Notes'::text) ) || ': '::text ) || c_si.narrative ) ,''::text ) ) || COALESCE ( ( ( ( (' "'::text || r_bd.description) || '"'::text ) || COALESCE ( ( (' ['::text || r_bd.atc_code) || ']'::text ) ,''::text ) ) || COALESCE ( ( ( ( ( ' ('::text || r_bd.external_code_type) || ': '::text ) || r_bd.external_code ) || ')'::text ) ,''::text ) ) , ''::text ) ) AS narrative , c_si.fk_encounter AS pk_encounter , c_si.fk_episode AS pk_episode , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = c_si.fk_episode) ) AS pk_health_issue , c_si.pk AS src_pk , 'clin.substance_intake'::text AS src_table , c_si.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ ( c_ety.description) AS encounter_l10n_type FROM ( ( ( ( ( ( (clin.substance_intake c_si JOIN ref.lnk_substance2brand r_ls2b ON ( (c_si.fk_drug_component = r_ls2b.pk) ) ) JOIN ref.branded_drug r_bd ON ( (r_bd.pk = r_ls2b.fk_brand) ) ) JOIN ref.consumable_substance r_cs ON ( (r_cs.pk = r_ls2b.fk_substance) ) ) JOIN clin.encounter c_enc ON ( (c_si.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_si.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( ( c_epi.fk_health_issue = c_hi.pk) ) ) WHERE (c_si.fk_drug_component IS NOT NULL) UNION ALL SELECT c_enc.fk_patient AS pk_patient , c_si.modified_when , c_si.clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_si.modified_by) ) , ( ( '<'::text || (c_si.modified_by)::text ) || '>'::text ) ) AS modified_by , c_si.soap_cat , ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( CASE WHEN (c_si.is_long_term IS TRUE) THEN (_ ('long-term'::text) || ' '::text ) ELSE ''::text END || CASE WHEN (c_si.harmful_use_type IS NULL) THEN (_ ('Substance intake'::text) || ' '::text ) ELSE (_ ('Substance abuse'::text) || ' '::text ) END ) || CASE WHEN (c_si.intake_is_approved_of IS TRUE) THEN _ ('(approved of)'::text ) WHEN (c_si.intake_is_approved_of IS FALSE) THEN _ ('(not approved of)'::text ) ELSE _ ('(of unknown approval)'::text ) END ) || CASE WHEN (c_si.harmful_use_type IS NULL) THEN ''::text WHEN (c_si.harmful_use_type = 0) THEN ( ( ( ( ', '::text || _ ('no harmful use'::text) ) || ' ('::text) || to_char (c_enc.started ,'YYYY-MM-DD'::text ) ) || ')'::text ) WHEN (c_si.harmful_use_type = 1) THEN ( ( ( ( ', '::text || _ ('harmful use'::text) ) || ' ('::text) || to_char (c_enc.started ,'YYYY-MM-DD'::text ) ) || ')'::text ) WHEN (c_si.harmful_use_type = 2) THEN ( ( ( ( ', '::text || _ ('addiction'::text) ) || ' ('::text) || to_char (c_enc.started ,'YYYY-MM-DD'::text ) ) || ')'::text ) WHEN (c_si.harmful_use_type = 3) THEN ( ( ( ( ', '::text || _ ('previous addiction'::text) ) || ' ('::text) || to_char (c_enc.started ,'YYYY-MM-DD'::text ) ) || ')'::text ) ELSE NULL::text END ) || ': '::text ) || ' '::text ) || r_cs.description ) || COALESCE ( ( (' ['::text || r_cs.atc_code) || '] '::text ) ,' '::text ) ) || r_cs.amount ) || r_cs.unit ) || ' '::text ) || c_si.preparation ) || COALESCE ( (' '::text || c_si.schedule) ,''::text ) ) || ', '::text ) || CASE WHEN (c_si.comment_on_start = '?'::text) THEN '?'::text WHEN (c_si.comment_on_start IS NULL) THEN to_char (c_si.clin_when ,'YYYY-MM-DD'::text ) ELSE ( ( ( ('~'::text || to_char (c_si.clin_when ,'YYYY-MM-DD'::text ) ) || ' ('::text) || c_si.comment_on_start ) || ')'::text ) END ) || COALESCE ( (' -> '::text || c_si.duration) ,''::text ) ) || ' '::text ) || COALESCE ( ( ( ( (' '::text || _ ('Discontinued'::text) ) || to_char (c_si.discontinued ,': YYYY-MM-DD'::text ) ) || COALESCE ( ( ( ' ('::text || c_si.discontinue_reason) || ')'::text ) ,''::text ) ) || ' '::text ) , ''::text ) ) || COALESCE ( ( ( ( ' '::text || _ ('Aim'::text) ) || ': '::text ) || c_si.aim ) , ''::text ) ) || COALESCE ( ( ( ( ' '::text || _ ( 'Notes'::text) ) || ': '::text ) || c_si.narrative ) , ''::text ) ) AS narrative , c_si.fk_encounter AS pk_encounter , c_si.fk_episode AS pk_episode , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = c_si.fk_episode) ) AS pk_health_issue , c_si.pk AS src_pk , 'clin.substance_intake'::text AS src_table , c_si.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ ( c_ety.description) AS encounter_l10n_type FROM ( ( ( ( ( clin.substance_intake c_si JOIN ref.consumable_substance r_cs ON ( (r_cs.pk = c_si.fk_substance) ) ) JOIN clin.encounter c_enc ON ( ( c_si.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( ( c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( ( c_si.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( ( c_epi.fk_health_issue = c_hi.pk) ) ) WHERE (c_si.fk_drug_component IS NULL);
F-Key | Name | Type | Description |
---|---|---|---|
pk_substance_intake | integer | ||
pk_patient | integer | ||
soap_cat | text | ||
brand | text | ||
preparation | text | ||
substance | text | ||
amount | numeric | ||
unit | text | ||
atc_substance | text | ||
atc_brand | text | ||
external_code_brand | text | ||
external_code_type_brand | text | ||
started | timestamp with time zone | ||
comment_on_start | text | ||
start_is_unknown | boolean | ||
start_is_approximate | boolean | ||
intake_is_approved_of | boolean | ||
harmful_use_type | integer | ||
last_checked_when | timestamp with time zone | ||
schedule | text | ||
duration | interval | ||
discontinued | timestamp with time zone | ||
discontinue_reason | text | ||
is_long_term | boolean | ||
aim | text | ||
episode | text | ||
health_issue | text | ||
notes | text | ||
fake_brand | boolean | ||
is_currently_active | boolean | ||
seems_inactive | boolean | ||
pk_brand | integer | ||
pk_data_source | integer | ||
pk_substance | integer | ||
pk_drug_component | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
row_version | integer | ||
xmin_substance_intake | xid |
SELECT v_brand_intakes.pk_substance_intake , v_brand_intakes.pk_patient , v_brand_intakes.soap_cat , v_brand_intakes.brand , v_brand_intakes.preparation , v_brand_intakes.substance , v_brand_intakes.amount , v_brand_intakes.unit , v_brand_intakes.atc_substance , v_brand_intakes.atc_brand , v_brand_intakes.external_code_brand , v_brand_intakes.external_code_type_brand , v_brand_intakes.started , v_brand_intakes.comment_on_start , v_brand_intakes.start_is_unknown , v_brand_intakes.start_is_approximate , v_brand_intakes.intake_is_approved_of , v_brand_intakes.harmful_use_type , v_brand_intakes.last_checked_when , v_brand_intakes.schedule , v_brand_intakes.duration , v_brand_intakes.discontinued , v_brand_intakes.discontinue_reason , v_brand_intakes.is_long_term , v_brand_intakes.aim , v_brand_intakes.episode , v_brand_intakes.health_issue , v_brand_intakes.notes , v_brand_intakes.fake_brand , v_brand_intakes.is_currently_active , v_brand_intakes.seems_inactive , v_brand_intakes.pk_brand , v_brand_intakes.pk_data_source , v_brand_intakes.pk_substance , v_brand_intakes.pk_drug_component , v_brand_intakes.pk_encounter , v_brand_intakes.pk_episode , v_brand_intakes.pk_health_issue , v_brand_intakes.modified_when , v_brand_intakes.modified_by , v_brand_intakes.row_version , v_brand_intakes.xmin_substance_intake FROM clin.v_brand_intakes UNION ALL SELECT v_nonbrand_intakes.pk_substance_intake , v_nonbrand_intakes.pk_patient , v_nonbrand_intakes.soap_cat , v_nonbrand_intakes.brand , v_nonbrand_intakes.preparation , v_nonbrand_intakes.substance , v_nonbrand_intakes.amount , v_nonbrand_intakes.unit , v_nonbrand_intakes.atc_substance , v_nonbrand_intakes.atc_brand , v_nonbrand_intakes.external_code_brand , v_nonbrand_intakes.external_code_type_brand , v_nonbrand_intakes.started , v_nonbrand_intakes.comment_on_start , v_nonbrand_intakes.start_is_unknown , v_nonbrand_intakes.start_is_approximate , v_nonbrand_intakes.intake_is_approved_of , v_nonbrand_intakes.harmful_use_type , v_nonbrand_intakes.last_checked_when , v_nonbrand_intakes.schedule , v_nonbrand_intakes.duration , v_nonbrand_intakes.discontinued , v_nonbrand_intakes.discontinue_reason , v_nonbrand_intakes.is_long_term , v_nonbrand_intakes.aim , v_nonbrand_intakes.episode , v_nonbrand_intakes.health_issue , v_nonbrand_intakes.notes , v_nonbrand_intakes.fake_brand , v_nonbrand_intakes.is_currently_active , v_nonbrand_intakes.seems_inactive , v_nonbrand_intakes.pk_brand , v_nonbrand_intakes.pk_data_source , v_nonbrand_intakes.pk_substance , v_nonbrand_intakes.pk_drug_component , v_nonbrand_intakes.pk_encounter , v_nonbrand_intakes.pk_episode , v_nonbrand_intakes.pk_health_issue , v_nonbrand_intakes.modified_when , v_nonbrand_intakes.modified_by , v_nonbrand_intakes.row_version , v_nonbrand_intakes.xmin_substance_intake FROM clin.v_nonbrand_intakes;
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
pk_suppressed_hint | integer | ||
pk_hint | integer | ||
title | text | ||
hint | text | ||
recommendation | text | ||
url | text | ||
is_active | boolean | ||
source | text | ||
query | text | ||
lang | text | ||
rationale | text | ||
md5_suppressed | text | ||
md5_hint | text | ||
suppressed_by | name | ||
suppressed_when | timestamp with time zone | ||
pk_encounter | integer |
SELECT ( SELECT encounter.fk_patient FROM clin.encounter WHERE (encounter.pk = c_sh.fk_encounter) ) AS pk_identity , c_sh.pk AS pk_suppressed_hint , c_sh.fk_hint AS pk_hint , r_vah.title , r_vah.hint , r_vah.recommendation , r_vah.url , r_vah.is_active , r_vah.source , r_vah.query , r_vah.lang , c_sh.rationale , c_sh.md5_sum AS md5_suppressed , r_vah.md5_sum AS md5_hint , c_sh.suppressed_by , c_sh.suppressed_when , c_sh.fk_encounter AS pk_encounter FROM (clin.suppressed_hint c_sh JOIN ref.v_auto_hints r_vah ON ( (c_sh.fk_hint = r_vah.pk_auto_hint) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | name | ||
soap_cat | text | ||
narrative | text | ||
fk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | text | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_sh.modified_when , c_sh.suppressed_when AS clin_when , c_sh.modified_by , 'p'::text AS soap_cat , ( ( ( ( ( ( ( ( ( ( ( ( ( ( CASE WHEN (r_vah.is_active IS TRUE) THEN _ ('Active hint'::text) ELSE _ ('Inactive hint'::text) END || ' #'::text ) || c_sh.fk_hint ) || ' '::text ) || _ ('suppressed by'::text) ) || ' '::text ) || (c_sh.suppressed_by)::text ) || ' '::text ) || COALESCE ( ( (_ ('Title: '::text) || r_vah.title ) || ' '::text ) ,''::text ) ) || COALESCE ( ( (_ ('URL: '::text) || r_vah.url ) || ' '::text ) ,''::text ) ) || COALESCE ( ( (_ ('Source: '::text) || r_vah.source ) || ' '::text ) ,''::text ) ) || COALESCE ( ( (_ ('Rationale: '::text) || c_sh.rationale ) || ' '::text ) ,''::text ) ) || CASE WHEN (c_sh.md5_sum <> r_vah.md5_sum) THEN (_ ('Hint definition has been modified since suppression. Rationale for suppression may no longer apply.'::text) || ' '::text ) ELSE ''::text END ) || COALESCE ( ( (_ ('Hint: '::text) || r_vah.hint ) || ' '::text ) ,''::text ) ) || COALESCE ( (_ ('Recommendation: '::text) || r_vah.recommendation ) ,''::text ) ) AS narrative , c_sh.fk_encounter , NULL::integer AS pk_episode , NULL::integer AS pk_health_issue , c_sh.pk AS src_pk , 'clin.suppressed_hint'::text AS src_table , c_sh.row_version , NULL::text AS health_issue , NULL::text AS issue_laterality , NULL::boolean AS issue_active , NULL::boolean AS issue_clinically_relevant , NULL::boolean AS issue_confidential , NULL::text AS episode , NULL::boolean AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( (clin.suppressed_hint c_sh JOIN clin.encounter c_enc ON ( (c_sh.fk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN ref.v_auto_hints r_vah ON ( (c_sh.fk_hint = r_vah.pk_auto_hint) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_test_org | integer | ||
organization | text | ||
unit | text | ||
comment | text | ||
test_org_contact | text | ||
pk_adm_contact | integer | ||
pk_med_contact | integer | ||
pk_org | integer | ||
category_org | integer | ||
pk_org_unit | integer | ||
category_unit | integer | ||
pk_address_unit | integer | ||
xmin_test_org | xid |
SELECT c_to.pk AS pk_test_org , d_o.description AS organization , d_ou.description AS unit , c_to.comment , c_to.contact AS test_org_contact , c_to.fk_adm_contact AS pk_adm_contact , c_to.fk_med_contact AS pk_med_contact , d_o.pk AS pk_org , d_o.fk_category AS category_org , d_ou.pk AS pk_org_unit , d_ou.fk_category AS category_unit , d_ou.fk_address AS pk_address_unit , c_to.xmin AS xmin_test_org FROM ( (clin.test_org c_to LEFT JOIN dem.org_unit d_ou ON ( (c_to.fk_org_unit = d_ou.pk) ) ) LEFT JOIN dem.org d_o ON ( (d_ou.fk_org = d_o.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_test_panel | integer | ||
description | text | ||
comment | text | ||
pk_test_types | integer[] | ||
modified_when | timestamp with time zone | ||
modified_by | name | ||
pk_generic_codes | integer[] | ||
row_version | integer | ||
xmin_test_panel | xid |
SELECT c_tp.pk AS pk_test_panel , c_tp.description , c_tp.comment , c_tp.fk_test_types AS pk_test_types , c_tp.modified_when , c_tp.modified_by , COALESCE ( ( SELECT array_agg (c_lc2tp.fk_generic_code) AS array_agg FROM clin.lnk_code2tst_pnl c_lc2tp WHERE (c_lc2tp.fk_item = c_tp.pk) ) , ARRAY[]::integer[] ) AS pk_generic_codes , c_tp.row_version , c_tp.xmin AS xmin_test_panel FROM clin.test_panel c_tp;
denormalized view over test_results joined with (possibly unified) test type and patient/episode/encounter keys
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
pk_test_result | integer | ||
clin_when | timestamp with time zone | ||
unified_abbrev | text | ||
unified_name | text | ||
unified_loinc | text | ||
unified_val | text | ||
unified_target_min | numeric | ||
unified_target_max | numeric | ||
unified_target_range | text | ||
status | text | ||
soap_cat | text | ||
comment | text | ||
val_num | numeric | ||
val_alpha | text | ||
val_unit | text | ||
reference_unit | text | ||
val_normal_min | numeric | ||
val_normal_max | numeric | ||
val_normal_range | text | ||
val_target_min | numeric | ||
val_target_max | numeric | ||
val_target_range | text | ||
abnormality_indicator | text | ||
norm_ref_group | text | ||
note_test_org | text | ||
material | text | ||
material_detail | text | ||
abbrev_tt | text | ||
name_tt | text | ||
loinc_tt | text | ||
comment_tt | text | ||
name_test_org | text | ||
contact_test_org | text | ||
comment_test_org | text | ||
is_fake_meta_type | boolean | ||
abbrev_meta | text | ||
name_meta | text | ||
loinc_meta | text | ||
comment_meta | text | ||
episode | text | ||
health_issue | text | ||
reviewed | boolean | ||
is_technically_abnormal | boolean | ||
is_clinically_relevant | boolean | ||
review_comment | text | ||
last_reviewer | text | ||
last_reviewed | timestamp with time zone | ||
review_by_you | boolean | ||
review_by_responsible_reviewer | boolean | ||
responsible_reviewer | text | ||
you_are_responsible | boolean | ||
modified_by | text | ||
val_grouping | text | ||
source_data | text | ||
modified_when | timestamp with time zone | ||
row_version | integer | ||
pk_item | integer | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_test_type | integer | ||
pk_intended_reviewer | integer | ||
pk_request | integer | ||
xmin_test_result | xid | ||
pk_test_org | integer | ||
pk_meta_test_type | integer | ||
pk_health_issue | integer | ||
pk_last_reviewer | integer |
SELECT cenc.fk_patient AS pk_patient , tr.pk AS pk_test_result , tr.clin_when , c_vtt.unified_abbrev , c_vtt.unified_name , c_vtt.unified_loinc , CASE WHEN (COALESCE (btrim (tr.val_alpha) ,''::text ) = ''::text ) THEN (tr.val_num)::text ELSE CASE WHEN (tr.val_num IS NULL) THEN tr.val_alpha ELSE ( ( ( (tr.val_num)::text || ' ('::text) || tr.val_alpha ) || ')'::text ) END END AS unified_val , COALESCE (tr.val_target_min , tr.val_normal_min ) AS unified_target_min , COALESCE (tr.val_target_max , tr.val_normal_max ) AS unified_target_max , COALESCE (tr.val_target_range , tr.val_normal_range ) AS unified_target_range , tr.status , tr.soap_cat , tr.narrative AS comment , tr.val_num , tr.val_alpha , tr.val_unit , c_vtt.reference_unit , tr.val_normal_min , tr.val_normal_max , tr.val_normal_range , tr.val_target_min , tr.val_target_max , tr.val_target_range , tr.abnormality_indicator , tr.norm_ref_group , tr.note_test_org , tr.material , tr.material_detail , c_vtt.abbrev AS abbrev_tt , c_vtt.name AS name_tt , c_vtt.loinc AS loinc_tt , c_vtt.comment_type AS comment_tt , c_vtt.name_org AS name_test_org , c_vtt.contact_org AS contact_test_org , c_vtt.comment_org AS comment_test_org , c_vtt.is_fake_meta_type , c_vtt.abbrev_meta , c_vtt.name_meta , c_vtt.loinc_meta , c_vtt.comment_meta , epi.description AS episode , chi.description AS health_issue , (COALESCE (rtr.fk_reviewed_row , 0 ) )::boolean AS reviewed , rtr.is_technically_abnormal , rtr.clinically_relevant AS is_clinically_relevant , rtr.comment AS review_comment , ( SELECT staff.short_alias FROM dem.staff WHERE (staff.pk = rtr.fk_reviewer) ) AS last_reviewer , rtr.modified_when AS last_reviewed , COALESCE ( (rtr.fk_reviewer = ( SELECT staff.pk FROM dem.staff WHERE (staff.db_user = "current_user" () ) ) ) , false ) AS review_by_you , COALESCE ( (tr.fk_intended_reviewer = rtr.fk_reviewer) , false ) AS review_by_responsible_reviewer , ( SELECT staff.short_alias FROM dem.staff WHERE (staff.pk = tr.fk_intended_reviewer) ) AS responsible_reviewer , COALESCE ( (tr.fk_intended_reviewer = ( SELECT staff.pk FROM dem.staff WHERE (staff.db_user = "current_user" () ) ) ) , false ) AS you_are_responsible , CASE WHEN ( ( SELECT 1 FROM dem.staff WHERE (staff.db_user = tr.modified_by) ) IS NULL ) THEN ( ('<'::text || (tr.modified_by)::text ) || '>'::text ) ELSE ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = tr.modified_by) ) END AS modified_by , tr.val_grouping , tr.source_data , tr.modified_when , tr.row_version , tr.pk_item , tr.fk_encounter AS pk_encounter , tr.fk_episode AS pk_episode , tr.fk_type AS pk_test_type , tr.fk_intended_reviewer AS pk_intended_reviewer , tr.fk_request AS pk_request , tr.xmin AS xmin_test_result , c_vtt.pk_test_org , c_vtt.pk_meta_test_type , epi.fk_health_issue AS pk_health_issue , rtr.fk_reviewer AS pk_last_reviewer FROM ( ( ( (clin.test_result tr LEFT JOIN clin.encounter cenc ON ( (tr.fk_encounter = cenc.pk) ) ) LEFT JOIN clin.episode epi ON ( (tr.fk_episode = epi.pk) ) ) LEFT JOIN clin.reviewed_test_results rtr ON ( (tr.pk = rtr.fk_reviewed_row) ) ) LEFT JOIN clin.health_issue chi ON ( (epi.fk_health_issue = chi.pk) ) ) , clin.v_test_types c_vtt WHERE (tr.fk_type = c_vtt.pk_test_type);
formatting of v_test_results for inclusion in v_emr_journal
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_vtr.pk_patient , c_vtr.modified_when , c_vtr.clin_when , c_vtr.modified_by , c_vtr.soap_cat , COALESCE ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (c_vtr.unified_name || ' ('::text) || c_vtr.unified_abbrev ) || COALESCE ( ( (' [#'::text || c_vtr.unified_loinc) || ']'::text ) ,''::text ) ) || '): '::text ) || c_vtr.unified_val ) || ' '::text ) || COALESCE (c_vtr.val_unit ,''::text ) ) || ' '::text ) || COALESCE ( ( ( '('::text || c_vtr.abnormality_indicator) || ')'::text ) ,''::text ) ) || ' '::text ) || _ ('Range: '::text) ) || COALESCE ( (c_vtr.unified_target_min)::text ,''::text ) ) || ' - '::text ) || COALESCE ( (c_vtr.unified_target_max)::text ,''::text ) ) || ' / '::text ) || COALESCE (c_vtr.unified_target_range ,''::text ) ) || COALESCE ( ( ( ' ('::text || c_vtr.norm_ref_group) || ')'::text ) ,''::text ) ) || ' '::text ) || COALESCE ( ( (_ ('Assessment: '::text) || c_vtr.comment ) || ' '::text ) ,''::text ) ) || COALESCE ( ( (_ ('Context: '::text) || c_vtr.note_test_org ) || ' '::text ) ,''::text ) ) || COALESCE ( ( (_ ('Status: '::text) || c_vtr.status ) || ' '::text ) ,''::text ) ) || COALESCE ( ( (_ ('Grouping: '::text) || c_vtr.val_grouping ) || ' '::text ) ,''::text ) ) || COALESCE ( ( ( ( ( ( ( (_ ('Review by '::text) || c_vtr.last_reviewer ) || ' @ '::text ) || to_char (c_vtr.last_reviewed ,'YYYY-MM-DD HH24:MI'::text ) ) || ': '::text ) || CASE WHEN c_vtr.is_technically_abnormal THEN (_ ('abnormal'::text) || ', '::text ) ELSE ''::text END ) || CASE WHEN c_vtr.is_clinically_relevant THEN (_ ('relevant'::text) || ' '::text ) ELSE ''::text END ) || COALESCE ( ( ( '('::text || c_vtr.review_comment) || ') '::text ) ,' '::text ) ) ,''::text ) ) || _ ('Responsible clinician: '::text) ) || c_vtr.responsible_reviewer ) || COALESCE ( ( ( (_ ('Source data:'::text) || ' '::text ) || c_vtr.source_data ) || ' '::text ) ,''::text ) ) ,'faulty clin.v_test_results_journal definition'::text ) AS narrative , c_vtr.pk_encounter , c_vtr.pk_episode , c_vtr.pk_health_issue , c_vtr.pk_test_result AS src_pk , 'clin.test_result'::text AS src_table , c_vtr.row_version , c_vtr.health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_vtr.episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( (clin.v_test_results c_vtr JOIN clin.encounter c_enc ON ( (c_vtr.pk_encounter = c_enc.pk) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_vtr.pk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) );
denormalizes test types with test orgs and meta types
F-Key | Name | Type | Description |
---|---|---|---|
pk_test_type | integer | ||
abbrev | text | ||
name | text | ||
loinc | text | ||
reference_unit | text | ||
comment_type | text | ||
name_org | text | ||
comment_org | text | ||
contact_org | text | ||
unified_abbrev | text | ||
unified_name | text | ||
unified_loinc | text | ||
is_fake_meta_type | boolean | ||
abbrev_meta | text | ||
name_meta | text | ||
loinc_meta | text | ||
comment_meta | text | ||
pk_test_panels | integer[] | ||
pk_test_org | integer | ||
pk_meta_test_type | integer | ||
pk_org_unit | integer | ||
pk_adm_contact_org | integer | ||
pk_med_contact_org | integer | ||
xmin_test_type | xid |
SELECT c_tt.pk AS pk_test_type , c_tt.abbrev , c_tt.name , c_tt.loinc , c_tt.reference_unit , c_tt.comment AS comment_type , d_ou.description AS name_org , c_to.comment AS comment_org , c_to.contact AS contact_org , COALESCE (c_mtt.abbrev , c_tt.abbrev ) AS unified_abbrev , COALESCE (c_mtt.name , c_tt.name ) AS unified_name , COALESCE (c_mtt.loinc , c_tt.loinc ) AS unified_loinc , (c_tt.fk_meta_test_type IS NULL) AS is_fake_meta_type , c_mtt.abbrev AS abbrev_meta , c_mtt.name AS name_meta , c_mtt.loinc AS loinc_meta , c_mtt.comment AS comment_meta , ( SELECT array_agg (c_tp.pk) AS array_agg FROM clin.test_panel c_tp WHERE (c_tt.pk = ANY (c_tp.fk_test_types) ) ) AS pk_test_panels , c_tt.fk_test_org AS pk_test_org , c_tt.fk_meta_test_type AS pk_meta_test_type , c_to.fk_org_unit AS pk_org_unit , c_to.fk_adm_contact AS pk_adm_contact_org , c_to.fk_med_contact AS pk_med_contact_org , c_tt.xmin AS xmin_test_type FROM ( ( (clin.test_type c_tt LEFT JOIN clin.test_org c_to ON ( (c_to.pk = c_tt.fk_test_org) ) ) LEFT JOIN dem.org_unit d_ou ON ( (c_to.fk_org_unit = d_ou.pk) ) ) LEFT JOIN clin.meta_test_type c_mtt ON ( (c_tt.fk_meta_test_type = c_mtt.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
vaccination_schedule | text | ||
is_active | boolean | ||
pk_recommended_by | integer | ||
comment_course | text | ||
comment_schedule | text | ||
pk_vaccination_course | integer | ||
pk_indication | integer | ||
pk_vaccination_schedule | integer |
SELECT cvs.name AS vaccination_schedule , cvc.is_active , cvc.fk_recommended_by AS pk_recommended_by , cvc.comment AS comment_course , cvs.comment AS comment_schedule , cvc.pk AS pk_vaccination_course , cvc.fk_indication AS pk_indication , cvs.pk AS pk_vaccination_schedule FROM clin.vaccination_course cvc , clin.vaccination_schedule cvs , clin.lnk_vaccination_course2schedule clvc2s WHERE ( (clvc2s.fk_course = cvc.pk) AND (clvc2s.fk_schedule = cvs.pk) );
vaccination event definitions for all courses known to the system
F-Key | Name | Type | Description |
---|---|---|---|
pk_course | integer | ||
indication | text | ||
l10n_indication | text | ||
course_comment | text | ||
is_active | boolean | ||
pk_vaccination_definition | integer | ||
is_booster | boolean | ||
vacc_seq_no | integer | ||
age_due_min | interval | ||
age_due_max | interval | ||
min_interval | interval | ||
vacc_comment | text | ||
pk_indication | integer | ||
pk_recommended_by | integer |
SELECT vcourse.pk AS pk_course , vind.description AS indication , _ (vind.description) AS l10n_indication , COALESCE (vcourse.comment ,''::text ) AS course_comment , vcourse.is_active , vdef.id AS pk_vaccination_definition , vdef.is_booster , vdef.seq_no AS vacc_seq_no , vdef.min_age_due AS age_due_min , vdef.max_age_due AS age_due_max , vdef.min_interval , COALESCE (vdef.comment ,''::text ) AS vacc_comment , vind.id AS pk_indication , vcourse.fk_recommended_by AS pk_recommended_by FROM clin.vaccination_course vcourse , clin.vacc_indication vind , clin.vaccination_definition vdef WHERE ( (vcourse.pk = vdef.fk_course) AND (vcourse.fk_indication = vind.id) ) ORDER BY vind.description , vdef.seq_no;
Vaccination data denormalized for the EMR journal.
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying(2) | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT c_enc.fk_patient AS pk_patient , c_vacc.modified_when , c_vacc.clin_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = c_vacc.modified_by) ) , ( ('<'::text || (c_vacc.modified_by)::text ) || '>'::text ) ) AS modified_by , c_vacc.soap_cat , ( ( ( ( ( ( ( ( ( (_ ('Vaccination'::text) || ': '::text ) || r_bd.description ) || ' '::text ) || '['::text ) || c_vacc.batch_no ) || ']'::text ) || COALESCE ( ( ( ' ('::text || c_vacc.site) || ')'::text ) ,''::text ) ) || COALESCE ( ( ( (' '::text || _ ('Reaction'::text) ) || ': '::text ) || c_vacc.reaction ) ,''::text ) ) || COALESCE ( ( ( (' '::text || _ ('Comment'::text) ) || ': '::text ) || c_vacc.narrative ) ,''::text ) ) || COALESCE ( ( ( (' '::text || _ ('Indications'::text) ) || ': '::text ) || array_to_string ( ( SELECT array_agg (_ (cvi.description) ) AS array_agg FROM (clin.lnk_vaccine2inds c_lv2i JOIN clin.vacc_indication cvi ON ( (c_lv2i.fk_indication = cvi.id) ) ) WHERE (c_lv2i.fk_vaccine = c_vacc.fk_vaccine) ) ,' / '::text ) ) ,''::text ) ) AS narrative , c_vacc.fk_encounter AS pk_encounter , c_vacc.fk_episode AS pk_episode , ( SELECT episode.fk_health_issue FROM clin.episode WHERE (episode.pk = c_vacc.fk_episode) ) AS pk_health_issue , c_vacc.pk AS src_pk , 'clin.vaccination'::text AS src_table , c_vacc.row_version , c_hi.description AS health_issue , c_hi.laterality AS issue_laterality , c_hi.is_active AS issue_active , c_hi.clinically_relevant AS issue_clinically_relevant , c_hi.is_confidential AS issue_confidential , c_epi.description AS episode , c_epi.is_open AS episode_open , c_enc.started AS encounter_started , c_enc.last_affirmed AS encounter_last_affirmed , c_ety.description AS encounter_type , _ (c_ety.description) AS encounter_l10n_type FROM ( ( ( ( ( (clin.vaccination c_vacc JOIN clin.encounter c_enc ON ( (c_enc.pk = c_vacc.fk_encounter) ) ) JOIN clin.encounter_type c_ety ON ( (c_enc.fk_type = c_ety.pk) ) ) JOIN clin.episode c_epi ON ( (c_vacc.fk_episode = c_epi.pk) ) ) LEFT JOIN clin.health_issue c_hi ON ( (c_epi.fk_health_issue = c_hi.pk) ) ) JOIN clin.vaccine ON ( (vaccine.pk = c_vacc.fk_vaccine) ) ) JOIN ref.branded_drug r_bd ON ( (vaccine.fk_brand = r_bd.pk) ) );
A list of vaccines.
F-Key | Name | Type | Description |
---|---|---|---|
pk_vaccine | integer | ||
vaccine | text | ||
preparation | text | ||
atc_code | text | ||
is_fake_vaccine | boolean | ||
route_abbreviation | text | ||
route_description | text | ||
is_live | boolean | ||
min_age | interval | ||
max_age | interval | ||
comment | text | ||
indications | text[] | ||
l10n_indications | text[] | ||
external_code | text | ||
external_code_type | text | ||
pk_indications | integer[] | ||
pk_route | integer | ||
pk_brand | integer | ||
pk_data_source | integer | ||
xmin_vaccine | xid |
SELECT cv.pk AS pk_vaccine , rbd.description AS vaccine , rbd.preparation , rbd.atc_code , rbd.is_fake AS is_fake_vaccine , cvr.abbreviation AS route_abbreviation , cvr.description AS route_description , cv.is_live , cv.min_age , cv.max_age , cv.comment , ( SELECT array_agg (cvi.description) AS array_agg FROM (clin.lnk_vaccine2inds clvi JOIN clin.vacc_indication cvi ON ( (clvi.fk_indication = cvi.id) ) ) WHERE (clvi.fk_vaccine = cv.pk) ) AS indications , ( SELECT array_agg (_ (cvi.description) ) AS array_agg FROM (clin.lnk_vaccine2inds clvi JOIN clin.vacc_indication cvi ON ( (clvi.fk_indication = cvi.id) ) ) WHERE (clvi.fk_vaccine = cv.pk) ) AS l10n_indications , rbd.external_code , rbd.external_code_type , ( SELECT array_agg (clvi.fk_indication) AS array_agg FROM (clin.lnk_vaccine2inds clvi JOIN clin.vacc_indication cvi ON ( (clvi.fk_indication = cvi.id) ) ) WHERE (clvi.fk_vaccine = cv.pk) ) AS pk_indications , cv.id_route AS pk_route , cv.fk_brand AS pk_brand , rbd.fk_data_source AS pk_data_source , cv.xmin AS xmin_vaccine FROM ( (clin.vaccine cv JOIN ref.branded_drug rbd ON ( (cv.fk_brand = rbd.pk) ) ) LEFT JOIN clin.vacc_route cvr ON ( (cv.id_route = cvr.id) ) );
F-Key | Name | Type | Description |
---|---|---|---|
list_position | integer | ||
waiting_zone | text | ||
urgency | integer | ||
title | text | ||
firstnames | text | ||
lastnames | text | ||
preferred_name | text | ||
dob | timestamp with time zone | ||
gender | text | ||
l10n_gender | text | ||
comment_identity | text | ||
registered | timestamp with time zone | ||
waiting_time | interval | ||
waiting_time_formatted | text | ||
comment | text | ||
pk_identity | integer | ||
pk_name | integer | ||
pk_waiting_list | integer |
SELECT c_wl.list_position , c_wl.area AS waiting_zone , c_wl.urgency , d_i.title , d_n.firstnames , d_n.lastnames , d_n.preferred AS preferred_name , d_i.dob , d_i.gender , _ (d_i.gender) AS l10n_gender , d_i.comment AS comment_identity , c_wl.registered , ( SELECT (now () - c_wl.registered ) ) AS waiting_time , ( SELECT to_char (age (now () , c_wl.registered ) ,'DDD HH24:MI'::text ) AS to_char ) AS waiting_time_formatted , c_wl.comment , d_i.pk AS pk_identity , d_n.id AS pk_name , c_wl.pk AS pk_waiting_list FROM clin.waiting_list c_wl , dem.identity d_i , dem.names d_n WHERE ( (c_wl.fk_patient = d_i.pk) AND (c_wl.fk_patient = d_n.id_identity) AND (d_i.deceased IS NULL) AND (d_n.active IS TRUE) );
definition of indications for vaccinations
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
description | text |
UNIQUE
NOT NULL
description of indication, eg "Measles", note that this does not have to be a scientific diagnosis, it is simply intended to be an agreed-upon, medically-comprehensible unique identifier for the indication |
|
atcs_single_indication | text[] |
The ATC codes for single-indication vaccines for this indication. |
|
atcs_combi_indication | text[] |
The ATC codes for poly-indication vaccines including this indication. |
Table clin.vacc_indication Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
vacc_indication_sane_combi_atcs | CHECK (((atcs_combi_indication IS NULL) OR (array_upper(atcs_combi_indication, 1) > 0))) |
vacc_indication_sane_single_atcs | CHECK (((atcs_single_indication IS NULL) OR (array_upper(atcs_single_indication, 1) > 0))) |
Tables referencing this one via Foreign Key Constraints:
definition of route via which vaccine is given, currently i.m. and p.o. only but may include "via genetically engineered food" etc in the future
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
abbreviation | text | UNIQUE NOT NULL | |
description | text | UNIQUE NOT NULL |
Table clin.vacc_route Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
holds vaccinations actually given
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone | NOT NULL DEFAULT now() | |
clin.encounter.pk | fk_encounter | integer | NOT NULL |
clin.episode.pk | fk_episode | integer | NOT NULL |
narrative | text |
Used to record a comment on this vaccination. |
|
soap_cat | text | DEFAULT 'p'::text | |
pk | serial | PRIMARY KEY | |
dem.staff.pk | fk_provider | integer |
Who administered this vaccination. |
clin.vaccine.pk | fk_vaccine | integer | NOT NULL |
site | text |
The site of injection used in this vaccination. |
|
batch_no | text |
NOT NULL
The batch/lot number of the vaccine given. |
|
reaction | text |
Used to record reactions to this vaccination. |
Table clin.vaccination Inherits clin_root_item,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
clin_root_item_sane_soap_cat | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text, 'u'::text])))) |
vaccination_sane_narrative | CHECK ((gm.is_null_or_non_empty_string(narrative) IS TRUE)) |
vaccination_sane_reaction | CHECK ((gm.is_null_or_non_empty_string(reaction) IS TRUE)) |
vaccination_sane_site | CHECK ((gm.is_null_or_non_empty_string(site) IS TRUE)) |
holds vaccination courses defined at a techno-medical level for a single indication and will in many cases represent a part of a "recommended multi-epitope schedule", note that one organization can indeed recommend several courses for one and the same indication - which then only differ in their constraints, PostgreSQL does not currently offer the best tools to enforce such constraints
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
fk_recommended_by | integer |
the source/organization which defined this course, can be used to differentiate several locale-dependant courses for the same indication and yet tell them apart |
|
clin.vacc_indication.id | fk_indication | integer |
NOT NULL
vaccination indication this course is targeted at |
is_active | boolean |
NOT NULL
DEFAULT true
whether this course is active or not, if False: do not newly *start* patients on this course |
|
comment | text |
a free-text comment on this vaccination course |
Table clin.vaccination_course Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
holds constraints which apply to a vaccination course
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
description | text |
UNIQUE
NOT NULL
description/label/name of the constraint |
Table clin.vaccination_course_constraint Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
defines a given vaccination event for a particular course
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
clin.vaccination_course.pk | fk_course | integer |
UNIQUE#1
NOT NULL
course to which this event belongs |
is_booster | boolean |
NOT NULL
DEFAULT false
does this definition represent a booster, also set for quasi-booster courses such as Influenza |
|
seq_no | integer |
UNIQUE#1
sequence number for this vaccination event within a particular course, NULL if (is_booster == true) |
|
min_age_due | interval |
NOT NULL
minimum age at which this shot is due |
|
max_age_due | interval |
NOT NULL
DEFAULT '01:32:35'::interval
maximum age at which this shot is due, if max_age_due = "5555 years": no maximum age |
|
min_interval | interval |
if (is_booster == true): recommended interval for boostering id (is_booster == false): minimum interval after previous vaccination, NULL if seq_no == 1 |
|
comment | text |
Table clin.vaccination_definition Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
numbered_shot_xor_booster | CHECK ((((is_booster IS TRUE) AND (seq_no IS NULL)) OR ((is_booster IS FALSE) AND (seq_no > 0)))) |
sensible_min_interval | CHECK ((((min_interval IS NULL) AND (seq_no = 1)) OR ((min_interval IS NOT NULL) AND (min_interval > '00:00:00'::interval) AND (is_booster IS TRUE)) OR ((min_interval IS NOT NULL) AND (min_interval > '00:00:00'::interval) AND (seq_no > 1)))) |
vaccination_definition_check | CHECK ((((max_age_due >= min_age_due) AND (max_age_due <= '150 years'::interval)) OR (max_age_due = '01:32:35'::interval))) |
vaccination_definition_min_age_due_check | CHECK (((min_age_due >= '00:00:01'::interval) AND (min_age_due <= '150 years'::interval))) |
This table holds schedules as recommended by some authority such as a Vaccination Council. There will be numerous schedules depending on locale, constraints, age group etc. These schedules may be single or multi-epitope depending on their definition. A schedule acts as a convenient handle aggregating possibly several vaccination courses under a common name.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
name | text |
UNIQUE
NOT NULL
name of the schedule as defined by some authority |
|
comment | text |
Table clin.vaccination_schedule Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
definition of a vaccine as available on the market
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.vacc_route.id | id_route | integer |
route this vaccine is given |
is_live | boolean |
whether this is a live vaccine |
|
min_age | interval |
minimum age this vaccine is licensed for according to the information by the manufacturer |
|
max_age | interval |
maximum age this vaccine is licensed for according to the information by the manufacturer, use "5555 years" to indicate "no maximum age" |
|
comment | text | ||
ref.branded_drug.pk | fk_brand | integer |
UNIQUE
NOT NULL
The brand of this vaccine, can be a fake entry in ref.branded_drug. |
Table clin.vaccine Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
vaccine_sane_max_age | CHECK (((max_age IS NULL) OR (max_age < '150 years'::interval))) |
vaccine_sane_min_age | CHECK (((min_age IS NULL) OR (((max_age IS NULL) AND (min_age < '150 years'::interval)) OR ((max_age IS NOT NULL) AND (min_age <= max_age))))) |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
clin.vaccine.pk | fk_vaccine | integer | NOT NULL |
batch_no | text |
UNIQUE
NOT NULL
serial # of a batch of a given vaccine that is awaiting usage in the fridge |
Table clin.vaccine_batches Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
aggregates all the patients currently waiting for an encounter
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
dem.identity.pk | fk_patient | integer |
NOT NULL
the waiting patient |
registered | timestamp with time zone |
NOT NULL
DEFAULT now()
when did the patient arrive (enter the waiting list, that is) |
|
urgency | integer |
NOT NULL
relative urgency, used by practices as they see fit, 0 - "standard" urgency < 0 - less urgent > 0 - more urgent |
|
list_position | integer |
UNIQUE
NOT NULL
the currently assigned position of this patient on the waiting list |
|
comment | text |
a free comment regarding this entry, NOT THE RFE ! |
|
area | text |
an arbitrary value by which filtering waiting patients into zones becomes possible |
Table clin.waiting_list Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
non_empty_area | CHECK ((btrim(area) <> ''::text)) |
waiting_list_list_position_check | CHECK ((list_position > 0)) |
DECLARE _raw_query ALIAS FOR $1; _pk_identity ALIAS FOR $2; _query text; _recommendation text; BEGIN IF _raw_query IS NULL THEN RETURN NULL::text; END IF; _query := replace(_raw_query, 'ID_ACTIVE_PATIENT', _pk_identity::text); BEGIN EXECUTE _query INTO STRICT _recommendation; EXCEPTION --WHEN insufficient_privilege THEN RAISE WARNING 'auto hint recommendation query failed: %', _query; WHEN others THEN RAISE WARNING 'auto hint recommendation query failed: %', _query; -- only available starting with PG 9.2: --GET STACKED DIAGNOSTICS -- _exc_state = RETURNED_SQLSTATE, -- _exc_msg = MESSAGE_TEXT, -- _exc_detail = PG_EXCEPTION_DETAIL, -- _exc_hint = PG_EXCEPTION_HINT, -- _exc_context = PG_EXCEPTION_CONTEXT; --RAISE WARNING 'SQL STATE: %', _exc_state; --RAISE WARNING 'MESSAGE: %', _exc_msg; --RAISE WARNING 'DETAIL: %', _exc_detail; --RAISE WARNING 'HINT: %', _exc_hint; --RAISE WARNING 'CONTEXT: %', _exc_context; -- workaround for 9.1: RAISE WARNING 'SQL STATE: %', SQLSTATE; RAISE WARNING 'MESSAGE: %', SQLERRM; _recommendation := 'ERROR running hint recommendation query [' || _query || ']'; END; RETURN _recommendation; END;
declare _term alias for $1; _code alias for $2; _system alias for $3; _tmp text; begin select into _tmp 1 from clin.coded_phrase where term = _term and code = _code and xfk_coding_system = _system; if found then return True; end if; insert into clin.coded_phrase (term, code, xfk_coding_system) values (_term, _code, _system); return True; end;
DECLARE msg text; BEGIN -- do not worry about booster deletes if OLD.is_booster then return null; end if; -- any non-booster rows left ? perform 1 from clin.vaccination_definition where fk_course = OLD.fk_course and seq_no is not null; if FOUND then return null; end if; -- *any* rows left ? perform 1 from clin.vaccination_definition where fk_course = OLD.fk_course; if not FOUND then -- no problem return null; end if; -- any remaining rows can only be booster rows - which is a problem msg := 'Cannot delete last non-booster vacc def [' || OLD.pk || '] from course [' || OLD.fk_course || ']. There would be only booster definitions left.'; raise exception '%', msg; return null; END;
declare _pk_staff integer; begin select pk into _pk_staff from dem.staff where db_user = current_user; return _pk_staff; end;
BEGIN -- do not worry about non-booster inserts if NEW.is_booster is false then return NEW; end if; -- only insert booster def if non-booster def exists perform 1 from clin.vaccination_definition where fk_course = NEW.fk_course and seq_no is not null; if FOUND then return NEW; end if; raise exception 'Cannot define booster shot for course [%]. There is no base immunization definition.', NEW.fk_course; return null; END;
protect from direct inserts/deletes which the inheritance system cannot handle properly
begin raise exception 'INSERT/DELETE on <clin_root_item> not allowed.'; return False; end;
DECLARE msg text; BEGIN -- do not worry about non-booster updates if NEW.is_booster is false then return null; end if; -- after update to booster still non-booster def available ? perform 1 from clin.vaccination_definition where fk_course = NEW.fk_course and seq_no is not null; if FOUND then return null; end if; msg := 'Cannot set vacc def [' || NEW.pk || '] to booster for course [' || NEW.fk_course || ']. There would be no base immunization definition left.'; raise exception '%', msg; return null; END;
select date_trunc('day'::text, d_i.dob) + COALESCE(d_i.tob, d_i.dob::time without time zone)::interval AS dob from dem.identity d_i where d_i.pk = $1;
select deceased from dem.identity d_i where d_i.pk = $1;
DECLARE _hint ref.v_auto_hints%rowtype; _query text; _suppression_exists boolean; -- does not mean that the suppression applies _md5_at_suppression text; _old_rationale4suppression text; _hint_currently_applies boolean; -- regardless of whether suppressed or not _hint_recommendation text; _title text; -- _exc_state text; -- _exc_msg text; -- _exc_detail text; -- _exc_hint text; -- _exc_context text; BEGIN -- loop over all defined hints FOR _hint IN SELECT * FROM ref.v_auto_hints WHERE is_active LOOP --raise NOTICE 'checking hint for patient %: %', _pk_identity, _hint.title; -- is the hint suppressed ? SELECT (clin.hint_suppression_exists(_pk_identity, _hint.pk_auto_hint)).* INTO STRICT _suppression_exists, _md5_at_suppression, _old_rationale4suppression; -- does the hint currently apply ? (regardless of whether it is suppressed) _query := replace(_hint.query, 'ID_ACTIVE_PATIENT', _pk_identity::text); _query := replace(_query, 'clin.v_emr_journal', 'staging.journal_without_suppressed_hints'); SELECT (clin.run_hint_query(_hint.title, _query)).* INTO STRICT _hint_currently_applies, _title; -- error ? IF _hint_currently_applies IS NULL THEN --raise NOTICE ' error -> return'; _hint.title := _title; _hint.hint := _query; RETURN NEXT _hint; -- process next hint CONTINUE; END IF; -- hint does not apply IF _hint_currently_applies IS FALSE THEN -- does a (previously stored) suppression exist ? IF _suppression_exists IS FALSE THEN -- no, so skip this hint --raise NOTICE ' does not apply -> skip'; CONTINUE; END IF; --raise NOTICE ' does not apply but suppression invalid -> return for invalidation'; -- hint suppressed but does NOT apply: -- skip hint but invalidate suppression, because: -- * previously the hint must have applied and the user suppressed it, -- * then patient data (or hint definition) changed such that -- the hint does not apply anymore (but the suppression is -- still valid), -- * when patient data changes again, the hint might apply again -- * HOWEVER - since the suppression would still be valid - the -- hint would magically get suppressed again (which is -- medically unsafe) ... -- after invalidation, the hint will no longer be suppressed, -- however - since it does not currently apply - it will -- still not be returned and shown until it applies again ... -- -- ----------------------------------------------------------------------- -- UNFORTUNATELY, the following is currently not _possible_ because -- we are running inside a READONLY transaction (due to inherent -- security risks when running arbitrary user queries [IOW the hint -- SQL] against the database) and we cannot execute a -- sub-transaction as READWRITE :-/ -- --UPDATE clin.suppressed_hint --SET md5_sum = 'invalidated'::text -- will not ever match any md5 sum --WHERE -- fk_encounter IN ( -- SELECT pk FROM clin.encounter WHERE fk_patient = _pk_identity -- ) -- AND -- fk_hint = _hint.pk_auto_hint; -- ----------------------------------------------------------------------- -- -- hence our our workaround is to, indeed, return the hint but -- tag it with a magic rationale, by means of which the client -- can detect it to be in need of invalidation: _hint.title := 'HINT DOES NOT APPLY BUT NEEDS INVALIDATION OF EXISTING SUPPRESSION [' || _hint.title || '].'; _hint.rationale4suppression := 'magic_tag::does_not_apply::suppression_needs_invalidation'; RETURN NEXT _hint; CONTINUE; END IF; --raise NOTICE ' applies'; -- but is there a suppression ? IF _suppression_exists IS FALSE THEN --raise NOTICE ' return'; -- no: retrieve recommendation SELECT clin._get_recommendation_for_patient_hint(_hint.recommendation_query, _pk_identity) INTO STRICT _hint_recommendation; _hint.recommendation := _hint_recommendation; -- return hint RETURN NEXT _hint; CONTINUE; END IF; -- yes, is suppressed --raise NOTICE ' is suppressed'; -- is the suppression still valid ? -- -> yes, suppression valid IF _md5_at_suppression = _hint.md5_sum THEN --raise NOTICE '-> suppression valid, ignoring hint'; -- hint applies, suppressed, suppression valid: skip this hint CONTINUE; END IF; -- -> no, suppression not valid -- hint definition must have changed so ignore the suppression but -- provide previous rationale for suppression to the user _hint.rationale4suppression := _old_rationale4suppression; -- retrieve recommendation SELECT clin._get_recommendation_for_patient_hint(_hint.recommendation_query, _pk_identity) INTO STRICT _hint_recommendation; _hint.recommendation := _hint_recommendation; RETURN NEXT _hint; CONTINUE; END LOOP; RETURN; END;
--DECLARE -- _md5_suppressed text; -- _old_rationale4suppression text; BEGIN SELECT md5_sum, rationale INTO _o_md5, _o_rationale FROM clin.suppressed_hint WHERE fk_hint = _pk_hint AND fk_encounter IN ( SELECT pk FROM clin.encounter WHERE fk_patient = _pk_identity ); IF FOUND THEN _o_exists := TRUE; ELSE _o_exists := FALSE; END IF; END;
Move row with logical position $1 into logical position $2. If another row exists with position $2 it will be moved to position $1 in the process. Fails if there is no row with position $1.
DECLARE _wl_pos_src alias for $1; _wl_pos_dest alias for $2; _tmp_pos integer; _curr_max_pos integer; BEGIN if _wl_pos_src = _wl_pos_dest then return true; end if; if _wl_pos_dest < 1 then raise notice 'clin.move_waiting_list_entry(): Will not move entry [%] before start of list [%].', _wl_pos_src, _wl_pos_dest; return False; end if; select max(list_position) into _curr_max_pos from clin.waiting_list; -- do not move last entry further down if _wl_pos_src = _curr_max_pos then if _wl_pos_dest > _wl_pos_src then raise notice 'clin.move_waiting_list_entry(): Will not move last entry [%] beyond end of list to [%].', _wl_pos_src, _wl_pos_dest; return False; end if; end if; -- does the source row exist ? perform 1 from clin.waiting_list where list_position = _wl_pos_src; if not found then raise notice 'clin.move_waiting_list_entry(): Cannot move entry [%] to [%]. Entry does not exist.', _wl_pos_src, wl_pos_dest ; return false; end if; -- load destination row perform 1 from clin.waiting_list where list_position = _wl_pos_dest; -- does not exist if not found then -- do not move entry beyond end of list more than necessary if _wl_pos_dest > (_curr_max_pos + 1) then _tmp_pos := _curr_max_pos + 1; else _tmp_pos := _wl_pos_dest; end if; -- so update row to move and be done with it update clin.waiting_list set list_position = _tmp_pos where list_position = _wl_pos_src; return true; end if; -- move existing row out of the way select (max(list_position) + _wl_pos_dest + _wl_pos_src) into _tmp_pos from clin.waiting_list; update clin.waiting_list set list_position = _tmp_pos where list_position = _wl_pos_dest; -- move row to move update clin.waiting_list set list_position = _wl_pos_dest where list_position = _wl_pos_src; -- move back existing row update clin.waiting_list set list_position = _wl_pos_src where list_position = _tmp_pos; return true; END;
Remove empty encounters older than 1 week from a patient.
select clin.remove_old_empty_encounters($1, '1 week'::interval);
Remove empty encountersolder than a definable minimum age from a patient.
DECLARE _pk_identity alias for $1; _defined_minimum_encounter_age alias for $2; _usable_minimum_encounter_age interval; _encounter_count integer; BEGIN -- does person exist ? perform 1 from dem.identity where pk = _pk_identity; if not found then raise exception 'clin.remove_old_empty_encounters(person=%, min_age=%): person [%] does not exist', _pk_identity, _defined_minimum_encounter_age, _pk_identity; return false; end if; SELECT count(1) INTO STRICT _encounter_count FROM clin.encounter WHERE fk_patient = _pk_identity; IF _encounter_count < 2 THEN raise exception 'clin.remove_old_empty_encounters(person=%, min_age=%): there are less than 2 encounters for this patient', _pk_identity, _defined_minimum_encounter_age; return false; END IF; if _defined_minimum_encounter_age < '3 days'::interval then _usable_minimum_encounter_age := '3 days'::interval; else _usable_minimum_encounter_age := _defined_minimum_encounter_age; end if; DELETE FROM clin.encounter WHERE clin.encounter.fk_patient = _pk_identity AND age(clin.encounter.last_affirmed) > _usable_minimum_encounter_age AND NOT EXISTS (SELECT 1 FROM clin.clin_root_item WHERE fk_encounter = clin.encounter.pk) AND NOT EXISTS (SELECT 1 FROM blobs.doc_med WHERE fk_encounter = clin.encounter.pk) AND NOT EXISTS (SELECT 1 FROM clin.episode WHERE fk_encounter = clin.encounter.pk) AND NOT EXISTS (SELECT 1 FROM clin.health_issue WHERE fk_encounter = clin.encounter.pk) AND NOT EXISTS (SELECT 1 FROM clin.allergy_state WHERE fk_encounter = clin.encounter.pk) AND NOT EXISTS (SELECT 1 FROM bill.bill_item WHERE fk_encounter = clin.encounter.pk) AND NOT EXISTS (SELECT 1 FROM clin.external_care WHERE fk_encounter = clin.encounter.pk) AND NOT EXISTS (SELECT 1 FROM clin.suppressed_hint WHERE fk_encounter = clin.encounter.pk) ; return true; END;
BEGIN BEGIN EXECUTE _query INTO STRICT _o_applies; EXCEPTION --WHEN insufficient_privilege THEN RAISE WARNING 'auto hint query failed: %', _query; WHEN others THEN RAISE WARNING 'auto hint query failed: %', _query; -- only available starting with PG 9.2: --GET STACKED DIAGNOSTICS -- _exc_state = RETURNED_SQLSTATE, -- _exc_msg = MESSAGE_TEXT, -- _exc_detail = PG_EXCEPTION_DETAIL, -- _exc_hint = PG_EXCEPTION_HINT, -- _exc_context = PG_EXCEPTION_CONTEXT; --RAISE WARNING 'SQL STATE: %', _exc_state; --RAISE WARNING 'MESSAGE: %', _exc_msg; --RAISE WARNING 'DETAIL: %', _exc_detail; --RAISE WARNING 'HINT: %', _exc_hint; --RAISE WARNING 'CONTEXT: %', _exc_context; -- workaround for 9.1: RAISE WARNING 'SQL STATE: %', SQLSTATE; RAISE WARNING 'MESSAGE: %', SQLERRM; _o_applies := NULL; _o_title := ('ERROR checking for [' || _title || '] !')::TEXT; RETURN; END; _o_title := _title; END;
begin if TG_OP = 'UPDATE' then if OLD.is_open is TRUE then return NEW; end if; end if; update clin.health_issue set is_active = TRUE where pk = NEW.fk_health_issue AND is_active is FALSE ; return NEW; end;
begin execute 'notify "active_substance_mod_db:"'; return NULL; end;
begin execute 'notify "consumed_substance_mod_db:"'; return NULL; end;
DECLARE _issue_count integer; BEGIN SELECT COUNT(1) INTO STRICT _issue_count FROM clin.external_care WHERE issue = NEW.issue AND fk_org_unit = NEW.fk_org_unit AND fk_encounter IN ( SELECT pk FROM clin.encounter WHERE fk_patient = ( SELECT fk_patient FROM clin.encounter WHERE pk = NEW.fk_encounter ) ) ; IF _issue_count > 1 THEN RAISE EXCEPTION '% into clin.external_care: Sanity check failed. Cannot insert issue [%] more than once for patient of encounter [%] at org unit [%].', TG_OP, NEW.issue, NEW.fk_encounter, NEW.fk_org_unit USING ERRCODE = 'check_violation'; return NULL; END IF; RETURN NEW; END;
Document the deletion of a substance intake.
DECLARE _row record; _pk_episode integer; BEGIN select * into _row from clin.v_substance_intake_journal where src_pk = OLD.pk; _pk_episode := _row.pk_episode; -- create episode if needed if _pk_episode is null then select pk into _pk_episode from clin.episode where description = _('Medication history') and fk_encounter in ( select pk from clin.encounter where fk_patient = _row.pk_patient ); if not found then insert into clin.episode ( description, is_open, fk_encounter ) values ( _('Medication history'), FALSE, OLD.fk_encounter ) returning pk into _pk_episode; end if; end if; insert into clin.clin_narrative ( fk_encounter, fk_episode, soap_cat, narrative ) values ( _row.pk_encounter, _pk_episode, NULL, _('Deletion of') || ' ' || _row.narrative ); return OLD; END;
If a patient is stopped from a multi-component drug intake other components thereof must be turned into non-brand substance intakes.
DECLARE _pk_brand integer; _component_count integer; _pk_patient integer; BEGIN -- did it at all relate to a drug (rather than substance) ? if OLD.fk_drug_component is NULL then return NULL; end if; -- which drug ? select fk_brand into _pk_brand from ref.lnk_substance2brand where pk = OLD.fk_drug_component; -- how many components therein ? select count(1) into _component_count from ref.lnk_substance2brand where fk_brand = _pk_brand; -- only one component anyways ? (which then has been deleted already) if _component_count = 1 then return NULL; end if; -- which patient ? select fk_patient into _pk_patient from clin.encounter where pk = OLD.fk_encounter; -- delete those components which cannot be converted: delete from clin.substance_intake c_si1 where -- entries which belong to the brand in question c_si1.fk_drug_component in ( select pk from ref.lnk_substance2brand where fk_brand = _pk_brand ) and -- entries for this one patient only (via proxy of encounter) c_si1.fk_encounter in ( select pk from clin.encounter where fk_patient = _pk_patient ) and -- which already exist exists ( select 1 from clin.substance_intake c_si2 where -- as substance-only links c_si2.fk_substance = ( select fk_substance from ref.lnk_substance2brand where pk = c_si1.fk_drug_component ) and -- for this very patient c_si2.fk_encounter in ( select pk from clin.encounter where fk_patient = _pk_patient ) ) ; -- relink all other intakes into substances update clin.substance_intake c_si set fk_drug_component = null, fk_substance = ( select fk_substance from ref.lnk_substance2brand where pk = c_si.fk_drug_component ), preparation = ( select r_bd.preparation from ref.branded_drug r_bd where r_bd.pk = _pk_brand ) where -- ... which belong to the brand in question c_si.fk_drug_component in ( select pk from ref.lnk_substance2brand where fk_brand = _pk_brand ) and -- ... which belong to this one patient (via proxy of encounter) c_si.fk_encounter in ( select pk from clin.encounter where fk_patient = _pk_patient ) ; return NULL; END;
declare _new_pk_patient integer; _old_pk_patient integer; begin -- find patient from encounter select into _new_pk_patient fk_patient from clin.encounter where pk = NEW.fk_encounter; if not FOUND then raise exception 'Encounter % does not exist !?', NEW.fk_encounter; return NEW; end if; -- new row if TG_OP = 'INSERT' then -- patient already there ? perform 1 from clin.allergy_state where fk_encounter in (select pk from clin.encounter where fk_patient = _new_pk_patient); if FOUND then raise exception 'Cannot insert second allergy state for patient % via encounter %.', _new_pk_patient, NEW.fk_encounter; return NEW; end if; return NEW; end if; if TG_OP = 'UPDATE' then if NEW.fk_encounter = OLD.fk_encounter then return NEW; end if; select into _old_pk_patient fk_patient from clin.encounter where pk = OLD.fk_encounter; if _new_pk_patient = _old_pk_patient then return NEW; end if; raise exception 'Invalid fk_encounter update (% -> %): it would change the associated patient (% -> %).', OLD.fk_encounter, NEW.fk_encounter, _old_pk_patient, _new_pk_patient; return NEW; end if; return NEW; end;
On INSERT of a substance intake set fk_substance from fk_drug_component if the latter is NOT NULL.
BEGIN -- load fk_substance from drug_component table select r_ls2b.fk_substance into strict NEW.fk_substance from ref.lnk_substance2brand r_ls2b where r_ls2b.pk = NEW.fk_drug_component ; return NEW; END;
Check foreign key integrity on insert to *.fk_generic_code -> ref.coding_system_root.pk_coding_system.
DECLARE _msg text; BEGIN perform 1 from ref.coding_system_root where pk_coding_system = NEW.fk_generic_code; if FOUND then return NEW; end if; _msg := 'clin.trf_ins_lc2sth_fk_generic_code(): INSERT into ' || TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME || ': ' || 'fk_generic_code=(' || NEW.fk_generic_code || ') ' || 'does not exist in ref.coding_system_root.pk_coding_system'; raise foreign_key_violation using message = _msg; return NEW; END;
Prevent patient from being put on a particular substance more than once.
DECLARE _pk_patient integer; _link_count integer; _msg text; BEGIN -- which patient ? select fk_patient into _pk_patient from clin.encounter where pk = NEW.fk_encounter; -- more than one link ? select count(1) into _link_count from clin.substance_intake where -- for this substance fk_substance = NEW.fk_substance and -- either already linked as component OR -- already linked as substance fk_drug_component IS NOT DISTINCT FROM NEW.fk_drug_component and -- in this one patient fk_encounter in ( select pk from clin.encounter where fk_patient = _pk_patient ) ; if _link_count > 1 then _msg := '[clin.trf_ins_upd_intake_prevent_duplicate_substance_links]: substance ref.consumable_substance.pk=(' || NEW.fk_substance || ') ' || 'already linked to patient=(' || _pk_patient || ') '; raise exception unique_violation using message = _msg; end if; return NEW; END;
Explicit foreign key-like check.
DECLARE _msg text; _func text; _pk integer; BEGIN -- is NULLable if NEW.fk_test_types is NULL then return NEW; end if; _func := '[clin.trf_ins_upd_validate_test_type_pks]: '; -- must be one-dimensional IF array_ndims(NEW.fk_test_types) <> 1 THEN _msg := _func || 'fk_test_types is not a one-dimensional array' || array_to_string(NEW.fk_test_types, '/', '<NULL>'); raise exception foreign_key_violation using message = _msg; END IF; -- must not be empty IF array_length(NEW.fk_test_types, 1) = 0 THEN _msg := _func || 'fk_test_types must not be empty (perhaps you wanted <NULL> instead ?)'; raise exception foreign_key_violation using message = _msg; END IF; -- must not *contain* NULLs FOR _pk IN SELECT unnest(NEW.fk_test_types) LOOP perform 1 from clin.test_type where pk = _pk; if not found then _msg := _func || 'fk_test_types element (' || coalesce(_pk::text, '<NULL>') || ') not found in clin.test_type.pk column'; raise exception foreign_key_violation using message = _msg; end if; END LOOP; return NEW; END;
If a patient is put on a multi-component drug they must be put on ALL components thereof.
DECLARE _component_count integer; _pk_patient integer; _pk_brand integer; _pk_component integer; BEGIN -- any drug at all ? if NEW.fk_drug_component is NULL then return NEW; end if; -- get the brand we are linking to select fk_brand into _pk_brand from ref.lnk_substance2brand where pk = NEW.fk_drug_component; -- how many components therein ? select count(1) into _component_count from ref.lnk_substance2brand where fk_brand = _pk_brand; -- only one component ? if _component_count = 1 then return NEW; end if; -- which patient ? select fk_patient into _pk_patient from clin.encounter where pk = NEW.fk_encounter; -- INSERT all components for _pk_component in select pk from ref.lnk_substance2brand where fk_brand = _pk_brand loop -- already there ? perform 1 from clin.substance_intake where fk_encounter in ( select pk from clin.encounter where fk_patient = _pk_patient ) and fk_drug_component = _pk_component ; if FOUND then continue; end if; -- insert insert into clin.substance_intake ( fk_drug_component, -- differentiate clin_when, -- harmonize (started) fk_encounter, -- harmonize fk_episode, -- required soap_cat, -- harmonize schedule, -- harmonize duration, -- harmonize intake_is_approved_of, -- harmonize is_long_term, -- harmonize discontinued, -- harmonize narrative, -- preparation, -- drug components already have preps aim, discontinue_reason ) values ( _pk_component, NEW.clin_when, NEW.fk_encounter, NEW.fk_episode, NEW.soap_cat, NEW.schedule, NEW.duration, NEW.intake_is_approved_of, NEW.is_long_term, NEW.discontinued, NEW.narrative, -- NEW.preparation, NEW.aim, NEW.discontinue_reason ); end loop; return NEW; END;
Prevent patient from being put on a particular component twice.
DECLARE _pk_patient integer; _pk_intake integer; _msg text; BEGIN -- any drug at all ? if NEW.fk_drug_component is NULL then return NEW; end if; -- which patient ? select fk_patient into _pk_patient from clin.encounter where pk = NEW.fk_encounter; -- already exists ? select pk into _pk_intake from clin.substance_intake where fk_encounter in ( select pk from clin.encounter where fk_patient = _pk_patient ) and fk_drug_component = NEW.fk_drug_component ; if FOUND then _msg := '[clin.trf_insert_intake_prevent_duplicate_component_links]: drug component ref.lnk_substance2brand.pk=(' || NEW.fk_drug_component || ') ' || 'already linked to patient=(' || _pk_patient || ') ' || 'as clin.substance_intake.pk=(' || _pk_intake || ')'; raise exception unique_violation using message = _msg; end if; return NEW; END;
DECLARE is_modified bool; BEGIN is_modified := False; -- change of test type if NEW.fk_type != OLD.fk_type then is_modified := True; end if; -- change of numeric value if NEW.val_num != OLD.val_num then is_modified := True; end if; -- change of alpha value if NEW.val_alpha != OLD.val_alpha then is_modified := True; end if; -- change of unit if NEW.val_unit != OLD.val_unit then is_modified := True; end if; if is_modified is True then delete from clin.reviewed_test_results where fk_reviewed_row = OLD.pk; end if; return NEW; END;
BEGIN if NEW.clin_end > clock_timestamp() then NEW.is_ongoing := TRUE; else NEW.is_ongoing := FALSE; end if; return NEW; END;
declare _pk_patient integer; _pk_type integer; begin -- disallow change of referenced row -- for cleanliness this really *should* be in another trigger if NEW.fk_reviewed_row <> OLD.fk_reviewed_row then raise exception 'Attaching an existing review to another test result is not allowed (fk_reviewed_row change).'; return NEW; end if; -- change of last reviewer ? if NEW.fk_reviewer = OLD.fk_reviewer then return NEW; end if; -- review change ? if (NEW.is_technically_abnormal <> OLD.is_technically_abnormal) or (NEW.clinically_relevant <> OLD.clinically_relevant) then -- find patient for test result select pk_patient into _pk_patient from clin.v_test_results where pk_test_result = OLD.fk_reviewed_row; -- find inbox item type select pk_type into _pk_type from dem.v_inbox_item_type where type = 'results review change'; -- create it if necessary if not found then insert into dem.inbox_item_type ( fk_inbox_item_category, description ) values ( (select pk from dem.inbox_item_category where description = 'clinical'), 'results review change' ); select pk_type into _pk_type from dem.v_inbox_item_type where type = 'results review change'; end if; -- already notified ? perform 1 from dem.message_inbox where fk_staff = OLD.fk_reviewer and fk_inbox_item_type = _pk_type and ufk_context = ARRAY[_pk_patient]; -- nope, so notify now if not found then insert into dem.message_inbox ( fk_staff, fk_inbox_item_type, comment, ufk_context ) values ( OLD.fk_reviewer, _pk_type, (select _('results review changed for patient') || ' [' || vpb.lastnames || ', ' || vbp.firstnames || ']' from dem.v_basic_person vbp where vpb.pk_identity = _pk_patient ), ARRAY[_pk_patient] ); end if; end if; return NEW; end;
this function is used in triggers and checks whether foreign keys to clin.episode.pk and clin.encounter.pk on a single table ultimately point to the same patient
declare _fk_encounter_col text; _enc_pk integer; _fk_episode_col text; _epi_pk integer; _identity_from_encounter integer; _identity_from_episode integer; _cmd text; begin _fk_encounter_col := TG_ARGV[0]; _fk_episode_col := TG_ARGV[1]; _cmd := 'select $1.' || _fk_encounter_col; EXECUTE _cmd INTO STRICT _enc_pk USING NEW; select fk_patient into _identity_from_encounter from clin.encounter where pk = _enc_pk; -- raise notice '%: % -> %', _cmd, _enc_pk, _identity_from_encounter; _cmd := 'select $1.' || _fk_episode_col; EXECUTE _cmd INTO STRICT _epi_pk USING NEW; select fk_patient into _identity_from_episode from clin.encounter where pk = (select fk_encounter from clin.episode where pk = _epi_pk); -- raise notice '%: % -> %', _cmd, _epi_pk, _identity_from_episode; if _identity_from_encounter <> _identity_from_episode then raise exception '% into %.%: Sanity check failed. %=% -> patient=%. %=% -> patient=%.', TG_OP, TG_TABLE_SCHEMA, TG_TABLE_NAME, _fk_encounter_col, _enc_pk, _identity_from_encounter, _fk_episode_col, _epi_pk, _identity_from_episode ; return NULL; end if; return NEW; end;
declare _enc_pk integer; _epi_pk integer; _identity_from_encounter integer; _identity_from_issue integer; _cmd text; begin select fk_patient into _identity_from_encounter from clin.encounter where pk = NEW.fk_encounter; -- raise notice '%: % -> %', _cmd, _enc_pk, _identity_from_encounter; select fk_patient into _identity_from_issue from clin.encounter where pk = ( select fk_encounter from clin.health_issue where pk = NEW.fk_health_issue ); IF _identity_from_encounter <> _identity_from_issue THEN RAISE EXCEPTION '% into clin.external_care: Sanity check failed. fk_encounter=% -> patient=%. fk_health_issue=% -> patient=%.', TG_OP, NEW.fk_encounter, _identity_from_encounter, NEW.fk_health_issue, _identity_from_issue USING ERRCODE = 'check_violation' ; return NULL; END IF; return NEW; end;
declare _identity_from_encounter integer; _identity_from_issue integer; begin -- if issue is NULL, do not worry about mismatch if NEW.fk_health_issue is NULL then return NEW; end if; -- .fk_episode must belong to the same patient as .fk_encounter select fk_patient into _identity_from_encounter from clin.encounter where pk = NEW.fk_encounter; select fk_patient into _identity_from_issue from clin.encounter where pk = ( select fk_encounter from clin.health_issue where pk = NEW.fk_health_issue ); if _identity_from_encounter <> _identity_from_issue then raise exception 'INSERT/UPDATE into %.%: Sanity check failed. Encounter % patient = %. Issue % patient = %.', TG_TABLE_SCHEMA, TG_TABLE_NAME, NEW.fk_encounter, _identity_from_encounter, NEW.fk_health_issue, _identity_from_issue ; return NULL; end if; return NEW; end;
DECLARE _hospital_stay_episode_pk integer; BEGIN if NEW.fk_hospital_stay is null then return NEW; end if; select into _hospital_stay_episode_pk fk_episode from clin.hospital_stay where pk = NEW.fk_hospital_stay; if NEW.fk_episode = _hospital_stay_episode_pk then return NEW; end if; raise exception '[clin.procedure]: INSERT/UPDATE failed: fk_episode (%) does not match fk_episode (%) behind fk_hospital_stay (%)', NEW.fk_episode, _hospital_stay_episode_pk, NEW.fk_hospital_stay; return NEW; END;
DECLARE _suppression_count integer; BEGIN -- the count of suppressions for this hint in this patient SELECT COUNT(1) INTO STRICT _suppression_count FROM clin.suppressed_hint WHERE fk_hint = NEW.fk_hint AND fk_encounter IN ( SELECT pk FROM clin.encounter WHERE fk_patient = ( SELECT fk_patient FROM clin.encounter WHERE pk = NEW.fk_encounter ) ) ; IF _suppression_count > 1 THEN RAISE EXCEPTION '% into clin.suppressed_hint: Sanity check failed. Hint [%] suppressed more than once for patient of encounter [%].', TG_OP, NEW.pk, NEW.fk_encounter USING ERRCODE = 'check_violation'; return NULL; END IF; return NEW; END;
DECLARE _indication_link_pk integer; BEGIN perform 1 from clin.lnk_vaccine2inds where fk_vaccine = NEW.pk limit 1; if FOUND then return NEW; end if; raise exception '[clin.vaccine]: INSERT/UPDATE failed: no indication linked to vaccine (clin.lnk_vaccine2inds.fk_vaccine <-(%)-> clin.vaccine.pk)', NEW.pk; return NEW; END;
trigger function to sync the allergy state on insert/delete
DECLARE _fk_patient integer; _fk_encounter integer; _state integer; _no_of_allergies integer; BEGIN if TG_OP = 'INSERT' then select into _fk_patient fk_patient from clin.encounter where pk = NEW.fk_encounter; _fk_encounter := NEW.fk_encounter; _state := 1; end if; if TG_OP = 'DELETE' then -- only run this trigger if deleting last allergy select into _fk_patient fk_patient from clin.encounter where pk = OLD.fk_encounter; select into _no_of_allergies count(1) from clin.allergy where fk_encounter in ( select pk from clin.encounter where fk_patient = _fk_patient ); if _no_of_allergies > 1 then return OLD; -- still allergies left end if; _fk_encounter := OLD.fk_encounter; _state := 0; end if; update clin.allergy_state set has_allergy = _state, last_confirmed = coalesce(last_confirmed, now()) where fk_encounter in ( select pk from clin.encounter where fk_patient = _fk_patient ); if not FOUND then insert into clin.allergy_state (fk_encounter, has_allergy, last_confirmed) values (_fk_encounter, _state, now()); end if; return NEW; END;
declare _identity_from_encounter integer; _identity_from_issue integer; begin if NEW.discontinued is NULL then NEW.discontinue_reason := NULL; end if; return NEW; end;
DECLARE _msg text; BEGIN -- is the indication already linked ? perform 1 from clin.v_vaccination_courses_in_schedule where pk_vaccination_schedule = NEW.fk_schedule and pk_indication = (select fk_indication from clin.vaccination_course where pk=NEW.fk_course); if FOUND then _msg := 'Cannot link course [' || NEW.fk_course || '] into schedule [' || NEW.fk_schedule || ']. The indication is already linked.'; raise exception '%', _msg; return null; end if; return null; END;
On UPDATE of a substance intake set fk_substance from fk_drug_component if the latter changes.
BEGIN -- load fk_substance from drug_component table select r_ls2b.fk_substance into strict NEW.fk_substance from ref.lnk_substance2brand r_ls2b where r_ls2b.pk = NEW.fk_drug_component ; return NEW; END;
If a drug component substance intake is updated all sibling components must receive some values thereof.
DECLARE _pk_brand integer; _component_count integer; _pk_patient integer; BEGIN -- which drug ? select fk_brand into _pk_brand from ref.lnk_substance2brand where pk = NEW.fk_drug_component; -- how many components therein ? select count(1) into _component_count from ref.lnk_substance2brand where fk_brand = _pk_brand; -- only one component ? if _component_count = 1 then return NEW; end if; -- which patient ? select fk_patient into _pk_patient from clin.encounter where pk = NEW.fk_encounter; -- update all substance instake fields shared by drug components ... update clin.substance_intake set clin_when = NEW.clin_when, -- started fk_encounter = NEW.fk_encounter, soap_cat = NEW.soap_cat, schedule = NEW.schedule, duration = NEW.duration, intake_is_approved_of = NEW.intake_is_approved_of, is_long_term = NEW.is_long_term, discontinued = NEW.discontinued where -- ... which belong to this drug ... fk_drug_component in ( select pk from ref.lnk_substance2brand where fk_brand = _pk_brand ) AND -- ... but are not THIS component ... fk_drug_component != NEW.fk_drug_component AND -- ... this patient ... fk_encounter in ( select pk from clin.encounter where fk_patient = _pk_patient ) AND -- ... are different in value (this will stop recursion as soon as all are equal) ( clin_when is distinct from NEW.clin_when OR fk_encounter is distinct from NEW.fk_encounter OR soap_cat is distinct from NEW.soap_cat OR schedule is distinct from NEW.schedule OR duration is distinct from NEW.duration OR intake_is_approved_of is distinct from NEW.intake_is_approved_of OR is_long_term is distinct from NEW.is_long_term OR discontinued is distinct from NEW.discontinued ) ; return NEW; END;
Check foreign key integrity on update of *.fk_generic_code -> ref.coding_system_root.pk_coding_system.
DECLARE _msg text; BEGIN perform 1 from ref.coding_system_root where pk_coding_system = NEW.fk_generic_code; if FOUND then return NEW; end if; _msg := 'clin.trf_upd_lc2sth_fk_generic_code(): UPDATE of ' || TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME || ': ' || 'fk_generic_code=(' || NEW.fk_generic_code || ') ' || 'does not exist in ref.coding_system_root.pk_coding_system, ' || 'old fk_generic_code=(' || OLD.fk_generic_code || ')'; raise foreign_key_violation using message = _msg; return OLD; END;
If a patient is put on a different multi-component drug ALL components thereof must be updated.
DECLARE _intake_count integer; _component_count integer; _pk_patient integer; _pk_brand integer; _msg text; BEGIN if NEW.fk_drug_component is not distinct from OLD.fk_drug_component then return NEW; end if; select fk_patient into _pk_patient from clin.encounter where pk = NEW.fk_encounter; -- check the OLD brand unless it is NULL if OLD.fk_drug_component is not NULL then -- get the brand we were linking to select fk_brand into _pk_brand from ref.lnk_substance2brand where fk_substance = OLD.fk_drug_component; -- How many substance intake links for this drug have we got ? select count(1) into _intake_count from clin.substance_intake where fk_drug_component in ( select fk_substance from ref.lnk_substance2brand where fk_brand = _pk_brand ) and fk_encounter in ( select pk from clin.encounter where fk_patient = _pk_patient ); -- unlinking completely would be fine but else: if _intake_count != 0 then -- How many components *are* there in the drug in question ? select count(1) into _component_count from ref.lnk_substance2brand where fk_brand = _pk_brand; -- substance intake link count and number of components must match if _component_count != _intake_count then _msg := '[clin.trf_update_intake_must_link_all_drug_components]: re-linking brand must unlink all components of old brand [' || _pk_brand || '] ' || '(component [' || OLD.fk_drug_component || ' -> ' || NEW.fk_drug_component || '])'; raise exception check_violation using message = _msg; end if; end if; end if; -- check the NEW brand unless it is NULL if NEW.fk_drug_component is not NULL then -- get the brand we were linking to select fk_brand into _pk_brand from ref.lnk_substance2brand where fk_substance = NEW.fk_drug_component; -- How many substance intake links for this drug have we got ? select count(1) into _intake_count from clin.substance_intake where fk_drug_component in ( select fk_substance from ref.lnk_substance2brand where fk_brand = _pk_brand ) and fk_encounter in ( select pk from clin.encounter where fk_patient = _pk_patient ); -- unlinking completely would be fine but else: if _intake_count != 0 then -- How many components *are* there in the drug in question ? select count(1) into _component_count from ref.lnk_substance2brand where fk_brand = _pk_brand; -- substance intake link count and number of components must match if _component_count != _intake_count then _msg := '[clin.trf_update_intake_must_link_all_drug_components]: re-linking brand must link all components of new brand [' || _pk_brand || '] ' || '(component [' || OLD.fk_drug_component || ' -> ' || NEW.fk_drug_component || '])'; raise exception check_violation using message = _msg; end if; end if; end if; return NEW; END;
Sends a notification to the inbox of both current_user and clin.vaccination.fk_provider (if not NULL) in case a new or updated vaccination falls within 1 week of another vaccination with (even partially) overlapping indications.
DECLARE _NEW_pk_patient integer; _NEW_vaccination record; _NEW_vacc_label text; _prev_vacc_loop_record record; _prev_vaccination record; _prev_vacc_label text; _indication_collision integer; msg text; _pk_current_provider integer; BEGIN -- find patient for NEW vaccination select fk_patient into _NEW_pk_patient from clin.encounter where pk = NEW.fk_encounter; -- load denormalized vaccination corresponding to NEW vaccination select * into _NEW_vaccination from clin.v_pat_vaccinations where pk_vaccination = NEW.pk; -- generate label for NEW vaccination _NEW_vacc_label := to_char(_NEW_vaccination.date_given, 'YYYY-MM-DD') || ' (#' || _NEW_vaccination.pk_vaccination || '): ' || _NEW_vaccination.vaccine || ' (' || array_to_string(_NEW_vaccination.l10n_indications, ', ') || ')'; -- loop over ... for _prev_vacc_loop_record in -- ... vaccinations ... SELECT * FROM clin.vaccination cv WHERE -- ... of this patient ... cv.fk_encounter in (select ce.pk from clin.encounter ce where ce.fk_patient = _NEW_pk_patient) AND -- ... within 7 days of the vaccination date ... cv.clin_when BETWEEN (NEW.clin_when - '7 days'::interval) AND (NEW.clin_when + '7 days'::interval) AND -- ... not the vaccination we just INSERTed/UPDATEed cv.pk != NEW.pk loop select * into _indication_collision from (( select fk_indication from clin.lnk_vaccine2inds where fk_vaccine = NEW.fk_vaccine ) INTERSECT ( select fk_indication from clin.lnk_vaccine2inds where fk_vaccine = _prev_vacc_loop_record.fk_vaccine )) as colliding_indications; if FOUND then -- retrieve denormalized data corresponding to that previous vaccination select * into _prev_vaccination from clin.v_pat_vaccinations where pk_vaccination = _prev_vacc_loop_record.pk; -- generate label for that previous vaccination _prev_vacc_label := to_char(_prev_vaccination.date_given, 'YYYY-MM-DD') || ' (#' || _prev_vaccination.pk_vaccination || '): ' || _prev_vaccination.vaccine || ' (' || array_to_string(_prev_vaccination.l10n_indications, ', ') || ')'; msg := _prev_vacc_label || E' ' || _NEW_vacc_label; select pk into _pk_current_provider from dem.staff where db_user = session_user; -- create inbox message for current user insert into dem.message_inbox ( fk_staff, fk_inbox_item_type, comment, data, importance, ufk_context, fk_patient ) values ( _pk_current_provider, (select pk_type from dem.v_inbox_item_type where type = 'review vaccs' and category = 'clinical'), _('Two vaccinations with overlapping target conditions recorded within one week of each other !'), msg, 1, ARRAY[_NEW_vaccination.pk_vaccination,_prev_vaccination.pk_vaccination], _NEW_pk_patient ); -- create inbox message for vaccinating provider if known if NEW.fk_provider is not NULL then -- and not identical to session user if NEW.fk_provider != _pk_current_provider then insert into dem.message_inbox ( fk_staff, fk_inbox_item_type, comment, data, importance, ufk_context, fk_patient ) values ( NEW.fk_provider, (select pk_type from dem.v_inbox_item_type where type = 'review vaccs' and category = 'clinical'), _('Two vaccinations with overlapping target conditions recorded within one week of each other !'), msg, 1, ARRAY[_NEW_vaccination.pk_vaccination,_prev_vaccination.pk_vaccination], _NEW_pk_patient ); end if; end if; end if; end loop; return NEW; END;
Art des Behandlungsfalls (MuVo/Impfung/...)
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
code | text | UNIQUE NOT NULL | |
kurzform | text | UNIQUE NOT NULL | |
name | text | UNIQUE NOT NULL |
Table de_de.beh_fall_typ Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Speichert die Daten einer bestimmten KVK. Wir trennen die KVK-Daten von den Daten ueber Person, Wohnort, Kassenzugehoerigkeit, Mitgliedsstatus und Abrechnungsfaellen. Diese Daten werden jedoch a) als Vorgaben fuer die eigentlichen Personendaten und b) als gueltig fuer abrechnungstechnische Belange angesehen.
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
dem.identity.pk | fk_patient | integer | NOT NULL |
kk_name | character varying(28) | NOT NULL | |
kk_nummer | character(7) | NOT NULL | |
kvk_nummer | character(5) | ||
mitgliedsnummer | character varying(12) | NOT NULL | |
mitgliedsstatus | character varying(4) | NOT NULL | |
zusatzstatus | character varying(3) | ||
titel | character varying(15) | ||
vorname | character varying(28) | ||
namenszuatz | character varying(15) | ||
familienname | character varying(28) | NOT NULL | |
geburtsdatum | character(8) | NOT NULL | |
strasse | character varying(28) | ||
landescode | character varying(3) | ||
plz | character varying(7) | NOT NULL | |
ort | character varying(23) | NOT NULL | |
gueltigkeit | character(4) | ||
crc | character(1) | NOT NULL | |
is_valid_address | boolean | DEFAULT true | |
valid_since | timestamp with time zone | NOT NULL | |
presented | timestamp with time zone[] | NOT NULL | |
invalidated | timestamp with time zone |
Kann durchaus vor Ende von "Gueltigkeit" liegen. Zeitpunkt des Austritts aus der Krankenkasse. Beim Setzen dieses Feldes muss auch die Zuzahlungsbefreiung auf NULL gesetzt werden. |
specific for Germany, GNR = GebuehrenordnungsNummeR = billing item, build index before lab import and drop afterwards, check against this table when importing, build table during import
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
clin.test_type.pk | id_test | integer |
NOT NULL
link to test in our practice |
Table de_de.lab_test_gnr Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
description | text | UNIQUE NOT NULL |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
fk_fall | integer | NOT NULL | |
paid_amount | numeric | NOT NULL | |
paid_when | date | NOT NULL DEFAULT ('now'::text)::date | |
de_de.payment_method.pk | paid_with | integer | NOT NULL |
Table de_de.prax_geb_paid Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
F-Key | Name | Type | Description |
---|---|---|---|
id | serial | PRIMARY KEY | |
dem.identity.pk | id_patient | integer | |
medikamente | date | ||
heilmittel | date | ||
hilfsmittel | date | ||
presented | timestamp with time zone | NOT NULL DEFAULT now() |
an address aka a location, void of attached meaning such as type of address
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
dem.street.id | id_street | integer |
UNIQUE#1
NOT NULL
the street this address is at from whence the urb is to be found, it thus indirectly references dem.urb(id) |
aux_street | text |
UNIQUE#1
additional street-level information which formatters would usually put on lines directly below the street line of an address, such as postal box directions in CA |
|
number | text |
UNIQUE#1
NOT NULL
number of the house |
|
subunit | text |
UNIQUE#1
directions *below* the unit (eg.number) level, such as appartment number, room number, level, entrance or even verbal directions |
|
addendum | text |
UNIQUE#1
any additional information that did not fit anywhere else |
|
lat_lon | point |
the exact location of this address in latitude-longtitude |
Table dem.address Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
id | serial | PRIMARY KEY | |
name | text | UNIQUE NOT NULL |
Tables referencing this one via Foreign Key Constraints:
countries coded per ISO 3166-1
F-Key | Name | Type | Description |
---|---|---|---|
id | serial | PRIMARY KEY | |
code | character(2) |
UNIQUE
NOT NULL
international two character country code as per ISO 3166-1 |
|
name | text | UNIQUE NOT NULL | |
deprecated | date |
date when this country ceased officially to exist (if applicable) |
Name | Constraint |
---|---|
no_linebreaks | CHECK ((("position"(((COALESCE(code, ''::bpchar))::text || COALESCE(name, ''::text)), ''::text) = 0) AND ("position"(((COALESCE(code, ''::bpchar))::text || COALESCE(name, ''::text)), ' '::text) = 0) AND ("position"(((COALESCE(code, ''::bpchar))::text || COALESCE(name, ''::text)), ' '::text) = 0) AND ("position"(((COALESCE(code, ''::bpchar))::text || COALESCE(name, ''::text)), ''::text) = 0))) |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
description | text | UNIQUE NOT NULL |
Tables referencing this one via Foreign Key Constraints:
a list of all bureaucratic IDs/serial numbers/3rd party primary keys, etc.
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
name | text | UNIQUE#1 | |
issuer | text |
UNIQUE#1
the authority/system issuing the number |
Tables referencing this one via Foreign Key Constraints:
This table stores the genders known to GNUmed. FIXME: cross-check with CDA:administrative-gender-code
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
tag | text | UNIQUE NOT NULL | |
label | text | UNIQUE NOT NULL | |
sort_weight | integer | NOT NULL | |
comment | text | NOT NULL |
Table dem.gender_label Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
gender_label_tag_check | CHECK ((tag = ANY (ARRAY['m'::text, 'f'::text, 'h'::text, 'tm'::text, 'tf'::text]))) |
Tables referencing this one via Foreign Key Constraints:
represents the unique identity of a person
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
deleted | boolean |
NOT NULL
DEFAULT false
whether this identity is considered deleted |
|
dem.gender_label.tag | gender | text |
the gender code |
dob | timestamp with time zone |
date/time of birth |
|
dem.marital_status.pk | fk_marital_status | integer | |
cob | character(2) |
country of birth as per date of birth, coded as 2 character ISO code |
|
deceased | timestamp with time zone |
date when a person has died |
|
title | text |
Yes, a title is an attribute of an identity, not of a name ! Also, there are some incredible rants of titles. |
|
tob | time without time zone | ||
emergency_contact | text |
Free text emergency contact information. |
|
dem.identity.pk | fk_emergency_contact | integer |
Link to another dem.identity to be used as emergency contact. |
comment | text |
A free-text comment on this identity.\n \n Can be used to to discriminate patients which are otherwise\n identical regarding name and date of birth.\n Should be something non-ephemereal and unique to the person\n itself across time, place and database instance.\n Good: place of birth\n Good: maiden name of mother\n Good: mother of <name>\n Good: hash of DNA\n Good (?): hair color of first pet\n Bad: current address (will change)\n Bad: primary provider in this praxis (can change, invalid in another GNUmed instance)\n Bad: nickname (will change, can dupe as well)\n Bad: favourite food\n not-quite-so-bad: occupation |
|
dem.staff.pk | fk_primary_provider | integer |
Whether the given DOB is estimated or not. The TOB is assumed to be correct if given |
dob_is_estimated | boolean | NOT NULL DEFAULT false |
Table dem.identity Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
dem_identity_sane_dob | CHECK (((dob IS NULL) OR (dob <= now()))) |
dem_identity_sane_dod | CHECK (((deceased IS NULL) OR (dob IS NULL) OR (deceased >= dob))) |
identity_title_check | CHECK ((btrim(COALESCE(title, 'NULL'::text)) <> ''::text)) |
sane_comment | CHECK ((gm.is_null_or_non_empty_string(comment) IS TRUE)) |
sane_emergency_contact | CHECK ((gm.is_null_or_non_empty_string(emergency_contact) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
tags attached to this identity
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
dem.identity.pk | fk_identity | integer | UNIQUE#1 NOT NULL |
ref.tag_image.pk | fk_tag | integer | UNIQUE#1 NOT NULL |
comment | text |
Table dem.identity_tag Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
dem_identity_tag_sane_comment | CHECK ((gm.is_null_or_non_empty_string(comment) IS TRUE)) |
Holds the various categories of messages that can show up in the provider inbox.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
description | text |
UNIQUE
NOT NULL
"clinical" "admin" "personal" ... |
|
is_user | boolean |
NOT NULL
DEFAULT true
whether this category was added locally, as to be left alone by database upgrades |
Table dem.inbox_item_category Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
inbox_item_category_description_check | CHECK ((btrim(COALESCE(description, 'xxxDEFAULTxxx'::text)) <> ''::text)) |
Tables referencing this one via Foreign Key Constraints:
Holds the various types of messages that can show up in the provider inbox.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
dem.inbox_item_category.pk | fk_inbox_item_category | integer |
UNIQUE#1
NOT NULL
The category of this item type. |
description | text |
UNIQUE#1
NOT NULL
the various types of inbox items |
|
is_user | boolean |
NOT NULL
DEFAULT true
whether this type was added locally, as to be left alone by database upgrades |
Table dem.inbox_item_type Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
inbox_item_type_description_check | CHECK ((btrim(COALESCE(description, 'xxxDEFAULTxxx'::text)) <> ''::text)) |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
dem.identity.pk | fk_identity | integer | UNIQUE#1 NOT NULL |
dem.address.id | fk_address | integer | |
url | text | UNIQUE#1 NOT NULL | |
dem.enum_comm_types.pk | fk_type | integer | NOT NULL |
is_confidential | boolean | NOT NULL DEFAULT false | |
comment | text |
a comment on this communications channel |
Name | Constraint |
---|---|
d_l_i2comm_sane_comment | CHECK ((gm.is_null_or_non_empty_string(comment) IS TRUE)) |
lnk_identity2comm_url_check | CHECK ((btrim(url) <> ''::text)) |
link external IDs to GnuMed identities
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
dem.identity.pk | id_identity | integer | UNIQUE#1 NOT NULL |
external_id | text |
UNIQUE#1
NOT NULL
textual representation of external ID which may be Social Security Number, patient ID of another EMR system, you-name-it |
|
dem.enum_ext_id_types.pk | fk_origin | integer |
UNIQUE#1
NOT NULL
originating system |
comment | text |
Table dem.lnk_identity2ext_id Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
linking (possibly several) jobs to a person
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
dem.identity.pk | fk_identity | integer | UNIQUE#1 NOT NULL |
dem.occupation.id | fk_occupation | integer | UNIQUE#1 NOT NULL |
activities | text |
describes activities the person is usually carrying out when working at this job |
Table dem.lnk_job2person Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Comm channels per org unit.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
dem.org_unit.pk | fk_org_unit | integer | UNIQUE#1 NOT NULL |
url | text | UNIQUE#1 | |
dem.enum_comm_types.pk | fk_type | integer | UNIQUE#1 NOT NULL |
is_confidential | boolean | NOT NULL DEFAULT false | |
comment | text |
a comment on this comm channel |
Table dem.lnk_org_unit2comm Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
dem_lnk_unit2comm_sane_comment | CHECK ((gm.is_null_or_non_empty_string(comment) IS TRUE)) |
lnk_org_unit2comm_sane_url | CHECK ((gm.is_null_or_blank_string(url) IS FALSE)) |
External IDs per org unit.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
dem.org_unit.pk | fk_org_unit | integer | UNIQUE#1 NOT NULL |
external_id | text | UNIQUE#1 | |
dem.enum_ext_id_types.pk | fk_type | integer | UNIQUE#1 NOT NULL |
comment | text |
Table dem.lnk_org_unit2ext_id Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
lnk_org_unit2ext_id_sane_comment | CHECK ((gm.is_null_or_non_empty_string(comment) IS TRUE)) |
lnk_org_unit2ext_id_sane_id | CHECK ((gm.is_null_or_blank_string(external_id) IS FALSE)) |
F-Key | Name | Type | Description |
---|---|---|---|
id_identity | integer | ||
id_address | integer | ||
id_type | integer |
SELECT lnk_person_org_address.id_identity , lnk_person_org_address.id_address , lnk_person_org_address.id_type FROM dem.lnk_person_org_address;
biological and social relationships between an identity and other identities
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
dem.identity.pk | id_identity | integer |
NOT NULL
primary identity to whom the relationship applies |
dem.identity.pk | id_relative | integer |
NOT NULL
referred-to identity of this relationship (e.g. "child" if id_identity points to the father and id_relation_type points to "parent") |
dem.relation_types.id | id_relation_type | integer | NOT NULL |
started | date |
date when this relationship began |
|
ended | date |
date when this relationship ended, biological relationships do not end ! |
Table dem.lnk_person2relative Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
a many-to-many pivot table describing the relationship between an organisation, a person, their work address and their occupation at that location. For patients id_org is NULL
F-Key | Name | Type | Description |
---|---|---|---|
id | serial | PRIMARY KEY | |
dem.identity.pk | id_identity | integer |
UNIQUE#1
identity to which the address belongs |
dem.address.id | id_address | integer |
UNIQUE#1
UNIQUE#2
address belonging to this identity (the branch of the organisation) |
dem.address_type.id | id_type | integer |
DEFAULT 1
type of this address (like home, work, parents, holidays ...) |
address_source | text | ||
id_org | integer | UNIQUE#2 |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
name | text | UNIQUE NOT NULL |
Tables referencing this one via Foreign Key Constraints:
messages in GNUmed relating to a patient, a provider, and a context
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
dem.staff.pk | fk_staff | integer |
the member of staff this message is addressed to |
dem.inbox_item_type.pk | fk_inbox_item_type | integer |
NOT NULL
the item (message) type |
comment | text |
a free-text comment, may be NULL but not empty |
|
data | text |
arbitrary data an application might wish to attach to the message, like a cookie, basically |
|
importance | smallint |
NOT NULL
the relative importance of this message: -1: lower than most things already in the inbox ("low") 0: same as most things ("standard") 1: higher than most things already there ("high") |
|
dem.identity.pk | fk_patient | integer | |
ufk_context | integer[] |
a nullable array of Unchecked Foreign Keys, it is up to the application to know what this points to, it will have to make sense within the context of the combination of staff ID, item type, and comment |
|
due_date | date |
The date this message/reminder is due. If NULL then the message is not a reminder. |
|
expiry_date | date |
The date this message/reminder "expires". Must be > .due_date it not NULL. |
Table dem.message_inbox Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
dem_inbox_sane_expiry_date | CHECK (((expiry_date IS NULL) OR (due_date IS NULL) OR (expiry_date > due_date))) |
message_must_have_recipient | CHECK ((((fk_staff IS NULL) AND (fk_patient IS NULL)) IS FALSE)) |
provider_inbox_comment_check | CHECK ((btrim(COALESCE(comment, 'xxxDEFAULTxxx'::text)) <> ''::text)) |
provider_inbox_importance_check | CHECK (((importance = '-1'::integer) OR (importance = 0) OR (importance = 1))) |
maps (first) names to their most frequently locally assigned gender, this table is updated nightly by a cron script, names whose gender distribution is between 70/30 and 30/70 are ignored for ambiguity reasons, names with "ambigous" gender are also ignored
F-Key | Name | Type | Description |
---|---|---|---|
id | serial | PRIMARY KEY | |
name | text | UNIQUE NOT NULL | |
gender | character(1) |
Name | Constraint |
---|---|
name_gender_map_gender_check | CHECK ((gender = ANY (ARRAY['m'::bpchar, 'f'::bpchar]))) |
all the names an identity is known under; As opposed to the versioning of all other tables, changed names should not be moved into the audit trail tables. Search functionality must be available at any time for all names a person ever had.
F-Key | Name | Type | Description |
---|---|---|---|
id | serial | PRIMARY KEY | |
dem.identity.pk | id_identity | integer | UNIQUE#1 NOT NULL |
active | boolean |
DEFAULT true
true if the name is still in use |
|
lastnames | text |
UNIQUE#1
NOT NULL
all last names of an identity in legal order, IOW "major" name, "group identifier", eg. family, village, tribe, ... |
|
firstnames | text |
UNIQUE#1
NOT NULL
all first names of an identity in legal order, IOW "minor" name, identifier of this identity within the group defined by <lastnames> |
|
preferred | text |
preferred first name, the name a person is usually called (nickname, warrior name) |
|
comment | text |
a comment regarding this name, useful in things like "this was the name before marriage" etc |
collects occupation names
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
name | text | NOT NULL |
Table dem.occupation Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
occupation_name_check | CHECK ((btrim(name) <> ''::text)) |
Tables referencing this one via Foreign Key Constraints:
Organizations at a conceptual level.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
description | text |
UNIQUE
High-level, conceptual description (= name) of organization, such as "University of Manchester". |
|
dem.org_category.pk | fk_category | integer | |
ref.data_source.pk | fk_data_source | integer |
Source of the organization data. |
Table dem.org Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
org_sane_description | CHECK ((gm.is_null_or_blank_string(description) IS FALSE)) |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
description | text | NOT NULL |
Actual branches/departments/offices/... of organizations.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
description | text |
UNIQUE#1
Description (= name) of branch of organization, such as "Elms Street office of Jim Busser Praxis". |
|
dem.org.pk | fk_org | integer | UNIQUE#1 NOT NULL |
dem.address.id | fk_address | integer | |
dem.org_category.pk | fk_category | integer |
Table dem.org_unit Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
org_unit_sane_description | CHECK ((gm.is_null_or_blank_string(description) IS FALSE)) |
Tables referencing this one via Foreign Key Constraints:
Defines one branch of a praxis (which itself is a dem.org)
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
fk_org_unit | integer | UNIQUE NOT NULL |
Table dem.praxis_branch Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
region codes (country specific); Richard agreed we should require pre-existence, allow user to mail details for adding a state to developers
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
code | text |
UNIQUE#1
NOT NULL
region code |
|
dem.country.code | country | character(2) |
UNIQUE#1
NOT NULL
2 character ISO 3166-1 country code |
name | text | NOT NULL |
Table dem.region Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
no_linebreaks | CHECK ((("position"(((COALESCE(code, ''::text) || (COALESCE(country, ''::bpchar))::text) || COALESCE(name, ''::text)), ''::text) = 0) AND ("position"(((COALESCE(code, ''::text) || (COALESCE(country, ''::bpchar))::text) || COALESCE(name, ''::text)), ' '::text) = 0) AND ("position"(((COALESCE(code, ''::text) || (COALESCE(country, ''::bpchar))::text) || COALESCE(name, ''::text)), ' '::text) = 0) AND ("position"(((COALESCE(code, ''::text) || (COALESCE(country, ''::bpchar))::text) || COALESCE(name, ''::text)), ''::text) = 0))) |
Tables referencing this one via Foreign Key Constraints:
types of biological/social relationships between identities
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
dem.relation_types.id | inverse | integer | |
biological | boolean |
NOT NULL
true if relationship is biological (proven or reasonable assumption), else false |
|
biol_verified | boolean |
DEFAULT false
ONLY true if there is genetic proof for this relationship |
|
description | text |
plain text description of relationship |
Table dem.relation_types Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
one-to-one mapping of database user accounts (db_user) to staff identities (fk_identity)
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
dem.identity.pk | fk_identity | integer | NOT NULL |
db_user | name | UNIQUE NOT NULL DEFAULT "current_user"() | |
short_alias | text |
UNIQUE
NOT NULL
a short signature unique to this staff member to be used in the GUI, actually this is somewhat redundant with ext_person_id... |
|
comment | text | ||
is_active | boolean | NOT NULL DEFAULT true |
Table dem.staff Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
street names, specific for distinct "urbs"
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
dem.urb.id | id_urb | integer |
UNIQUE#1
NOT NULL
reference to information postcode, city, country and region |
name | text |
UNIQUE#1
NOT NULL
name of this street |
|
postcode | text |
UNIQUE#1
postcode for systems (such as UK Royal Mail) which specify the street |
|
suburb | text |
the suburb this street is in (if any) |
|
lat_lon | point |
the approximate location of the street, as lat/long co-ordinates |
Table dem.street Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
no_linebreaks | CHECK ((("position"(((COALESCE(postcode, ''::text) || COALESCE(suburb, ''::text)) || COALESCE(name, ''::text)), ''::text) = 0) AND ("position"(((COALESCE(postcode, ''::text) || COALESCE(suburb, ''::text)) || COALESCE(name, ''::text)), ' '::text) = 0) AND ("position"(((COALESCE(postcode, ''::text) || COALESCE(suburb, ''::text)) || COALESCE(name, ''::text)), ' '::text) = 0) AND ("position"(((COALESCE(postcode, ''::text) || COALESCE(suburb, ''::text)) || COALESCE(name, ''::text)), ''::text) = 0))) |
Tables referencing this one via Foreign Key Constraints:
cities, towns, dwellings ..., eg. "official" places of residence
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
id | serial | PRIMARY KEY | |
dem.region.pk | fk_region | integer |
UNIQUE#1
NOT NULL
reference to information about country and region |
postcode | text |
UNIQUE#1
NOT NULL
default postcode for urb.name, useful for all the smaller urbs that only have one postcode, also useful as a default when adding new streets to an urb |
|
lat_lon | point |
the location of the urb, as lat/long co-ordinates. Ideally this would be NOT NULL |
|
name | text |
UNIQUE#1
NOT NULL
the name of the city/town/dwelling |
Table dem.urb Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
no_linebreaks | CHECK ((("position"((COALESCE(postcode, ''::text) || COALESCE(name, ''::text)), ''::text) = 0) AND ("position"((COALESCE(postcode, ''::text) || COALESCE(name, ''::text)), ' '::text) = 0) AND ("position"((COALESCE(postcode, ''::text) || COALESCE(name, ''::text)), ' '::text) = 0) AND ("position"((COALESCE(postcode, ''::text) || COALESCE(name, ''::text)), ''::text) = 0))) |
Tables referencing this one via Foreign Key Constraints:
This view denormalizes non-deleted persons with their active name.
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
title | text | ||
firstnames | text | ||
preferred | text | ||
lastnames | text | ||
gender | text | ||
l10n_gender | text | ||
dob_only | timestamp with time zone | ||
dob | timestamp with time zone | ||
tob | time without time zone | ||
deceased | timestamp with time zone | ||
marital_status | text | ||
l10n_marital_status | text | ||
emergency_contact | text | ||
comment | text | ||
is_deleted | boolean | ||
pk_marital_status | integer | ||
pk_active_name | integer | ||
pk_emergency_contact | integer | ||
pk_primary_provider | integer | ||
xmin_identity | xid | ||
dob_is_estimated | boolean |
SELECT d_vp.pk_identity , d_vp.title , d_vp.firstnames , d_vp.preferred , d_vp.lastnames , d_vp.gender , d_vp.l10n_gender , d_vp.dob_only , d_vp.dob , d_vp.tob , d_vp.deceased , d_vp.marital_status , d_vp.l10n_marital_status , d_vp.emergency_contact , d_vp.comment , d_vp.is_deleted , d_vp.pk_marital_status , d_vp.pk_active_name , d_vp.pk_emergency_contact , d_vp.pk_primary_provider , d_vp.xmin_identity , d_vp.dob_is_estimated FROM dem.v_all_persons d_vp WHERE (d_vp.is_deleted IS FALSE);
fully denormalizes data about addresses as entities in themselves
F-Key | Name | Type | Description |
---|---|---|---|
pk_address | integer | ||
street | text | ||
postcode | text | ||
notes_street | text | ||
number | text | ||
subunit | text | ||
notes_subunit | text | ||
lat_lon_address | point | ||
postcode_street | text | ||
lat_lon_street | point | ||
suburb | text | ||
urb | text | ||
postcode_urb | text | ||
lat_lon_urb | point | ||
code_region | text | ||
region | text | ||
l10n_region | text | ||
code_country | character(2) | ||
country | text | ||
l10n_country | text | ||
country_deprecated | date | ||
pk_street | integer | ||
pk_urb | integer | ||
pk_region | integer | ||
xmin_address | xid |
SELECT d_adr.id AS pk_address , d_str.name AS street , COALESCE (d_str.postcode , d_u.postcode ) AS postcode , d_adr.aux_street AS notes_street , d_adr.number , d_adr.subunit , d_adr.addendum AS notes_subunit , d_adr.lat_lon AS lat_lon_address , d_str.postcode AS postcode_street , d_str.lat_lon AS lat_lon_street , d_str.suburb , d_u.name AS urb , d_u.postcode AS postcode_urb , d_u.lat_lon AS lat_lon_urb , d_r.code AS code_region , d_r.name AS region , _ (d_r.name) AS l10n_region , d_r.country AS code_country , d_c.name AS country , _ (d_c.name) AS l10n_country , d_c.deprecated AS country_deprecated , d_adr.id_street AS pk_street , d_u.id AS pk_urb , d_r.pk AS pk_region , d_adr.xmin AS xmin_address FROM ( ( ( (dem.address d_adr LEFT JOIN dem.street d_str ON ( (d_adr.id_street = d_str.id) ) ) LEFT JOIN dem.urb d_u ON ( (d_str.id_urb = d_u.id) ) ) LEFT JOIN dem.region d_r ON ( (d_u.fk_region = d_r.pk) ) ) LEFT JOIN dem.country d_c ON ( (d_c.code = d_r.country) ) );
This view denormalizes persons with their active name.
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
title | text | ||
firstnames | text | ||
preferred | text | ||
lastnames | text | ||
gender | text | ||
l10n_gender | text | ||
dob_only | timestamp with time zone | ||
dob | timestamp with time zone | ||
tob | time without time zone | ||
deceased | timestamp with time zone | ||
marital_status | text | ||
l10n_marital_status | text | ||
emergency_contact | text | ||
comment | text | ||
is_deleted | boolean | ||
pk_marital_status | integer | ||
pk_active_name | integer | ||
pk_emergency_contact | integer | ||
pk_primary_provider | integer | ||
xmin_identity | xid | ||
dob_is_estimated | boolean |
SELECT d_i.pk AS pk_identity , d_i.title , d_n.firstnames , d_n.preferred , d_n.lastnames , d_i.gender , _ (d_i.gender) AS l10n_gender , d_i.dob AS dob_only , (date_trunc ('day'::text , d_i.dob ) + (COALESCE (d_i.tob , (d_i.dob)::time without time zone ) )::interval ) AS dob , d_i.tob , d_i.deceased , COALESCE (d_ms.name ,'unknown'::text ) AS marital_status , _ (COALESCE (d_ms.name ,'unknown'::text ) ) AS l10n_marital_status , d_i.emergency_contact , d_i.comment , d_i.deleted AS is_deleted , d_i.fk_marital_status AS pk_marital_status , d_n.id AS pk_active_name , d_i.fk_emergency_contact AS pk_emergency_contact , d_i.fk_primary_provider AS pk_primary_provider , d_i.xmin AS xmin_identity , d_i.dob_is_estimated FROM ( (dem.identity d_i JOIN dem.names d_n ON ( ( (d_n.id_identity = d_i.pk) AND (d_n.active IS TRUE) ) ) ) LEFT JOIN dem.marital_status d_ms ON ( (d_i.fk_marital_status = d_ms.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
id | integer | ||
country_code | character(2) | ||
region_code | text | ||
region | text | ||
country | text | ||
postcode | text | ||
urb | text | ||
number | text | ||
street | text | ||
addendum | text | ||
lat_lon | point |
SELECT d_adr.id , d_r.country AS country_code , d_r.code AS region_code , d_r.name AS region , d_c.name AS country , COALESCE (d_str.postcode , d_u.postcode ) AS postcode , d_u.name AS urb , d_adr.number , d_str.name AS street , d_adr.addendum , COALESCE (d_adr.lat_lon , d_str.lat_lon , d_u.lat_lon ) AS lat_lon FROM dem.address d_adr , dem.region d_r , dem.country d_c , dem.urb d_u , dem.street d_str WHERE ( (d_r.country = d_c.code) AND (d_adr.id_street = d_str.id) AND (d_str.id_urb = d_u.id) AND (d_u.fk_region = d_r.pk) );
This view denormalizes "deleted" persons with their active name.
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
title | text | ||
firstnames | text | ||
preferred | text | ||
lastnames | text | ||
gender | text | ||
l10n_gender | text | ||
dob_only | timestamp with time zone | ||
dob | timestamp with time zone | ||
tob | time without time zone | ||
deceased | timestamp with time zone | ||
marital_status | text | ||
l10n_marital_status | text | ||
emergency_contact | text | ||
comment | text | ||
is_deleted | boolean | ||
pk_marital_status | integer | ||
pk_active_name | integer | ||
pk_emergency_contact | integer | ||
pk_primary_provider | integer | ||
xmin_identity | xid | ||
dob_is_estimated | boolean |
SELECT d_vp.pk_identity , d_vp.title , d_vp.firstnames , d_vp.preferred , d_vp.lastnames , d_vp.gender , d_vp.l10n_gender , d_vp.dob_only , d_vp.dob , d_vp.tob , d_vp.deceased , d_vp.marital_status , d_vp.l10n_marital_status , d_vp.emergency_contact , d_vp.comment , d_vp.is_deleted , d_vp.pk_marital_status , d_vp.pk_active_name , d_vp.pk_emergency_contact , d_vp.pk_primary_provider , d_vp.xmin_identity , d_vp.dob_is_estimated FROM dem.v_all_persons d_vp WHERE (d_vp.is_deleted IS TRUE);
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
pk_id | integer | ||
name | text | ||
value | text | ||
issuer | text | ||
comment | text | ||
pk_type | integer |
SELECT li2ei.id_identity AS pk_identity , li2ei.id AS pk_id , eit.name , li2ei.external_id AS value , eit.issuer , li2ei.comment , li2ei.fk_origin AS pk_type FROM dem.lnk_identity2ext_id li2ei , dem.enum_ext_id_types eit WHERE (li2ei.fk_origin = eit.pk);
F-Key | Name | Type | Description |
---|---|---|---|
pk_org_unit | integer | ||
pk_id | integer | ||
name | text | ||
value | text | ||
issuer | text | ||
comment | text | ||
pk_type | integer |
SELECT d_lou2ei.fk_org_unit AS pk_org_unit , d_lou2ei.pk AS pk_id , d_eit.name , d_lou2ei.external_id AS value , d_eit.issuer , d_lou2ei.comment , d_lou2ei.fk_type AS pk_type FROM (dem.lnk_org_unit2ext_id d_lou2ei JOIN dem.enum_ext_id_types d_eit ON ( (d_lou2ei.fk_type = d_eit.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
tag | text | ||
l10n_tag | text | ||
label | text | ||
l10n_label | text | ||
comment | text | ||
sort_weight | integer | ||
pk_gender_label | integer |
SELECT gl.tag , _ (gl.tag) AS l10n_tag , gl.label , _ (gl.label) AS l10n_label , gl.comment , gl.sort_weight , gl.pk AS pk_gender_label FROM dem.gender_label gl;
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
description | text | ||
l10n_description | text | ||
comment | text | ||
filename | text | ||
image_size | integer | ||
pk_identity_tag | integer | ||
pk_tag_image | integer | ||
xmin_identity_tag | xid |
SELECT dit.fk_identity AS pk_identity , rti.description , _ (rti.description) AS l10n_description , dit.comment , rti.filename , octet_length (COALESCE (rti.image ,'\x'::bytea ) ) AS image_size , dit.pk AS pk_identity_tag , rti.pk AS pk_tag_image , dit.xmin AS xmin_identity_tag FROM (dem.identity_tag dit LEFT JOIN ref.tag_image rti ON ( (dit.fk_tag = rti.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
type | text | ||
l10n_type | text | ||
category | text | ||
l10n_category | text | ||
is_user_type | boolean | ||
is_user_category | boolean | ||
pk_type | integer | ||
pk_category | integer |
SELECT it.description AS type , _ (it.description) AS l10n_type , ic.description AS category , _ (ic.description) AS l10n_category , it.is_user AS is_user_type , ic.is_user AS is_user_category , it.pk AS pk_type , it.fk_inbox_item_category AS pk_category FROM dem.inbox_item_type it , dem.inbox_item_category ic WHERE (it.fk_inbox_item_category = ic.pk);
Denormalized messages for the providers and/or patients. Using UNION makes sure we get the right level of uniqueness.
F-Key | Name | Type | Description |
---|---|---|---|
received_when | timestamp with time zone | ||
modified_by | text | ||
provider | text | ||
importance | integer | ||
category | text | ||
l10n_category | text | ||
type | text | ||
l10n_type | text | ||
comment | text | ||
pk_context | integer[] | ||
data | text | ||
pk_inbox_message | integer | ||
pk_staff | integer | ||
pk_category | integer | ||
pk_type | integer | ||
pk_patient | integer | ||
is_virtual | boolean | ||
due_date | timestamp with time zone | ||
expiry_date | timestamp with time zone | ||
is_overdue | boolean | ||
is_expired | boolean | ||
interval_due | interval | ||
xmin_message_inbox | integer |
( SELECT mi.modified_when AS received_when , COALESCE ( ( SELECT staff.short_alias FROM dem.staff WHERE (staff.db_user = mi.modified_by) ) , ( ('<'::text || (mi.modified_by)::text ) || '>'::text ) ) AS modified_by , ( SELECT staff.short_alias FROM dem.staff WHERE (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 , 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 , mi.expiry_date , CASE WHEN (mi.due_date IS NULL) THEN false WHEN (mi.due_date > now () ) THEN false WHEN (mi.expiry_date IS NULL) THEN true WHEN (mi.expiry_date < now () ) THEN false ELSE true END AS is_overdue , CASE WHEN (mi.expiry_date IS NULL) THEN false WHEN (mi.expiry_date > now () ) THEN false ELSE true END AS is_expired , CASE WHEN (mi.due_date IS NULL) THEN NULL::interval WHEN (mi.due_date > now () ) THEN ( (mi.due_date)::timestamp with time zone - now () ) ELSE (now () - (mi.due_date)::timestamp with time zone ) 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 v_unreviewed_docs_inbox.received_when , v_unreviewed_docs_inbox.modified_by , v_unreviewed_docs_inbox.provider , v_unreviewed_docs_inbox.importance , v_unreviewed_docs_inbox.category , v_unreviewed_docs_inbox.l10n_category , v_unreviewed_docs_inbox.type , v_unreviewed_docs_inbox.l10n_type , v_unreviewed_docs_inbox.comment , v_unreviewed_docs_inbox.pk_context , v_unreviewed_docs_inbox.data , v_unreviewed_docs_inbox.pk_inbox_message , v_unreviewed_docs_inbox.pk_staff , v_unreviewed_docs_inbox.pk_category , v_unreviewed_docs_inbox.pk_type , v_unreviewed_docs_inbox.pk_patient , v_unreviewed_docs_inbox.is_virtual , v_unreviewed_docs_inbox.due_date , v_unreviewed_docs_inbox.expiry_date , v_unreviewed_docs_inbox.is_overdue , v_unreviewed_docs_inbox.is_expired , v_unreviewed_docs_inbox.interval_due , v_unreviewed_docs_inbox.xmin_message_inbox FROM blobs.v_unreviewed_docs_inbox ) UNION SELECT now () AS received_when , vtr.modified_by , ( SELECT staff.short_alias FROM dem.staff WHERE (staff.pk = vtr.pk_intended_reviewer) ) AS provider , 0 AS importance , 'clinical'::text AS category , _ ('clinical'::text) AS l10n_category , 'review results'::text AS type , _ ('review results'::text) AS l10n_type , ( SELECT ( ( ( ( (_ ('unreviewed (normal) results for patient'::text ) || ' ['::text ) || dn.lastnames ) || ', '::text ) || dn.firstnames ) || ']'::text ) 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 v_inbox_item_type.pk_category FROM dem.v_inbox_item_type WHERE (v_inbox_item_type.type = 'review results'::text) ) AS pk_category , ( SELECT v_inbox_item_type.pk_type FROM dem.v_inbox_item_type WHERE (v_inbox_item_type.type = 'review results'::text) ) AS pk_type , vtr.pk_patient , true AS is_virtual , ( now () - '01:00:00'::interval ) AS due_date , NULL::timestamp with time zone AS expiry_date , true AS is_overdue , false AS is_expired , '01:00:00'::interval AS interval_due , NULL::integer AS xmin_message_inbox FROM clin.v_test_results vtr WHERE ( (vtr.reviewed IS FALSE) AND ( (vtr.is_technically_abnormal IS FALSE) OR ( (vtr.is_technically_abnormal IS NULL) AND (vtr.abnormality_indicator IS NULL) ) ) ) UNION SELECT now ( ) AS received_when , vtr.modified_by , ( SELECT staff.short_alias FROM dem.staff WHERE (staff.pk = vtr.pk_intended_reviewer) ) AS provider , 1 AS importance , 'clinical'::text AS category , _ ( 'clinical'::text) AS l10n_category , 'review results'::text AS type , _ ( 'review results'::text) AS l10n_type , ( SELECT ( ( ( ( (_ ('unreviewed (abnormal) results for patient'::text ) || ' ['::text ) || dn.lastnames ) || ', '::text ) || dn.firstnames ) || ']'::text ) 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 v_inbox_item_type.pk_category FROM dem.v_inbox_item_type WHERE (v_inbox_item_type.type = 'review results'::text) ) AS pk_category , ( SELECT v_inbox_item_type.pk_type FROM dem.v_inbox_item_type WHERE (v_inbox_item_type.type = 'review results'::text) ) AS pk_type , vtr.pk_patient , true AS is_virtual , ( now ( ) - '01:00:00'::interval ) AS due_date , NULL::timestamp with time zone AS expiry_date , true AS is_overdue , false AS is_expired , '01:00:00'::interval AS interval_due , NULL::integer AS xmin_message_inbox FROM clin.v_test_results vtr WHERE ( ( vtr.reviewed IS FALSE) AND ( (vtr.is_technically_abnormal IS TRUE) OR ( (vtr.is_technically_abnormal IS NULL) AND (vtr.abnormality_indicator IS NOT NULL) ) ) ) ;
denormalizes org units to communication channels
F-Key | Name | Type | Description |
---|---|---|---|
pk_org_unit | integer | ||
comm_type | text | ||
l10n_comm_type | text | ||
url | text | ||
comment | text | ||
is_confidential | boolean | ||
pk_lnk_org_unit2comm | integer | ||
pk_type | integer | ||
xmin_lnk_org_unit2comm | xid |
SELECT d_lo2c.fk_org_unit AS pk_org_unit , ect.description AS comm_type , _ (ect.description) AS l10n_comm_type , d_lo2c.url , d_lo2c.comment , d_lo2c.is_confidential , d_lo2c.pk AS pk_lnk_org_unit2comm , d_lo2c.fk_type AS pk_type , d_lo2c.xmin AS xmin_lnk_org_unit2comm FROM (dem.lnk_org_unit2comm d_lo2c JOIN dem.enum_comm_types ect ON ( (d_lo2c.fk_type = ect.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_org_unit | integer | ||
organization | text | ||
unit | text | ||
organization_category | text | ||
l10n_organization_category | text | ||
unit_category | text | ||
l10n_unit_category | text | ||
is_praxis_branch | boolean | ||
pk_org | integer | ||
pk_category_org | integer | ||
pk_category_unit | integer | ||
pk_address | integer | ||
xmin_org_unit | xid |
SELECT d_ou.pk AS pk_org_unit , d_o.description AS organization , d_ou.description AS unit , d_oc_o.description AS organization_category , _ (d_oc_o.description) AS l10n_organization_category , d_oc_u.description AS unit_category , _ (d_oc_u.description) AS l10n_unit_category , (EXISTS ( SELECT 1 FROM dem.praxis_branch d_pb WHERE (d_pb.fk_org_unit = d_ou.pk) ) ) AS is_praxis_branch , d_o.pk AS pk_org , d_o.fk_category AS pk_category_org , d_ou.fk_category AS pk_category_unit , d_ou.fk_address AS pk_address , d_ou.xmin AS xmin_org_unit FROM ( ( (dem.org_unit d_ou JOIN dem.org d_o ON ( (d_o.pk = d_ou.fk_org) ) ) LEFT JOIN dem.org_category d_oc_u ON ( (d_ou.fk_category = d_oc_u.pk) ) ) LEFT JOIN dem.org_category d_oc_o ON ( (d_o.fk_category = d_oc_o.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_org_unit | integer | ||
organization | text | ||
unit | text | ||
organization_category | text | ||
l10n_organization_category | text | ||
unit_category | text | ||
l10n_unit_category | text | ||
pk_org | integer | ||
pk_category_org | integer | ||
pk_category_unit | integer | ||
pk_address | integer | ||
xmin_org_unit | xid |
SELECT d_ou.pk AS pk_org_unit , d_o.description AS organization , d_ou.description AS unit , d_oc_o.description AS organization_category , _ (d_oc_o.description) AS l10n_organization_category , d_oc_u.description AS unit_category , _ (d_oc_u.description) AS l10n_unit_category , d_o.pk AS pk_org , d_o.fk_category AS pk_category_org , d_ou.fk_category AS pk_category_unit , d_ou.fk_address AS pk_address , d_ou.xmin AS xmin_org_unit FROM ( ( (dem.org_unit d_ou JOIN dem.org d_o ON ( (d_o.pk = d_ou.fk_org) ) ) LEFT JOIN dem.org_category d_oc_u ON ( (d_ou.fk_category = d_oc_u.pk) ) ) LEFT JOIN dem.org_category d_oc_o ON ( (d_o.fk_category = d_oc_o.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_org | integer | ||
organization | text | ||
category | text | ||
l10n_category | text | ||
is_praxis | boolean | ||
pk_category_org | integer | ||
xmin_org | xid |
SELECT d_o.pk AS pk_org , d_o.description AS organization , d_oc.description AS category , _ (d_oc.description) AS l10n_category , (EXISTS ( SELECT 1 FROM dem.praxis_branch d_pb WHERE (d_pb.fk_org_unit IN ( SELECT d_ou.pk FROM dem.org_unit d_ou WHERE (d_ou.fk_org = d_o.pk) ) ) ) ) AS is_praxis , d_o.fk_category AS pk_category_org , d_o.xmin AS xmin_org FROM (dem.org d_o LEFT JOIN dem.org_category d_oc ON ( (d_o.fk_category = d_oc.pk) ) );
denormalized addresses per person
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
pk_address | integer | ||
address_type | text | ||
l10n_address_type | text | ||
title | text | ||
firstnames | text | ||
lastnames | text | ||
dob | timestamp with time zone | ||
gender | text | ||
l10n_gender | text | ||
preferred | text | ||
street | text | ||
postcode | text | ||
notes_street | text | ||
number | text | ||
subunit | text | ||
notes_subunit | text | ||
lat_lon_address | point | ||
postcode_street | text | ||
lat_lon_street | point | ||
suburb | text | ||
urb | text | ||
postcode_urb | text | ||
lat_lon_urb | point | ||
code_region | text | ||
region | text | ||
l10n_region | text | ||
code_country | character(2) | ||
country | text | ||
l10n_country | text | ||
country_deprecated | date | ||
pk_street | integer | ||
pk_urb | integer | ||
pk_region | integer | ||
pk_lnk_person_org_address | integer | ||
pk_address_type | integer | ||
xmin_lnk_person_org_address | xid |
SELECT d_vp.pk_identity , d_va.pk_address , d_at.name AS address_type , _ (d_at.name) AS l10n_address_type , d_vp.title , d_vp.firstnames , d_vp.lastnames , d_vp.dob , d_vp.gender , d_vp.l10n_gender , d_vp.preferred , d_va.street , d_va.postcode , d_va.notes_street , d_va.number , d_va.subunit , d_va.notes_subunit , d_va.lat_lon_address , d_va.postcode_street , d_va.lat_lon_street , d_va.suburb , d_va.urb , d_va.postcode_urb , d_va.lat_lon_urb , d_va.code_region , d_va.region , d_va.l10n_region , d_va.code_country , d_va.country , d_va.l10n_country , d_va.country_deprecated , d_va.pk_street , d_va.pk_urb , d_va.pk_region , d_lpoa.id AS pk_lnk_person_org_address , d_lpoa.id_type AS pk_address_type , d_lpoa.xmin AS xmin_lnk_person_org_address FROM dem.v_address d_va , dem.lnk_person_org_address d_lpoa , dem.v_all_persons d_vp , dem.address_type d_at WHERE ( (d_lpoa.id_identity = d_vp.pk_identity) AND (d_lpoa.id_address = d_va.pk_address) AND (d_lpoa.id_type = d_at.id) );
denormalizes persons to communications channels
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
comm_type | text | ||
l10n_comm_type | text | ||
url | text | ||
is_confidential | boolean | ||
comment | text | ||
pk_lnk_identity2comm | integer | ||
pk_address | integer | ||
pk_type | integer | ||
xmin_lnk_identity2comm | xid |
SELECT li2c.fk_identity AS pk_identity , ect.description AS comm_type , _ (ect.description) AS l10n_comm_type , li2c.url , li2c.is_confidential , li2c.comment , li2c.pk AS pk_lnk_identity2comm , li2c.fk_address AS pk_address , li2c.fk_type AS pk_type , li2c.xmin AS xmin_lnk_identity2comm FROM dem.lnk_identity2comm li2c , dem.enum_comm_types ect WHERE (li2c.fk_type = ect.pk);
denormalizes the jobs a person has
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
occupation | text | ||
l10n_occupation | text | ||
activities | text | ||
modified_when | timestamp with time zone | ||
pk_occupation | integer | ||
pk_lnk_job2person | integer | ||
xmin_lnk_job2person | xid |
SELECT lj2p.fk_identity AS pk_identity , o.name AS occupation , _ (o.name) AS l10n_occupation , lj2p.activities , lj2p.modified_when , lj2p.fk_occupation AS pk_occupation , lj2p.pk AS pk_lnk_job2person , lj2p.xmin AS xmin_lnk_job2person FROM (dem.lnk_job2person lj2p JOIN dem.occupation o ON ( (lj2p.fk_occupation = o.id) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
active_name | boolean | ||
title | text | ||
firstnames | text | ||
lastnames | text | ||
preferred | text | ||
comment | text | ||
gender | text | ||
dob | timestamp with time zone | ||
tob | time without time zone | ||
dod | timestamp with time zone | ||
identity_deleted | boolean | ||
deceased | boolean | ||
pk_name | integer | ||
xmin_name | xid |
SELECT dn.id_identity AS pk_identity , dn.active AS active_name , di.title , dn.firstnames , dn.lastnames , dn.preferred , dn.comment , di.gender , di.dob , di.tob , di.deceased AS dod , di.deleted AS identity_deleted , (di.deceased IS NOT NULL) AS deceased , dn.id AS pk_name , dn.xmin AS xmin_name FROM dem.names dn , dem.identity di WHERE (di.pk = dn.id_identity);
This view denormalizes persons with their active name.
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
title | text | ||
firstnames | text | ||
preferred | text | ||
lastnames | text | ||
gender | text | ||
l10n_gender | text | ||
dob_only | timestamp with time zone | ||
dob | timestamp with time zone | ||
tob | time without time zone | ||
deceased | timestamp with time zone | ||
marital_status | text | ||
l10n_marital_status | text | ||
emergency_contact | text | ||
comment | text | ||
is_deleted | boolean | ||
pk_marital_status | integer | ||
pk_active_name | integer | ||
pk_emergency_contact | integer | ||
pk_primary_provider | integer | ||
xmin_identity | xid | ||
dob_is_estimated | boolean |
SELECT i.pk AS pk_identity , i.title , n.firstnames , n.preferred , n.lastnames , i.gender , _ (i.gender) AS l10n_gender , i.dob AS dob_only , (date_trunc ('day'::text , i.dob ) + (COALESCE (i.tob , (i.dob)::time without time zone ) )::interval ) AS dob , i.tob , i.deceased , CASE WHEN (i.fk_marital_status IS NULL) THEN 'unknown'::text ELSE ( SELECT ms.name FROM dem.marital_status ms , dem.identity i1 WHERE ( (ms.pk = i.fk_marital_status) AND (i1.pk = i.pk) ) ) END AS marital_status , CASE WHEN (i.fk_marital_status IS NULL) THEN _ ('unknown'::text) ELSE ( SELECT _ (ms1.name) AS _ FROM dem.marital_status ms1 , dem.identity i1 WHERE ( (ms1.pk = i.fk_marital_status) AND (i1.pk = i.pk) ) ) END AS l10n_marital_status , i.emergency_contact , i.comment , i.deleted AS is_deleted , i.fk_marital_status AS pk_marital_status , n.id AS pk_active_name , i.fk_emergency_contact AS pk_emergency_contact , i.fk_primary_provider AS pk_primary_provider , i.xmin AS xmin_identity , i.dob_is_estimated FROM dem.identity i , dem.names n WHERE ( (n.active IS TRUE) AND (n.id_identity = i.pk) );
Denormalized praxis branches with their praxis.
F-Key | Name | Type | Description |
---|---|---|---|
pk_praxis_branch | integer | ||
branch | text | ||
pk_org_unit | integer | ||
pk_category_unit | integer | ||
pk_address | integer | ||
pk_org | integer | ||
xmin_praxis_branch | xid | ||
xmin_org_unit | xid | ||
praxis | text | ||
pk_category_org | integer | ||
organization_category | text | ||
l10n_organization_category | text | ||
unit_category | text | ||
l10n_unit_category | text |
SELECT branches_w_orgs.pk_praxis_branch , branches_w_orgs.branch , branches_w_orgs.pk_org_unit , branches_w_orgs.pk_category_unit , branches_w_orgs.pk_address , branches_w_orgs.pk_org , branches_w_orgs.xmin_praxis_branch , branches_w_orgs.xmin_org_unit , branches_w_orgs.praxis , branches_w_orgs.pk_category_org , d_ocat.description AS organization_category , _ (d_ocat.description) AS l10n_organization_category , d_ucat.description AS unit_category , _ (d_ucat.description) AS l10n_unit_category FROM ( ( ( SELECT branches_w_units.pk_praxis_branch , branches_w_units.branch , branches_w_units.pk_org_unit , branches_w_units.pk_category_unit , branches_w_units.pk_address , branches_w_units.pk_org , branches_w_units.xmin_praxis_branch , branches_w_units.xmin_org_unit , d_o.description AS praxis , d_o.fk_category AS pk_category_org FROM ( ( SELECT d_pb.pk AS pk_praxis_branch , d_ou.description AS branch , d_pb.fk_org_unit AS pk_org_unit , d_ou.fk_category AS pk_category_unit , d_ou.fk_address AS pk_address , d_ou.fk_org AS pk_org , d_pb.xmin AS xmin_praxis_branch , d_ou.xmin AS xmin_org_unit FROM (dem.praxis_branch d_pb JOIN dem.org_unit d_ou ON ( (d_pb.fk_org_unit = d_ou.pk) ) ) ) branches_w_units JOIN dem.org d_o ON ( (d_o.pk = branches_w_units.pk_org) ) ) ) branches_w_orgs LEFT JOIN dem.org_category d_ucat ON ( (branches_w_orgs.pk_category_unit = d_ucat.pk) ) ) LEFT JOIN dem.org_category d_ocat ON ( (branches_w_orgs.pk_category_org = d_ocat.pk) ) );
denormalizes region information
F-Key | Name | Type | Description |
---|---|---|---|
pk_region | integer | ||
code_region | text | ||
region | text | ||
l10n_region | text | ||
code_country | character(2) | ||
country | text | ||
l10n_country | text | ||
country_deprecated | date | ||
xmin_region | xid |
SELECT d_r.pk AS pk_region , d_r.code AS code_region , d_r.name AS region , _ (d_r.name) AS l10n_region , d_r.country AS code_country , c.name AS country , _ (c.name) AS l10n_country , c.deprecated AS country_deprecated , d_r.xmin AS xmin_region FROM (dem.region d_r LEFT JOIN dem.country c ON ( (d_r.country = c.code) ) );
Denormalized staff data.
F-Key | Name | Type | Description |
---|---|---|---|
pk_identity | integer | ||
pk_staff | integer | ||
title | text | ||
firstnames | text | ||
lastnames | text | ||
short_alias | text | ||
role | text | ||
dob | timestamp with time zone | ||
gender | text | ||
db_user | name | ||
comment | text | ||
is_active | boolean | ||
person_is_deleted | boolean | ||
can_login | boolean | ||
xmin_staff | xid |
SELECT d_vp.pk_identity , d_s.pk AS pk_staff , d_vp.title , d_vp.firstnames , d_vp.lastnames , d_s.short_alias , CASE WHEN ( SELECT (EXISTS ( SELECT 1 FROM pg_group WHERE ( (pg_group.groname = 'gm-doctors'::name) AND ( ( SELECT pg_user.usesysid FROM pg_user WHERE (pg_user.usename = d_s.db_user) ) = ANY (pg_group.grolist) ) ) ) ) AS "exists" ) THEN 'full clinical access'::text WHEN ( SELECT (EXISTS ( SELECT 1 FROM pg_group WHERE ( (pg_group.groname = 'gm-nurses'::name) AND ( ( SELECT pg_user.usesysid FROM pg_user WHERE (pg_user.usename = d_s.db_user) ) = ANY (pg_group.grolist) ) ) ) ) AS "exists" ) THEN 'limited clinical access'::text WHEN ( SELECT (EXISTS ( SELECT 1 FROM pg_group WHERE ( (pg_group.groname = 'gm-staff'::name) AND ( ( SELECT pg_user.usesysid FROM pg_user WHERE (pg_user.usename = d_s.db_user) ) = ANY (pg_group.grolist) ) ) ) ) AS "exists" ) THEN 'non-clinical access'::text WHEN ( SELECT (EXISTS ( SELECT 1 FROM pg_group WHERE ( (pg_group.groname = 'gm-public'::name) AND ( ( SELECT pg_user.usesysid FROM pg_user WHERE (pg_user.usename = d_s.db_user) ) = ANY (pg_group.grolist) ) ) ) ) AS "exists" ) THEN 'public access'::text ELSE NULL::text END AS role , d_vp.dob , d_vp.gender , d_s.db_user , d_s.comment , d_s.is_active , d_vp.is_deleted AS person_is_deleted , ( SELECT ( ( SELECT (EXISTS ( SELECT 1 FROM pg_group WHERE ( ( ( SELECT pg_user.usesysid FROM pg_user WHERE (pg_user.usename = d_s.db_user) ) = ANY (pg_group.grolist) ) AND (pg_group.groname = current_database () ) ) ) ) AS "exists" ) AND ( SELECT (EXISTS ( SELECT 1 FROM pg_group WHERE ( ( ( SELECT pg_user.usesysid FROM pg_user WHERE (pg_user.usename = d_s.db_user) ) = ANY (pg_group.grolist) ) AND (pg_group.groname = 'gm-logins'::name) ) ) ) AS "exists" ) ) ) AS can_login , d_s.xmin AS xmin_staff FROM (dem.staff d_s JOIN dem.v_all_persons d_vp ON ( (d_s.fk_identity = d_vp.pk_identity) ) );
denormalizes street data
F-Key | Name | Type | Description |
---|---|---|---|
pk_street | integer | ||
street | text | ||
postcode | text | ||
postcode_street | text | ||
lat_lon_street | point | ||
suburb | text | ||
urb | text | ||
postcode_urb | text | ||
lat_lon_urb | point | ||
code_region | text | ||
region | text | ||
l10n_region | text | ||
code_country | character(2) | ||
country | text | ||
l10n_country | text | ||
country_deprecated | date | ||
pk_urb | integer | ||
pk_region | integer | ||
xmin_street | xid |
SELECT d_st.id AS pk_street , d_st.name AS street , COALESCE (d_st.postcode , d_vu.postcode_urb ) AS postcode , d_st.postcode AS postcode_street , d_st.lat_lon AS lat_lon_street , d_st.suburb , d_vu.urb , d_vu.postcode_urb , d_vu.lat_lon_urb , d_vu.code_region , d_vu.region , d_vu.l10n_region , d_vu.code_country , d_vu.country , d_vu.l10n_country , d_vu.country_deprecated , d_st.id_urb AS pk_urb , d_vu.pk_region , d_st.xmin AS xmin_street FROM (dem.street d_st LEFT JOIN dem.v_urb d_vu ON ( (d_st.id_urb = d_vu.pk_urb) ) );
convenience view that selects urbs which: - have a zip code - are not referenced in table "street" with that zip code
F-Key | Name | Type | Description |
---|---|---|---|
postcode | text | ||
name | text | ||
region | text | ||
code_region | text | ||
country | text | ||
l10n_country | text | ||
code_country | character(2) |
SELECT d_u.postcode , d_u.name , d_r.name AS region , d_r.code AS code_region , d_c.name AS country , _ (d_c.name) AS l10n_country , d_r.country AS code_country FROM dem.urb d_u , dem.region d_r , dem.country d_c WHERE ( (d_u.postcode IS NOT NULL) AND (NOT (EXISTS ( SELECT 1 FROM dem.v_zip2street d_vz2str WHERE ( (d_vz2str.postcode = d_u.postcode) AND (d_vz2str.urb = d_u.name) ) ) ) ) AND (d_u.fk_region = d_r.pk) AND (d_r.country = d_c.code) );
denormalizes urb data
F-Key | Name | Type | Description |
---|---|---|---|
pk_urb | integer | ||
urb | text | ||
postcode_urb | text | ||
lat_lon_urb | point | ||
code_region | text | ||
region | text | ||
l10n_region | text | ||
code_country | character(2) | ||
country | text | ||
l10n_country | text | ||
country_deprecated | date | ||
pk_region | integer | ||
xmin_urb | xid |
SELECT d_u.id AS pk_urb , d_u.name AS urb , d_u.postcode AS postcode_urb , d_u.lat_lon AS lat_lon_urb , d_vr.code_region , d_vr.region , d_vr.l10n_region , d_vr.code_country , d_vr.country , d_vr.l10n_country , d_vr.country_deprecated , d_u.fk_region AS pk_region , d_u.xmin AS xmin_urb FROM (dem.urb d_u LEFT JOIN dem.v_region d_vr ON ( (d_vr.pk_region = d_u.fk_region) ) );
aggregates nearly all known data per zip code
F-Key | Name | Type | Description |
---|---|---|---|
zip | text | ||
street | text | ||
suburb | text | ||
urb | text | ||
region | text | ||
code_region | text | ||
country | text | ||
l10n_country | text | ||
code_country | character(2) |
SELECT d_vz2s.postcode AS zip , d_vz2s.street , d_vz2s.suburb , d_vz2s.urb , d_vz2s.region , d_vz2s.code_region , d_vz2s.country , d_vz2s.l10n_country , d_vz2s.code_country FROM dem.v_zip2street d_vz2s UNION SELECT d_vuzu.postcode AS zip , NULL::text AS street , NULL::text AS suburb , d_vuzu.name AS urb , d_vuzu.region , d_vuzu.code_region , d_vuzu.country , d_vuzu.l10n_country , d_vuzu.code_country FROM dem.v_uniq_zipped_urbs d_vuzu;
list known data for streets that have a zip code
F-Key | Name | Type | Description |
---|---|---|---|
postcode | text | ||
street | text | ||
suburb | text | ||
region | text | ||
code_region | text | ||
urb | text | ||
country | text | ||
l10n_country | text | ||
code_country | character(2) |
SELECT COALESCE (d_str.postcode , d_u.postcode ) AS postcode , d_str.name AS street , d_str.suburb , d_r.name AS region , d_r.code AS code_region , d_u.name AS urb , d_c.name AS country , _ (d_c.name) AS l10n_country , d_r.country AS code_country FROM dem.street d_str , dem.urb d_u , dem.region d_r , dem.country d_c WHERE ( (d_str.postcode IS NOT NULL) AND (d_str.id_urb = d_u.id) AND (d_u.fk_region = d_r.pk) AND (d_r.country = d_c.code) );
list known data for urbs that have a zip code
F-Key | Name | Type | Description |
---|---|---|---|
postcode | text | ||
urb | text | ||
region | text | ||
code_region | text | ||
country | text | ||
code_country | character(2) |
SELECT d_u.postcode , d_u.name AS urb , d_r.name AS region , d_r.code AS code_region , _ (d_c.name) AS country , d_r.country AS code_country FROM dem.urb d_u , dem.region d_r , dem.country d_c WHERE ( (d_u.postcode IS NOT NULL) AND (d_u.fk_region = d_r.pk) AND (d_r.country = d_c.code) );
Add an external ID type if it does not exist yet. This implementation is prone to concurrency issues.
declare _name alias for $1; _issuer alias for $2; _pk int; begin select pk into _pk from dem.enum_ext_id_types where name = _name and issuer = _issuer; if FOUND then return _pk; end if; insert into dem.enum_ext_id_types(name, issuer) values (_name, _issuer); select currval(pg_get_serial_sequence('dem.enum_ext_id_types', 'pk')) into _pk; return _pk; end;
DECLARE _id_identity alias for $1; _first alias for $2; _last alias for $3; _active alias for $4; _id integer; BEGIN -- deactivate all the existing names if this name is to become active if _active then update dem.names set active = false where id_identity = _id_identity; end if; -- name already there for this identity ? select into _id id from dem.names where id_identity = _id_identity and firstnames = _first and lastnames = _last; if FOUND then update dem.names set active = _active where id = _id; return _id; end if; -- no, insert new name insert into dem.names (id_identity, firstnames, lastnames, active) values (_id_identity, _first, _last, _active); if FOUND then return currval('dem.names_id_seq'); end if; return NULL; END;
This function checks whether a given address exists in the database and returns the primary key if found. It takes the following parameters: country code, region code, urb (location), postcode, street, number, subunit (can be NULL)
DECLARE _code_country alias for $1; _code_region alias for $2; _urb alias for $3; _postcode alias for $4; _street alias for $5; _number alias for $6; _subunit alias for $7; __subunit text; _pk_address integer; msg text; BEGIN if (_code_country || _code_region || _urb || _postcode || _street || _number) is NULL then msg := '[dem.address_exists]: insufficient or invalid address definition: ' || 'country code <' || coalesce(_code_country, 'NULL') || '>, ' || 'region code <' || coalesce(_code_region, 'NULL') || '>, ' || 'urb <' || coalesce(_urb, 'NULL') || '>, ' || 'zip <' || coalesce(_postcode, 'NULL') || '>, ' || 'street <' || coalesce(_street, 'NULL') || '>, ' || 'number <' || coalesce(_number, 'NULL') || '>' ; raise exception '%', msg; end if; __subunit := nullif(trim(_subunit), ''); if __subunit is null then select pk_address into _pk_address from dem.v_address where code_country = trim(_code_country) and code_region = trim(_code_region) and urb = trim(_urb) and postcode = trim(_postcode) and street = trim(_street) and number = trim(_number) and subunit is null; else select pk_address into _pk_address from dem.v_address where code_country = trim(_code_country) and code_region = trim(_code_region) and urb = trim(_urb) and postcode = trim(_postcode) and street = trim(_street) and number = trim(_number) and subunit = __subunit; end if; return _pk_address; END;
This function creates an address. It first checks whether the address already exists. It takes the following parameters: number, street, postcode, urb (location), region code, country code, subunit (can be NULL) If the country or the region do not exist in the database, the function fails.
DECLARE _number ALIAS FOR $1; _street ALIAS FOR $2; _postcode ALIAS FOR $3; _urb ALIAS FOR $4; _region_code ALIAS FOR $5; _country_code ALIAS FOR $6; _subunit alias for $7; _street_id integer; _pk_address integer; __subunit text; msg text; BEGIN select into _pk_address dem.address_exists ( _country_code, _region_code, _urb, _postcode, _street, _number, _subunit ); if _pk_address is not null then return _pk_address; end if; -- this either creates dem.street and possible dem.urb rows or -- or else it fails (because region and/or country do not exist) select into _street_id dem.create_street(_street, _postcode, _urb, _region_code, _country_code); -- create address __subunit := nullif(trim(_subunit), ''); insert into dem.address ( number, id_street, subunit ) values ( _number, _street_id, __subunit ) returning id into _pk_address; return _pk_address; END;
DECLARE _description alias for $1; _pk_type integer; BEGIN select pk into _pk_type from dem.enum_comm_types where _(description) = _description; if FOUND then return _pk_type; end if; select pk into _pk_type from dem.enum_comm_types where description = _description; if FOUND then return _pk_type; end if; insert into dem.enum_comm_types(description) values (_description); select currval(pg_get_serial_sequence('dem.enum_comm_types', 'pk')) into _pk_type; return _pk_type; END;
DECLARE _job alias for $1; _id integer; BEGIN select into _id id from dem.occupation where name = _job; if FOUND then return _id; end if; insert into dem.occupation (name) values (_job); return currval('dem.occupation_id_seq'); END;
This function takes a parameters the name of the street, the postal code, the name of the urb, the postcode of the urb, the code of the state and the code of the country. If the country or the state does not exists in the tables, the function fails. At first, both the urb and street are tried to be retrieved according to the supplied information. If the fields do not match exactly an existing row, a new urb is created or a new street is created and returned.
DECLARE _street ALIAS FOR $1; _postcode ALIAS FOR $2; _urb ALIAS FOR $3; _state_code ALIAS FOR $4; _country_code ALIAS FOR $5; _urb_id integer; _street_id integer; msg text; BEGIN -- create/get urb SELECT INTO _urb_id dem.create_urb(_urb, _postcode, _state_code, _country_code); -- create/get and return street SELECT INTO _street_id s.id from dem.street s WHERE s.name ILIKE _street AND s.id_urb = _urb_id AND postcode ILIKE _postcode; IF FOUND THEN RETURN _street_id; END IF; INSERT INTO dem.street (name, postcode, id_urb) VALUES (_street, _postcode, _urb_id); RETURN currval('dem.street_id_seq'); END;
This function takes a parameters the name of the urb,\n the postcode of the urb, the name of the region and the\n name of the country.\n If the country or the region does not exists in the tables,\n the function fails.\n At first, the urb is tried to be retrieved according to the\n supplied information. If the fields do not match exactly an\n existing row, a new urb is created and returned.
DECLARE _urb ALIAS FOR $1; _urb_postcode ALIAS FOR $2; _region_code ALIAS FOR $3; _country_code ALIAS FOR $4; _region_pk integer; _urb_id integer; msg text; BEGIN -- get region SELECT INTO _region_pk d_r.pk from dem.region d_r WHERE d_r.code = _region_code and d_r.country = _country_code; IF NOT FOUND THEN msg := 'combination of region + country not registered [' || 'country:' || coalesce(_country_code, 'NULL') || ', region:' || coalesce(_region_code, 'NULL') || ', urb:' || coalesce(_urb, 'NULL') || ', urb_zip:' || coalesce(_urb_postcode, 'NULL') || ']'; RAISE EXCEPTION '=> %', msg; END IF; -- get/create and return urb SELECT INTO _urb_id u.id from dem.urb u WHERE u.name ILIKE _urb AND u.fk_region = _region_pk; IF FOUND THEN RETURN _urb_id; END IF; INSERT INTO dem.urb (name, postcode, fk_region) VALUES (_urb, _urb_postcode, _region_pk); RETURN currval('dem.urb_id_seq'); END;
date_trunc() is not immutable because it depends on the timezone setting, hence need to use this in index creation, but also need to use it in queries which want to use that index, so make it generally available as a function
select date_trunc($1, $2 at time zone 'UTC');
select ($1 - (extract(year from $1) * '1 year'::interval)) - (now() - (extract(year from now()) * '1 year'::interval)) between (-1 * $2) and $3
BEGIN if NEW.active = false then raise exception 'Cannot delete/disable active name. Another name must be activated first.'; return OLD; end if; return NEW; END;
DECLARE BEGIN DELETE from dem.names WHERE id_identity=OLD.id; RETURN OLD; END;
DECLARE -- tmp text; BEGIN -- tmp := 'identity:' || NEW.id_identity || ',id:' || NEW.id || ',name:' || NEW.firstnames || ' ' || NEW.lastnames; -- raise notice 'uniq_active_name: [%]', tmp; if NEW.active = true then update dem.names set active = false where id_identity = NEW.id_identity and active = true; end if; return NEW; END;
declare _region_code text; _region_name text; _country_row record; begin _region_code := '??'; _region_name := 'state/territory/province/region not available'; -- add default region to countries needing one for _country_row in select distinct code from dem.country where code not in ( select country from dem.region where code = _region_code ) loop raise notice 'adding default region for [%]', _country_row.code; execute 'insert into dem.region (code, country, name) values (' || quote_literal(_region_code) || ', ' || quote_literal(_country_row.code) || ', ' || quote_literal(_region_name) || ');'; end loop; return true; end;
Fully remove a person from the system - except everything is still in the audit tables ;-)
DECLARE _pk_identity alias for $1; BEGIN -- does person exist ? perform 1 from dem.identity where pk = _pk_identity; if not FOUND then raise notice 'dem.remove_person(): dem.identity.pk=(%) does not exist, not removing', _pk_identity; return false; end if; -- we cannot just get the child tables of clin.clin_root_item and -- delete from them since they are inter-dependent and may require -- a particular order of deletion, so let us do that explicitely: DELETE FROM clin.clin_hx_family WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ); DELETE FROM clin.vaccination WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ); DELETE FROM clin.allergy WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ); DELETE FROM clin.allergy_state WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ); DELETE FROM clin.clin_diag WHERE fk_narrative IN ( SELECT pk FROM clin.clin_narrative WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ) ); DELETE FROM clin.test_result WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ); DELETE FROM clin.lab_request WHERE fk_encounter in ( select pk from clin.encounter where fk_patient = _pk_identity ); DELETE FROM clin.substance_intake WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ); DELETE FROM clin.procedure WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ); DELETE FROM clin.clin_narrative WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ); DELETE FROM blobs.doc_med WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ); -- now that we have deleted all the clinical data let us -- delete the EMR structural items as well: DELETE FROM clin.episode WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ); DELETE FROM clin.health_issue WHERE fk_encounter IN ( select pk from clin.encounter where fk_patient = _pk_identity ); DELETE FROM clin.encounter WHERE fk_patient = _pk_identity; -- delete demographics details: DELETE FROM dem.identity_tag where fk_identity = _pk_identity; DELETE FROM dem.names WHERE id_identity = _pk_identity; -- eventually delete the identity itself which does -- not go down without some twisting of arms: ALTER TABLE dem.identity disable rule r_del_identity; DELETE FROM dem.identity WHERE pk = _pk_identity; ALTER TABLE dem.identity enable rule r_del_identity; return true; END;
Setting the nickname only makes sense for the currently active name. However, we also want to keep track of previous nicknames. Hence we would set the nickname right in the active name if it is NULL. It it contains a previous nickname (eg IS NOT NULL) we will inactivate the currently active name and copy it into a new active name but with the nickname set to the new one. Unsetting works the same (IOW *setting* to NULL).
DECLARE _id_identity alias for $1; _nick alias for $2; _names_row record; msg text; BEGIN -- 0.1: Just always set the nickname inside the active name -- post 0.1: openEHR-like (name: pk, fk_identity, name, fk_type, comment, is_legal, is_active ...) -- does name exist ? select into _names_row * from dem.names where id_identity = _id_identity and active = true; if not found then msg := 'Cannot set nickname [' || _nick || ']. No active <names> row with id_identity [' || _id_identity || '] found.'; raise exception '%', msg; end if; update dem.names set preferred = _nick where id = _names_row.id; return _names_row.id; END;
BEGIN if NEW.dob is NULL then return NEW; end if; NEW.dob = date_trunc('day', NEW.dob) + '11 hours 11 minutes 11 seconds 111 milliseconds'::interval; return NEW; END;
begin if (NEW.title is null) then return NEW; end if; if trim(NEW.title) <> '' then return NEW; end if; NEW.title := NULL; return NEW; end;
this function is used to prevent DELETEs of staff members which had been used to store data
BEGIN -- does any audited table contain the dem.staff.db_user we are about to delete ? PERFORM 1 FROM audit.audit_fields WHERE modified_by = OLD.db_user LIMIT 1; IF FOUND THEN RAISE EXCEPTION 'DELETE from dem.staff: Sanity check failed. User <%> is referenced from <.modified_by> of at least one audited table.', OLD.db_user USING ERRCODE = 'foreign_key_violation' ; RETURN NULL; END IF; -- does any audit table contain the dem.staff.db_user we are about to delete ? PERFORM 1 FROM audit.audit_trail WHERE orig_by = OLD.db_user OR audit_by = OLD.db_user LIMIT 1; IF FOUND THEN RAISE EXCEPTION 'DELETE from dem.staff: Sanity check failed. User <%> is referenced from <.orig_by> or <.audit_by> of at least one audit table.', OLD.db_user USING ERRCODE = 'foreign_key_violation' ; RETURN NULL; END IF; RETURN OLD; END;
Prevent praxis branches to be defined for more than one dem.org.
DECLARE _branch_count integer; _pk_org_existing integer; _pk_org_prospective integer; _msg text; BEGIN select count(1) into _branch_count from dem.praxis_branch; if TG_OP = 'INSERT' then -- first branch ever if _branch_count = 0 then return NEW; end if; end if; if TG_OP = 'UPDATE' then -- only one branch (which is being updated) if _branch_count = 1 then return NEW; end if; end if; -- now we have either got an INSERT with at least -- one praxis_branch already existing or we are -- UPDATEing one of several existing branches SELECT fk_org INTO _pk_org_existing FROM dem.org_unit WHERE pk = (SELECT fk_org_unit FROM dem.praxis_branch LIMIT 1); SELECT fk_org INTO _pk_org_prospective FROM dem.org_unit WHERE pk = NEW.fk_org_unit; if _pk_org_prospective = _pk_org_existing then return NEW; end if; _msg := '[dem.trf_prevent_multiple_praxi] ' || TG_OP || ': ' || 'Existing praxis branches (dem.praxis_branch.fk_org->dem.org_unit.pk->dem.org_unit.fk_org) belong to an org with dem.org.pk=' || _pk_org_existing || '. Cannot link praxis branch (dem.praxis_branch.fk_org=dem.org_unit.pk=' || NEW.fk_org_unit ||') to a different org (dem.org.pk=' || _pk_org_prospective ||'). There can only be one praxis (=dem.org) per database.'; raise exception unique_violation using message = _msg; return NULL; END;
A person must have at least one, active, name record.
DECLARE _name_count integer; _msg text; BEGIN -- how many names are there for the identity at the end of the Tx ? select count(1) into _name_count from dem.names where id_identity = OLD.id_identity and active is true ; -- less than one name ? if _name_count < 1 then _msg := 'person ' || OLD.id_identity || ' must have at least one, active, name entry'; raise exception check_violation using message = _msg; return OLD; end if; return OLD; END;
Ensures unique(identity.dob, names.firstnames, names.lastnames, identity.comment)
DECLARE _identity_row record; _names_row record; _other_identities integer[]; BEGIN -- working on dem.identity if TG_TABLE_NAME = 'identity' then -- UPDATEs ... if TG_OP = 'UPDATE' then -- ... which do NOT change .comment ... if NEW.comment IS NOT DISTINCT FROM OLD.comment then -- ... are safe because they were successfully INSERTed before return NEW; end if; end if; -- but INSERTs need checking _identity_row := NEW; select * into _names_row from dem.names where id_identity = NEW.pk; -- working on dem.names else select * into _identity_row from dem.identity where pk = NEW.id_identity; _names_row := NEW; end if; -- there cannot be any combination of identical -- (dob, firstname, lastname, identity.comment) -- so, look for clashing rows SELECT array_agg(pk_identity) INTO _other_identities FROM dem.v_person_names d_vpn join dem.identity d_i on (d_i.pk = d_vpn.pk_identity) WHERE -- same firstname d_vpn.firstnames = _names_row.firstnames AND -- same lastname d_vpn.lastnames = _names_row.lastnames AND -- same gender d_i.gender is not distinct from _identity_row.gender AND -- same dob (day) date_trunc('day', d_i.dob) is not distinct from date_trunc('day', _identity_row.dob) AND -- same discriminator d_i.comment is not distinct from _identity_row.comment AND -- but not the currently updated or inserted row d_i.pk != _identity_row.pk ; if coalesce(array_length(_other_identities, 1), 0) > 0 then RAISE EXCEPTION '% on %.%: More than one person with (firstnames=%), (lastnames=%), (dob=%), (comment=%): % & %', TG_OP, TG_TABLE_SCHEMA, TG_TABLE_NAME, _names_row.firstnames, _names_row.lastnames, _identity_row.dob, _identity_row.comment, _identity_row.pk, _other_identities USING ERRCODE = 'unique_violation' ; RETURN NULL; end if; return NEW; END;
This logs access to the database and to records. Needed for HIPAA compliance among other things.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
user_action | text | NOT NULL |
Table gm.access_log Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
non_empty_user_action | CHECK ((gm.is_null_or_blank_string(user_action) IS FALSE)) |
All tables that want to send standard notifications must be recorded in this table. Notification triggers will be generated automatically for all tables recorded here.
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
schema_name | name | NOT NULL DEFAULT 'public'::name | |
table_name | name | NOT NULL |
this table holds the revisions of all SQL scripts ever inserted into this database, the values are preferably provided by CVS tags in the scripts themselves, see above for a convenient way to do that
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
filename | text |
UNIQUE#1
NOT NULL
the name of the script, handled most easily by CVS via "RCSfile" |
|
version | text |
UNIQUE#1
NOT NULL
the version of the script, handled most easily by CVS via "Revision" |
|
imported | timestamp with time zone |
NOT NULL
DEFAULT now()
when this script was imported, mainly for debugging |
DECLARE _is_owner boolean; BEGIN -- is _account member of current db group ? -- PERFORM 1 FROM pg_auth_members -- WHERE -- roleid = (SELECT oid FROM pg_roles WHERE rolname = current_database()) -- AND -- member = (SELECT oid FROM pg_roles WHERE rolname = _account) -- ; -- IF FOUND THEN -- -- should catch people on staff, gm-dbo, and postgres -- RETURN TRUE; -- END IF; -- postgres IF _account = 'postgres' THEN RETURN TRUE; END IF; -- on staff list PERFORM 1 FROM dem.staff WHERE db_user = _account; IF FOUND THEN RETURN TRUE; END IF; -- owner SELECT pg_catalog.pg_get_userbyid(datdba) = _account INTO STRICT _is_owner FROM pg_catalog.pg_database WHERE datname = current_database(); IF _is_owner IS TRUE THEN RETURN TRUE; END IF; RETURN FALSE; END;
Add array aggregate and array unnesting to PostgreSQL versions lacking this functionality (IOW < 8.4).
DECLARE BEGIN -- array_agg perform 1 from pg_catalog.pg_aggregate where aggfnoid::oid = (select oid from pg_catalog.pg_proc where proname = 'array_agg'::name limit 1); if FOUND then raise NOTICE '[gm.add_missing_array_bits]: aggregate <array_agg> already exists'; else raise NOTICE '[gm.add_missing_array_bits]: aggregate <array_agg> does not exist (probably PostgreSQL <8.4), creating'; CREATE AGGREGATE array_agg(anyelement) ( SFUNC = array_append, STYPE = anyarray, INITCOND = '{}' ); comment on aggregate array_agg(anyelement) is 'Missing on PG 8.3, needed for vaccination handling starting with conversion from gnumed_v13 to gnumed_v14.'; end if; -- unnest() perform 1 from pg_catalog.pg_proc where proname = 'array_unnest'::name and pronamespace = (select oid from pg_namespace where nspname = 'gm'::name) ; if FOUND then raise NOTICE '[gm.add_missing_array_bits]: function "gm.array_unnest()" already exists'; else raise NOTICE '[gm.add_missing_array_bits]: function "gm.array_unnest()" does not exist, creating'; CREATE OR REPLACE FUNCTION gm.array_unnest(anyarray) RETURNS SETOF anyelement AS ' SELECT $1[i] FROM generate_series ( array_lower($1,1), array_upper($1,1) ) i ;' LANGUAGE 'sql' IMMUTABLE ; comment on function gm.array_unnest(anyarray) is 'Missing on PG 8.3, needed for vaccination handling starting with conversion from gnumed_v13 to gnumed_v14.'; end if; perform 1 from pg_catalog.pg_proc where proname = 'unnest'::name and pronamespace = (select oid from pg_namespace where nspname = 'pg_catalog'::name) ; if FOUND then raise NOTICE '[gm.add_missing_array_bits]: function "pg_catalog.unnest()" exists'; -- also exists in public ? perform 1 from pg_catalog.pg_proc where proname = 'unnest'::name and pronamespace = (select oid from pg_namespace where nspname = 'public'::name) ; if FOUND then raise NOTICE '[gm.add_missing_array_bits]: function "unnest()" also exists in schema "public", removing'; drop function public.unnest(anyarray) cascade; end if; else raise NOTICE '[gm.add_missing_array_bits]: function "pg_catalog.unnest()" does not exist (probably PostgreSQL <8.4)'; -- exists in public ? perform 1 from pg_catalog.pg_proc where proname = 'unnest'::name and pronamespace = (select oid from pg_namespace where nspname = 'public'::name) ; if FOUND then raise NOTICE '[gm.add_missing_array_bits]: function "public.unnest()" already exists'; else raise NOTICE '[gm.add_missing_array_bits]: function "public.unnest()" does not exist either, creating'; CREATE OR REPLACE FUNCTION public.unnest(anyarray) RETURNS SETOF anyelement AS 'SELECT gm.array_unnest($1);' LANGUAGE 'sql' IMMUTABLE ; comment on function public.unnest(anyarray) is 'Missing on PG 8.3, needed for vaccination handling starting with conversion from gnumed_v13 to gnumed_v14.'; end if; end if; return TRUE; END;
Mark given table for notification trigger generator. Parameters are: (schema, table). Defaults signal to table name.
select gm.register_notifying_table($1, $2);
Only gm-dbo is GRANTed EXECUTE on this function. This way users need to know the gm-dbo (GNUmed admin) password to execute it.
DECLARE _username alias for $1; _target_group alias for $2; _valid_groups name[]; _group name; _query text; BEGIN -- verify user perform 1 from pg_user where usename = _username; if not FOUND then raise warning '[gm.add_user_to_permission_group]: user [%] does not exist', _username; return False; end if; -- verify logical group validity -- no "gm-nurse", "gm-admin" just yet _valid_groups := ARRAY[quote_ident('gm-public'), quote_ident('gm-staff'), quote_ident('gm-doctors')]; if quote_ident(_target_group) <> all(_valid_groups) then raise warning '[gm.add_user_to_permission_group]: invalid group [%]', _target_group; return False; end if; -- verify group existance perform 1 from pg_group where groname = _target_group; if not FOUND then raise warning '[gm.add_user_to_permission_group]: group [%] does not exist', _target_group; return False; end if; -- drop user from all groups --FOREACH _group IN ARRAY _valid_groups LOOP FOR _group IN SELECT unnest(_valid_groups) LOOP _query := 'alter group ' || _group || ' drop user ' || quote_ident(_username) || ';'; execute _query; END LOOP; -- add user to desired group _query := 'alter group ' || quote_ident(_target_group) || ' add user ' || quote_ident(_username) || ';'; execute _query; return True; END;
Missing on PG 8.3, needed for vaccination handling starting with conversion from gnumed_v13 to gnumed_v14.
SELECT $1[i] FROM generate_series ( array_lower($1,1), array_upper($1,1) ) i ;
declare _struct text; begin select into _struct gm.concat_table_structure_v19_and_up(); return _struct; end;
declare _db_ver alias for $1; _struct text; begin if _db_ver < 6 then select into _struct gm.concat_table_structure_v1(); return _struct; end if; if _db_ver < 8 then select into _struct gm.concat_table_structure_v2(); return _struct; end if; if _db_ver < 16 then select into _struct gm.concat_table_structure_v3(); return _struct; end if; if _db_ver < 17 then select into _struct gm.concat_table_structure_v16_and_up(); return _struct; end if; if _db_ver < 18 then select into _struct gm.concat_table_structure_v17_and_up(); return _struct; end if; if _db_ver < 19 then select into _struct gm.concat_table_structure_v18_and_up(); return _struct; end if; select into _struct gm.concat_table_structure_v19_and_up(); return _struct; end;
copy of gm_concat_table_structure() until gnumed_v5, works on public, dem, clin, blobs
declare _row record; _total text; begin _total := ''; -- schema.table.column.data_type for _row in select * from information_schema.columns cols where cols.table_name in ( select tabs.table_name from information_schema.tables tabs where -- those which hold clinical data tabs.table_schema in ('public', 'dem', 'clin', 'blobs') and tabs.table_type = 'BASE TABLE' ) order by md5(cols.table_schema || cols.table_name || cols.column_name || cols.data_type) loop _total := _total || _row.table_schema || '.' || _row.table_name || '.' || _row.column_name || '::' || _row.udt_name || ' '; end loop; return _total; end;
new concat_table_structure() starting with gnumed_v16, works on dem, clin, blobs, cfg, ref, i18n, sorts properly by bytea
declare _row record; _total text; begin _total := ''; -- schema.table.column.data_type for _row in select * from information_schema.columns cols where cols.table_name in ( select tabs.table_name from information_schema.tables tabs where -- those which hold clinical data tabs.table_schema in ('dem', 'clin', 'blobs', 'cfg', 'ref', 'i18n') and tabs.table_type = 'BASE TABLE' ) and cols.table_schema in ('dem', 'clin', 'blobs', 'cfg', 'ref', 'i18n') order by decode(md5(cols.table_schema || cols.table_name || cols.column_name || cols.data_type), 'hex') loop _total := _total || _row.table_schema || '.' || _row.table_name || '.' || _row.column_name || '::' || _row.udt_name || E' '; end loop; return _total; end;
new concat_table_structure() starting with gnumed_v17, works on dem, clin, blobs, cfg, ref, i18n, bill, sorts properly by bytea
declare _row record; _total text; begin _total := ''; -- schema.table.column.data_type for _row in select * from information_schema.columns cols where cols.table_name in ( select tabs.table_name from information_schema.tables tabs where tabs.table_schema in ('dem', 'clin', 'blobs', 'cfg', 'ref', 'i18n', 'bill') and tabs.table_type = 'BASE TABLE' ) and cols.table_schema in ('dem', 'clin', 'blobs', 'cfg', 'ref', 'i18n', 'bill') order by decode(md5(cols.table_schema || cols.table_name || cols.column_name || cols.data_type), 'hex') loop _total := _total || _row.table_schema || '.' || _row.table_name || '.' || _row.column_name || '::' || _row.udt_name || E' '; end loop; return _total; end;
new concat_table_structure() starting with gnumed_v18, works on dem, clin, blobs, cfg, ref, i18n, bill, includes primary keys, sorts properly by bytea
declare _table_desc record; _pk_desc record; _column_desc record; _total text; begin _total := ''; -- find relevant tables for _table_desc in select * from information_schema.tables tabs where tabs.table_schema in ('dem', 'clin', 'blobs', 'cfg', 'ref', 'i18n', 'bill') and tabs.table_type = 'BASE TABLE' order by decode(md5(tabs.table_schema || tabs.table_name), 'hex') -- loop over tables loop -- where are we at ? _total := _total || 'TABLE:' || _table_desc.table_schema || '.' || _table_desc.table_name || E' '; -- find PKs of that table for _pk_desc in select * from ( select pg_class.oid::regclass || '.' || pg_attribute.attname || '::' || format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS primary_key_column from pg_index, pg_class, pg_attribute where --pg_class.oid = 'TABLENAME'::regclass pg_class.oid = (_table_desc.table_schema || '.' || _table_desc.table_name)::regclass AND indrelid = pg_class.oid AND pg_attribute.attrelid = pg_class.oid AND pg_attribute.attnum = any(pg_index.indkey) AND indisprimary ) AS PKs order by decode(md5(PKs.primary_key_column), 'hex') -- and loop over those PK columns loop _total := _total || 'PK:' || _pk_desc.primary_key_column || E' '; end loop; -- find columns of that table for _column_desc in select * from information_schema.columns cols where cols.table_name = _table_desc.table_name and cols.table_schema = _table_desc.table_schema order by decode(md5(cols.column_name || cols.data_type), 'hex') -- and loop over those columns loop -- add columns in the format "schema.table.column::data_type" _total := _total || 'COL:' || _column_desc.table_schema || '.' || _column_desc.table_name || '.' || _column_desc.column_name || '::' || _column_desc.udt_name || E' '; end loop; end loop; return _total; end;
new concat_table_structure() starting with gnumed_v19, works on dem, clin, blobs, cfg, ref, i18n, bill, includes primary keys and constraints, sorts properly by bytea
declare _table_desc record; _pk_desc record; _column_desc record; _constraint_def record; _total text; begin _total := ''; -- find relevant tables for _table_desc in select * from information_schema.tables tabs where tabs.table_schema in ('dem', 'clin', 'blobs', 'cfg', 'ref', 'i18n', 'bill') and tabs.table_type = 'BASE TABLE' order by decode(md5(tabs.table_schema || tabs.table_name), 'hex') -- loop over tables loop -- where are we at ? _total := _total || 'TABLE:' || _table_desc.table_schema || '.' || _table_desc.table_name || E'\n'; -- find PKs of that table for _pk_desc in select * from ( select pg_class.oid::regclass || '.' || pg_attribute.attname || '::' || format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS primary_key_column from pg_index, pg_class, pg_attribute where --pg_class.oid = 'TABLENAME'::regclass pg_class.oid = (_table_desc.table_schema || '.' || _table_desc.table_name)::regclass AND indrelid = pg_class.oid AND pg_attribute.attrelid = pg_class.oid AND pg_attribute.attnum = any(pg_index.indkey) AND indisprimary ) AS PKs order by decode(md5(PKs.primary_key_column), 'hex') -- and loop over those PK columns loop _total := _total || 'PK:' || _pk_desc.primary_key_column || E'\n'; end loop; -- find columns of that table for _column_desc in select * from information_schema.columns cols where cols.table_name = _table_desc.table_name and cols.table_schema = _table_desc.table_schema order by decode(md5(cols.column_name || cols.data_type), 'hex') -- and loop over those columns loop -- add columns in the format "schema.table.column::data_type" _total := _total || 'COL:' || _column_desc.table_schema || '.' || _column_desc.table_name || '.' || _column_desc.column_name || '::' || _column_desc.udt_name || E'\n'; end loop; -- find and loop over CONSTRAINTs of that table for _constraint_def in select * from (select tbl.contype, 'CONSTRAINT:type=' || tbl.contype || ':' || replace(pg_catalog.pg_get_constraintdef(tbl.oid, true), ' ', '_') || '::active=' || tbl.convalidated as condef from pg_catalog.pg_constraint tbl where tbl.conrelid = (_table_desc.table_schema || '.' || _table_desc.table_name)::regclass -- include FKs only because we may have to add/remove -- other (say, check) constraints in a minor release -- for valid reasons which we do not want to affect -- the hash, if however we need to modify a foreign -- key that would, indeed, warrant a hash change AND tbl.contype = 'f' ) as CONSTRAINTs order by CONSTRAINTs.contype, decode(md5(CONSTRAINTs.condef), 'hex') loop _total := _total || _constraint_def.condef || E'\n'; end loop; end loop; -- over tables return _total; end;
new concat_table_structure() starting with gnumed_v6, works on dem, clin, blobs, cfg, ref, i18n
declare _row record; _total text; begin _total := ''; -- schema.table.column.data_type for _row in select * from information_schema.columns cols where cols.table_name in ( select tabs.table_name from information_schema.tables tabs where -- those which hold clinical data tabs.table_schema in ('dem', 'clin', 'blobs', 'cfg', 'ref', 'i18n') and tabs.table_type = 'BASE TABLE' ) order by md5(cols.table_schema || cols.table_name || cols.column_name || cols.data_type) loop _total := _total || _row.table_schema || '.' || _row.table_name || '.' || _row.column_name || '::' || _row.udt_name || ' '; end loop; return _total; end;
new concat_table_structure() starting with gnumed_v8, works on dem, clin, blobs, cfg, ref, i18n, sorts properly by bytea
declare _row record; _total text; begin _total := ''; -- schema.table.column.data_type for _row in select * from information_schema.columns cols where cols.table_name in ( select tabs.table_name from information_schema.tables tabs where -- those which hold clinical data tabs.table_schema in ('dem', 'clin', 'blobs', 'cfg', 'ref', 'i18n') and tabs.table_type = 'BASE TABLE' ) order by decode(md5(cols.table_schema || cols.table_name || cols.column_name || cols.data_type), 'hex') loop _total := _total || _row.table_schema || '.' || _row.table_name || '.' || _row.column_name || '::' || _row.udt_name || ' '; end loop; return _total; end;
(Re)create sanity check triggers for all tables which have both fk_encounter and fk_episode.
DECLARE _schema name; _table name; _qualified_table2check name; _fk_encounter_col name; _fk_episode_col name; _total_success boolean; BEGIN raise notice 'gm.create_all_enc_epi_sanity_check_triggers()'; _total_success := True; -- loop over tables with encounter AND episode FKs -- (assumes there is only one of each) for _schema, _table in select (select pg_n.nspname from pg_catalog.pg_namespace pg_n where pg_n.oid = pg_c.relnamespace), pg_c.relname from pg_class pg_c where pg_c.oid in ( select distinct fk_tbl.conrelid from pg_catalog.pg_constraint fk_tbl where exists ( select 1 from pg_catalog.pg_constraint fk_tbl1 where fk_tbl1.contype = 'f' and fk_tbl1.conrelid = fk_tbl.conrelid and fk_tbl1.confrelid = 'clin.encounter'::regclass and fk_tbl1.confkey[1] = ( select attnum from pg_catalog.pg_attribute col_tbl where col_tbl.attname = 'pk' AND col_tbl.attrelid = 'clin.encounter'::regclass ) ) and exists ( select 1 from pg_catalog.pg_constraint fk_tbl2 where fk_tbl2.contype = 'f' and fk_tbl2.conrelid = fk_tbl.conrelid and fk_tbl2.confrelid = 'clin.episode'::regclass and fk_tbl2.confkey[1] = ( select attnum from pg_catalog.pg_attribute col_tbl where col_tbl.attname = 'pk' AND col_tbl.attrelid = 'clin.episode'::regclass ) ) ) loop _qualified_table2check := _schema || '.' || _table; raise notice 'gm.create_all_enc_epi_sanity_check_triggers(): processing %', _qualified_table2check; -- find encounter FK column name select col_tbl.attname into _fk_encounter_col from pg_catalog.pg_attribute col_tbl where col_tbl.attrelid = _qualified_table2check::regclass and col_tbl.attnum = ( select fk_tbl.conkey[1] from pg_catalog.pg_constraint fk_tbl where fk_tbl.contype = 'f' and fk_tbl.conrelid = _qualified_table2check::regclass and fk_tbl.confrelid = 'clin.encounter'::regclass and fk_tbl.confkey[1] = ( select col_tbl1.attnum from pg_catalog.pg_attribute col_tbl1 where col_tbl1.attname = 'pk' AND col_tbl1.attrelid = 'clin.encounter'::regclass ) ) ; -- find episode FK column name select col_tbl.attname into _fk_episode_col from pg_catalog.pg_attribute col_tbl where col_tbl.attrelid = _qualified_table2check::regclass and col_tbl.attnum = ( select fk_tbl.conkey[1] from pg_catalog.pg_constraint fk_tbl where fk_tbl.contype = 'f' and fk_tbl.conrelid = _qualified_table2check::regclass and fk_tbl.confrelid = 'clin.episode'::regclass and fk_tbl.confkey[1] = ( select col_tbl1.attnum from pg_catalog.pg_attribute col_tbl1 where col_tbl1.attname = 'pk' AND col_tbl1.attrelid = 'clin.episode'::regclass ) ) ; -- now create the trigger BEGIN PERFORM gm.create_enc_epi_sanity_check_trigger(_schema, _table, _fk_encounter_col, _fk_episode_col); EXCEPTION WHEN undefined_table OR invalid_foreign_key THEN raise warning 'gm.create_all_enc_epi_sanity_check_triggers(): error processing <%.%>, skipping', _schema, _table; _total_success := False; END; end loop; return _total_success; END;
(Re)create all table mod triggers for all registered tables.
DECLARE _notify_table record; _cmd text; _total_success boolean; BEGIN _total_success := True; -- loop over registered tables for _notify_table in select * from gm.notifying_tables loop BEGIN PERFORM gm.create_table_mod_triggers(_notify_table.schema_name, _notify_table.table_name, _drop_old_triggers); EXCEPTION WHEN undefined_table OR undefined_column THEN raise warning 'gm.create_all_table_mod_triggers(): error processing <%.%>, skipping', _notify_table.schema_name, _notify_table.table_name; _total_success := False; END; end loop; return _total_success; END;
This function can be run on any table in order to add enccounter <-> episode sanity check triggers to that table.
DECLARE _qualified_table2check text; _msg text; _cmd text; BEGIN _qualified_table2check := _schema_name || '.' || _table_name; raise notice 'gm.create_enc_epi_sanity_check_trigger(): % (.% vs .%)', _qualified_table2check, _fk_encounter_col, _fk_episode_col; -- verify table exists if not exists(select 1 from information_schema.tables where table_schema = _schema_name and table_name = _table_name) then raise warning 'gm.create_enc_epi_sanity_check_trigger(): table <%> does not exist', _qualified_table2check; raise exception undefined_table; return false; end if; -- verify that it points to clin.encounter.pk if not exists ( select 1 from pg_catalog.pg_constraint fk_tbl where fk_tbl.contype = 'f' AND fk_tbl.confrelid = 'clin.encounter'::regclass AND fk_tbl.conrelid = _qualified_table2check::regclass AND fk_tbl.confkey[1] = ( select attnum from pg_catalog.pg_attribute col_tbl where col_tbl.attname = 'pk' AND col_tbl.attrelid = 'clin.encounter'::regclass ) AND fk_tbl.conkey[1] = ( select attnum from pg_catalog.pg_attribute col_tbl where col_tbl.attname = _fk_encounter_col AND col_tbl.attrelid = _qualified_table2check::regclass ) ) then raise exception 'gm.create_enc_epi_sanity_check_trigger(): <%.%> does not point to clin.encounter.pk', _qualified_table2check, _fk_encounter_col USING ERRCODE = 'invalid_foreign_key' ; return false; end if; -- verify that it points to clin.episode.pk if not exists ( select 1 from pg_catalog.pg_constraint fk_tbl where fk_tbl.contype = 'f' AND fk_tbl.confrelid = 'clin.episode'::regclass AND fk_tbl.conrelid = _qualified_table2check::regclass AND fk_tbl.confkey[1] = ( select attnum from pg_catalog.pg_attribute col_tbl where col_tbl.attname = 'pk' AND col_tbl.attrelid = 'clin.episode'::regclass ) AND fk_tbl.conkey[1] = ( select attnum from pg_catalog.pg_attribute col_tbl where col_tbl.attname = _fk_episode_col AND col_tbl.attrelid = _qualified_table2check::regclass ) ) then raise exception 'gm.create_enc_epi_sanity_check_trigger(): <%.%> does not point to clin.episode.pk', _qualified_table2check, _fk_episode_col USING ERRCODE = 'invalid_foreign_key' ; return false; end if; -- re-create trigger _cmd := 'drop trigger if exists tr_sanity_check_enc_epi_ins_upd on ' || _qualified_table2check || ' cascade'; execute _cmd; _cmd := 'create trigger tr_sanity_check_enc_epi_ins_upd '; _cmd := _cmd || 'before insert or update '; _cmd := _cmd || 'on ' || _qualified_table2check || ' '; _cmd := _cmd || 'for each row when (NEW.fk_episode is not null) '; _cmd := _cmd || 'execute procedure clin.trf_sanity_check_enc_epi_ins_upd(''' || _fk_encounter_col || ''', ''' || _fk_episode_col || ''')'; execute _cmd; return True; END;
DECLARE _name alias for $1; _indications alias for $2; _atc alias for $3; _is_live alias for $4; _generic_name text; _pk_brand integer; _pk_vaccine integer; _indication text; BEGIN _generic_name := _name || ' - generic vaccine'; raise notice 're-creating [%] (%)', _generic_name, array_to_string(_indications, '-'); -- retrieve or create ref.branded_drug entry for indication select pk into _pk_brand from ref.branded_drug where is_fake is true and description = _generic_name; if FOUND is false then insert into ref.branded_drug ( description, preparation, is_fake, atc_code ) values ( _generic_name, 'vaccine', -- this is rather arbitrary True, coalesce(_atc, 'J07') ) returning pk into _pk_brand; end if; -- retrieve or create clin.vaccine entry for generic brand select pk into _pk_vaccine from clin.vaccine where fk_brand = _pk_brand; if FOUND is false then insert into clin.vaccine ( is_live, fk_brand ) values ( _is_live, _pk_brand ) returning pk into _pk_vaccine; end if; -- link indications to vaccine delete from clin.lnk_vaccine2inds where fk_vaccine = _pk_vaccine; for _indication in select unnest(_indications) loop insert into clin.lnk_vaccine2inds ( fk_vaccine, fk_indication ) values ( _pk_vaccine, (select id from clin.vacc_indication where description = _indication) ); end loop; return true; END;
select gm.create_generic_combi_vaccine ( 'Td'::text, ARRAY['tetanus'::text,'diphtheria'::text], 'J07AM51', False ); select gm.create_generic_combi_vaccine ( 'DT'::text, ARRAY['tetanus'::text,'diphtheria'::text], 'J07AM51', False ); select gm.create_generic_combi_vaccine ( 'TdaP'::text, ARRAY['tetanus'::text,'diphtheria'::text,'pertussis'::text], 'J07CA01', False ); select gm.create_generic_combi_vaccine ( 'TDaP'::text, ARRAY['tetanus'::text,'diphtheria'::text,'pertussis'::text], 'J07CA01', False ); select gm.create_generic_combi_vaccine ( 'TdaP-Pol'::text, ARRAY['tetanus'::text,'diphtheria'::text,'pertussis'::text,'poliomyelitis'::text], 'J07CA02', False ); select gm.create_generic_combi_vaccine ( 'TDaP-Pol'::text, ARRAY['tetanus'::text,'diphtheria'::text,'pertussis'::text,'poliomyelitis'::text], 'J07CA02', False ); select gm.create_generic_combi_vaccine ( 'TDaP-Pol-HiB'::text, ARRAY['tetanus'::text,'diphtheria'::text,'pertussis'::text,'poliomyelitis'::text,'haemophilus influenzae b'::text], 'J07CA06', False ); select gm.create_generic_combi_vaccine ( 'TDaP-Pol-HiB-HepB'::text, ARRAY['tetanus'::text,'diphtheria'::text,'pertussis'::text,'poliomyelitis'::text,'haemophilus influenzae b'::text,'hepatitis B'::text], 'J07CA09', False ); select gm.create_generic_combi_vaccine ( 'MMR'::text, ARRAY['measles'::text,'mumps'::text,'rubella'::text], 'J07BD52', True ); select gm.create_generic_combi_vaccine ( 'MMRV'::text, ARRAY['measles'::text,'mumps'::text,'rubella'::text,'varicella (chickenpox, shingles)'::text], 'J07BD54', True ); select gm.create_generic_combi_vaccine ( 'HepAB'::text, ARRAY['hepatitis A'::text,'hepatitis B'::text], 'J07BC20', False ); select True;
DECLARE _row record; _generic_name text; _pk_brand integer; _pk_vaccine integer; BEGIN for _row in select * from clin.vacc_indication loop _generic_name := _row.description || ' - generic vaccine'; raise notice 're-creating [%]', _generic_name; -- retrieve or create ref.branded_drug entry for indication select pk into _pk_brand from ref.branded_drug where is_fake is true and description = _generic_name; if FOUND is false then insert into ref.branded_drug ( description, preparation, is_fake, atc_code ) values ( _generic_name, 'vaccine', -- this is rather arbitrary True, coalesce(_row.atcs_single_indication[1], 'J07') ) returning pk into _pk_brand; end if; -- retrieve or create clin.vaccine entry for generic brand select pk into _pk_vaccine from clin.vaccine where fk_brand = _pk_brand; if FOUND is false then insert into clin.vaccine ( is_live, fk_brand ) values ( false, _pk_brand ) returning pk into _pk_vaccine; end if; -- link indication to vaccine delete from clin.lnk_vaccine2inds where fk_vaccine = _pk_vaccine; insert into clin.lnk_vaccine2inds ( fk_vaccine, fk_indication ) values ( _pk_vaccine, _row.id ); end loop; return true; END;
This function can be run on any table in order to add notification triggers to that table.
DECLARE _qualified_table text; _msg text; _payload text; _PK_col_name text; _pk_accessor_SQL text; _accessor_col text; _col_candidate text; _identity_accessor_SQL text; _cmd text; BEGIN _qualified_table := _schema_name || '.' || _table_name; raise notice 'gm.create_table_mod_triggers(): %', _qualified_table; -- verify table exists if not exists(select 1 from information_schema.tables where table_schema = _schema_name and table_name = _table_name) then raise warning 'gm.create_table_mod_triggers(): table <%> does not exist', _qualified_table; raise exception undefined_table; return false; end if; -- find PK column select pg_attribute.attname into _PK_col_name from pg_index, pg_class, pg_attribute where pg_class.oid = _qualified_table::regclass AND indrelid = pg_class.oid AND pg_attribute.attrelid = pg_class.oid AND pg_attribute.attnum = any(pg_index.indkey) AND indisprimary; if _PK_col_name is NULL then raise warning 'gm.create_table_mod_triggers(): table <%> lacks a primary key', _qualified_table; raise exception undefined_column; return false; end if; _pk_accessor_SQL := 'select $1.' || _PK_col_name; -- find identity accessor -- special case if _qualified_table = 'dem.identity' then _identity_accessor_SQL := 'select $1.pk'; else -- look for columns by which to retrieve affected person _accessor_col := NULL; foreach _col_candidate in array array['fk_identity', 'fk_patient', 'id_identity', 'fk_encounter'] loop if exists ( select 1 from pg_class, pg_attribute where pg_class.oid = _qualified_table::regclass AND pg_attribute.attname = _col_candidate AND pg_attribute.attrelid = pg_class.oid ) then _accessor_col := _col_candidate; exit; end if; end loop; if _accessor_col = 'fk_encounter' then -- retrieve identity PK via fk_encounter _identity_accessor_SQL := 'select fk_patient from clin.encounter where pk = $1.fk_encounter limit 1'; elsif _accessor_col = 'fk_identity' then -- retrieve identity PK via fk_identity _identity_accessor_SQL := 'select $1.fk_identity'; elsif _accessor_col = 'fk_patient' then -- retrieve identity PK via fk_patient _identity_accessor_SQL := 'select $1.fk_patient'; elsif _accessor_col = 'id_identity' then -- retrieve identity PK via id_identity _identity_accessor_SQL := 'select $1.id_identity'; else _identity_accessor_SQL := '<NULL>'; end if; end if; -- drop triggers should they exist -- old-name announcement triggers -- remove in v22 _cmd := 'drop trigger if exists tr_announce_' || _schema_name || '_' || _table_name || '_ins_upd on ' || _qualified_table || ' cascade;'; execute _cmd; _cmd := 'drop trigger if exists tr_announce_' || _schema_name || '_' || _table_name || '_del on ' || _qualified_table || ' cascade;'; execute _cmd; -- new-name announcement triggers _cmd := 'drop trigger if exists zzz_tr_announce_' || _schema_name || '_' || _table_name || '_ins_upd on ' || _qualified_table || ' cascade;'; execute _cmd; _cmd := 'drop trigger if exists zzz_tr_announce_' || _schema_name || '_' || _table_name || '_del on ' || _qualified_table || ' cascade;'; execute _cmd; -- remove in v21 if _drop_old_triggers is true then _cmd := 'drop function if exists ' || _schema_name || '.trf_announce_' || _table_name || '_mod() cascade;'; execute _cmd; _cmd := 'drop function if exists ' || _schema_name || '.trf_announce_' || _table_name || '_mod_no_pk() cascade;'; execute _cmd; _cmd := 'drop function if exists ' || _schema_name || '.trf_announce_' || _table_name || '_generic_mod_no_pk() cascade;'; execute _cmd; end if; -- re-create triggers -- 1) INSERT/UPDATE _payload := 'table=' || _qualified_table || '::PK name=' || _PK_col_name; _cmd := 'create constraint trigger zzz_tr_announce_' || _schema_name || '_' || _table_name || '_ins_upd'; _cmd := _cmd || ' after insert or update'; _cmd := _cmd || ' on ' || _qualified_table; -- needed so a SELECT inside, say, _identity_accessor_SQL running -- concurrently to a "lengthy" TX does not create a serialization -- failure by being a rw-dependancy pivot _cmd := _cmd || ' deferrable initially deferred'; _cmd := _cmd || ' for each row'; _cmd := _cmd || ' execute procedure gm.trf_announce_table_ins_upd(''' || _payload || ''', ''' || _pk_accessor_SQL || ''', ''' || _identity_accessor_SQL || ''');'; execute _cmd; -- 2) DELETE _payload := 'operation=DELETE::' || _payload; _cmd := 'create constraint trigger zzz_tr_announce_' || _schema_name || '_' || _table_name || '_del'; _cmd := _cmd || ' after delete'; _cmd := _cmd || ' on ' || _qualified_table; -- needed so a SELECT inside, say, _identity_accessor_SQL running -- concurrently to a "lengthy" TX does not create a serialization -- failure by being a rw-dependancy pivot _cmd := _cmd || ' deferrable initially deferred'; _cmd := _cmd || ' for each row'; _cmd := _cmd || ' execute procedure gm.trf_announce_table_del(''' || _payload || ''', ''' || _pk_accessor_SQL || ''', ''' || _identity_accessor_SQL || ''');'; execute _cmd; return True; END;
To create users one needs to have CREATEROLE rights. Only gm-dbo is GRANTed EXECUTE. This way users need to know the gm-dbo (GNUmed admin) password to execute the function. Newly created users belong to group "gm-public" by default.
DECLARE _username alias for $1; _password alias for $2; _database text; _query text; BEGIN perform 1 from pg_user where usename = _username; if not FOUND then _query := 'create user ' || quote_ident(_username) || ' with password ' || quote_literal(_password) || ';'; execute _query; perform 1 from pg_user where usename = _username; if not FOUND then raise exception 'cannot create user [%]', _username; return false; end if; end if; _query := 'alter group "gm-logins" add user ' || quote_ident(_username) || ';'; execute _query; _query := 'alter group "gm-public" add user ' || quote_ident(_username) || ';'; execute _query; -- satisfy "database = samerole" in pg_hba.conf select into _database current_database(); _query := 'alter group ' || quote_ident(_database) || ' add user ' || quote_ident(_username) || ';'; execute _query; return true; END;
To disable users one needs to have CREATEROLE rights. Only gm-dbo is GRANTed EXECUTE. This way users need to know the gm-dbo (GNUmed admin) password to execute the function.
DECLARE _username alias for $1; _query text; BEGIN perform 1 from pg_user where usename = _username; if not FOUND then return true; end if; _query := 'alter group "gm-logins" drop user ' || quote_ident(_username) || ';'; execute _query; return true; END;
To drop users one needs to have CREATEROLE rights. Only gm-dbo is GRANTed EXECUTE. This way users need to know the gm-dbo (GNUmed admin) password to execute the function.
DECLARE _username alias for $1; _query text; BEGIN perform 1 from pg_user where usename = _username; if not FOUND then return true; end if; _query := 'drop user ' || quote_ident(_username) || ';'; execute _query; perform 1 from pg_user where usename = _username; if FOUND then return false; end if; return true; END;
select gm.get_users(current_database());
Convenience function listing all PostgreSQL accounts (roles) needed for a consistent dump of the database.
DECLARE _db alias for $1; _gm_users text[]; _user text; BEGIN -- GNUmed group roles _gm_users := ARRAY['gm-logins', 'gm-public', 'gm-doctors', 'gm-staff', _db]; -- add roles being *members* of groups gm-logins, gm-public, _db FOR _user in select distinct rolname from pg_roles where oid in ( select member from pg_auth_members where roleid in ( select oid from pg_roles where rolname in ('gm-logins', 'gm-public', _db) ) ) LOOP continue when _user = 'postgres'; continue when _user = any(_gm_users); _gm_users := _gm_users || _user; END LOOP; -- add roles mentioned in any *.modified_by fields FOR _user in select distinct modified_by from audit.audit_fields LOOP continue when _user = 'postgres'; continue when _user = any(_gm_users); _gm_users := _gm_users || _user; END LOOP; -- add roles mentioned in dem.staff.db_user FOR _user in select distinct db_user from dem.staff LOOP continue when _user = 'postgres'; continue when _user = any(_gm_users); _gm_users := _gm_users || _user; END LOOP; return _gm_users; END;
input is either NULL or empty string -> True; input is not NULL and not empty -> FALSE
select (coalesce(trim($1), '') = '');
select (coalesce(trim($1), 'NULL') != '');
Function to create a chunked md5 sum on arbitrarily large LARGE OBJECTs.
DECLARE lo_id alias for $1; chunk_size alias for $2; _lo_fd integer; _lo_size integer; _chunk_count integer; _remainder integer; _md5_concat text; INV_READ constant integer := x'40000'::integer; SEEK_SET constant integer := 0; SEEK_END constant integer := 2; BEGIN -- check for existence of lo_id ? _lo_fd := lo_open(lo_id, INV_READ); -- get size _lo_size := lo_lseek(_lo_fd, 0, SEEK_END); PERFORM lo_close(_lo_fd); -- move further down if loread() proves faster -- calculate chunks and remainder _chunk_count := _lo_size / chunk_size; _remainder := _lo_size % chunk_size; -- loop over chunks _md5_concat := ''; FOR _chunk_id in 1.._chunk_count LOOP _md5_concat := _md5_concat || md5(lo_get(lo_id, (_chunk_id - 1) * chunk_size, chunk_size)); -- using loread() may be faster (as it directly accesses the -- existing lo_fd and thusly does not need to re-open the LO -- each round) END LOOP; -- add remainder _md5_concat := _md5_concat || md5(lo_get(lo_id, _chunk_count * chunk_size, _remainder)); return md5(_md5_concat); END;
This logs access to a patient EMR.
DECLARE _action alias for $1; BEGIN if gm.is_null_or_blank_string(_action) then raise exception 'gm.log_access2emr(): action detail cannot be NULL or empty'; end if; insert into gm.access_log (user_action) values ('EMR access: ' || _action); return; END;
This logs access to the database.
insert into gm.access_log (user_action) values ($1);
declare _filename alias for $1; _version alias for $2; _hash text; begin delete from gm.schema_revision where filename = _filename; insert into gm.schema_revision (filename, version) values ( _filename, _version ); perform gm.log_other_access ( 'database change script inserted: ' || _filename || ' (' || _version || ')' ); select into _hash md5(gm.concat_table_structure()); return _hash; end;
DECLARE _input alias for $1; BEGIN if _input is null then return null; end if; if trim(_input) = '' then return null; end if; return _input; END;
Register given table for notification trigger generator. Parameters are: (schema, table)
DECLARE _namespace alias for $1; _table alias for $2; dummy RECORD; BEGIN -- does table exist ? select relname into dummy from pg_class where relname = _table and relnamespace = (select oid from pg_namespace where nspname = _namespace) ; if not found then raise exception 'register_notifying_table(): Table [%.%] does not exist.', _namespace, _table; end if; -- make sure we can insert delete from gm.notifying_tables where table_name = _table and schema_name = _namespace; insert into gm.notifying_tables ( schema_name, table_name ) values ( _namespace, _table ); return true; END;
Remove fractions containing only zeros (n.000...) from NUMERICs/DECIMALs.
DECLARE _numeric_value alias for $1; _fraction numeric; _msg text; BEGIN _fraction := _numeric_value - trunc(_numeric_value); if _fraction <> 0 then return _numeric_value; end if; BEGIN return _numeric_value::bigint::numeric; EXCEPTION WHEN numeric_value_out_of_range THEN RAISE NOTICE '[gm.strip_allzeros_fraction]: cannot strip from %', _numeric_value; RETURN _numeric_value; END; END;
select gm.transfer_users($1, current_database());
This function transfers adds users from the group role given in the argument to the group role corresponding to the current database name. This enables group membership based authentication as used in GNUmed. This operation is typically only run on database upgrade and is only available to gm-dbo.
DECLARE _source_group alias for $1; _target_group alias for $2; member_ids int[]; member_id int; member_name text; tmp text; BEGIN -- source group exists ? perform 1 from pg_group where groname = _source_group; if not FOUND then raise exception 'gm_transfer_users(): source group [%] does not exist', _source_group; return false; end if; -- target group exists ? perform 1 from pg_group where groname = _target_group; if not FOUND then raise exception 'gm_transfer_users(): target group [%] does not exist', _target_group; return false; end if; -- loop over group member IDs select into member_ids grolist from pg_group where groname = _source_group; FOR idx IN coalesce(array_lower(member_ids, 1), 0) .. coalesce(array_upper(member_ids, 1), -1) LOOP member_id := member_ids[idx]; select into member_name usename from pg_user where usesysid = member_id; tmp := 'gm_transfer_users(text): transferring "' || member_name || '" (' || member_id || ') from group "' || _source_group || '" to group "' || _target_group || '"'; raise notice '%', tmp; -- satisfy "database = samegroup" in pg_hba.conf tmp := 'alter group ' || quote_ident(_target_group) || ' add user ' || quote_ident(member_name) || ';'; execute tmp; end LOOP; return true; END;
Trigger function announcing a DELETE on a table. sends signal: gm_table_mod payload: operation=DELETE, table=the table that is updated, PK name=the name of the PK column of the table (requires single column PKs), row PK=the PK of the affected row, person PK=the PK of the affected person,
declare _payload text; _pk_accessor_SQL text; _pk_col_val integer; _identity_accessor_SQL text; _pk_identity integer; begin _pk_accessor_SQL := TG_ARGV[1]; EXECUTE _pk_accessor_SQL INTO STRICT _pk_col_val USING OLD; _payload := TG_ARGV[0] || '::row PK=' || coalesce(_pk_col_val::text, 'NULL'); _identity_accessor_SQL := TG_ARGV[2]; if _identity_accessor_SQL <> '<NULL>' then --raise notice '%.%: %', TG_TABLE_SCHEMA, TG_TABLE_NAME, _identity_accessor_SQL; EXECUTE _identity_accessor_SQL INTO STRICT _pk_identity USING OLD; _payload := _payload || '::person PK=' || coalesce(_pk_identity::text, 'NULL'); end if; perform pg_notify('gm_table_mod', _payload); return NULL; end;
Trigger function announcing an INSERT or UPDATE to a table. sends signal: gm_table_mod payload: operation=INSERT/UPDATE, table=the table that is updated, PK name=the name of the PK column of the table (requires single column PKs), row PK=the PK of the affected row, person PK=the PK of the affected person,
declare _payload text; _pk_accessor_SQL text; _pk_col_val integer; _identity_accessor_SQL text; _pk_identity integer; begin _pk_accessor_SQL := TG_ARGV[1]; EXECUTE _pk_accessor_SQL INTO STRICT _pk_col_val USING NEW; _payload := 'operation=' || TG_OP || '::' || TG_ARGV[0] || '::row PK=' || coalesce(_pk_col_val::text, 'NULL'); _identity_accessor_SQL := TG_ARGV[2]; if _identity_accessor_SQL <> '<NULL>' then EXECUTE _identity_accessor_SQL INTO STRICT _pk_identity USING NEW; _payload := _payload || '::person PK=' || coalesce(_pk_identity::text, 'NULL'); end if; perform pg_notify('gm_table_mod', _payload); return NULL; end;
BEGIN perform 1 from pg_user where usename = $1; if not FOUND then raise notice 'Cannot set database language. User % does not exist.', $1; return false; end if; return true; END;
select $1::text::integer;
holds the currently selected per-user default language for fixed strings in the database
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
db_user | name |
UNIQUE
NOT NULL
DEFAULT "current_user"()
The database account this language setting applies to. |
|
lang | text | NOT NULL |
Name | Constraint |
---|---|
user_must_exist | CHECK ((gm.user_exists(db_user) IS TRUE)) |
this table holds all the original strings that need translation so give this to your language teams, the function i18n.i18n() will take care to enter relevant strings into this table, the table table does NOT play any role in runtime translation activity
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
orig | text | UNIQUE NOT NULL |
this table holds all the translated strings
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
lang | text |
UNIQUE#1
NOT NULL
the language (corresponding to i18n.curr_lang for a given user) that this translation belongs to |
|
orig | text |
UNIQUE#1
NOT NULL
the original, untranslated string, used as the search key. |
|
trans | text |
NOT NULL
the translation of <orig> into <lang> |
Name | Constraint |
---|---|
i18n_translations_sane_trans | CHECK ((trans <> orig)) |
lists per language which strings are lacking a translation
F-Key | Name | Type | Description |
---|---|---|---|
lang | text | ||
orig | text |
SELECT icl.lang , ik.orig FROM ( SELECT DISTINCT ON (curr_lang.lang) curr_lang.lang FROM i18n.curr_lang ) icl , i18n.keys ik WHERE (NOT (ik.orig IN ( SELECT translations.orig FROM i18n.translations ) ) );
will return either the translation into i18n.curr_lang.lang for the current user or the input, created in public schema for easy access
select i18n._($1, i18n.get_curr_lang())
will return either the translation into <lang>::text (2nd argument) for the current user or the input, created in public schema for easy access, will fallback to "xx" if xx_XX does not exist
DECLARE _orig alias for $1; _lang alias for $2; trans_str text; BEGIN select into trans_str trans from i18n.translations where lang = _lang and orig = _orig; if not found then -- reduce xx_XX@YY to xx select into trans_str trans from i18n.translations where lang = regexp_replace(_lang, '_.*$', '') and orig = _orig; if not found then return _orig; end if; -- if not found then -- -- check "generic" dummy translation used to work around accentuation problems -- select into trans_str trans from i18n.translations where lang = 'generic' and orig = _orig; -- -- if not found then -- return _orig; -- end if; -- end if; end if; return trans_str; END;
force preferred language to some language: - for "current user"
DECLARE _lang ALIAS FOR $1; BEGIN raise notice 'Forcing current language to [%] without checking for translations..', _lang; delete from i18n.curr_lang where user = CURRENT_USER; insert into i18n.curr_lang(lang) values (_lang); return 1; END;
select i18n.get_curr_lang(CURRENT_USER)
select lang from i18n.curr_lang where db_user = $1
insert original strings into i18n.keys for later translation
DECLARE original ALIAS FOR $1; BEGIN if not exists(select pk from i18n.keys where orig = original) then insert into i18n.keys (orig) values (original); end if; return original; END;
set preferred language: - for "current user" - only if translations for this language are available
DECLARE _lang ALIAS FOR $1; BEGIN if exists(select pk from i18n.translations where lang = _lang) then delete from i18n.curr_lang where user = CURRENT_USER; insert into i18n.curr_lang (lang) values (_lang); return true; end if; raise notice 'Cannot set current language to [%]. No translations available.', _lang; return false; END;
set language to first argument for the user named in the second argument if translations are available
DECLARE _lang ALIAS FOR $1; _db_user ALIAS FOR $2; lang_has_tx boolean; BEGIN select into lang_has_tx exists(select pk from i18n.translations where lang = _lang); if lang_has_tx is False then raise notice 'Cannot set current language to [%]. No translations available.', _lang; return False; end if; delete from i18n.curr_lang where db_user = _db_user; insert into i18n.curr_lang (db_user, lang) values (_db_user, _lang); return true; END;
will return either the translation into i18n.curr_lang.lang for the current user or null
select i18n.tx_or_null($1, i18n.get_curr_lang())
will return either the translation into language <text> (2nd argument) or null
DECLARE _orig alias for $1; _lang alias for $2; trans_str text; BEGIN select into trans_str trans from i18n.translations where lang = _lang and orig = _orig; if not found then return null; end if; return trans_str; END;
unset the db language for the current user
select i18n.unset_curr_lang(CURRENT_USER);
unset the db language for a user (thereby reverting to the default English)
BEGIN delete from i18n.curr_lang where db_user = $1; return; END;
Return "original" from a "translated" string (1st argument) as per language (2nd argument).
DECLARE _trans alias for $1; _lang alias for $2; _orig text; BEGIN select orig into _orig from i18n.translations where trans = _trans and lang = _lang; return _orig; END;
select i18n.upd_tx((select i18n.get_curr_lang()), $1, $2)
declare _lang alias for $1; _orig alias for $2; _trans alias for $3; _tmp text; begin if _lang is null then raise notice 'i18n.upd_tx(text, text, text): Cannot create translation for language <NULL>.'; return False; end if; if _trans = _orig then raise notice 'i18n.upd_tx(text, text, text): Original = translation. Skipping.'; return True; end if; select into _tmp '1' from i18n.keys where orig = _orig; if not found then raise notice 'i18n.upd_tx(text, text, text): [%] not found in i18n.keys. Creating entry.', _orig; insert into i18n.keys (orig) values (_orig); end if; delete from i18n.translations where lang = _lang and orig = _orig; insert into i18n.translations (lang, orig, trans) values (_lang, _orig, _trans); raise notice 'i18n.upd_tx(%: [%] ==> [%])', _lang, _orig, _trans; return True; end;
gin_extract_query_trgm
gin_extract_value_trgm
gin_trgm_consistent
gin_trgm_triconsistent
gtrgm_compress
gtrgm_consistent
gtrgm_decompress
gtrgm_distance
gtrgm_in
gtrgm_options
gtrgm_out
gtrgm_penalty
gtrgm_picksplit
gtrgm_same
gtrgm_union
set_limit
show_limit
show_trgm
similarity
similarity_dist
similarity_op
strict_word_similarity
strict_word_similarity_commutator_op
strict_word_similarity_dist_commutator_op
strict_word_similarity_dist_op
strict_word_similarity_op
word_similarity
word_similarity_commutator_op
word_similarity_dist_commutator_op
word_similarity_dist_op
word_similarity_op
standard public schema
basic units are SI units, units derived from them and the Unity
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
name_short | text | UNIQUE NOT NULL | |
name_long | text | UNIQUE |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
name | text | UNIQUE | |
pk | serial | PRIMARY KEY |
Tables referencing this one via Foreign Key Constraints:
List of fields for a particular form
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
ref.paperwork_templates.pk | fk_form | integer | UNIQUE#1 UNIQUE#2 NOT NULL |
long_name | text |
UNIQUE#1
NOT NULL
The full name of the form field as presented to the user |
|
template_placeholder | text |
UNIQUE#2
NOT NULL
The name of the field as exposed to the form template. In other words, the placeholder in form_defs.template where the value entered into this field ist to be substituted. Must be a valid identifier in the form template's script language (viz. Python) |
|
help | text |
longer help text |
|
public.form_field_types.pk | fk_type | integer |
NOT NULL
the field type |
param | text |
a parameter for the field's behaviour, meaning is type-dependent |
|
display_order | integer |
used to *suggest* display order, but client may ignore |
Tables referencing this one via Foreign Key Constraints:
Queue table for rendered form instances. Note that the rows in this table will get deleted after processing. This is NOT an archive of form jobs.
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
clin.form_instances.pk | fk_form_instance | integer |
NOT NULL
points to the unrendered source instance of the form, useful for recalling submitted jobs for changing |
form | bytea |
NOT NULL
the rendered form, IOW binary data such as a PDF file |
|
public.form_job_targets.pk | fk_job_target | integer |
NOT NULL
points to the job target |
submitted_when | timestamp with time zone |
NOT NULL
DEFAULT now()
when was this form job submitted |
|
fk_submitted_by | integer |
NOT NULL
who of the staff submitted this form job |
|
submitted_from | text |
NOT NULL
the workplace this form job was submitted from |
|
status | text |
NOT NULL
DEFAULT 'submitted'::text
status of the form job: - submitted: ready for processing - in progress: being processed - removable: fit for removal (either cancelled, timed out or done) - halted: do not process |
the form job targets (eg. printers, faxes, smtp servers) in whatever granularity is needed locally, can be used for load balancing/round robin servicing busy queues
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
target | text | UNIQUE NOT NULL |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
fk_form | integer | UNIQUE NOT NULL | |
ref.papersizes.pk | fk_papersize | integer | NOT NULL |
offset_top | integer |
NOT NULL
in mm - and yes, they do change even within one type of form, but we do not want to change the offset for all the fields in that case |
|
offset_left | integer | NOT NULL | |
pages | integer | NOT NULL DEFAULT 1 | |
printer | text | NOT NULL | |
tray | text | NOT NULL | |
manual_feed | boolean | NOT NULL DEFAULT false | |
papertype | text |
NOT NULL
type of paper such as "watermarked rose", mainly for user interaction on manual_feed==true |
|
eject_direction | character(1) | NOT NULL | |
orientation | character(1) | NOT NULL |
allows lookup of whether a given client version can work with a particular database revision
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
client_type | text |
UNIQUE#1
NOT NULL
the type of client this row refers to |
|
client_version | text |
UNIQUE#1
NOT NULL
the version of the client this row refers to |
|
db_identity_hash | text |
UNIQUE#1
NOT NULL
the identity_hash of a database revision that the client version can work with |
this table stores items that originate in headless processes running in the background but need to be brought to the attention of someone, say, errors that an integrity checker may find
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
reported_when | timestamp with time zone | NOT NULL DEFAULT now() | |
reported_by | text |
NOT NULL
DEFAULT "current_user"()
who or what reported this condition, may be a user or software |
|
reported_to | text |
NOT NULL
DEFAULT 'admin'::text
who is this condition reported to, user or admin, used for filtering |
|
problem | text |
NOT NULL
a description of the reported condition |
|
solution | text |
a proposed solution to the problem |
|
context | text |
specific context for this condition that would make the problem field unnecessary complex and bulky |
|
category | text |
NOT NULL
a category for the condition, this is used for filtering, too |
|
cookie | text |
stores arbitrary information related to the condition, mostly used for semantic duplicates detection, eg. do not report on a single problem more than once in subsequent runs of, say, an import script |
Name | Constraint |
---|---|
housekeeping_todo_reported_to_check | CHECK ((reported_to = ANY (ARRAY['user'::text, 'admin'::text]))) |
each row defines one set of measurement reference data
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
fk_ref_src | integer |
UNIQUE#1
NOT NULL
source this reference data set was taken from |
|
data | text |
UNIQUE#1
NOT NULL
the actual reference data in some format, say, XML or like in a *.conf file |
|
comment | text |
units as used in real life
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
public.basic_unit.pk | fk_basic_unit | integer |
what is the SI-Standard unit for this, e.g. for the unit mg it is kg |
name_short | text | NOT NULL | |
name_long | text | ||
factor | double precision |
NOT NULL
DEFAULT 1.0
what factor the value with this unit has to be multiplied with to get values in the basic_unit |
|
shift | double precision |
NOT NULL
DEFAULT 0.0
what has to be added (after multiplying by factor) to a value with this unit to get values in the basic_unit |
will return either the translation into i18n.curr_lang.lang for the current user or the input, created in public schema for easy access
select i18n._($1)
will return either the translation into <text> (2nd argument) for the current user or the input, created in public schema for easy access
select i18n._($1, $2)
function used to check referential integrity from clin.lnk_type2item to clin.clin_root_item with a custom trigger
declare dummy integer; msg text; begin -- does fk_item change at all ? if TG_OP = 'UPDATE' then if NEW.fk_item = OLD.fk_item then return NEW; end if; end if; -- check referential integrity select into dummy 1 from clin.clin_root_item where pk_item=NEW.fk_item; if not found then msg := 'referential integrity violation: clin.lnk_type2item.fk_item [' || NEW.fk_item || '] not in <clin_root_item.pk_item>'; raise exception '%', msg; return NULL; end if; return NEW; end;
begin if TG_OP = 'INSERT' then NEW.source_time_zone := (select (extract(timezone from (select now()))::text || 'seconds')::interval); else NEW.source_time_zone := OLD.source_time_zone; end if; return NEW; end;
This schema holds data that is "reference material" which comes pre-installed with a GNUmed database. Examples are: - document types - ICD codes - form templates
holds ATC data
F-Key | Name | Type | Description |
---|---|---|---|
pk_coding_system | integer | NOT NULL DEFAULT nextval('ref.coding_system_root_pk_coding_system_seq'::regclass) | |
code | text |
NOT NULL
holds the ATC code |
|
term | text |
NOT NULL
the name of the drug component |
|
ref.data_source.pk | fk_data_source | integer | NOT NULL |
comment | text |
a comment on this ATC |
|
pk | serial | PRIMARY KEY | |
administration_route | text |
by what route this drug is to be given |
Table ref.atc Inherits coding_system_root,
used for importing ATC data
F-Key | Name | Type | Description |
---|---|---|---|
atc | text | ||
name | text | ||
ddd | text | ||
unit | text | ||
adro | text | ||
comment | text |
This table stores SQL queries and the associated hints. If the query returns TRUE the client should display the hint.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
query | text |
UNIQUE
This query is run against the database. |
|
title | text |
UNIQUE
A short title to summarize and identify the hint. |
|
hint | text |
When the query returns true this is the hint that should be displayed. |
|
url | text |
An URL relevant to the hint. |
|
is_active | boolean |
NOT NULL
DEFAULT true
Whether or not this query/hint is active. |
|
source | text |
Who provided query and hint. |
|
lang | text |
The language the hint is written in. |
|
recommendation_query | text |
Table ref.auto_hint Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
ref_auto_hint_sane_hint | CHECK ((gm.is_null_or_blank_string(hint) IS FALSE)) |
ref_auto_hint_sane_lang | CHECK ((gm.is_null_or_blank_string(lang) IS FALSE)) |
ref_auto_hint_sane_query | CHECK ((gm.is_null_or_blank_string(query) IS FALSE)) |
ref_auto_hint_sane_rec_query | CHECK (gm.is_null_or_non_empty_string(recommendation_query)) |
ref_auto_hint_sane_source | CHECK ((gm.is_null_or_blank_string(source) IS FALSE)) |
ref_auto_hint_sane_title | CHECK ((gm.is_null_or_blank_string(title) IS FALSE)) |
ref_auto_hint_sane_url | CHECK (gm.is_null_or_non_empty_string(url)) |
Tables referencing this one via Foreign Key Constraints:
items that *can* be billed to patients
F-Key | Name | Type | Description |
---|---|---|---|
pk_coding_system | integer | NOT NULL DEFAULT nextval('ref.coding_system_root_pk_coding_system_seq'::regclass) | |
code | text | NOT NULL | |
term | text | NOT NULL | |
ref.data_source.pk | fk_data_source | integer | NOT NULL |
comment | text | ||
pk | serial | PRIMARY KEY | |
amount | numeric |
NOT NULL
How much to bill for this item. |
|
currency | text |
DEFAULT 'u20AC'::text
The currency .amount is in. |
|
vat_multiplier | numeric |
NOT NULL
Multiplier to apply to .amount to calculate VAT, eg 0.19 = 19%, 0 = no VAT |
|
active | boolean |
NOT NULL
DEFAULT true
Whether this item is currently supposed to be used for billing patients. |
|
discountable | boolean |
NOT NULL
DEFAULT false
Whether discounts can be applied to this item. |
Table ref.billable Inherits coding_system_root,
Name | Constraint |
---|---|
ref_billable_sane_amount | CHECK ((amount >= (0)::numeric)) |
ref_billable_sane_currency | CHECK ((gm.is_null_or_blank_string(currency) IS FALSE)) |
ref_billable_sane_vat_multiplier | CHECK ((vat_multiplier >= (0)::numeric)) |
The medicine chest of this praxis. Stores brands of drugs patients have been taking regardless of whether that brand still exists or in fact ever existed as such (as in lifestyle thingies).
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
description | text |
NOT NULL
the name of this drug it is marketed under by the manufacturer |
|
preparation | text |
NOT NULL
the preparation the drug is delivered in, eg liquid, cream, tablet, etc. |
|
atc_code | text |
the Anatomic Therapeutic Chemical code for this drug, used to compute possible substitutes |
|
is_fake | boolean |
NOT NULL
DEFAULT false
Whether this truly is an actual brand of an actual drug rather than a fake brand created for documenting a, say, lifestyle nutrient or simply a component as opposed to a particular actual brand. |
|
ref.data_source.pk | fk_data_source | integer |
the data source this entry came from |
external_code | text |
an opaque code from an external data source, such as "PZN" in Germany |
|
external_code_type | text |
an opaque code type from an external data source, such as "PZN" in Germany |
Table ref.branded_drug Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
desc_not_empty | CHECK ((gm.is_null_or_blank_string(description) IS FALSE)) |
drug_sane_external_code | CHECK ((gm.is_null_or_non_empty_string(external_code) IS TRUE)) |
drug_sane_external_code_type | CHECK ((((external_code IS NULL) AND (external_code_type IS NULL)) OR ((external_code IS NOT NULL) AND (external_code_type IS NOT NULL)))) |
prep_not_empty | CHECK ((gm.is_null_or_blank_string(preparation) IS FALSE)) |
sane_atc | CHECK ((gm.is_null_or_non_empty_string(atc_code) IS TRUE)) |
Holds CodA/CodZ codes.
F-Key | Name | Type | Description |
---|---|---|---|
pk_coding_system | integer | NOT NULL DEFAULT nextval('ref.coding_system_root_pk_coding_system_seq'::regclass) | |
code | text | NOT NULL | |
term | text |
NOT NULL
The Reason-For-Encounter like meaning of the code. |
|
ref.data_source.pk | fk_data_source | integer | NOT NULL |
comment | text | ||
pk | serial | PRIMARY KEY | |
icd10_text | text |
The text of the corresponding ICD-10 code. |
Table ref.coda Inherits coding_system_root,
Name | Constraint |
---|---|
chk_ref_coda_sane_icd10_text | CHECK ((gm.is_null_or_blank_string(icd10_text) IS FALSE)) |
Synonyms for coded terms.
F-Key | Name | Type | Description |
---|---|---|---|
pk_thesaurus | serial | PRIMARY KEY | |
fk_code | integer | NOT NULL | |
synonym | text |
Name | Constraint |
---|---|
ref_code_thes_root_sane_synonym | CHECK ((gm.is_null_or_blank_string(synonym) IS FALSE)) |
Base table for coding system tables providing common fields.
F-Key | Name | Type | Description |
---|---|---|---|
pk_coding_system | serial | PRIMARY KEY | |
code | text | UNIQUE#1 NOT NULL | |
term | text | UNIQUE#2 NOT NULL | |
ref.data_source.pk | fk_data_source | integer |
UNIQUE#1
UNIQUE#2
NOT NULL
links to the data source for the external reference data set |
comment | text |
an arbitrary comment on the code and/or term, child tables will use this in different ways |
lists substances that are consumable by patients, whether or not linked to a branded drug
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
description | text |
UNIQUE#1
The substance name. |
|
atc_code | text |
(One) Anatomic Therapeutic Chemical code for this substance. Note that substances can have *several* ATC codes assigned to it by the WHO denoting different therapeutic uses and/or local application formulations. This code can *only* be used to *identify* the substance, not the use/application formulation thereof. |
|
amount | numeric |
UNIQUE#1
NOT NULL
The amount of substance. |
|
unit | text |
UNIQUE#1
The unit of the amount of substance. |
Table ref.consumable_substance Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
ref_consumable_sane_amount | CHECK ((amount >= (0)::numeric)) |
ref_consumable_sane_unit | CHECK ((gm.is_null_or_blank_string(unit) IS FALSE)) |
ref_subst_sane_atc | CHECK ((gm.is_null_or_non_empty_string(atc_code) IS TRUE)) |
ref_subst_sane_desc | CHECK ((gm.is_null_or_blank_string(description) IS FALSE)) |
Tables referencing this one via Foreign Key Constraints:
lists the available coding systems, classifications, ontologies and term lists
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
name_long | text |
UNIQUE#1
NOT NULL
long, complete (, ?official) name for this reference entry |
|
name_short | text |
UNIQUE#2
NOT NULL
shorthand for referring to this reference entry |
|
version | text |
UNIQUE#1
UNIQUE#2
NOT NULL
the exact and non-ambigous version for this entry |
|
description | text |
optional arbitrary description, should include external license |
|
source | text |
NOT NULL
non-ambigous description of source; with this info in hand it must be possible to locate a copy of the external data set |
|
lang | text |
Table ref.data_source Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
pre-installed document types, do not change these as they will be overwritten during database upgrades at the discretion of the GNUmed team
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
scope | text |
can be used to group document types according to applicability, say, per country |
|
description | text | NOT NULL |
types of forms which are available, generally by purpose (radiology, pathology, sick leave, Therapiebericht etc.)
F-Key | Name | Type | Description |
---|---|---|---|
name | text | UNIQUE NOT NULL | |
pk | serial | PRIMARY KEY |
Tables referencing this one via Foreign Key Constraints:
Holds ICD-10 codes.
F-Key | Name | Type | Description |
---|---|---|---|
pk_coding_system | integer | NOT NULL DEFAULT nextval('ref.coding_system_root_pk_coding_system_seq'::regclass) | |
code | text | NOT NULL | |
term | text | NOT NULL | |
ref.data_source.pk | fk_data_source | integer | NOT NULL |
comment | text | ||
pk | serial | PRIMARY KEY | |
star_code | text |
The star code which needs to be combined with the primary code to define the term. |
|
aux_code | text |
The auxiliary code which needs to be combined with the primary code to define the term. |
Table ref.icd10 Inherits coding_system_root,
Name | Constraint |
---|---|
chk_ref_icd10_sane_aux_code | CHECK ((gm.is_null_or_non_empty_string(aux_code) IS TRUE)) |
chk_ref_icd10_sane_star_code | CHECK ((gm.is_null_or_non_empty_string(star_code) IS TRUE)) |
Holds ICD-9 codes.
F-Key | Name | Type | Description |
---|---|---|---|
pk_coding_system | integer | NOT NULL DEFAULT nextval('ref.coding_system_root_pk_coding_system_seq'::regclass) | |
code | text | NOT NULL | |
term | text | NOT NULL | |
ref.data_source.pk | fk_data_source | integer | NOT NULL |
comment | text | ||
pk | serial | PRIMARY KEY |
Table ref.icd9 Inherits coding_system_root,
This table holds ICPC2 codes along with local extensions.
F-Key | Name | Type | Description |
---|---|---|---|
pk_coding_system | integer | NOT NULL DEFAULT nextval('ref.coding_system_root_pk_coding_system_seq'::regclass) | |
code | text | UNIQUE#1 NOT NULL | |
term | text | NOT NULL | |
ref.data_source.pk | fk_data_source | integer | NOT NULL |
comment | text | ||
pk | serial | PRIMARY KEY | |
code_extension | text |
UNIQUE#1
An extension to the bare code as defined in, say, the Netherlands or Australia. |
|
short_description | text |
A shorter term for this item |
|
icd10 | text[] |
Array of corresponding ICD-10 codes. |
|
criteria | text |
Criteria to guide in selection of the appropriate code. |
|
inclusions | text |
Items included under this code. |
|
exclusions | text[] |
Items NOT included under this code because there is another code for them. |
|
see_also | text[] |
See also under these items. |
|
ref.icpc_component.component | fk_component | smallint | NOT NULL |
ref.icpc_chapter.chapter | fk_chapter | character(1) | NOT NULL |
Table ref.icpc Inherits coding_system_root,
Name | Constraint |
---|---|
ref_icpc_sane_code_ext | CHECK ((gm.is_null_or_non_empty_string(code_extension) IS TRUE)) |
ref_icpc_sane_criteria | CHECK ((gm.is_null_or_non_empty_string(criteria) IS TRUE)) |
ref_icpc_sane_exclusions | CHECK (((exclusions IS NULL) OR (array_length(exclusions, 1) > 0))) |
ref_icpc_sane_icd10 | CHECK (((icd10 IS NULL) OR (array_length(icd10, 1) > 0))) |
ref_icpc_sane_inclusions | CHECK ((gm.is_null_or_non_empty_string(inclusions) IS TRUE)) |
ref_icpc_sane_see_also | CHECK (((see_also IS NULL) OR (array_length(see_also, 1) > 0))) |
ref_icpc_sane_term | CHECK ((gm.is_null_or_blank_string(term) IS FALSE)) |
Tables referencing this one via Foreign Key Constraints:
The chapters of the ICPC.
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
chapter | character(1) | UNIQUE NOT NULL | |
description | text | UNIQUE |
Name | Constraint |
---|---|
ref_icpc_chapter_sane_desc | CHECK ((gm.is_null_or_blank_string(description) IS FALSE)) |
Tables referencing this one via Foreign Key Constraints:
The Components of the ICPC chapters.
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
component | smallint | UNIQUE NOT NULL | |
description | text | UNIQUE | |
typical_soap_cat | text[] |
An array of SOAP categories which codes from this component are typically used for. |
Name | Constraint |
---|---|
ref_icpc_component_sane_desc | CHECK ((gm.is_null_or_blank_string(description) IS FALSE)) |
Tables referencing this one via Foreign Key Constraints:
Synonyms for ICPC terms.
F-Key | Name | Type | Description |
---|---|---|---|
pk_thesaurus | integer | NOT NULL DEFAULT nextval('ref.code_thesaurus_root_pk_thesaurus_seq'::regclass) | |
ref.icpc.pk_coding_system | fk_code | integer | NOT NULL |
synonym | text | ||
pk | serial | PRIMARY KEY |
Table ref.icpc_thesaurus Inherits code_thesaurus_root,
Name | Constraint |
---|---|
ref_code_thes_root_sane_synonym | CHECK ((gm.is_null_or_blank_string(synonym) IS FALSE)) |
ref_icpc_thes_sane_synonym | CHECK ((gm.is_null_or_blank_string(synonym) IS FALSE)) |
Arbitrary binary or textual snippets of data. Used as text macros or document "ribbons".
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
dem.staff.pk | fk_staff | integer |
UNIQUE#1
The provider this expansion applies to. If NULL: applies to all providers. |
keyword | text |
UNIQUE#1
NOT NULL
A keyword by which to uniquely identify this snippet. Can only exist once per provider. |
|
textual_data | text |
This holds the text of non-binary snippets. |
|
owner | text |
NOT NULL
DEFAULT "current_user"()
Who "owns" this text expansion. |
|
encrypted | boolean |
NOT NULL
DEFAULT false
If true the snippet is encrypted with GnuPG. |
|
binary_data | bytea |
This holds the binary data of non-textual snippets |
Name | Constraint |
---|---|
keyword_expansion_keyword_check | CHECK ((btrim(keyword) <> ''::text)) |
ref_kwd_exp_binary_xor_textual | CHECK ((((binary_data IS NULL) AND (textual_data IS NOT NULL)) OR ((binary_data IS NOT NULL) AND (textual_data IS NULL)))) |
ref_kwd_exp_sane_data | CHECK (((binary_data IS NULL) OR (octet_length(binary_data) > 0))) |
ref_kwd_exp_sane_keyword | CHECK ((gm.is_null_or_blank_string(keyword) IS FALSE)) |
ref_kwd_exp_sane_text | CHECK ((gm.is_null_or_non_empty_string(textual_data) IS TRUE)) |
This table links substances (INNs, mostly) as components into drugs.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
ref.branded_drug.pk | fk_brand | integer | UNIQUE#1 NOT NULL |
ref.consumable_substance.pk | fk_substance | integer | UNIQUE#1 NOT NULL |
Table ref.lnk_substance2brand Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
holds LOINC codes
F-Key | Name | Type | Description |
---|---|---|---|
pk_coding_system | integer | NOT NULL DEFAULT nextval('ref.coding_system_root_pk_coding_system_seq'::regclass) | |
code | text |
NOT NULL
holds LOINC_NUM |
|
term | text |
NOT NULL
holds either long_common_name or a ":".join of .component to .method_type |
|
ref.data_source.pk | fk_data_source | integer |
NOT NULL
points to a particular data source which in turn holds the version |
comment | text | ||
pk | serial | PRIMARY KEY | |
component | text | ||
property | text | ||
time_aspect | text | ||
system | text | ||
scale_type | text | ||
method_type | text | ||
related_names_1_old | text | ||
grouping_class | text | ||
loinc_internal_source | text | ||
dt_last_change | text | ||
change_type | text | ||
answer_list | text | ||
code_status | text | ||
maps_to | text | ||
scope | text | ||
normal_range | text | ||
ipcc_units | text | ||
reference | text | ||
exact_component_synonym | text | ||
molar_mass | text | ||
grouping_class_type | smallint | ||
formula | text | ||
species | text | ||
example_answers | text | ||
acs_synonyms | text | ||
base_name | text | ||
final | text | ||
naa_ccr_id | text | ||
code_table | text | ||
is_set_root | boolean | ||
panel_elements | text | ||
survey_question_text | text | ||
survey_question_source | text | ||
units_required | text | ||
submitted_units | text | ||
related_names_2 | text | ||
short_name | text | ||
order_obs | text | ||
cdisc_common_tests | text | ||
hl7_field_subfield_id | text | ||
external_copyright_notice | text | ||
example_units | text | ||
inpc_percentage | text | ||
long_common_name | text |
Table ref.loinc Inherits coding_system_root,
Holds OPS (German ICPM-CM) codes.
F-Key | Name | Type | Description |
---|---|---|---|
pk_coding_system | integer | NOT NULL DEFAULT nextval('ref.coding_system_root_pk_coding_system_seq'::regclass) | |
code | text | NOT NULL | |
term | text | NOT NULL | |
ref.data_source.pk | fk_data_source | integer | NOT NULL |
comment | text | ||
pk | serial | PRIMARY KEY | |
second_code | text | ||
requires_laterality | boolean |
Table ref.ops Inherits coding_system_root,
Holds codes from "other" coding systems for which no specific tables exist just yet.
F-Key | Name | Type | Description |
---|---|---|---|
pk_coding_system | integer | NOT NULL DEFAULT nextval('ref.coding_system_root_pk_coding_system_seq'::regclass) | |
code | text | NOT NULL | |
term | text | NOT NULL | |
ref.data_source.pk | fk_data_source | integer | NOT NULL |
comment | text | ||
pk | serial | PRIMARY KEY |
Table ref.other_code Inherits coding_system_root,
F-Key | Name | Type | Description |
---|---|---|---|
pk | serial | PRIMARY KEY | |
name | text | UNIQUE NOT NULL | |
size | point |
NOT NULL
(cm, cm) |
Tables referencing this one via Foreign Key Constraints:
form and letter template definitions
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
ref.form_types.pk | fk_template_type | integer | NOT NULL |
instance_type | text |
default document type to store documents generated from this form under, note that this may generate rows in blobs.doc_type if set to a non-existant document type |
|
name_short | text |
UNIQUE#2
NOT NULL
a short name for use in a GUI or some such |
|
name_long | text |
UNIQUE#1
UNIQUE#2
NOT NULL
a long name unambigously describing the form |
|
external_version | text | UNIQUE#1 NOT NULL | |
gnumed_revision | double precision |
UNIQUE#1
GnuMed internal form def version, may occur if we rolled out a faulty form def |
|
engine | text |
NOT NULL
DEFAULT 'O'::text
the business layer forms engine used to process this form, currently: - T: plain text (generic postprocessing) - L: LaTeX - H: HTML - O: OpenOffice - I: image editor (visual progress notes) - G: gnuplot scripts (test results graphing) - P: PDF form (FDF based) - A: AbiWord - X: Xe(La)TeX - S: XSLT |
|
in_use | boolean |
NOT NULL
DEFAULT true
whether this template is currently actively used in a given practice |
|
filename | text |
the filename from when the template data was imported if applicable, used by some engines (such as OOo) to differentiate what to do with certain files, such as *.ott vs. *.ods, GNUmed uses it to derive a file extension when exporting the template data |
|
data | bytea |
the template complete with placeholders in the format accepted by the engine defined in ref.paperwork_templates.engine |
|
edit_after_substitution | boolean |
NOT NULL
DEFAULT true
Whether to offer last-minute, manual, generic editing inbetween placeholder substitution and final output generation. |
Table ref.paperwork_templates Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
ref_templates_engine_range | CHECK ((engine = ANY (ARRAY['T'::text, 'L'::text, 'H'::text, 'O'::text, 'I'::text, 'G'::text, 'P'::text, 'A'::text, 'X'::text, 'S'::text]))) |
Text+image tags that can be applied to a person for characterization.
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk | serial | PRIMARY KEY | |
description | text |
UNIQUE
A textual description of the meaning of the tag. Keep this reasonably short. |
|
filename | text |
An example filename, mainly for preserving the file suffix. Set during import, suffix used during export. |
|
image | bytea |
NOT NULL
An image showing the meaning of the tag. |
Table ref.tag_image Inherits audit_fields,
Name | Constraint |
---|---|
audit_audit_fields_sane_modified_when | CHECK (((modified_when <= clock_timestamp()) IS TRUE)) |
ref_tag_image_sane_desc | CHECK ((gm.is_null_or_blank_string(description) IS FALSE)) |
ref_tag_image_sane_filename | CHECK ((gm.is_null_or_non_empty_string(filename) IS TRUE)) |
Tables referencing this one via Foreign Key Constraints:
F-Key | Name | Type | Description |
---|---|---|---|
pk_atc | integer | ||
atc | text | ||
term | text | ||
administration_route | text | ||
comment | text | ||
is_group_code | boolean | ||
atc_level | integer | ||
name_long | text | ||
name_short | text | ||
version | text | ||
lang | text | ||
pk_coding_system | integer | ||
pk_data_source | integer |
SELECT a.pk AS pk_atc , a.code AS atc , a.term , a.administration_route , a.comment , (octet_length (a.code) < 7 ) AS is_group_code , (octet_length (a.code) - (octet_length (a.code) / 3 ) ) AS atc_level , rds.name_long , rds.name_short , rds.version , rds.lang , a.pk_coding_system , a.fk_data_source AS pk_data_source FROM (ref.atc a JOIN ref.data_source rds ON ( (rds.pk = a.fk_data_source) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_auto_hint | integer | ||
query | text | ||
recommendation_query | text | ||
title | text | ||
hint | text | ||
url | text | ||
is_active | boolean | ||
source | text | ||
lang | text | ||
rationale4suppression | text | ||
recommendation | text | ||
md5_sum | text | ||
xmin_auto_hint | xid |
SELECT auto_hint.pk AS pk_auto_hint , auto_hint.query , auto_hint.recommendation_query , auto_hint.title , auto_hint.hint , auto_hint.url , auto_hint.is_active , auto_hint.source , auto_hint.lang , NULL::text AS rationale4suppression , NULL::text AS recommendation , md5 ( ( ( ( (COALESCE (auto_hint.query ,''::text ) || COALESCE (auto_hint.recommendation_query ,''::text ) ) || COALESCE (auto_hint.title ,''::text ) ) || COALESCE (auto_hint.hint ,''::text ) ) || COALESCE (auto_hint.url ,''::text ) ) ) AS md5_sum , auto_hint.xmin AS xmin_auto_hint FROM ref.auto_hint;
F-Key | Name | Type | Description |
---|---|---|---|
pk_billable | integer | ||
billable_code | text | ||
billable_description | text | ||
raw_amount | numeric | ||
amount_with_vat | numeric | ||
currency | text | ||
comment | text | ||
vat_multiplier | numeric | ||
active | boolean | ||
discountable | boolean | ||
catalog_long | text | ||
catalog_short | text | ||
catalog_version | text | ||
catalog_language | text | ||
pk_data_source | integer | ||
pk_coding_system_root | integer | ||
xmin_billable | xid |
SELECT r_b.pk AS pk_billable , r_b.code AS billable_code , r_b.term AS billable_description , r_b.amount AS raw_amount , (r_b.amount + (r_b.amount * r_b.vat_multiplier) ) AS amount_with_vat , r_b.currency , r_b.comment , r_b.vat_multiplier , r_b.active , r_b.discountable , r_ds.name_long AS catalog_long , r_ds.name_short AS catalog_short , r_ds.version AS catalog_version , r_ds.lang AS catalog_language , r_b.fk_data_source AS pk_data_source , r_b.pk_coding_system AS pk_coding_system_root , r_b.xmin AS xmin_billable FROM (ref.billable r_b LEFT JOIN ref.data_source r_ds ON ( (r_b.fk_data_source = r_ds.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_brand | integer | ||
brand | text | ||
preparation | text | ||
atc | text | ||
external_code | text | ||
external_code_type | text | ||
is_fake_brand | boolean | ||
components | text[] | ||
pk_components | integer[] | ||
pk_substances | integer[] | ||
pk_data_source | integer | ||
xmin_branded_drug | xid |
SELECT r_bd.pk AS pk_brand , r_bd.description AS brand , r_bd.preparation , r_bd.atc_code AS atc , r_bd.external_code , r_bd.external_code_type , r_bd.is_fake AS is_fake_brand , ( SELECT array_agg ( ( ( ( ( ( (r_cs.description || '::'::text) || r_cs.amount ) || '::'::text ) || r_cs.unit ) || '::'::text ) || COALESCE (r_cs.atc_code ,''::text ) ) ) AS array_agg FROM (ref.lnk_substance2brand r_ls2b JOIN ref.consumable_substance r_cs ON ( (r_ls2b.fk_substance = r_cs.pk) ) ) WHERE (r_ls2b.fk_brand = r_bd.pk) ) AS components , ( SELECT array_agg (r_ls2b.pk) AS array_agg FROM ref.lnk_substance2brand r_ls2b WHERE (r_ls2b.fk_brand = r_bd.pk) ) AS pk_components , ( SELECT array_agg (r_ls2b.fk_substance) AS array_agg FROM ref.lnk_substance2brand r_ls2b WHERE (r_ls2b.fk_brand = r_bd.pk) ) AS pk_substances , r_bd.fk_data_source AS pk_data_source , r_bd.xmin AS xmin_branded_drug FROM ref.branded_drug r_bd;
This view aggregates all official (reference) terms, including "official" synonyms, for which a corresponding code is known to the system.
F-Key | Name | Type | Description |
---|---|---|---|
code | text | ||
term | text | ||
coding_system | text | ||
coding_system_long | text | ||
version | text | ||
lang | text | ||
pk_generic_code | integer |
SELECT r_csr.code , r_csr.term , r_ds.name_short AS coding_system , r_ds.name_long AS coding_system_long , r_ds.version , r_ds.lang , r_csr.pk_coding_system AS pk_generic_code FROM (ref.coding_system_root r_csr JOIN ref.data_source r_ds ON ( (r_csr.fk_data_source = r_ds.pk) ) ) UNION SELECT ri.code , r_it.synonym AS term , r_ds.name_short AS coding_system , r_ds.name_long AS coding_system_long , r_ds.version , r_ds.lang , r_it.fk_code AS pk_generic_code FROM ( (ref.icpc_thesaurus r_it LEFT JOIN ref.icpc ri ON ( (r_it.fk_code = ri.pk_coding_system) ) ) LEFT JOIN ref.data_source r_ds ON ( (ri.fk_data_source = r_ds.pk) ) );
F-Key | Name | Type | Description |
---|---|---|---|
pk_component | integer | ||
brand | text | ||
substance | text | ||
amount | numeric | ||
unit | text | ||
preparation | text | ||
atc_substance | text | ||
atc_brand | text | ||
external_code_brand | text | ||
external_code_type_brand | text | ||
is_fake_brand | boolean | ||
is_in_use | boolean | ||
pk_brand | integer | ||
pk_consumable_substance | integer | ||
pk_data_source | integer | ||
xmin_lnk_substance2brand | xid |
SELECT r_ls2b.pk AS pk_component , r_bd.description AS brand , r_cs.description AS substance , r_cs.amount , r_cs.unit , r_bd.preparation , r_cs.atc_code AS atc_substance , r_bd.atc_code AS atc_brand , r_bd.external_code AS external_code_brand , r_bd.external_code_type AS external_code_type_brand , r_bd.is_fake AS is_fake_brand , (EXISTS ( SELECT 1 FROM clin.substance_intake c_si WHERE (c_si.fk_drug_component = r_ls2b.pk) LIMIT 1 ) ) AS is_in_use , r_ls2b.fk_brand AS pk_brand , r_cs.pk AS pk_consumable_substance , r_bd.fk_data_source AS pk_data_source , r_ls2b.xmin AS xmin_lnk_substance2brand FROM ( (ref.consumable_substance r_cs JOIN ref.lnk_substance2brand r_ls2b ON ( (r_cs.pk = r_ls2b.fk_substance) ) ) LEFT JOIN ref.branded_drug r_bd ON ( (r_ls2b.fk_brand = r_bd.pk) ) );
Denormalized generic codes.
F-Key | Name | Type | Description |
---|---|---|---|
pk_generic_code | integer | ||
code | text | ||
term | text | ||
name_long | text | ||
name_short | text | ||
version | text | ||
lang | text | ||
code_table | regclass | ||
pk_data_source | integer |
SELECT r_csr.pk_coding_system AS pk_generic_code , r_csr.code , r_csr.term , r_ds.name_long , r_ds.name_short , r_ds.version , r_ds.lang , (r_csr.tableoid)::regclass AS code_table , r_csr.fk_data_source AS pk_data_source FROM (ref.coding_system_root r_csr JOIN ref.data_source r_ds ON ( (r_ds.pk = r_csr.fk_data_source) ) );
View over denormalized ICPC2 data.
F-Key | Name | Type | Description |
---|---|---|---|
code | text | ||
code_extension | text | ||
extended_code | text | ||
term | text | ||
short_description | text | ||
code_chapter | character(1) | ||
chapter | text | ||
l10n_chapter | text | ||
code_component | smallint | ||
component | text | ||
l10n_component | text | ||
typical_soap_cat | text[] | ||
icd10 | text[] | ||
criteria | text | ||
inclusions | text | ||
exclusions | text[] | ||
see_also | text[] | ||
comment | text | ||
name_short | text | ||
name_long | text | ||
version | text | ||
lang | text | ||
pk_icpc | integer | ||
pk_data_source | integer |
SELECT ri.code , ri.code_extension , (ri.code || COALESCE (ri.code_extension ,''::text ) ) AS extended_code , ri.term , ri.short_description , ri.fk_chapter AS code_chapter , rich.description AS chapter , _ (rich.description) AS l10n_chapter , ri.fk_component AS code_component , rico.description AS component , _ (rico.description) AS l10n_component , rico.typical_soap_cat , ri.icd10 , ri.criteria , ri.inclusions , ri.exclusions , ri.see_also , ri.comment , rds.name_short , rds.name_long , rds.version , rds.lang , ri.pk AS pk_icpc , ri.fk_data_source AS pk_data_source FROM ( ( (ref.icpc ri JOIN ref.data_source rds ON ( (ri.fk_data_source = rds.pk) ) ) JOIN ref.icpc_chapter rich ON ( (ri.fk_chapter = rich.chapter) ) ) JOIN ref.icpc_component rico ON ( (ri.fk_component = rico.component) ) );
View over denormalized ICPC2 thesaurus.
F-Key | Name | Type | Description |
---|---|---|---|
pk_icpc_thesaurus | integer | ||
code | text | ||
term | text | ||
synonym | text | ||
pk_thesaurus | integer | ||
pk_coding_system | integer | ||
pk_icpc | integer |
SELECT rit.pk AS pk_icpc_thesaurus , ri.code , ri.term , rit.synonym , rit.pk_thesaurus , rit.fk_code AS pk_coding_system , ri.pk AS pk_icpc FROM (ref.icpc_thesaurus rit JOIN ref.icpc ri ON ( (rit.fk_code = ri.pk_coding_system) ) );
Just a slightly more convenient view over expansions.
F-Key | Name | Type | Description |
---|---|---|---|
pk_expansion | integer | ||
pk_staff | integer | ||
keyword | text | ||
expansion | text | ||
is_encrypted | boolean | ||
is_textual | boolean | ||
data_size | integer | ||
public_expansion | boolean | ||
private_expansion | boolean | ||
owner | text | ||
xmin_expansion | xid |
SELECT r_ke.pk AS pk_expansion , r_ke.fk_staff AS pk_staff , r_ke.keyword , r_ke.textual_data AS expansion , r_ke.encrypted AS is_encrypted , (r_ke.binary_data IS NULL) AS is_textual , octet_length (r_ke.binary_data) AS data_size , (r_ke.fk_staff IS NULL) AS public_expansion , (r_ke.fk_staff IS NOT NULL) AS private_expansion , r_ke.owner , r_ke.xmin AS xmin_expansion FROM ref.keyword_expansion r_ke;
F-Key | Name | Type | Description |
---|---|---|---|
pk_paperwork_template | integer | ||
name_short | text | ||
name_long | text | ||
external_version | text | ||
gnumed_revision | double precision | ||
template_type | text | ||
l10n_template_type | text | ||
instance_type | text | ||
l10n_instance_type | text | ||
engine | text | ||
in_use | boolean | ||
edit_after_substitution | boolean | ||
filename | text | ||
has_template_data | boolean | ||
last_modified | timestamp with time zone | ||
modified_by | text | ||
pk_template_type | integer | ||
xmin_paperwork_template | xid |
SELECT r_pt.pk AS pk_paperwork_template , r_pt.name_short , r_pt.name_long , r_pt.external_version , r_pt.gnumed_revision , ( SELECT r_ft.name FROM ref.form_types r_ft WHERE (r_ft.pk = r_pt.fk_template_type) ) AS template_type , ( SELECT _ (r_ft.name) AS _ FROM ref.form_types r_ft WHERE (r_ft.pk = r_pt.fk_template_type) ) AS l10n_template_type , COALESCE (r_pt.instance_type , ( SELECT r_ft.name FROM ref.form_types r_ft WHERE (r_ft.pk = r_pt.fk_template_type) ) ) AS instance_type , COALESCE (_ (r_pt.instance_type) , ( SELECT _ (r_ft.name) AS _ FROM ref.form_types r_ft WHERE (r_ft.pk = r_pt.fk_template_type) ) ) AS l10n_instance_type , r_pt.engine , r_pt.in_use , r_pt.edit_after_substitution , r_pt.filename , CASE WHEN (r_pt.data IS NOT NULL) THEN true ELSE false END AS has_template_data , r_pt.modified_when AS last_modified , COALESCE ( ( SELECT d_s.short_alias FROM dem.staff d_s WHERE (d_s.db_user = r_pt.modified_by) ) , ( ('<'::text || (r_pt.modified_by)::text ) || '>'::text ) ) AS modified_by , r_pt.fk_template_type AS pk_template_type , r_pt.xmin AS xmin_paperwork_template FROM ref.paperwork_templates r_pt;
F-Key | Name | Type | Description |
---|---|---|---|
pk_tag_image | integer | ||
description | text | ||
l10n_description | text | ||
filename | text | ||
size | integer | ||
is_in_use | boolean | ||
xmin_tag_image | xid |
SELECT rti.pk AS pk_tag_image , rti.description , _ (rti.description) AS l10n_description , rti.filename , octet_length (COALESCE (rti.image ,'\x'::bytea ) ) AS size , (EXISTS ( SELECT 1 FROM dem.identity_tag dit WHERE (dit.fk_tag = rti.pk) LIMIT 1 ) ) AS is_in_use , rti.xmin AS xmin_tag_image FROM ref.tag_image rti;
View over the text expansions relevant to the current user: a private expansion set up for the current user overrides a public expansion of the same keyword.
F-Key | Name | Type | Description |
---|---|---|---|
pk_expansion | integer | ||
pk_staff | integer | ||
keyword | text | ||
expansion | text | ||
is_encrypted | boolean | ||
is_textual | boolean | ||
data_size | integer | ||
public_expansion | boolean | ||
private_expansion | boolean | ||
owner | text | ||
xmin_expansion | xid |
SELECT DISTINCT ON (union_result.keyword) union_result.pk_expansion , union_result.pk_staff , union_result.keyword , union_result.expansion , union_result.is_encrypted , union_result.is_textual , union_result.data_size , union_result.public_expansion , union_result.private_expansion , union_result.owner , union_result.xmin_expansion FROM ( SELECT r_ke.pk AS pk_expansion , r_ke.fk_staff AS pk_staff , r_ke.keyword , r_ke.textual_data AS expansion , r_ke.encrypted AS is_encrypted , (r_ke.binary_data IS NULL) AS is_textual , octet_length (r_ke.binary_data) AS data_size , false AS public_expansion , true AS private_expansion , r_ke.owner , r_ke.xmin AS xmin_expansion FROM ref.keyword_expansion r_ke WHERE (r_ke.fk_staff = ( SELECT staff.pk FROM dem.staff WHERE (staff.db_user = "current_user" () ) ) ) UNION ALL SELECT r_ke.pk AS pk_expansion , r_ke.fk_staff AS pk_staff , r_ke.keyword , r_ke.textual_data AS expansion , r_ke.encrypted AS is_encrypted , (r_ke.binary_data IS NULL) AS is_textual , octet_length (r_ke.binary_data) AS data_size , true AS public_expansion , false AS private_expansion , r_ke.owner , r_ke.xmin AS xmin_expansion FROM ref.keyword_expansion r_ke WHERE (r_ke.fk_staff IS NULL) ORDER BY 9 DESC ) union_result;
begin execute 'notify "substance_in_brand_mod_db:"'; return NULL; end;
On INSERT/UPDATE drop .000 all-zero fractions from amounts.
BEGIN NEW.amount := gm.strip_allzeros_fraction(NEW.amount); return NEW; END;
When deleting from any child of ref.coding_system_root check whether its row is being used in any clin.lnk_code2item_root child.
DECLARE _msg text; BEGIN perform 1 from clin.lnk_code2item_root where fk_generic_code = NEW.pk_coding_system; if not FOUND then return OLD; end if; _msg := 'ref.trf_del_ref_code_tbl_check_backlink(): DELETE from ' || TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME || ': ' || 'pk_coding_system=(' || NEW.pk_coding_system || ') ' || 'in use in clin.lnk_code2item_root.fk_generic_code, ' || 'old pk_coding_system=(' || OLD.pk_coding_system || ')'; raise foreign_key_violation using message = _msg; return OLD; END;
If this drug component is taken by any patient do not modify it ( amount, unit, substance, brand).
BEGIN if OLD.fk_brand = NEW.fk_brand then if OLD.fk_substance = NEW.fk_substance then return NEW; end if; end if; perform 1 from clin.substance_intake c_si where c_si.fk_drug_component = OLD.pk limit 1; if NOT FOUND then return NEW; end if; raise exception '[ref.trf_do_not_update_component_if_taken_by_patient]: as long as drug component <%> is taken by a patient you cannot modify it', OLD.pk; return NEW; END;
If this substance is taken by any patient do not modify description, amount, or unit (case changes allowed).
DECLARE _msg text; BEGIN -- allow for case insensitive non-changes if upper(OLD.description) = upper(NEW.description) then if OLD.amount = NEW.amount then if upper(OLD.unit) = upper(NEW.unit) then return NEW; end if; end if; end if; _msg := '[ref.trf_do_not_update_substance_if_taken_by_patient]: as long as substance <' || OLD.description || '> is taken by a patient you cannot modify it'; perform 1 from clin.substance_intake c_si where c_si.fk_substance = OLD.pk limit 1; if FOUND then raise exception '%', _msg; end if; PERFORM 1 FROM clin.substance_intake c_si WHERE c_si.fk_drug_component IN ( -- get all PKs in component link table which -- represent the substance we want to modify SELECT r_ls2b.pk FROM ref.lnk_substance2brand r_ls2b WHERE r_ls2b.fk_substance = OLD.pk ) LIMIT 1; if FOUND then raise exception '%', _msg; end if; return NEW; END;
Do not allow updates to the template data if any forms already use this template.
BEGIN if NEW.data != OLD.data then -- look for references in clin.form_instances -- if there are any we fail this update no matter what perform 1 from clin.form_instances where fk_form_def = NEW.pk; if FOUND then raise exception 'Updating ref.paperwork_templates.data not allowed because it is referenced from existing forms.'; end if; end if; -- otherwise let it happen return NEW; END;
There must always be at least one component for any existing non-fake branded drug.
DECLARE _brand_is_deleted boolean; _is_fake_brand boolean; _has_other_components boolean; BEGIN -- if an UPDATE does NOT move the component to another drug -- there WILL be at least one component left if TG_OP = 'UPDATE' then if NEW.fk_brand = OLD.fk_brand then return NEW; end if; end if; -- fake drugs may become devoid of components select is_fake into _is_fake_brand from ref.branded_drug where pk = OLD.fk_brand ; if _is_fake_brand is TRUE then return OLD; end if; -- DELETEs may proceed if the drug has been deleted, too if TG_OP = 'DELETE' then select not exists ( select 1 from ref.branded_drug where pk = OLD.fk_brand ) into _brand_is_deleted; if _brand_is_deleted is TRUE then return OLD; end if; end if; -- if there are other components left after the -- UPDATE or DELETE everything is fine select exists ( select 1 from ref.lnk_substance2brand where fk_brand = OLD.fk_brand and fk_substance != OLD.fk_substance limit 1 ) into _has_other_components; if _has_other_components is TRUE then return OLD; end if; raise exception '[ref.trf_true_brands_must_have_components::%] brand must have components (brand <%> component <%>)', TG_OP, OLD.fk_brand, OLD.fk_substance; return OLD; END;
When updating any child of ref.coding_system_root check whether its row is being used in any clin.lnk_code2item_root child.
DECLARE _msg text; BEGIN if NEW.pk_coding_system = OLD.pk_coding_system then return NEW; end if; perform 1 from clin.lnk_code2item_root where fk_generic_code = NEW.pk_coding_system; if not FOUND then return NEW; end if; _msg := 'ref.trf_upd_ref_code_tbl_check_backlink(): UPDATE of ' || TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME || ': ' || 'pk_coding_system=(' || NEW.pk_coding_system || ') ' || 'in use in clin.lnk_code2item_root.fk_generic_code, ' || 'old pk_coding_system=(' || OLD.pk_coding_system || ')'; raise foreign_key_violation using message = _msg; return OLD; END;
A schema used for staging data imports.
F-Key | Name | Type | Description |
---|---|---|---|
pk_patient | integer | ||
modified_when | timestamp with time zone | ||
clin_when | timestamp with time zone | ||
modified_by | text | ||
soap_cat | text | ||
narrative | text | ||
pk_encounter | integer | ||
pk_episode | integer | ||
pk_health_issue | integer | ||
src_pk | integer | ||
src_table | text | ||
row_version | integer | ||
health_issue | text | ||
issue_laterality | character varying | ||
issue_active | boolean | ||
issue_clinically_relevant | boolean | ||
issue_confidential | boolean | ||
episode | text | ||
episode_open | boolean | ||
encounter_started | timestamp with time zone | ||
encounter_last_affirmed | timestamp with time zone | ||
encounter_type | text | ||
encounter_l10n_type | text |
SELECT v_emr_journal.pk_patient , v_emr_journal.modified_when , v_emr_journal.clin_when , v_emr_journal.modified_by , v_emr_journal.soap_cat , v_emr_journal.narrative , v_emr_journal.pk_encounter , v_emr_journal.pk_episode , v_emr_journal.pk_health_issue , v_emr_journal.src_pk , v_emr_journal.src_table , v_emr_journal.row_version , v_emr_journal.health_issue , v_emr_journal.issue_laterality , v_emr_journal.issue_active , v_emr_journal.issue_clinically_relevant , v_emr_journal.issue_confidential , v_emr_journal.episode , v_emr_journal.episode_open , v_emr_journal.encounter_started , v_emr_journal.encounter_last_affirmed , v_emr_journal.encounter_type , v_emr_journal.encounter_l10n_type FROM clin.v_emr_journal WHERE (v_emr_journal.src_table <> 'clin.suppressed_hint'::text);
Used to stage lab requests (from hl7 files, currently).
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone | NOT NULL DEFAULT now() | |
fk_episode | integer | NOT NULL | |
narrative | text | ||
soap_cat | text | DEFAULT 'p'::text | |
pk | integer | PRIMARY KEY DEFAULT nextval('clin.lab_request_pk_seq'::regclass) | |
clin.test_org.pk | fk_test_org | integer | UNIQUE#1 NOT NULL |
request_id | text | UNIQUE#1 NOT NULL | |
fk_requestor | integer | ||
lab_request_id | text | ||
lab_rxd_when | timestamp with time zone | ||
results_reported_when | timestamp with time zone | ||
request_status | text | NOT NULL | |
is_pending | boolean | NOT NULL DEFAULT true | |
diagnostic_service_section | text | ||
ordered_service | text | ||
fk_incoming_data_unmatched | integer | NOT NULL |
Name | Constraint |
---|---|
clin_root_item_soap_cat_check | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text])))) |
lab_request_request_id_check | CHECK ((btrim(request_id) <> ''::text)) |
lab_request_request_status_check | CHECK ((request_status = ANY (ARRAY['pending'::text, 'preliminary'::text, 'partial'::text, 'final'::text]))) |
staging_request_sane_request_id | CHECK ((gm.is_null_or_blank_string(request_id) IS FALSE)) |
staging_request_sane_status | CHECK ((request_status = ANY (ARRAY['pending'::text, 'preliminary'::text, 'partial'::text, 'final'::text]))) |
Tables referencing this one via Foreign Key Constraints:
used for importing LOINC data, columns correspond 1:1 with the LOINC CSV file fields
F-Key | Name | Type | Description |
---|---|---|---|
loinc_num | text | ||
component | text | ||
property | text | ||
time_aspect | text | ||
system | text | ||
scale_type | text | ||
method_type | text | ||
related_names_1_old | text | ||
class | text | ||
source | text | ||
dt_last_change | text | ||
change_type | text | ||
comments | text | ||
answer_list | text | ||
status | text | ||
map_to | text | ||
scope | text | ||
normal_range | text | ||
ipcc_units | text | ||
reference | text | ||
exact_component_synonym | text | ||
molar_mass | text | ||
class_type | text | ||
formula | text | ||
species | text | ||
example_answers | text | ||
acs_synonyms | text | ||
base_name | text | ||
final | text | ||
naa_ccr_id | text | ||
code_table | text | ||
is_set_root | text | ||
panel_elements | text | ||
survey_question_text | text | ||
survey_question_source | text | ||
units_required | text | ||
submitted_units | text | ||
related_names_2 | text | ||
short_name | text | ||
order_obs | text | ||
cdisc_common_tests | text | ||
hl7_field_subfield_id | text | ||
external_copyright_notice | text | ||
example_units | text | ||
inpc_percentage | text | ||
long_common_name | text |
Used to stage test results (from hl7 files, currently).
F-Key | Name | Type | Description |
---|---|---|---|
pk_audit | integer | NOT NULL DEFAULT nextval('audit.audit_fields_pk_audit_seq'::regclass) | |
row_version | integer | NOT NULL | |
modified_when | timestamp with time zone | NOT NULL DEFAULT now() | |
modified_by | name | NOT NULL DEFAULT "current_user"() | |
pk_item | integer | NOT NULL DEFAULT nextval('clin.clin_root_item_pk_item_seq'::regclass) | |
clin_when | timestamp with time zone | NOT NULL DEFAULT now() | |
fk_episode | integer | NOT NULL | |
narrative | text | ||
soap_cat | text | DEFAULT 'p'::text | |
pk | integer | PRIMARY KEY DEFAULT nextval('clin.test_result_pk_seq'::regclass) | |
fk_type | integer | NOT NULL | |
val_num | numeric | ||
val_alpha | text | ||
val_unit | text | ||
val_normal_min | numeric | ||
val_normal_max | numeric | ||
val_normal_range | text | ||
val_target_min | numeric | ||
val_target_max | numeric | ||
val_target_range | text | ||
abnormality_indicator | text | ||
norm_ref_group | text | ||
note_test_org | text | ||
material | text | ||
material_detail | text | ||
fk_intended_reviewer | integer | NOT NULL | |
staging.lab_request.pk | fk_request | integer | NOT NULL |
orig_intended_reviewer | text |
Name | Constraint |
---|---|
clin_root_item_soap_cat_check | CHECK (((soap_cat IS NULL) OR (lower(soap_cat) = ANY (ARRAY['s'::text, 'o'::text, 'a'::text, 'p'::text])))) |
numval_needs_unit | CHECK ((((val_num IS NOT NULL) AND (btrim(COALESCE(val_unit, ''::text)) <> ''::text)) OR (val_num IS NULL))) |
staging_numval_needs_unit | CHECK ((((val_num IS NOT NULL) AND (btrim(COALESCE(val_unit, ''::text)) <> ''::text)) OR (val_num IS NULL))) |
staging_sane_value | CHECK (((val_num IS NOT NULL) OR (val_alpha IS NOT NULL) OR ((val_num IS NULL) AND (val_alpha <> ''::text) AND (val_alpha IS NOT NULL)))) |
test_result_check | CHECK (((val_num IS NOT NULL) OR (val_alpha IS NOT NULL) OR ((val_num IS NULL) AND (val_alpha <> ''::text) AND (val_alpha IS NOT NULL)))) |
Generated by PostgreSQL Autodoc