From 03e79cae629f3e3cbaf8574816c29a11e9b157aa Mon Sep 17 00:00:00 2001 From: Leif Larsen Date: Fri, 20 Sep 2024 17:54:43 -0700 Subject: [PATCH] Sprint 14 DB change scripting --- database/README.md | 7 +- .../model/PhysicalDataDiagram(Sprint14).svg | 1708 +++++++++++++++++ .../STR_DSS_Physical_DB_Design_Sprint_14.md | 789 ++++++++ .../STR_DSS_Physical_DB_Design_Sprint_14.pdf | Bin 0 -> 55658 bytes .../Correct_Rental_Listings_Sprint_14.sql | 29 + .../utility/STR_DSS_Migration_Sprint_14.sql | 60 + 6 files changed, 2592 insertions(+), 1 deletion(-) create mode 100644 database/model/PhysicalDataDiagram(Sprint14).svg create mode 100644 database/model/STR_DSS_Physical_DB_Design_Sprint_14.md create mode 100644 database/model/STR_DSS_Physical_DB_Design_Sprint_14.pdf create mode 100644 database/utility/Correct_Rental_Listings_Sprint_14.sql create mode 100644 database/utility/STR_DSS_Migration_Sprint_14.sql diff --git a/database/README.md b/database/README.md index 7340a190..5e56744c 100644 --- a/database/README.md +++ b/database/README.md @@ -94,4 +94,9 @@ Each production release depends on the execution of a fixed set of scripts again - `ddl/STR_DSS_Incremental_DB_DDL_Sprint_13.sql` - `ddl/STR_DSS_Views_Sprint_13.sql` - `ddl/STR_DSS_Routines_Sprint_13.sql` - - `utility/Correct_Rental_Listings_Sprint_13.sql` \ No newline at end of file + - `utility/Correct_Rental_Listings_Sprint_13.sql` +- Sprint 14: + - `ddl/STR_DSS_Incremental_DB_DDL_Sprint_14.sql` + - `ddl/STR_DSS_Views_Sprint_14.sql` + - `seeding/STR_DSS_Data_Seeding_Sprint_14.sql` + - `utility/Correct_Rental_Listings_Sprint_14.sql` \ No newline at end of file diff --git a/database/model/PhysicalDataDiagram(Sprint14).svg b/database/model/PhysicalDataDiagram(Sprint14).svg new file mode 100644 index 00000000..7271a1be --- /dev/null +++ b/database/model/PhysicalDataDiagram(Sprint14).svg @@ -0,0 +1,1708 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + U + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Physical Data Diagram (Sprint 14) + Comments as mouse-over tips, zoom and pan.Read column and table comments by hovering the columns and tables. +Zoom with CTRL+whell mouse button, pan by dragging the diagram with the right-mouse button + by DbSchema.com - Wise CodersDbSchema is an universal database designer. +DbSchema has a free Community Edition. + + + + + + 🔗 Foreign Key dss_business_licence_fk_provided_by +dss_business_licence ref dss_organization ( providing_organization_id -> organization_id ) + +🔗 Foreign Key dss_business_licence_fk_provided_by +dss_business_licence ref dss_organization ( providing_organization_id -> organization_id ) +dss_business_licence_fk_provided_by + + + 🔗 Foreign Key dss_business_licence_fk_affecting +dss_business_licence ref dss_physical_address ( affected_by_physical_address_id -> physical_address_id ) + +🔗 Foreign Key dss_business_licence_fk_affecting +dss_business_licence ref dss_physical_address ( affected_by_physical_address_id -> physical_address_id ) +dss_business_licence_fk_affecting + + + 🔗 Foreign Key dss_business_licence_fk_classified_as +dss_business_licence ref dss_business_licence_status_type ( licence_status_type ) + +🔗 Foreign Key dss_business_licence_fk_classified_as +dss_business_licence ref dss_business_licence_status_type ( licence_status_type ) +dss_business_licence_fk_classified_as + + + 🔗 Foreign Key dss_email_message_fk_initiated_by +dss_email_message ref dss_user_identity ( initiating_user_identity_id -> user_identity_id ) + +🔗 Foreign Key dss_email_message_fk_initiated_by +dss_email_message ref dss_user_identity ( initiating_user_identity_id -> user_identity_id ) +dss_email_message_fk_initiated_by + + + 🔗 Foreign Key dss_email_message_fk_affecting +dss_email_message ref dss_user_identity ( affected_by_user_identity_id -> user_identity_id ) + +🔗 Foreign Key dss_email_message_fk_affecting +dss_email_message ref dss_user_identity ( affected_by_user_identity_id -> user_identity_id ) +dss_email_message_fk_affecting + + + 🔗 Foreign Key dss_email_message_fk_involving +dss_email_message ref dss_organization ( involved_in_organization_id -> organization_id ) + +🔗 Foreign Key dss_email_message_fk_involving +dss_email_message ref dss_organization ( involved_in_organization_id -> organization_id ) +dss_email_message_fk_involving + + + 🔗 Foreign Key dss_email_message_fk_communicating +dss_email_message ref dss_email_message_type ( email_message_type ) + +🔗 Foreign Key dss_email_message_fk_communicating +dss_email_message ref dss_email_message_type ( email_message_type ) +dss_email_message_fk_communicating + + + 🔗 Foreign Key dss_email_message_fk_batched_in +dss_email_message ref dss_email_message ( batching_email_message_id -> email_message_id ) + +🔗 Foreign Key dss_email_message_fk_batched_in +dss_email_message ref dss_email_message ( batching_email_message_id -> email_message_id ) +dss_email_message_fk_batched_in + + + 🔗 Foreign Key dss_email_message_fk_requested_by +dss_email_message ref dss_organization ( requesting_organization_id -> organization_id ) + +🔗 Foreign Key dss_email_message_fk_requested_by +dss_email_message ref dss_organization ( requesting_organization_id -> organization_id ) +dss_email_message_fk_requested_by + + + 🔗 Foreign Key dss_email_message_fk_included_in +dss_email_message ref dss_rental_listing ( concerned_with_rental_listing_id -> rental_listing_id ) + +🔗 Foreign Key dss_email_message_fk_included_in +dss_email_message ref dss_rental_listing ( concerned_with_rental_listing_id -> rental_listing_id ) +dss_email_message_fk_included_in + + + 🔗 Foreign Key dss_organization_fk_managed_by +dss_organization ref dss_organization ( managing_organization_id -> organization_id ) + +🔗 Foreign Key dss_organization_fk_managed_by +dss_organization ref dss_organization ( managing_organization_id -> organization_id ) +dss_organization_fk_managed_by + + + 🔗 Foreign Key dss_organization_fk_treated_as +dss_organization ref dss_organization_type ( organization_type ) + +🔗 Foreign Key dss_organization_fk_treated_as +dss_organization ref dss_organization_type ( organization_type ) +dss_organization_fk_treated_as + + + 🔗 Foreign Key dss_organization_contact_person_fk_contacted_for +dss_organization_contact_person ref dss_organization ( contacted_through_organization_id -> organization_id ) + +🔗 Foreign Key dss_organization_contact_person_fk_contacted_for +dss_organization_contact_person ref dss_organization ( contacted_through_organization_id -> organization_id ) +dss_organization_contact_person_fk_contacted_for + + + 🔗 Foreign Key dss_organization_contact_person_fk_subscribed_to +dss_organization_contact_person ref dss_email_message_type ( email_message_type ) + +🔗 Foreign Key dss_organization_contact_person_fk_subscribed_to +dss_organization_contact_person ref dss_email_message_type ( email_message_type ) +dss_organization_contact_person_fk_subscribed_to + + + 🔗 Foreign Key dss_physical_address_fk_contained_in +dss_physical_address ref dss_organization ( containing_organization_id -> organization_id ) + +🔗 Foreign Key dss_physical_address_fk_contained_in +dss_physical_address ref dss_organization ( containing_organization_id -> organization_id ) +dss_physical_address_fk_contained_in + + + 🔗 Foreign Key dss_physical_address_fk_replaced_by +dss_physical_address ref dss_physical_address ( replacing_physical_address_id -> physical_address_id ) + +🔗 Foreign Key dss_physical_address_fk_replaced_by +dss_physical_address ref dss_physical_address ( replacing_physical_address_id -> physical_address_id ) +dss_physical_address_fk_replaced_by + + + 🔗 Foreign Key dss_rental_listing_fk_offered_by +dss_rental_listing ref dss_organization ( offering_organization_id -> organization_id ) + +🔗 Foreign Key dss_rental_listing_fk_offered_by +dss_rental_listing ref dss_organization ( offering_organization_id -> organization_id ) +dss_rental_listing_fk_offered_by + + + 🔗 Foreign Key dss_rental_listing_fk_included_in +dss_rental_listing ref dss_rental_listing_report ( including_rental_listing_report_id -> rental_listing_report_id ) + +🔗 Foreign Key dss_rental_listing_fk_included_in +dss_rental_listing ref dss_rental_listing_report ( including_rental_listing_report_id -> rental_listing_report_id ) +dss_rental_listing_fk_included_in + + + 🔗 Foreign Key dss_rental_listing_fk_located_at +dss_rental_listing ref dss_physical_address ( locating_physical_address_id -> physical_address_id ) + +🔗 Foreign Key dss_rental_listing_fk_located_at +dss_rental_listing ref dss_physical_address ( locating_physical_address_id -> physical_address_id ) +dss_rental_listing_fk_located_at + + + 🔗 Foreign Key dss_rental_listing_fk_generating +dss_rental_listing ref dss_rental_listing ( derived_from_rental_listing_id -> rental_listing_id ) + +🔗 Foreign Key dss_rental_listing_fk_generating +dss_rental_listing ref dss_rental_listing ( derived_from_rental_listing_id -> rental_listing_id ) +dss_rental_listing_fk_generating + + + 🔗 Foreign Key dss_rental_listing_fk_classified_as +dss_rental_listing ref dss_listing_status_type ( listing_status_type ) + +🔗 Foreign Key dss_rental_listing_fk_classified_as +dss_rental_listing ref dss_listing_status_type ( listing_status_type ) +dss_rental_listing_fk_classified_as + + + 🔗 Foreign Key dss_rental_listing_fk_governed_by +dss_rental_listing ref dss_business_licence ( governing_business_licence_id -> business_licence_id ) + +🔗 Foreign Key dss_rental_listing_fk_governed_by +dss_rental_listing ref dss_business_licence ( governing_business_licence_id -> business_licence_id ) +dss_rental_listing_fk_governed_by + + + 🔗 Foreign Key dss_rental_listing_contact_fk_contacted_for +dss_rental_listing_contact ref dss_rental_listing ( contacted_through_rental_listing_id -> rental_listing_id ) + +🔗 Foreign Key dss_rental_listing_contact_fk_contacted_for +dss_rental_listing_contact ref dss_rental_listing ( contacted_through_rental_listing_id -> rental_listing_id ) +dss_rental_listing_contact_fk_contacted_for + + + 🔗 Foreign Key dss_rental_listing_extract_fk_filtered_by +dss_rental_listing_extract ref dss_organization ( filtering_organization_id -> organization_id ) + +🔗 Foreign Key dss_rental_listing_extract_fk_filtered_by +dss_rental_listing_extract ref dss_organization ( filtering_organization_id -> organization_id ) +dss_rental_listing_extract_fk_filtered_by + + + 🔗 Foreign Key dss_rental_listing_report_fk_provided_by +dss_rental_listing_report ref dss_organization ( providing_organization_id -> organization_id ) + +🔗 Foreign Key dss_rental_listing_report_fk_provided_by +dss_rental_listing_report ref dss_organization ( providing_organization_id -> organization_id ) +dss_rental_listing_report_fk_provided_by + + + 🔗 Foreign Key dss_upload_delivery_fk_provided_by +dss_upload_delivery ref dss_organization ( providing_organization_id -> organization_id ) + +🔗 Foreign Key dss_upload_delivery_fk_provided_by +dss_upload_delivery ref dss_organization ( providing_organization_id -> organization_id ) +dss_upload_delivery_fk_provided_by + + + 🔗 Foreign Key dss_upload_line_fk_included_in +dss_upload_line ref dss_upload_delivery ( including_upload_delivery_id -> upload_delivery_id ) + +🔗 Foreign Key dss_upload_line_fk_included_in +dss_upload_line ref dss_upload_delivery ( including_upload_delivery_id -> upload_delivery_id ) +dss_upload_line_fk_included_in + + + 🔗 Foreign Key dss_user_identity_fk_representing +dss_user_identity ref dss_organization ( represented_by_organization_id -> organization_id ) + +🔗 Foreign Key dss_user_identity_fk_representing +dss_user_identity ref dss_organization ( represented_by_organization_id -> organization_id ) +dss_user_identity_fk_representing + + + 🔗 Foreign Key dss_user_identity_fk_given +dss_user_identity ref dss_access_request_status ( access_request_status_cd ) + +🔗 Foreign Key dss_user_identity_fk_given +dss_user_identity ref dss_access_request_status ( access_request_status_cd ) +dss_user_identity_fk_given + + + 🔗 Foreign Key dss_user_role_assignment_fk_granted +dss_user_role_assignment ref dss_user_role ( user_role_cd ) + +🔗 Foreign Key dss_user_role_assignment_fk_granted +dss_user_role_assignment ref dss_user_role ( user_role_cd ) +dss_user_role_assignment_fk_granted + + + 🔗 Foreign Key dss_user_role_assignment_fk_granted_to +dss_user_role_assignment ref dss_user_identity ( user_identity_id ) + +🔗 Foreign Key dss_user_role_assignment_fk_granted_to +dss_user_role_assignment ref dss_user_identity ( user_identity_id ) +dss_user_role_assignment_fk_granted_to + + + 🔗 Foreign Key dss_user_role_privilege_fk_conferred_by +dss_user_role_privilege ref dss_user_role ( user_role_cd ) + +🔗 Foreign Key dss_user_role_privilege_fk_conferred_by +dss_user_role_privilege ref dss_user_role ( user_role_cd ) +dss_user_role_privilege_fk_conferred_by + + + 🔗 Foreign Key dss_user_role_privilege_fk_conferring +dss_user_role_privilege ref dss_user_privilege ( user_privilege_cd ) + +🔗 Foreign Key dss_user_role_privilege_fk_conferring +dss_user_role_privilege ref dss_user_privilege ( user_privilege_cd ) +dss_user_role_privilege_fk_conferring + + + + +dss_access_request_statusTable dss.dss_access_request_status + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A potential status for a user access request (e.g. Requested, Approved, or Denied) + 🔑 Pk dss_access_request_status_pk ( access_request_status_cd ) access_request_status_cd⧉ access_request_status_cd + * varchar(25) + ↙ dss_user_identity( access_request_status_cd ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + System-consistent code for the request status +varchar(25)🔗 Referred by dss_user_identity ( access_request_status_cd ) + access_request_status_nm⧉ access_request_status_nm + * varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Business term for the request status +varchar(250) + + + + +dss_business_licenceTable dss.dss_business_licence + 🔑 Pk dss_business_licence_pk ( business_licence_id ) business_licence_id⧉ business_licence_id + * bigint + ↙ dss_rental_listing( business_licence_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint🔗 Referred by dss_rental_listing ( governing_business_licence_id -> business_licence_id ) + 🔍 Unq dss_business_licence_uk ( providing_organization_id, business_licence_no ) business_licence_no⧉ business_licence_no + * varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The local government issued licence number that applies to the rental offering +varchar(50) expiry_dt⧉ expiry_dt + * date + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The date on which the business licence expires +date 🔍 dss_business_licence_i3 ( physical_rental_address_txt ) physical_rental_address_txt⧉ physical_rental_address_txt + varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The full physical address of the location that is licenced as a short-term rental business +varchar(250) licence_type_txt⧉ licence_type_txt + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Free form description of the type of business licence issued (e.g. short-term rental, bed and breakfast, boarding and lodging, tourist accommodation) +varchar(320) restriction_txt⧉ restriction_txt + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Notes related to any restrictions associated with the licence +varchar(320) business_nm⧉ business_nm + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Official name of the business +varchar(320) mailing_street_address_txt⧉ mailing_street_address_txt + varchar(100) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Street address component of the business mailing address +varchar(100) mailing_city_nm⧉ mailing_city_nm + varchar(100) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + City component of the business mailing address +varchar(100) mailing_province_cd⧉ mailing_province_cd + varchar(2) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Province component of the business mailing address +varchar(2) mailing_postal_cd⧉ mailing_postal_cd + varchar(10) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Postal code component of the business mailing address +varchar(10) business_owner_nm⧉ business_owner_nm + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Full name of the registered business owner +varchar(320) business_owner_phone_no⧉ business_owner_phone_no + varchar(30) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Phone number of the business owner +varchar(30) business_owner_email_address_dsc⧉ business_owner_email_address_dsc + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Email address of the business owner +varchar(320) business_operator_nm⧉ business_operator_nm + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Full name of the business operator or property manager +varchar(320) business_operator_phone_no⧉ business_operator_phone_no + varchar(30) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Phone number of the business operator +varchar(30) business_operator_email_address_dsc⧉ business_operator_email_address_dsc + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Email address of the business operator +varchar(320) infraction_txt⧉ infraction_txt + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Description of an infraction +varchar(320) infraction_dt⧉ infraction_dt + date + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The date on which the described infraction occurred +date property_zone_txt⧉ property_zone_txt + varchar(100) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Description or name of the property zoning +varchar(100) available_bedrooms_qty⧉ available_bedrooms_qty + smallint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The number of bedrooms in the dwelling unit that are available for short term rental +smallint max_guests_allowed_qty⧉ max_guests_allowed_qty + smallint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The number of guests that can be accommodated +smallint is_principal_residence⧉ is_principal_residence + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the short term rental property is a principal residence +boolean is_owner_living_onsite⧉ is_owner_living_onsite + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the owner lives on the property +boolean is_owner_property_tenant⧉ is_owner_property_tenant + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the business owner rents the property +boolean property_folio_no⧉ property_folio_no + varchar(30) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The number used to identify the property +varchar(30) property_parcel_identifier_no⧉ property_parcel_identifier_no + varchar(30) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The PID number assigned by the Land Title and Survey Authority that identifies the piece of land +varchar(30) property_legal_description_txt⧉ property_legal_description_txt + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The physical description of the property as it is registered with the Land Title and Survey Authority +varchar(320) 🔍 dss_business_licence_i1 ( licence_status_type ) licence_status_type⧉ licence_status_type + * varchar(25) + ↗ dss_business_licence( licence_status_type ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +varchar(25)🔗 References dss_business_licence_status_type ( licence_status_type ) + 🔍 Unq dss_business_licence_uk ( providing_organization_id, business_licence_no ) providing_organization_id⧉ providing_organization_id + * bigint + ↗ dss_business_licence( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_organization ( providing_organization_id -> organization_id ) + 🔍 dss_business_licence_i2 ( affected_by_physical_address_id ) affected_by_physical_address_id⧉ affected_by_physical_address_id + bigint + ↗ dss_business_licence( physical_address_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_physical_address ( affected_by_physical_address_id -> physical_address_id ) + upd_dtm⧉ upd_dtm + * timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_business_licence_status_typeTable dss.dss_business_licence_status_type + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A potential status for a BUSINESS LICENCE (e.g. Pending, Issued, Suspended, Revoked, Cancelled, Expired) + 🔑 Pk dss_business_licence_status_type_pk ( licence_status_type ) licence_status_type⧉ licence_status_type + * varchar(25) + ↙ dss_business_licence( licence_status_type ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + System-consistent code for the business licence status (e.g. Pending, Issued, Suspended, Revoked, Cancelled, Expired) +varchar(25)🔗 Referred by dss_business_licence ( licence_status_type ) + licence_status_type_nm⧉ licence_status_type_nm + * varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Business term for the licence status (e.g. Pending, Issued, Suspended, Revoked, Cancelled, Expired) +varchar(50) licence_status_sort_no⧉ licence_status_sort_no + * smallint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Relative order in which the business prefers to see the status listed +smallint + + + + +dss_email_messageTable dss.dss_email_message + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A message that is sent to one or more recipients via email + 🔑 Pk dss_email_message_pk ( email_message_id ) email_message_id⧉ email_message_id + * bigint + ↙ dss_email_message( email_message_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint🔗 Referred by dss_email_message ( batching_email_message_id -> email_message_id ) + email_message_type⧉ email_message_type + * varchar(50) + ↗ dss_email_message( email_message_type ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +varchar(50)🔗 References dss_email_message_type ( email_message_type ) + 🔍 dss_email_message_i1 ( concerned_with_rental_listing_id, message_delivery_dtm ) message_delivery_dtm⧉ message_delivery_dtm + * timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A timestamp indicating when the message delivery was initiated +timestamptz message_template_dsc⧉ message_template_dsc + * varchar(4000) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The full text or template for the message that is sent +varchar(4000) is_submitter_cc_required⧉ is_submitter_cc_required + * boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the user initiating the message should receive a copy of the email +boolean is_host_contacted_externally⧉ is_host_contacted_externally + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the the property host has already been contacted by external means +boolean is_with_standard_detail⧉ is_with_standard_detail + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether message body should include text a block of detail text that is standard for the message type +boolean lg_phone_no⧉ lg_phone_no + varchar(30) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A phone number associated with a Local Government contact +varchar(30) unreported_listing_no⧉ unreported_listing_no + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The platform issued identification number for the listing (if not included in a rental listing report) +varchar(50) host_email_address_dsc⧉ host_email_address_dsc + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + E-mail address of a short term rental host (directly entered by the user as a message recipient) +varchar(320) lg_email_address_dsc⧉ lg_email_address_dsc + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + E-mail address of a local government contact (directly entered by the user as a message recipient) +varchar(320) cc_email_address_dsc⧉ cc_email_address_dsc + varchar(4000) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + E-mail address of a secondary message recipient (directly entered by the user) +varchar(4000) unreported_listing_url⧉ unreported_listing_url + varchar(4000) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + User-provided URL for a short-term rental platform listing that is the subject of the message +varchar(4000) lg_str_bylaw_url⧉ lg_str_bylaw_url + varchar(4000) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + User-provided URL for a local government bylaw that is the subject of the message +varchar(4000) custom_detail_txt⧉ custom_detail_txt + varchar(4000) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Free form text that should be included in the message body +varchar(4000) 🔍 dss_email_message_i1 ( concerned_with_rental_listing_id, message_delivery_dtm ) concerned_with_rental_listing_id⧉ concerned_with_rental_listing_id + bigint + ↗ dss_email_message( rental_listing_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_rental_listing ( concerned_with_rental_listing_id -> rental_listing_id ) + initiating_user_identity_id⧉ initiating_user_identity_id + bigint + ↗ dss_email_message( user_identity_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_user_identity ( initiating_user_identity_id -> user_identity_id ) + affected_by_user_identity_id⧉ affected_by_user_identity_id + bigint + ↗ dss_email_message( user_identity_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_user_identity ( affected_by_user_identity_id -> user_identity_id ) + involved_in_organization_id⧉ involved_in_organization_id + bigint + ↗ dss_email_message( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_organization ( involved_in_organization_id -> organization_id ) + batching_email_message_id⧉ batching_email_message_id + bigint + ↗ dss_email_message( email_message_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_email_message ( batching_email_message_id -> email_message_id ) + requesting_organization_id⧉ requesting_organization_id + bigint + ↗ dss_email_message( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_organization ( requesting_organization_id -> organization_id ) + external_message_no⧉ external_message_no + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + External identifier for tracking the message delivery progress +varchar(50) upd_dtm⧉ upd_dtm + timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_email_message_typeTable dss.dss_email_message_type + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The type or purpose of a system generated message (e.g. Notice of Takedown, Takedown Request, Delisting Warning, Delisting Request, Access Granted Notification, Access Denied Notification) + 🔑 Pk dss_email_message_type_pk ( email_message_type ) email_message_type⧉ email_message_type + * varchar(50) + ↙ dss_email_message( email_message_type ) + ↙ dss_organization_contact_person( email_message_type ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + System-consistent code for the type or purpose of the message (e.g. Notice of Takedown, Takedown Request, Delisting Warning, Delisting Request, Access Granted Notification, Access Denied Notification) +varchar(50)🔗 Referred by dss_email_message ( email_message_type ) +Referred by dss_organization_contact_person ( email_message_type ) + email_message_type_nm⧉ email_message_type_nm + * varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Business term for the type or purpose of the message (e.g. Notice of Takedown, Takedown Request, Delisting Warning, Delisting Request, Access Granted Notification, Access Denied Notification) +varchar(250) + + + + +dss_listing_status_typeTable dss.dss_listing_status_type + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A potential status for a CURRENT RENTAL LISTING (e.g. New, Active, Inactive, Reassigned, Taken Down) + 🔑 Pk dss_listing_status_type_pk ( listing_status_type ) listing_status_type⧉ listing_status_type + * varchar(2) + ↙ dss_rental_listing( listing_status_type ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + System-consistent code for the listing status (e.g. N, A, I, R, T) +varchar(2)🔗 Referred by dss_rental_listing ( listing_status_type ) + listing_status_type_nm⧉ listing_status_type_nm + * varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Business term for the listing status (e.g. New, Active, Inactive, Reassigned, Taken Down) +varchar(50) listing_status_sort_no⧉ listing_status_sort_no + * smallint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Relative order in which the business prefers to see the status listed +smallint + + + + +dss_organizationTable dss.dss_organization + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A private company or governing body component that plays a role in short term rental reporting or enforcement + 🔑 Pk dss_organization_pk ( organization_id ) organization_id⧉ organization_id + * bigint + ↙ dss_business_licence( organization_id ) + ↙ dss_email_message( organization_id ) + ↙ dss_email_message( organization_id ) + ↙ dss_organization( organization_id ) + ↙ dss_organization_contact_person( organization_id ) + ↙ dss_physical_address( organization_id ) + ↙ dss_rental_listing( organization_id ) + ↙ dss_rental_listing_extract( organization_id ) + ↙ dss_rental_listing_report( organization_id ) + ↙ dss_upload_delivery( organization_id ) + ↙ dss_user_identity( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint🔗 Referred by dss_business_licence ( providing_organization_id -> organization_id ) +Referred by dss_email_message ( involved_in_organization_id -> organization_id ) +Referred by dss_email_message ( requesting_organization_id -> organization_id ) +Referred by dss_organization ( managing_organization_id -> organization_id ) +Referred by dss_organization_contact_person ( contacted_through_organization_id -> organization_id ) +Referred by dss_physical_address ( containing_organization_id -> organization_id ) +Referred by dss_rental_listing ( offering_organization_id -> organization_id ) +Referred by dss_rental_listing_extract ( filtering_organization_id -> organization_id ) +Referred by dss_rental_listing_report ( providing_organization_id -> organization_id ) +Referred by dss_upload_delivery ( providing_organization_id -> organization_id ) +Referred by dss_user_identity ( represented_by_organization_id -> organization_id ) + 🔍 dss_organization_i1 ( organization_type ) organization_type⧉ organization_type + * varchar(25) + ↗ dss_organization( organization_type ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +varchar(25)🔗 References dss_organization_type ( organization_type ) + 🔍 Unq dss_organization_uk ( organization_cd ) organization_cd⧉ organization_cd + * varchar(25) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + An immutable system code that identifies the organization (e.g. CEU, AIRBNB) +varchar(25) organization_nm⧉ organization_nm + * varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A human-readable name that identifies the organization (e.g. Corporate Enforecement Unit, City of Victoria) +varchar(250) local_government_type⧉ local_government_type + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A sub-type of local government organization used for sorting and grouping or members +varchar(50) economic_region_dsc⧉ economic_region_dsc + varchar(100) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A free form description of the economic region to which a Local Government Subdivision belongs +varchar(100) is_lg_participating⧉ is_lg_participating + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether a LOCAL GOVERNMENT ORGANIZATION participates in Short Term Rental Data Sharing +boolean is_str_prohibited⧉ is_str_prohibited + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether a LOCAL GOVERNMENT ORGANIZATION entirely prohibits short term housing rentals +boolean is_principal_residence_required⧉ is_principal_residence_required + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether a LOCAL GOVERNMENT SUBDIVISION is subject to Provincial Principal Residence Short Term Rental restrictions +boolean is_business_licence_required⧉ is_business_licence_required + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether a LOCAL GOVERNMENT SUBDIVISION requires a business licence for Short Term Rental operation +boolean area_geometry⧉ area_geometry + geometry + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + the multipolygon shape identifying the boundaries of a local government subdivision +geometry 🔍 dss_organization_i2 ( managing_organization_id ) managing_organization_id⧉ managing_organization_id + bigint + ↗ dss_organization( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Self-referential hierarchical foreign key +bigint🔗 References dss_organization ( managing_organization_id -> organization_id ) + upd_dtm⧉ upd_dtm + * timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_organization_contact_personTable dss.dss_organization_contact_person + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A person who has been identified as a notable contact for a particular organization + 🔑 Pk dss_organization_contact_person_pk ( organization_contact_person_id ) organization_contact_person_id⧉ organization_contact_person_id + * bigint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint email_address_dsc⧉ email_address_dsc + * varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + E-mail address given for the contact by the organization +varchar(320) is_primary⧉ is_primary + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the contact should receive all communications directed at the organization +boolean given_nm⧉ given_nm + varchar(25) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A name given to a person so that they can easily be identified among their family members (in some cultures, this is often the first name) +varchar(25) family_nm⧉ family_nm + varchar(25) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A name that is often shared amongst members of the same family (commonly known as a surname within some cultures) +varchar(25) phone_no⧉ phone_no + varchar(30) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Phone number given for the contact by the organization (contains only digits) +varchar(30) contacted_through_organization_id⧉ contacted_through_organization_id + * bigint + ↗ dss_organization_contact_person( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_organization ( contacted_through_organization_id -> organization_id ) + email_message_type⧉ email_message_type + varchar(50) + ↗ dss_organization_contact_person( email_message_type ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +varchar(50)🔗 References dss_email_message_type ( email_message_type ) + upd_dtm⧉ upd_dtm + * timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_organization_typeTable dss.dss_organization_type + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A level of government or business category + 🔑 Pk dss_organization_type_pk ( organization_type ) organization_type⧉ organization_type + * varchar(25) + ↙ dss_organization( organization_type ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + System-consistent code for a level of government or business category +varchar(25)🔗 Referred by dss_organization ( organization_type ) + organization_type_nm⧉ organization_type_nm + * varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Business term for a level of government or business category +varchar(250) + + + + +dss_physical_addressTable dss.dss_physical_address + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A property address that includes any verifiable BC attributes + 🔑 Pk dss_physical_address_pk ( physical_address_id ) physical_address_id⧉ physical_address_id + * bigint + ↙ dss_business_licence( physical_address_id ) + ↙ dss_physical_address( physical_address_id ) + ↙ dss_rental_listing( physical_address_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint🔗 Referred by dss_business_licence ( affected_by_physical_address_id -> physical_address_id ) +Referred by dss_physical_address ( replacing_physical_address_id -> physical_address_id ) +Referred by dss_rental_listing ( locating_physical_address_id -> physical_address_id ) + 🔍 dss_physical_address_i1 ( original_address_txt ) original_address_txt⧉ original_address_txt + * varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The source-provided address of a short-term rental offering +varchar(250) match_result_json⧉ match_result_json + json + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Full JSON result of the source address matching attempt +json 🔍 dss_physical_address_i2 ( match_address_txt ) match_address_txt⧉ match_address_txt + varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The sanitized physical address (returned as fullAddress) that has been derived from the original +varchar(250) match_score_amt⧉ match_score_amt + smallint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The relative score returned from the address matching attempt +smallint unit_no⧉ unit_no + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The unitNumber (suite) returned by the address match (e.g. 100) +varchar(50) civic_no⧉ civic_no + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The civicNumber (building number) returned by the address match (e.g. 1285) +varchar(50) street_nm⧉ street_nm + varchar(100) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The streetName returned by the address match (e.g. Pender) +varchar(100) street_type_dsc⧉ street_type_dsc + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The streetType returned by the address match (e.g. St or Street) +varchar(50) street_direction_dsc⧉ street_direction_dsc + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The streetDirection returned by the address match (e.g. W or West) +varchar(50) locality_nm⧉ locality_nm + varchar(100) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The localityName (community) returned by the address match (e.g. Vancouver) +varchar(100) locality_type_dsc⧉ locality_type_dsc + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The localityType returned by the address match (e.g. City) +varchar(50) province_cd⧉ province_cd + varchar(5) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The provinceCode returned by the address match +varchar(5) site_no⧉ site_no + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The siteID returned by the address match +varchar(50) block_no⧉ block_no + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The blockID returned by the address match +varchar(50) location_geometry⧉ location_geometry + geometry + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The computed location point of the matched address +geometry is_exempt⧉ is_exempt + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the address has been identified as exempt from Short Term Rental regulations +boolean is_match_verified⧉ is_match_verified + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the matched address has been verified as correct for the listing by the responsible authorities +boolean is_changed_original_address⧉ is_changed_original_address + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the original address has received a different property address from the platform in the last reporting period +boolean is_match_corrected⧉ is_match_corrected + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the matched address has been manually changed to one that is verified as correct for the listing +boolean is_system_processing⧉ is_system_processing + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the physical address is being processed by the system and may not yet be in its final form +boolean 🔍 dss_physical_address_i3 ( containing_organization_id ) containing_organization_id⧉ containing_organization_id + bigint + ↗ dss_physical_address( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_organization ( containing_organization_id -> organization_id ) + replacing_physical_address_id⧉ replacing_physical_address_id + bigint + ↗ dss_physical_address( physical_address_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_physical_address ( replacing_physical_address_id -> physical_address_id ) + upd_dtm⧉ upd_dtm + * timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_rental_listingTable dss.dss_rental_listing + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A rental listing snapshot that is either relevant to a specific monthly report, or is the current, master version + 🔑 Pk dss_rental_listing_pk ( rental_listing_id ) rental_listing_id⧉ rental_listing_id + * bigint + ↙ dss_email_message( rental_listing_id ) + ↙ dss_rental_listing( rental_listing_id ) + ↙ dss_rental_listing_contact( rental_listing_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint🔗 Referred by dss_email_message ( concerned_with_rental_listing_id -> rental_listing_id ) +Referred by dss_rental_listing ( derived_from_rental_listing_id -> rental_listing_id ) +Referred by dss_rental_listing_contact ( contacted_through_rental_listing_id -> rental_listing_id ) + 🔍 dss_rental_listing_i1 ( offering_organization_id, platform_listing_no ) platform_listing_no⧉ platform_listing_no + * varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The platform issued identification number for the listing +varchar(50) platform_listing_url⧉ platform_listing_url + varchar(4000) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + URL for the short-term rental platform listing +varchar(4000) 🔍 dss_rental_listing_i7 ( business_licence_no ) business_licence_no⧉ business_licence_no + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The business licence number that is published for the rental offering +varchar(320) 🔍 dss_rental_listing_i8 ( effective_business_licence_no ) effective_business_licence_no⧉ effective_business_licence_no + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The local government issued licence number that should be used for compariing the rental offering with others +varchar(320) 🔍 dss_rental_listing_i9 ( effective_host_nm ) effective_host_nm⧉ effective_host_nm + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The full name of the rental offering host that should be used for comparison with others +varchar(320) bc_registry_no⧉ bc_registry_no + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The Short Term Registry issued permit number +varchar(50) is_current⧉ is_current + * boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the RENTAL LISTING VERSION is a CURRENT RENTAL LISTING (if it is a copy of the most current REPORTED RENTAL LISTING (having the same listing number for the same offering platform) +boolean is_active⧉ is_active + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether a CURRENT RENTAL LISTING was included in the most recent RENTAL LISTING REPORT +boolean is_new⧉ is_new + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether a CURRENT RENTAL LISTING appeared for the first time in the last reporting period +boolean is_taken_down⧉ is_taken_down + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether a CURRENT RENTAL LISTING has been reported as taken down by the offering platform +boolean is_changed_original_address⧉ is_changed_original_address + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether a CURRENT RENTAL LISTING has received a different property address in the last reporting period +boolean is_changed_address⧉ is_changed_address + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether a CURRENT RENTAL LISTING has been subjected to address match changes by a user +boolean is_lg_transferred⧉ is_lg_transferred + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether a CURRENT RENTAL LISTING has been transferred to a different Local Goverment Organization as a result of address changes +boolean is_changed_business_licence⧉ is_changed_business_licence + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether a CURRENT RENTAL LISTING has been subjected to business licence linking changes by a user +boolean is_entire_unit⧉ is_entire_unit + boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the entire dwelling unit is offered for rental (as opposed to a single bedroom) +boolean 🔍 dss_rental_listing_i11 ( lg_transfer_dtm ) lg_transfer_dtm⧉ lg_transfer_dtm + timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates when a CURRENT RENTAL LISTING was most recently transferred to a different Local Goverment Organization as a result of address changes +timestamptz available_bedrooms_qty⧉ available_bedrooms_qty + smallint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The number of bedrooms in the dwelling unit that are available for short term rental +smallint nights_booked_qty⧉ nights_booked_qty + smallint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The number of nights that short term rental accommodation services were provided during the reporting period +smallint separate_reservations_qty⧉ separate_reservations_qty + smallint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The number of separate reservations that were taken during the reporting period +smallint 🔍 dss_rental_listing_i1 ( offering_organization_id, platform_listing_no ) 🔍 dss_rental_listing_i5 ( listing_status_type, offering_organization_id ) offering_organization_id⧉ offering_organization_id + * bigint + ↗ dss_rental_listing( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_organization ( offering_organization_id -> organization_id ) + 🔍 dss_rental_listing_i2 ( including_rental_listing_report_id ) including_rental_listing_report_id⧉ including_rental_listing_report_id + bigint + ↗ dss_rental_listing( rental_listing_report_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_rental_listing_report ( including_rental_listing_report_id -> rental_listing_report_id ) + 🔍 dss_rental_listing_i3 ( derived_from_rental_listing_id ) derived_from_rental_listing_id⧉ derived_from_rental_listing_id + bigint + ↗ dss_rental_listing( rental_listing_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_rental_listing ( derived_from_rental_listing_id -> rental_listing_id ) + 🔍 dss_rental_listing_i4 ( locating_physical_address_id ) locating_physical_address_id⧉ locating_physical_address_id + bigint + ↗ dss_rental_listing( physical_address_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_physical_address ( locating_physical_address_id -> physical_address_id ) + 🔍 dss_rental_listing_i6 ( governing_business_licence_id ) governing_business_licence_id⧉ governing_business_licence_id + bigint + ↗ dss_rental_listing( business_licence_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_business_licence ( governing_business_licence_id -> business_licence_id ) + 🔍 dss_rental_listing_i5 ( listing_status_type, offering_organization_id ) listing_status_type⧉ listing_status_type + varchar(2) + ↗ dss_rental_listing( listing_status_type ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +varchar(2)🔗 References dss_listing_status_type ( listing_status_type ) + upd_dtm⧉ upd_dtm + * timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_rental_listing_contactTable dss.dss_rental_listing_contact + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A person who has been identified as a notable contact for a particular rental listing + 🔑 Pk dss_rental_listing_contact_pk ( rental_listing_contact_id ) rental_listing_contact_id⧉ rental_listing_contact_id + * bigint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint is_property_owner⧉ is_property_owner + * boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates a person with the legal right to the unit being short-term rental +boolean listing_contact_nbr⧉ listing_contact_nbr + smallint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates which of the five possible supplier hosts is represented by this contact +smallint supplier_host_no⧉ supplier_host_no + varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The platform identifier for the supplier host +varchar(50) full_nm⧉ full_nm + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The full name of the contact person as included in the listing +varchar(320) phone_no⧉ phone_no + varchar(30) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Phone number given for the contact +varchar(30) fax_no⧉ fax_no + varchar(30) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Facsimile numbrer given for the contact +varchar(30) full_address_txt⧉ full_address_txt + varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Mailing address given for the contact +varchar(250) email_address_dsc⧉ email_address_dsc + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + E-mail address given for the contact +varchar(320) 🔍 dss_rental_listing_contact_i1 ( contacted_through_rental_listing_id ) contacted_through_rental_listing_id⧉ contacted_through_rental_listing_id + * bigint + ↗ dss_rental_listing_contact( rental_listing_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_rental_listing ( contacted_through_rental_listing_id -> rental_listing_id ) + upd_dtm⧉ upd_dtm + * timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_rental_listing_extractTable dss.dss_rental_listing_extract + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A prebuilt report that is specific to a subset of rental listings + 🔑 Pk dss_rental_listing_extract_pk ( rental_listing_extract_id ) rental_listing_extract_id⧉ rental_listing_extract_id + * bigint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint rental_listing_extract_nm⧉ rental_listing_extract_nm + * varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A description of the information contained in the extract +varchar(250) is_pr_requirement_filtered⧉ is_pr_requirement_filtered + * boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the report is filtered by jurisdictional principal residence requirement +boolean source_bin⧉ source_bin + bytea + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The binary image of the information in the report +bytea filtering_organization_id⧉ filtering_organization_id + bigint + ↗ dss_rental_listing_extract( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_organization ( filtering_organization_id -> organization_id ) + upd_dtm⧉ upd_dtm + * timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_rental_listing_reportTable dss.dss_rental_listing_report + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A platform-specific collection of rental listing information that is relevant to a specific month + 🔑 Pk dss_rental_listing_report_pk ( rental_listing_report_id ) rental_listing_report_id⧉ rental_listing_report_id + * bigint + ↙ dss_rental_listing( rental_listing_report_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint🔗 Referred by dss_rental_listing ( including_rental_listing_report_id -> rental_listing_report_id ) + 🔍 Unq dss_rental_listing_report_uk ( providing_organization_id, report_period_ym ) report_period_ym⧉ report_period_ym + * date + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The month to which the listing information is relevant (always set to the first day of the month) +date is_current⧉ is_current + * boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether the rental listing version is the most recent one reported by the platform +boolean 🔍 Unq dss_rental_listing_report_uk ( providing_organization_id, report_period_ym ) providing_organization_id⧉ providing_organization_id + * bigint + ↗ dss_rental_listing_report( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_organization ( providing_organization_id -> organization_id ) + upd_dtm⧉ upd_dtm + * timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_upload_deliveryTable dss.dss_upload_delivery + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A delivery of uploaded information that is relevant to a specific month + 🔑 Pk dss_upload_delivery_pk ( upload_delivery_id ) upload_delivery_id⧉ upload_delivery_id + * bigint + ↙ dss_upload_line( upload_delivery_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint🔗 Referred by dss_upload_line ( including_upload_delivery_id -> upload_delivery_id ) + upload_delivery_type⧉ upload_delivery_type + * varchar(25) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Identifies the treatment applied to ingesting the uploaded information +varchar(25) report_period_ym⧉ report_period_ym + date + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The month to which the delivery batch is relevant (always set to the first day of the month) +date source_hash_dsc⧉ source_hash_dsc + * varchar(256) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The hash value of the information that was uploaded +varchar(256) source_bin⧉ source_bin + bytea + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The binary image of the information that was uploaded +bytea source_header_txt⧉ source_header_txt + varchar(32000) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Full text of the header line +varchar(32000) providing_organization_id⧉ providing_organization_id + * bigint + ↗ dss_upload_delivery( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_organization ( providing_organization_id -> organization_id ) + upd_dtm⧉ upd_dtm + * timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_upload_lineTable dss.dss_upload_line + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + An upload delivery line that has been extracted from the source + 🔑 Pk dss_upload_line_pk ( upload_line_id ) upload_line_id⧉ upload_line_id + * bigint + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint is_validation_failure⧉ is_validation_failure + * boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates that there has been a validation problem that prevents successful ingestion of the upload line +boolean is_system_failure⧉ is_system_failure + * boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates that a system fault has prevented complete ingestion of the upload line +boolean 🔍 dss_upload_line_i1 ( is_processed, including_upload_delivery_id ) is_processed⧉ is_processed + * boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates that no further ingestion attempt is required for the upload line +boolean 🔍 Unq dss_upload_line_uk ( including_upload_delivery_id, source_organization_cd, source_record_no ) source_organization_cd⧉ source_organization_cd + * varchar(25) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + An immutable system code identifying the organization who created the information in the upload line (e.g. AIRBNB) +varchar(25) 🔍 Unq dss_upload_line_uk ( including_upload_delivery_id, source_organization_cd, source_record_no ) source_record_no⧉ source_record_no + * varchar(50) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The immutable identification number for the source record, such as a rental listing number +varchar(50) source_line_txt⧉ source_line_txt + * varchar(32000) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Full text of the upload line +varchar(32000) error_txt⧉ error_txt + varchar(32000) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Freeform description of the problem found while attempting to interpret the report line +varchar(32000) 🔍 Unq dss_upload_line_uk ( including_upload_delivery_id, source_organization_cd, source_record_no ) 🔍 dss_upload_line_i1 ( is_processed, including_upload_delivery_id ) including_upload_delivery_id⧉ including_upload_delivery_id + * bigint + ↗ dss_upload_line( upload_delivery_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_upload_delivery ( including_upload_delivery_id -> upload_delivery_id ) + + + + + +dss_user_identityTable dss.dss_user_identity + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + An externally defined domain directory object representing a potential application user or group + 🔑 Pk dss_user_identity_pk ( user_identity_id ) user_identity_id⧉ user_identity_id + * bigint + ↙ dss_email_message( user_identity_id ) + ↙ dss_email_message( user_identity_id ) + ↙ dss_user_role_assignment( user_identity_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Unique generated key +bigint🔗 Referred by dss_email_message ( initiating_user_identity_id -> user_identity_id ) +Referred by dss_email_message ( affected_by_user_identity_id -> user_identity_id ) +Referred by dss_user_role_assignment ( user_identity_id ) + user_guid⧉ user_guid + * uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + An immutable unique identifier assigned by the identity provider +uuid display_nm⧉ display_nm + * varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A human-readable full name that is assigned by the identity provider (this may include a preferred name and/or business unit name) +varchar(250) identity_provider_nm⧉ identity_provider_nm + * varchar(25) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A directory or domain that authenticates system users to allow access to the application or its API (e.g. idir, bceidbusiness) +varchar(25) is_enabled⧉ is_enabled + * boolean + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Indicates whether access is currently permitted using this identity +boolean access_request_status_cd⧉ access_request_status_cd + * varchar(25) + ↗ dss_user_identity( access_request_status_cd ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The current status of the most recent access request made by the user (restricted to Requested, Approved, or Denied) +varchar(25)🔗 References dss_access_request_status ( access_request_status_cd ) + access_request_dtm⧉ access_request_dtm + timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A timestamp indicating when the most recent access request was made by the user +timestamptz access_request_justification_txt⧉ access_request_justification_txt + varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The most recent user-provided reason for requesting application access +varchar(250) given_nm⧉ given_nm + varchar(25) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A name given to a person so that they can easily be identified among their family members (in some cultures, this is often the first name) +varchar(25) family_nm⧉ family_nm + varchar(25) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A name that is often shared amongst members of the same family (commonly known as a surname within some cultures) +varchar(25) email_address_dsc⧉ email_address_dsc + varchar(320) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + E-mail address associated with the user by the identity provider +varchar(320) business_nm⧉ business_nm + varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A human-readable organization name that is associated with the user by the identity provider +varchar(250) terms_acceptance_dtm⧉ terms_acceptance_dtm + timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A timestamp indicating when the user most recently accepted the published Terms and Conditions of application access +timestamptz represented_by_organization_id⧉ represented_by_organization_id + bigint + ↗ dss_user_identity( organization_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_organization ( represented_by_organization_id -> organization_id ) + upd_dtm⧉ upd_dtm + * timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_user_privilegeTable dss.dss_user_privilege + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A granular access right or privilege within the application that may be granted to a role + 🔑 Pk dss_user_privilege_pk ( user_privilege_cd ) user_privilege_cd⧉ user_privilege_cd + * varchar(25) + ↙ dss_user_role_privilege( user_privilege_cd ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The immutable system code that identifies the privilege +varchar(25)🔗 Referred by dss_user_role_privilege ( user_privilege_cd ) + user_privilege_nm⧉ user_privilege_nm + * varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The human-readable name that is given for the role +varchar(250) + + + + +dss_user_roleTable dss.dss_user_role + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + A set of access rights and privileges within the application that may be granted to users + 🔑 Pk dss_user_role_pk ( user_role_cd ) user_role_cd⧉ user_role_cd + * varchar(25) + ↙ dss_user_role_assignment( user_role_cd ) + ↙ dss_user_role_privilege( user_role_cd ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The immutable system code that identifies the role +varchar(25)🔗 Referred by dss_user_role_assignment ( user_role_cd ) +Referred by dss_user_role_privilege ( user_role_cd ) + user_role_nm⧉ user_role_nm + * varchar(250) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The human-readable name that is given for the role +varchar(250) user_role_dsc⧉ user_role_dsc + varchar(200) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The human-readable description that is given for the role +varchar(200) upd_dtm⧉ upd_dtm + timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_user_role_assignmentTable dss.dss_user_role_assignment + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The association of a grantee credential to a role for the purpose of conveying application privileges + 🔑 Pk dss_user_role_assignment_pk ( user_identity_id, user_role_cd ) user_identity_id⧉ user_identity_id + * bigint + ↗ dss_user_role_assignment( user_identity_id ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +bigint🔗 References dss_user_identity ( user_identity_id ) + 🔑 Pk dss_user_role_assignment_pk ( user_identity_id, user_role_cd ) user_role_cd⧉ user_role_cd + * varchar(25) + ↗ dss_user_role_assignment( user_role_cd ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +varchar(25)🔗 References dss_user_role ( user_role_cd ) + upd_dtm⧉ upd_dtm + timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + +dss_user_role_privilegeTable dss.dss_user_role_privilege + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The association of a granular application privilege to a role + 🔑 Pk dss_user_role_privilege_pk ( user_privilege_cd, user_role_cd ) user_privilege_cd⧉ user_privilege_cd + * varchar(25) + ↗ dss_user_role_privilege( user_privilege_cd ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +varchar(25)🔗 References dss_user_privilege ( user_privilege_cd ) + 🔑 Pk dss_user_role_privilege_pk ( user_privilege_cd, user_role_cd ) user_role_cd⧉ user_role_cd + * varchar(25) + ↗ dss_user_role_privilege( user_role_cd ) + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Foreign key +varchar(25)🔗 References dss_user_role ( user_role_cd ) + upd_dtm⧉ upd_dtm + timestamptz + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + Trigger-updated timestamp of last change +timestamptz upd_user_guid⧉ upd_user_guid + uuid + ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ + The globally unique identifier (assigned by the identity provider) for the most recent user to record a change +uuid + + + + Ministry of Housing + Short Term Rental Data Sharing + Physical Data Diagram (Sprint 14) + Leif Larsen, DXC Technology + September 18, 2024 + + \ No newline at end of file diff --git a/database/model/STR_DSS_Physical_DB_Design_Sprint_14.md b/database/model/STR_DSS_Physical_DB_Design_Sprint_14.md new file mode 100644 index 00000000..3fc9aa1b --- /dev/null +++ b/database/model/STR_DSS_Physical_DB_Design_Sprint_14.md @@ -0,0 +1,789 @@ +#Physical Data Diagram (Sprint 14) +Generated using [DbSchema](https://dbschema.com) + + + + +### Physical Data Diagram (Sprint 14) +![img](./PhysicalDataDiagram(Sprint14).svg) + + + +### Table dss.dss_access_request_status +A potential status for a user access request (e.g. Requested, Approved, or Denied) + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | access\_request\_status\_cd| varchar(25) | System-consistent code for the request status | +| * | access\_request\_status\_nm| varchar(250) | Business term for the request status | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_access\_request\_status\_pk | ON access\_request\_status\_cd| + + + +### Table dss.dss_business_licence +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | business\_licence\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * 🔍 | business\_licence\_no| varchar(50) | The local government issued licence number that applies to the rental offering | +| * | expiry\_dt| date | The date on which the business licence expires | +| 🔎 | physical\_rental\_address\_txt| varchar(250) | The full physical address of the location that is licenced as a short-term rental business | +| | licence\_type\_txt| varchar(320) | Free form description of the type of business licence issued (e.g. short-term rental, bed and breakfast, boarding and lodging, tourist accommodation) | +| | restriction\_txt| varchar(320) | Notes related to any restrictions associated with the licence | +| | business\_nm| varchar(320) | Official name of the business | +| | mailing\_street\_address\_txt| varchar(100) | Street address component of the business mailing address | +| | mailing\_city\_nm| varchar(100) | City component of the business mailing address | +| | mailing\_province\_cd| varchar(2) | Province component of the business mailing address | +| | mailing\_postal\_cd| varchar(10) | Postal code component of the business mailing address | +| | business\_owner\_nm| varchar(320) | Full name of the registered business owner | +| | business\_owner\_phone\_no| varchar(30) | Phone number of the business owner | +| | business\_owner\_email\_address\_dsc| varchar(320) | Email address of the business owner | +| | business\_operator\_nm| varchar(320) | Full name of the business operator or property manager | +| | business\_operator\_phone\_no| varchar(30) | Phone number of the business operator | +| | business\_operator\_email\_address\_dsc| varchar(320) | Email address of the business operator | +| | infraction\_txt| varchar(320) | Description of an infraction | +| | infraction\_dt| date | The date on which the described infraction occurred | +| | property\_zone\_txt| varchar(100) | Description or name of the property zoning | +| | available\_bedrooms\_qty| smallint | The number of bedrooms in the dwelling unit that are available for short term rental | +| | max\_guests\_allowed\_qty| smallint | The number of guests that can be accommodated | +| | is\_principal\_residence| boolean | Indicates whether the short term rental property is a principal residence | +| | is\_owner\_living\_onsite| boolean | Indicates whether the owner lives on the property | +| | is\_owner\_property\_tenant| boolean | Indicates whether the business owner rents the property | +| | property\_folio\_no| varchar(30) | The number used to identify the property | +| | property\_parcel\_identifier\_no| varchar(30) | The PID number assigned by the Land Title and Survey Authority that identifies the piece of land | +| | property\_legal\_description\_txt| varchar(320) | The physical description of the property as it is registered with the Land Title and Survey Authority | +| * 🔎 ⬈ | licence\_status\_type| varchar(25) | Foreign key | +| * 🔍 ⬈ | providing\_organization\_id| bigint | Foreign key | +| 🔎 ⬈ | affected\_by\_physical\_address\_id| bigint | Foreign key | +| * | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_business\_licence\_pk | ON business\_licence\_id| +| 🔎 | dss\_business\_licence\_i2 | ON affected\_by\_physical\_address\_id| +| 🔍 | dss\_business\_licence\_uk | ON providing\_organization\_id, business\_licence\_no| +| 🔎 | dss\_business\_licence\_i1 | ON licence\_status\_type| +| 🔎 | dss\_business\_licence\_i3 | ON physical\_rental\_address\_txt| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_business_licence_fk_provided_by | ( providing\_organization\_id ) ref [dss.dss\_organization](#dss\_organization) (organization\_id) | +| | dss_business_licence_fk_affecting | ( affected\_by\_physical\_address\_id ) ref [dss.dss\_physical\_address](#dss\_physical\_address) (physical\_address\_id) | +| | dss_business_licence_fk_classified_as | ( licence\_status\_type ) ref [dss.dss\_business\_licence\_status\_type](#dss\_business\_licence\_status\_type) (licence\_status\_type) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_business_licence_br_iu_tr + + ``` +CREATE TRIGGER dss\_business\_licence\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_business\_licence FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_business_licence_status_type +A potential status for a BUSINESS LICENCE (e.g. Pending, Issued, Suspended, Revoked, Cancelled, Expired) + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | licence\_status\_type| varchar(25) | System-consistent code for the business licence status (e.g. Pending, Issued, Suspended, Revoked, Cancelled, Expired) | +| * | licence\_status\_type\_nm| varchar(50) | Business term for the licence status (e.g. Pending, Issued, Suspended, Revoked, Cancelled, Expired) | +| * | licence\_status\_sort\_no| smallint | Relative order in which the business prefers to see the status listed | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_business\_licence\_status\_type\_pk | ON licence\_status\_type| + + + +### Table dss.dss_email_message +A message that is sent to one or more recipients via email + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | email\_message\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * ⬈ | email\_message\_type| varchar(50) | Foreign key | +| * 🔎 | message\_delivery\_dtm| timestamptz | A timestamp indicating when the message delivery was initiated | +| * | message\_template\_dsc| varchar(4000) | The full text or template for the message that is sent | +| * | is\_submitter\_cc\_required| boolean | Indicates whether the user initiating the message should receive a copy of the email | +| | is\_host\_contacted\_externally| boolean | Indicates whether the the property host has already been contacted by external means | +| | is\_with\_standard\_detail| boolean | Indicates whether message body should include text a block of detail text that is standard for the message type | +| | lg\_phone\_no| varchar(30) | A phone number associated with a Local Government contact | +| | unreported\_listing\_no| varchar(50) | The platform issued identification number for the listing (if not included in a rental listing report) | +| | host\_email\_address\_dsc| varchar(320) | E-mail address of a short term rental host (directly entered by the user as a message recipient) | +| | lg\_email\_address\_dsc| varchar(320) | E-mail address of a local government contact (directly entered by the user as a message recipient) | +| | cc\_email\_address\_dsc| varchar(4000) | E-mail address of a secondary message recipient (directly entered by the user) | +| | unreported\_listing\_url| varchar(4000) | User-provided URL for a short-term rental platform listing that is the subject of the message | +| | lg\_str\_bylaw\_url| varchar(4000) | User-provided URL for a local government bylaw that is the subject of the message | +| | custom\_detail\_txt| varchar(4000) | Free form text that should be included in the message body | +| 🔎 ⬈ | concerned\_with\_rental\_listing\_id| bigint | Foreign key | +| ⬈ | initiating\_user\_identity\_id| bigint | Foreign key | +| ⬈ | affected\_by\_user\_identity\_id| bigint | Foreign key | +| ⬈ | involved\_in\_organization\_id| bigint | Foreign key | +| ⬈ | batching\_email\_message\_id| bigint | Foreign key | +| ⬈ | requesting\_organization\_id| bigint | Foreign key | +| | external\_message\_no| varchar(50) | External identifier for tracking the message delivery progress | +| | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_email\_message\_pk | ON email\_message\_id| +| 🔎 | dss\_email\_message\_i1 | ON concerned\_with\_rental\_listing\_id, message\_delivery\_dtm| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_email_message_fk_initiated_by | ( initiating\_user\_identity\_id ) ref [dss.dss\_user\_identity](#dss\_user\_identity) (user\_identity\_id) | +| | dss_email_message_fk_affecting | ( affected\_by\_user\_identity\_id ) ref [dss.dss\_user\_identity](#dss\_user\_identity) (user\_identity\_id) | +| | dss_email_message_fk_involving | ( involved\_in\_organization\_id ) ref [dss.dss\_organization](#dss\_organization) (organization\_id) | +| | dss_email_message_fk_communicating | ( email\_message\_type ) ref [dss.dss\_email\_message\_type](#dss\_email\_message\_type) (email\_message\_type) | +| | dss_email_message_fk_batched_in | ( batching\_email\_message\_id ) ref [dss.dss\_email\_message](#dss\_email\_message) (email\_message\_id) | +| | dss_email_message_fk_requested_by | ( requesting\_organization\_id ) ref [dss.dss\_organization](#dss\_organization) (organization\_id) | +| | dss_email_message_fk_included_in | ( concerned\_with\_rental\_listing\_id ) ref [dss.dss\_rental\_listing](#dss\_rental\_listing) (rental\_listing\_id) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_email_message_br_iu_tr + + ``` +CREATE TRIGGER dss\_email\_message\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_email\_message FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_email_message_type +The type or purpose of a system generated message (e.g. Notice of Takedown, Takedown Request, Delisting Warning, Delisting Request, Access Granted Notification, Access Denied Notification) + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | email\_message\_type| varchar(50) | System-consistent code for the type or purpose of the message (e.g. Notice of Takedown, Takedown Request, Delisting Warning, Delisting Request, Access Granted Notification, Access Denied Notification) | +| * | email\_message\_type\_nm| varchar(250) | Business term for the type or purpose of the message (e.g. Notice of Takedown, Takedown Request, Delisting Warning, Delisting Request, Access Granted Notification, Access Denied Notification) | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_email\_message\_type\_pk | ON email\_message\_type| + + + +### Table dss.dss_listing_status_type +A potential status for a CURRENT RENTAL LISTING (e.g. New, Active, Inactive, Reassigned, Taken Down) + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | listing\_status\_type| varchar(2) | System-consistent code for the listing status (e.g. N, A, I, R, T) | +| * | listing\_status\_type\_nm| varchar(50) | Business term for the listing status (e.g. New, Active, Inactive, Reassigned, Taken Down) | +| * | listing\_status\_sort\_no| smallint | Relative order in which the business prefers to see the status listed | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_listing\_status\_type\_pk | ON listing\_status\_type| + + + +### Table dss.dss_organization +A private company or governing body component that plays a role in short term rental reporting or enforcement + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | organization\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * 🔎 ⬈ | organization\_type| varchar(25) | Foreign key | +| * 🔍 | organization\_cd| varchar(25) | An immutable system code that identifies the organization (e.g. CEU, AIRBNB) | +| * | organization\_nm| varchar(250) | A human-readable name that identifies the organization (e.g. Corporate Enforecement Unit, City of Victoria) | +| | local\_government\_type| varchar(50) | A sub-type of local government organization used for sorting and grouping or members | +| | economic\_region\_dsc| varchar(100) | A free form description of the economic region to which a Local Government Subdivision belongs | +| | is\_lg\_participating| boolean | Indicates whether a LOCAL GOVERNMENT ORGANIZATION participates in Short Term Rental Data Sharing | +| | is\_str\_prohibited| boolean | Indicates whether a LOCAL GOVERNMENT ORGANIZATION entirely prohibits short term housing rentals | +| | is\_principal\_residence\_required| boolean | Indicates whether a LOCAL GOVERNMENT SUBDIVISION is subject to Provincial Principal Residence Short Term Rental restrictions | +| | is\_business\_licence\_required| boolean | Indicates whether a LOCAL GOVERNMENT SUBDIVISION requires a business licence for Short Term Rental operation | +| | area\_geometry| geometry | the multipolygon shape identifying the boundaries of a local government subdivision | +| 🔎 ⬈ | managing\_organization\_id| bigint | Self-referential hierarchical foreign key | +| * | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_organization\_pk | ON organization\_id| +| 🔎 | dss\_organization\_i1 | ON organization\_type| +| 🔍 | dss\_organization\_uk | ON organization\_cd| +| 🔎 | dss\_organization\_i2 | ON managing\_organization\_id| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_organization_fk_managed_by | ( managing\_organization\_id ) ref [dss.dss\_organization](#dss\_organization) (organization\_id) | +| | dss_organization_fk_treated_as | ( organization\_type ) ref [dss.dss\_organization\_type](#dss\_organization\_type) (organization\_type) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_organization_br_iu_tr + + ``` +CREATE TRIGGER dss\_organization\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_organization FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_organization_contact_person +A person who has been identified as a notable contact for a particular organization + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 | organization\_contact\_person\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * | email\_address\_dsc| varchar(320) | E-mail address given for the contact by the organization | +| | is\_primary| boolean | Indicates whether the contact should receive all communications directed at the organization | +| | given\_nm| varchar(25) | A name given to a person so that they can easily be identified among their family members (in some cultures, this is often the first name) | +| | family\_nm| varchar(25) | A name that is often shared amongst members of the same family (commonly known as a surname within some cultures) | +| | phone\_no| varchar(30) | Phone number given for the contact by the organization (contains only digits) | +| * ⬈ | contacted\_through\_organization\_id| bigint | Foreign key | +| ⬈ | email\_message\_type| varchar(50) | Foreign key | +| * | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_organization\_contact\_person\_pk | ON organization\_contact\_person\_id| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_organization_contact_person_fk_contacted_for | ( contacted\_through\_organization\_id ) ref [dss.dss\_organization](#dss\_organization) (organization\_id) | +| | dss_organization_contact_person_fk_subscribed_to | ( email\_message\_type ) ref [dss.dss\_email\_message\_type](#dss\_email\_message\_type) (email\_message\_type) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_organization_contact_person_br_iu_tr + + ``` +CREATE TRIGGER dss\_organization\_contact\_person\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_organization\_contact\_person FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_organization_type +A level of government or business category + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | organization\_type| varchar(25) | System-consistent code for a level of government or business category | +| * | organization\_type\_nm| varchar(250) | Business term for a level of government or business category | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_organization\_type\_pk | ON organization\_type| + + + +### Table dss.dss_physical_address +A property address that includes any verifiable BC attributes + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | physical\_address\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * 🔎 | original\_address\_txt| varchar(250) | The source-provided address of a short-term rental offering | +| | match\_result\_json| json | Full JSON result of the source address matching attempt | +| 🔎 | match\_address\_txt| varchar(250) | The sanitized physical address (returned as fullAddress) that has been derived from the original | +| | match\_score\_amt| smallint | The relative score returned from the address matching attempt | +| | unit\_no| varchar(50) | The unitNumber (suite) returned by the address match (e.g. 100) | +| | civic\_no| varchar(50) | The civicNumber (building number) returned by the address match (e.g. 1285) | +| | street\_nm| varchar(100) | The streetName returned by the address match (e.g. Pender) | +| | street\_type\_dsc| varchar(50) | The streetType returned by the address match (e.g. St or Street) | +| | street\_direction\_dsc| varchar(50) | The streetDirection returned by the address match (e.g. W or West) | +| | locality\_nm| varchar(100) | The localityName (community) returned by the address match (e.g. Vancouver) | +| | locality\_type\_dsc| varchar(50) | The localityType returned by the address match (e.g. City) | +| | province\_cd| varchar(5) | The provinceCode returned by the address match | +| | site\_no| varchar(50) | The siteID returned by the address match | +| | block\_no| varchar(50) | The blockID returned by the address match | +| | location\_geometry| geometry | The computed location point of the matched address | +| | is\_exempt| boolean | Indicates whether the address has been identified as exempt from Short Term Rental regulations | +| | is\_match\_verified| boolean | Indicates whether the matched address has been verified as correct for the listing by the responsible authorities | +| | is\_changed\_original\_address| boolean | Indicates whether the original address has received a different property address from the platform in the last reporting period | +| | is\_match\_corrected| boolean | Indicates whether the matched address has been manually changed to one that is verified as correct for the listing | +| | is\_system\_processing| boolean | Indicates whether the physical address is being processed by the system and may not yet be in its final form | +| 🔎 ⬈ | containing\_organization\_id| bigint | Foreign key | +| ⬈ | replacing\_physical\_address\_id| bigint | Foreign key | +| * | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_physical\_address\_pk | ON physical\_address\_id| +| 🔎 | dss\_physical\_address\_i1 | ON original\_address\_txt| +| 🔎 | dss\_physical\_address\_i2 | ON match\_address\_txt| +| 🔎 | dss\_physical\_address\_i3 | ON containing\_organization\_id| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_physical_address_fk_contained_in | ( containing\_organization\_id ) ref [dss.dss\_organization](#dss\_organization) (organization\_id) | +| | dss_physical_address_fk_replaced_by | ( replacing\_physical\_address\_id ) ref [dss.dss\_physical\_address](#dss\_physical\_address) (physical\_address\_id) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_physical_address_br_iu_tr + + ``` +CREATE TRIGGER dss\_physical\_address\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_physical\_address FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_rental_listing +A rental listing snapshot that is either relevant to a specific monthly report, or is the current, master version + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | rental\_listing\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * 🔎 | platform\_listing\_no| varchar(50) | The platform issued identification number for the listing | +| | platform\_listing\_url| varchar(4000) | URL for the short-term rental platform listing | +| 🔎 | business\_licence\_no| varchar(320) | The business licence number that is published for the rental offering | +| 🔎 | effective\_business\_licence\_no| varchar(320) | The local government issued licence number that should be used for compariing the rental offering with others | +| 🔎 | effective\_host\_nm| varchar(320) | The full name of the rental offering host that should be used for comparison with others | +| | bc\_registry\_no| varchar(50) | The Short Term Registry issued permit number | +| * | is\_current| boolean | Indicates whether the RENTAL LISTING VERSION is a CURRENT RENTAL LISTING (if it is a copy of the most current REPORTED RENTAL LISTING (having the same listing number for the same offering platform) | +| | is\_active| boolean | Indicates whether a CURRENT RENTAL LISTING was included in the most recent RENTAL LISTING REPORT | +| | is\_new| boolean | Indicates whether a CURRENT RENTAL LISTING appeared for the first time in the last reporting period | +| | is\_taken\_down| boolean | Indicates whether a CURRENT RENTAL LISTING has been reported as taken down by the offering platform | +| | is\_changed\_original\_address| boolean | Indicates whether a CURRENT RENTAL LISTING has received a different property address in the last reporting period | +| | is\_changed\_address| boolean | Indicates whether a CURRENT RENTAL LISTING has been subjected to address match changes by a user | +| | is\_lg\_transferred| boolean | Indicates whether a CURRENT RENTAL LISTING has been transferred to a different Local Goverment Organization as a result of address changes | +| | is\_changed\_business\_licence| boolean | Indicates whether a CURRENT RENTAL LISTING has been subjected to business licence linking changes by a user | +| | is\_entire\_unit| boolean | Indicates whether the entire dwelling unit is offered for rental (as opposed to a single bedroom) | +| 🔎 | lg\_transfer\_dtm| timestamptz | Indicates when a CURRENT RENTAL LISTING was most recently transferred to a different Local Goverment Organization as a result of address changes | +| | available\_bedrooms\_qty| smallint | The number of bedrooms in the dwelling unit that are available for short term rental | +| | nights\_booked\_qty| smallint | The number of nights that short term rental accommodation services were provided during the reporting period | +| | separate\_reservations\_qty| smallint | The number of separate reservations that were taken during the reporting period | +| * 🔎 ⬈ | offering\_organization\_id| bigint | Foreign key | +| 🔎 ⬈ | including\_rental\_listing\_report\_id| bigint | Foreign key | +| 🔎 ⬈ | derived\_from\_rental\_listing\_id| bigint | Foreign key | +| 🔎 ⬈ | locating\_physical\_address\_id| bigint | Foreign key | +| 🔎 ⬈ | governing\_business\_licence\_id| bigint | Foreign key | +| 🔎 ⬈ | listing\_status\_type| varchar(2) | Foreign key | +| * | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_rental\_listing\_pk | ON rental\_listing\_id| +| 🔎 | dss\_rental\_listing\_i1 | ON offering\_organization\_id, platform\_listing\_no| +| 🔎 | dss\_rental\_listing\_i2 | ON including\_rental\_listing\_report\_id| +| 🔎 | dss\_rental\_listing\_i3 | ON derived\_from\_rental\_listing\_id| +| 🔎 | dss\_rental\_listing\_i4 | ON locating\_physical\_address\_id| +| 🔎 | dss\_rental\_listing\_i5 | ON listing\_status\_type, offering\_organization\_id| +| 🔎 | dss\_rental\_listing\_i6 | ON governing\_business\_licence\_id| +| 🔎 | dss\_rental\_listing\_i7 | ON business\_licence\_no| +| 🔎 | dss\_rental\_listing\_i8 | ON effective\_business\_licence\_no| +| 🔎 | dss\_rental\_listing\_i9 | ON effective\_host\_nm| +| 🔎 | dss\_rental\_listing\_i11 | ON lg\_transfer\_dtm| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_rental_listing_fk_offered_by | ( offering\_organization\_id ) ref [dss.dss\_organization](#dss\_organization) (organization\_id) | +| | dss_rental_listing_fk_included_in | ( including\_rental\_listing\_report\_id ) ref [dss.dss\_rental\_listing\_report](#dss\_rental\_listing\_report) (rental\_listing\_report\_id) | +| | dss_rental_listing_fk_located_at | ( locating\_physical\_address\_id ) ref [dss.dss\_physical\_address](#dss\_physical\_address) (physical\_address\_id) | +| | dss_rental_listing_fk_generating | ( derived\_from\_rental\_listing\_id ) ref [dss.dss\_rental\_listing](#dss\_rental\_listing) (rental\_listing\_id) | +| | dss_rental_listing_fk_classified_as | ( listing\_status\_type ) ref [dss.dss\_listing\_status\_type](#dss\_listing\_status\_type) (listing\_status\_type) | +| | dss_rental_listing_fk_governed_by | ( governing\_business\_licence\_id ) ref [dss.dss\_business\_licence](#dss\_business\_licence) (business\_licence\_id) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_rental_listing_br_iu_tr + + ``` +CREATE TRIGGER dss\_rental\_listing\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_rental\_listing FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_rental_listing_contact +A person who has been identified as a notable contact for a particular rental listing + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 | rental\_listing\_contact\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * | is\_property\_owner| boolean | Indicates a person with the legal right to the unit being short-term rental | +| | listing\_contact\_nbr| smallint | Indicates which of the five possible supplier hosts is represented by this contact | +| | supplier\_host\_no| varchar(50) | The platform identifier for the supplier host | +| | full\_nm| varchar(320) | The full name of the contact person as included in the listing | +| | phone\_no| varchar(30) | Phone number given for the contact | +| | fax\_no| varchar(30) | Facsimile numbrer given for the contact | +| | full\_address\_txt| varchar(250) | Mailing address given for the contact | +| | email\_address\_dsc| varchar(320) | E-mail address given for the contact | +| * 🔎 ⬈ | contacted\_through\_rental\_listing\_id| bigint | Foreign key | +| * | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_rental\_listing\_contact\_pk | ON rental\_listing\_contact\_id| +| 🔎 | dss\_rental\_listing\_contact\_i1 | ON contacted\_through\_rental\_listing\_id| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_rental_listing_contact_fk_contacted_for | ( contacted\_through\_rental\_listing\_id ) ref [dss.dss\_rental\_listing](#dss\_rental\_listing) (rental\_listing\_id) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_rental_listing_contact_br_iu_tr + + ``` +CREATE TRIGGER dss\_rental\_listing\_contact\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_rental\_listing\_contact FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_rental_listing_extract +A prebuilt report that is specific to a subset of rental listings + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 | rental\_listing\_extract\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * | rental\_listing\_extract\_nm| varchar(250) | A description of the information contained in the extract | +| * | is\_pr\_requirement\_filtered| boolean | Indicates whether the report is filtered by jurisdictional principal residence requirement | +| | source\_bin| bytea | The binary image of the information in the report | +| ⬈ | filtering\_organization\_id| bigint | Foreign key | +| * | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_rental\_listing\_extract\_pk | ON rental\_listing\_extract\_id| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_rental_listing_extract_fk_filtered_by | ( filtering\_organization\_id ) ref [dss.dss\_organization](#dss\_organization) (organization\_id) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_rental_listing_extract_br_iu_tr + + ``` +CREATE TRIGGER dss\_rental\_listing\_extract\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_rental\_listing\_extract FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_rental_listing_report +A platform-specific collection of rental listing information that is relevant to a specific month + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | rental\_listing\_report\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * 🔍 | report\_period\_ym| date | The month to which the listing information is relevant (always set to the first day of the month) | +| * | is\_current| boolean | Indicates whether the rental listing version is the most recent one reported by the platform | +| * 🔍 ⬈ | providing\_organization\_id| bigint | Foreign key | +| * | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_rental\_listing\_report\_pk | ON rental\_listing\_report\_id| +| 🔍 | dss\_rental\_listing\_report\_uk | ON providing\_organization\_id, report\_period\_ym| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_rental_listing_report_fk_provided_by | ( providing\_organization\_id ) ref [dss.dss\_organization](#dss\_organization) (organization\_id) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_rental_listing_report_br_iu_tr + + ``` +CREATE TRIGGER dss\_rental\_listing\_report\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_rental\_listing\_report FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_upload_delivery +A delivery of uploaded information that is relevant to a specific month + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | upload\_delivery\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * | upload\_delivery\_type| varchar(25) | Identifies the treatment applied to ingesting the uploaded information | +| | report\_period\_ym| date | The month to which the delivery batch is relevant (always set to the first day of the month) | +| * | source\_hash\_dsc| varchar(256) | The hash value of the information that was uploaded | +| | source\_bin| bytea | The binary image of the information that was uploaded | +| | source\_header\_txt| varchar(32000) | Full text of the header line | +| * ⬈ | providing\_organization\_id| bigint | Foreign key | +| * | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_upload\_delivery\_pk | ON upload\_delivery\_id| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_upload_delivery_fk_provided_by | ( providing\_organization\_id ) ref [dss.dss\_organization](#dss\_organization) (organization\_id) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_upload_delivery_br_iu_tr + + ``` +CREATE TRIGGER dss\_upload\_delivery\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_upload\_delivery FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_upload_line +An upload delivery line that has been extracted from the source + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 | upload\_line\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * | is\_validation\_failure| boolean | Indicates that there has been a validation problem that prevents successful ingestion of the upload line | +| * | is\_system\_failure| boolean | Indicates that a system fault has prevented complete ingestion of the upload line | +| * 🔎 | is\_processed| boolean | Indicates that no further ingestion attempt is required for the upload line | +| * 🔍 | source\_organization\_cd| varchar(25) | An immutable system code identifying the organization who created the information in the upload line (e.g. AIRBNB) | +| * 🔍 | source\_record\_no| varchar(50) | The immutable identification number for the source record, such as a rental listing number | +| * | source\_line\_txt| varchar(32000) | Full text of the upload line | +| | error\_txt| varchar(32000) | Freeform description of the problem found while attempting to interpret the report line | +| * 🔍 ⬈ | including\_upload\_delivery\_id| bigint | Foreign key | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_upload\_line\_pk | ON upload\_line\_id| +| 🔍 | dss\_upload\_line\_uk | ON including\_upload\_delivery\_id, source\_organization\_cd, source\_record\_no| +| 🔎 | dss\_upload\_line\_i1 | ON is\_processed, including\_upload\_delivery\_id| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_upload_line_fk_included_in | ( including\_upload\_delivery\_id ) ref [dss.dss\_upload\_delivery](#dss\_upload\_delivery) (upload\_delivery\_id) | + + + + +### Table dss.dss_user_identity +An externally defined domain directory object representing a potential application user or group + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | user\_identity\_id| bigint GENERATED ALWAYS AS IDENTITY | Unique generated key | +| * | user\_guid| uuid | An immutable unique identifier assigned by the identity provider | +| * | display\_nm| varchar(250) | A human-readable full name that is assigned by the identity provider (this may include a preferred name and/or business unit name) | +| * | identity\_provider\_nm| varchar(25) | A directory or domain that authenticates system users to allow access to the application or its API (e.g. idir, bceidbusiness) | +| * | is\_enabled| boolean | Indicates whether access is currently permitted using this identity | +| * ⬈ | access\_request\_status\_cd| varchar(25) | The current status of the most recent access request made by the user (restricted to Requested, Approved, or Denied) | +| | access\_request\_dtm| timestamptz | A timestamp indicating when the most recent access request was made by the user | +| | access\_request\_justification\_txt| varchar(250) | The most recent user-provided reason for requesting application access | +| | given\_nm| varchar(25) | A name given to a person so that they can easily be identified among their family members (in some cultures, this is often the first name) | +| | family\_nm| varchar(25) | A name that is often shared amongst members of the same family (commonly known as a surname within some cultures) | +| | email\_address\_dsc| varchar(320) | E-mail address associated with the user by the identity provider | +| | business\_nm| varchar(250) | A human-readable organization name that is associated with the user by the identity provider | +| | terms\_acceptance\_dtm| timestamptz | A timestamp indicating when the user most recently accepted the published Terms and Conditions of application access | +| ⬈ | represented\_by\_organization\_id| bigint | Foreign key | +| * | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_user\_identity\_pk | ON user\_identity\_id| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_user_identity_fk_representing | ( represented\_by\_organization\_id ) ref [dss.dss\_organization](#dss\_organization) (organization\_id) | +| | dss_user_identity_fk_given | ( access\_request\_status\_cd ) ref [dss.dss\_access\_request\_status](#dss\_access\_request\_status) (access\_request\_status\_cd) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_user_identity_br_iu_tr + + ``` +CREATE TRIGGER dss\_user\_identity\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_user\_identity FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_user_privilege +A granular access right or privilege within the application that may be granted to a role + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | user\_privilege\_cd| varchar(25) | The immutable system code that identifies the privilege | +| * | user\_privilege\_nm| varchar(250) | The human-readable name that is given for the role | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_user\_privilege\_pk | ON user\_privilege\_cd| + + + +### Table dss.dss_user_role +A set of access rights and privileges within the application that may be granted to users + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬋ | user\_role\_cd| varchar(25) | The immutable system code that identifies the role | +| * | user\_role\_nm| varchar(250) | The human-readable name that is given for the role | +| | user\_role\_dsc| varchar(200) | The human-readable description that is given for the role | +| | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_user\_role\_pk | ON user\_role\_cd| + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_user_role_br_iu_tr + + ``` +CREATE TRIGGER dss\_user\_role\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_user\_role FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_user_role_assignment +The association of a grantee credential to a role for the purpose of conveying application privileges + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬈ | user\_identity\_id| bigint | Foreign key | +| * 🔑 ⬈ | user\_role\_cd| varchar(25) | Foreign key | +| | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_user\_role\_assignment\_pk | ON user\_identity\_id, user\_role\_cd| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_user_role_assignment_fk_granted | ( user\_role\_cd ) ref [dss.dss\_user\_role](#dss\_user\_role) (user\_role\_cd) | +| | dss_user_role_assignment_fk_granted_to | ( user\_identity\_id ) ref [dss.dss\_user\_identity](#dss\_user\_identity) (user\_identity\_id) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_user_role_assignment_br_iu_tr + + ``` +CREATE TRIGGER dss\_user\_role\_assignment\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_user\_role\_assignment FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + + +### Table dss.dss_user_role_privilege +The association of a granular application privilege to a role + +|Idx |Name |Data Type |Description | +|---|---|---|---| +| * 🔑 ⬈ | user\_privilege\_cd| varchar(25) | Foreign key | +| * 🔑 ⬈ | user\_role\_cd| varchar(25) | Foreign key | +| | upd\_dtm| timestamptz | Trigger-updated timestamp of last change | +| | upd\_user\_guid| uuid | The globally unique identifier (assigned by the identity provider) for the most recent user to record a change | + + +##### Indexes +|Type |Name |On | +|---|---|---| +| 🔑 | dss\_user\_role\_privilege\_pk | ON user\_privilege\_cd, user\_role\_cd| + +##### Foreign Keys +|Type |Name |On | +|---|---|---| +| | dss_user_role_privilege_fk_conferred_by | ( user\_role\_cd ) ref [dss.dss\_user\_role](#dss\_user\_role) (user\_role\_cd) | +| | dss_user_role_privilege_fk_conferring | ( user\_privilege\_cd ) ref [dss.dss\_user\_privilege](#dss\_user\_privilege) (user\_privilege\_cd) | + + +##### Triggers +|Name |Definition | +|---|---| +### Trigger dss_user_role_privilege_br_iu_tr + + ``` +CREATE TRIGGER dss\_user\_role\_privilege\_br\_iu\_tr BEFORE INSERT OR UPDATE ON dss.dss\_user\_role\_privilege FOR EACH ROW EXECUTE FUNCTION dss.dss\_update\_audit\_columns() +``` + +## Schema dss +### Functions +dss\_containing\_organization\_id +``` + +``` +dss\_update\_audit\_columns +``` + +``` +### Procedures +dss\_process\_biz\_lic\_table\_delete +``` + +``` +dss\_process\_biz\_lic\_table\_insert +``` + +``` +dss\_process\_biz\_lic\_table\_update +``` + +``` + + + + diff --git a/database/model/STR_DSS_Physical_DB_Design_Sprint_14.pdf b/database/model/STR_DSS_Physical_DB_Design_Sprint_14.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f8187cda8a079c098eda6fbc4ef6d70b9ef21d83 GIT binary patch literal 55658 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

NdO;YI5$zAiMC7 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

)#6if9yN&%QF0R?%`p-_M+C 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/