Database active

Relationship map

erDiagram
  alembic_version {
    varchar version_num PK
  }
  allowance_city_rate {
    uuid id PK
    uuid city_id
    numeric rate_hkd
    date effective_from
    date effective_to
    text remarks
  }
  allowance_country_rate {
    uuid id PK
    uuid country_id
    numeric rate_hkd
    date effective_from
    date effective_to
    text remarks
  }
  annual_vote_budget {
    uuid id PK
    numeric approved_amount
    varchar approval_ref
    text remarks
    varchar fiscal_year_code
    varchar budget_vote_code
  }
  association {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
    text remarks
    varchar abbr_en
    varchar abbr_zh
  }
  budget_item_type {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
  }
  budget_vote {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
    text remarks
    varchar main_category_code
  }
  city {
    uuid id PK
    uuid country_id
    uuid province_id
    varchar name_en
    varchar name_zh
    bool is_active
    text remarks
  }
  command {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
  }
  continent {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
  }
  country {
    uuid id PK
    varchar iso_code
    varchar name_en
    varchar name_zh
    uuid continent_id
    bool is_active
    text remarks
  }
  country_association {
    uuid id PK
    uuid country_id
    uuid association_id
    text remarks
  }
  duty_visit {
    uuid id PK
    varchar visit_code
    varchar title_en
    varchar title_zh
    bool report_required
    date report_due_date
    date report_submitted_date
    bool report_completed
    bool presentation_required
    date presentation_due_date
    date presentation_completed_date
    bool presentation_completed
    text remarks
    timestamptz created_at
    timestamptz updated_at
    varchar visit_category_code
    varchar main_category_code
    varchar visit_direction_code
    varchar status_code
    varchar fiscal_year_code
    varchar event_series_code
    duty_visit_stream_enum stream
    numeric budget_annual_amount
    numeric estimation_before_departure_amount
    numeric actual_completion_amount
    jsonb budget_annual_calc
    jsonb estimation_before_departure_calc
    jsonb actual_completion_calc
    jsonb actual_expenditure_items
    varchar budget_vote_code
  }
  duty_visit_attachment {
    uuid id PK
    uuid duty_visit_id
    visit_attachment_type_enum attachment_type
    varchar file_name
    text file_path
    timestamptz uploaded_at
    varchar uploaded_by
    text remarks
  }
  duty_visit_budget_allocation {
    uuid id PK
    uuid duty_visit_id
    uuid annual_vote_budget_id
    numeric allocated_amount
    text remarks
  }
  duty_visit_expenditure_item {
    uuid id PK
    uuid duty_visit_plan_version_id
    uuid duty_visit_budget_allocation_id
    expenditure_stage_enum expenditure_stage
    numeric amount
    varchar currency_code
    text remarks
    varchar budget_item_type_code
  }
  duty_visit_external_contact {
    uuid id PK
    uuid duty_visit_id
    uuid external_contact_id
    contact_role_enum contact_role
    uuid met_via_org_id
    text remarks
  }
  duty_visit_itinerary_item {
    uuid id PK
    uuid duty_visit_plan_version_id
    int4 sequence_no
    timestamptz start_datetime
    timestamptz end_datetime
    uuid country_id
    uuid province_id
    uuid city_id
    uuid organization_id
    varchar title
    text remarks
  }
  duty_visit_plan_version {
    uuid id PK
    uuid duty_visit_id
    plan_version_type_enum version_type
    timestamptz start_datetime
    timestamptz end_datetime
    uuid host_country_id
    uuid host_province_id
    uuid host_city_id
    int4 planned_headcount
    text purpose
    text notes
    timestamptz created_at
    timestamptz updated_at
    text visit_location
    varchar planned_date_mode
    int4 planned_year
    int4 planned_month
    int4 planned_quarter
    bool location_to_be_confirmed
    uuid host_continent_id
  }
  duty_visit_unit {
    uuid id PK
    uuid duty_visit_id
    uuid fsd_unit_id
    text remarks
  }
  duty_visit_version_location {
    uuid id PK
    uuid duty_visit_plan_version_id
    int4 sequence_no
    uuid country_id
    uuid province_id
    uuid city_id
    bool is_primary
    text remarks
  }
  duty_visit_version_organization {
    uuid id PK
    uuid duty_visit_plan_version_id
    uuid organization_id
    bool is_primary
    varchar role_note
    text remarks
  }
  duty_visit_version_participant {
    uuid id PK
    uuid duty_visit_plan_version_id
    participant_certainty_enum certainty
    varchar rank_text_snapshot
    participant_role_enum participant_role
    int4 headcount
    text remarks
    varchar person_staff_identifier
    varchar rank_code
    uuid post_id
  }
  duty_visit_visit_category {
    uuid duty_visit_id PK
    varchar visit_category_code PK
    int4 sort_order
    timestamptz created_at
  }
  event_series {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    bool is_active
    text remarks
  }
  external_contact {
    uuid id PK
    varchar name_en
    varchar name_zh
    varchar rank_title_en
    varchar rank_title_zh
    uuid country_id
    uuid province_id
    uuid city_id
    uuid organization_id
    varchar office_phone
    varchar mobile_phone
    varchar email
    varchar whatsapp_number
    varchar wechat_id
    text notes
    bool is_active
    timestamptz created_at
    timestamptz updated_at
    varchar fsd_rank_code
  }
  external_contact_attachment {
    uuid id PK
    uuid external_contact_id
    external_contact_attachment_type_enum attachment_type
    varchar file_name
    text file_path
    timestamptz uploaded_at
    varchar uploaded_by
    text remarks
  }
  fiscal_year {
    uuid id PK
    varchar code
    date start_date
    date end_date
    bool is_active
  }
  fsd_unit {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    fsd_unit_type_enum unit_type
    int4 sort_order
    bool is_active
    text remarks
  }
  main_category {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
  }
  organization {
    uuid id PK
    varchar name_en
    varchar name_zh
    uuid country_id
    uuid province_id
    uuid city_id
    varchar general_phone
    varchar general_email
    varchar website
    bool is_active
    text remarks
    timestamptz created_at
    timestamptz updated_at
    varchar organization_type_code
    varchar abbr_en
    varchar abbr_zh
  }
  organization_contact {
    uuid id PK
    uuid organization_id
    varchar name_en
    varchar name_zh
    varchar rank_title_en
    varchar rank_title_zh
    varchar email
    varchar phone
    varchar whatsapp_number
    varchar wechat_id
    text contact_notes
    text how_we_contacted
    bool is_primary
    bool is_active
    timestamptz created_at
    timestamptz updated_at
  }
  organization_type {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
  }
  person {
    uuid id PK
    varchar staff_identifier
    varchar name_en
    varchar name_zh
    bool is_active
    text remarks
    timestamptz created_at
    timestamptz updated_at
    uuid post_id
  }
  person_rank_history {
    uuid id PK
    date effective_from
    date effective_to
    varchar post_title
    text remarks
    varchar person_staff_identifier
    varchar rank_code
  }
  post {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    varchar command_code
  }
  province {
    uuid id PK
    uuid country_id
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
    text remarks
  }
  rank {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
    varchar rank_group_code
  }
  rank_group {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
  }
  seed_city {
    varchar seed_id PK
    varchar source
    varchar country_iso_code2
    varchar province_seed_id
    varchar city_code
    int8 geoname_id
    varchar feature_code
    int8 population
    varchar name_en
    varchar name_zh_hant
    varchar zh_variant
    int4 sort_order
    bool is_active
    text remarks
  }
  seed_continent {
    varchar code PK
    varchar name_en
    varchar name_zh_hant
    int8 geoname_id
    int4 sort_order
    varchar source
    bool is_active
    text remarks
  }
  seed_country {
    varchar iso_code2 PK
    varchar iso_code3
    varchar iso_numeric
    varchar fips_code
    int8 geoname_id
    varchar continent_code
    varchar name_en
    varchar name_zh_hant
    varchar capital_name
    varchar zh_variant
    varchar source
    bool is_active
    text remarks
  }
  seed_dataset_sync {
    varchar dataset_code PK
    text source_url
    text source_last_modified
    timestamptz loaded_at
    int4 row_count
    text notes
  }
  seed_province {
    varchar seed_id PK
    varchar source
    varchar country_iso_code2
    varchar province_code
    int8 geoname_id
    varchar name_en
    varchar name_zh_hant
    varchar zh_variant
    int4 sort_order
    bool is_active
    text remarks
  }
  tag {
    uuid id PK
    uuid tag_group_id
    varchar name
    varchar color_hex
    int4 sort_order
    bool is_active
    timestamptz deleted_at
    timestamptz created_at
    timestamptz updated_at
  }
  tag_group {
    uuid id PK
    varchar name
    bool is_exclusive
    varchar color_hex
    int4 sort_order
    bool is_active
    timestamptz created_at
    timestamptz updated_at
  }
  visit_category {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
  }
  visit_direction {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
  }
  visit_list {
    uuid id PK
    varchar name
    int4 sort_order
    timestamptz created_at
    timestamptz updated_at
  }
  visit_list_item {
    uuid visit_list_id PK
    uuid duty_visit_id PK
    int4 sort_order
    timestamptz created_at
  }
  visit_status {
    uuid id PK
    varchar code
    varchar name_en
    varchar name_zh
    int4 sort_order
    bool is_active
  }
  visit_tag {
    uuid duty_visit_id PK
    uuid tag_id PK
    timestamptz created_at
  }
  allowance_city_rate }o--|| city : "city_id -> id"
  allowance_country_rate }o--|| country : "country_id -> id"
  annual_vote_budget }o--|| budget_vote : "budget_vote_code -> code"
  annual_vote_budget }o--|| fiscal_year : "fiscal_year_code -> code"
  budget_vote }o--|| main_category : "main_category_code -> code"
  city }o--|| country : "country_id -> id"
  city }o--|| province : "province_id -> id"
  country }o--|| continent : "continent_id -> id"
  country_association }o--|| association : "association_id -> id"
  country_association }o--|| country : "country_id -> id"
  duty_visit }o--|| event_series : "event_series_code -> code"
  duty_visit }o--|| fiscal_year : "fiscal_year_code -> code"
  duty_visit }o--|| main_category : "main_category_code -> code"
  duty_visit }o--|| visit_status : "status_code -> code"
  duty_visit }o--|| visit_category : "visit_category_code -> code"
  duty_visit }o--|| visit_direction : "visit_direction_code -> code"
  duty_visit_attachment }o--|| duty_visit : "duty_visit_id -> id"
  duty_visit_budget_allocation }o--|| annual_vote_budget : "annual_vote_budget_id -> id"
  duty_visit_budget_allocation }o--|| duty_visit : "duty_visit_id -> id"
  duty_visit_expenditure_item }o--|| budget_item_type : "budget_item_type_code -> code"
  duty_visit_expenditure_item }o--|| duty_visit_budget_allocation : "duty_visit_budget_allocation_id -> id"
  duty_visit_expenditure_item }o--|| duty_visit_plan_version : "duty_visit_plan_version_id -> id"
  duty_visit_external_contact }o--|| duty_visit : "duty_visit_id -> id"
  duty_visit_external_contact }o--|| external_contact : "external_contact_id -> id"
  duty_visit_external_contact }o--|| organization : "met_via_org_id -> id"
  duty_visit_itinerary_item }o--|| city : "city_id -> id"
  duty_visit_itinerary_item }o--|| country : "country_id -> id"
  duty_visit_itinerary_item }o--|| duty_visit_plan_version : "duty_visit_plan_version_id -> id"
  duty_visit_itinerary_item }o--|| organization : "organization_id -> id"
  duty_visit_itinerary_item }o--|| province : "province_id -> id"
  duty_visit_plan_version }o--|| duty_visit : "duty_visit_id -> id"
  duty_visit_plan_version }o--|| city : "host_city_id -> id"
  duty_visit_plan_version }o--|| continent : "host_continent_id -> id"
  duty_visit_plan_version }o--|| country : "host_country_id -> id"
  duty_visit_plan_version }o--|| province : "host_province_id -> id"
  duty_visit_unit }o--|| duty_visit : "duty_visit_id -> id"
  duty_visit_unit }o--|| fsd_unit : "fsd_unit_id -> id"
  duty_visit_version_location }o--|| city : "city_id -> id"
  duty_visit_version_location }o--|| country : "country_id -> id"
  duty_visit_version_location }o--|| duty_visit_plan_version : "duty_visit_plan_version_id -> id"
  duty_visit_version_location }o--|| province : "province_id -> id"
  duty_visit_version_organization }o--|| duty_visit_plan_version : "duty_visit_plan_version_id -> id"
  duty_visit_version_organization }o--|| organization : "organization_id -> id"
  duty_visit_version_participant }o--|| duty_visit_plan_version : "duty_visit_plan_version_id -> id"
  duty_visit_version_participant }o--|| person : "person_staff_identifier -> staff_identifier"
  duty_visit_version_participant }o--|| post : "post_id -> id"
  duty_visit_version_participant }o--|| rank : "rank_code -> code"
  duty_visit_visit_category }o--|| duty_visit : "duty_visit_id -> id"
  duty_visit_visit_category }o--|| visit_category : "visit_category_code -> code"
  external_contact }o--|| city : "city_id -> id"
  external_contact }o--|| country : "country_id -> id"
  external_contact }o--|| rank : "fsd_rank_code -> code"
  external_contact }o--|| organization : "organization_id -> id"
  external_contact }o--|| province : "province_id -> id"
  external_contact_attachment }o--|| external_contact : "external_contact_id -> id"
  organization }o--|| city : "city_id -> id"
  organization }o--|| country : "country_id -> id"
  organization }o--|| organization_type : "organization_type_code -> code"
  organization }o--|| province : "province_id -> id"
  organization_contact }o--|| organization : "organization_id -> id"
  person }o--|| post : "post_id -> id"
  person_rank_history }o--|| person : "person_staff_identifier -> staff_identifier"
  person_rank_history }o--|| rank : "rank_code -> code"
  post }o--|| command : "command_code -> code"
  province }o--|| country : "country_id -> id"
  rank }o--|| rank_group : "rank_group_code -> code"
  seed_city }o--|| seed_country : "country_iso_code2 -> iso_code2"
  seed_city }o--|| seed_province : "province_seed_id -> seed_id"
  seed_country }o--|| seed_continent : "continent_code -> code"
  seed_province }o--|| seed_country : "country_iso_code2 -> iso_code2"
  tag }o--|| tag_group : "tag_group_id -> id"
  visit_list_item }o--|| duty_visit : "duty_visit_id -> id"
  visit_list_item }o--|| visit_list : "visit_list_id -> id"
  visit_tag }o--|| duty_visit : "duty_visit_id -> id"
  visit_tag }o--|| tag : "tag_id -> id"

Foreign key list

Source Target Constraint
allowance_city_rate.city_id city.id allowance_city_rate_city_id_fkey
allowance_country_rate.country_id country.id allowance_country_rate_country_id_fkey
annual_vote_budget.budget_vote_code budget_vote.code annual_vote_budget_budget_vote_code_fkey
annual_vote_budget.fiscal_year_code fiscal_year.code annual_vote_budget_fiscal_year_code_fkey
budget_vote.main_category_code main_category.code budget_vote_main_category_code_fkey
city.country_id country.id city_country_id_fkey
city.province_id province.id city_province_id_fkey
country.continent_id continent.id country_continent_id_fkey
country_association.association_id association.id country_association_association_id_fkey
country_association.country_id country.id country_association_country_id_fkey
duty_visit.event_series_code event_series.code duty_visit_event_series_code_fkey
duty_visit.fiscal_year_code fiscal_year.code duty_visit_fiscal_year_code_fkey
duty_visit.main_category_code main_category.code duty_visit_main_category_code_fkey
duty_visit.status_code visit_status.code duty_visit_status_code_fkey
duty_visit.visit_category_code visit_category.code duty_visit_visit_category_code_fkey
duty_visit.visit_direction_code visit_direction.code duty_visit_visit_direction_code_fkey
duty_visit_attachment.duty_visit_id duty_visit.id duty_visit_attachment_duty_visit_id_fkey
duty_visit_budget_allocation.annual_vote_budget_id annual_vote_budget.id duty_visit_budget_allocation_annual_vote_budget_id_fkey
duty_visit_budget_allocation.duty_visit_id duty_visit.id duty_visit_budget_allocation_duty_visit_id_fkey
duty_visit_expenditure_item.budget_item_type_code budget_item_type.code duty_visit_expenditure_item_budget_item_type_code_fkey
duty_visit_expenditure_item.duty_visit_budget_allocation_id duty_visit_budget_allocation.id duty_visit_expenditure_item_duty_visit_budget_allocation_i_fkey
duty_visit_expenditure_item.duty_visit_plan_version_id duty_visit_plan_version.id duty_visit_expenditure_item_duty_visit_plan_version_id_fkey
duty_visit_external_contact.duty_visit_id duty_visit.id duty_visit_external_contact_duty_visit_id_fkey
duty_visit_external_contact.external_contact_id external_contact.id duty_visit_external_contact_external_contact_id_fkey
duty_visit_external_contact.met_via_org_id organization.id duty_visit_external_contact_met_via_org_id_fkey
duty_visit_itinerary_item.city_id city.id duty_visit_itinerary_item_city_id_fkey
duty_visit_itinerary_item.country_id country.id duty_visit_itinerary_item_country_id_fkey
duty_visit_itinerary_item.duty_visit_plan_version_id duty_visit_plan_version.id duty_visit_itinerary_item_duty_visit_plan_version_id_fkey
duty_visit_itinerary_item.organization_id organization.id duty_visit_itinerary_item_organization_id_fkey
duty_visit_itinerary_item.province_id province.id duty_visit_itinerary_item_province_id_fkey
duty_visit_plan_version.duty_visit_id duty_visit.id duty_visit_plan_version_duty_visit_id_fkey
duty_visit_plan_version.host_city_id city.id duty_visit_plan_version_host_city_id_fkey
duty_visit_plan_version.host_continent_id continent.id fk_dvpv_host_continent
duty_visit_plan_version.host_country_id country.id duty_visit_plan_version_host_country_id_fkey
duty_visit_plan_version.host_province_id province.id duty_visit_plan_version_host_province_id_fkey
duty_visit_unit.duty_visit_id duty_visit.id duty_visit_unit_duty_visit_id_fkey
duty_visit_unit.fsd_unit_id fsd_unit.id duty_visit_unit_fsd_unit_id_fkey
duty_visit_version_location.city_id city.id duty_visit_version_location_city_id_fkey
duty_visit_version_location.country_id country.id duty_visit_version_location_country_id_fkey
duty_visit_version_location.duty_visit_plan_version_id duty_visit_plan_version.id duty_visit_version_location_duty_visit_plan_version_id_fkey
duty_visit_version_location.province_id province.id duty_visit_version_location_province_id_fkey
duty_visit_version_organization.duty_visit_plan_version_id duty_visit_plan_version.id duty_visit_version_organization_duty_visit_plan_version_id_fkey
duty_visit_version_organization.organization_id organization.id duty_visit_version_organization_organization_id_fkey
duty_visit_version_participant.duty_visit_plan_version_id duty_visit_plan_version.id duty_visit_version_participant_duty_visit_plan_version_id_fkey
duty_visit_version_participant.person_staff_identifier person.staff_identifier duty_visit_version_participant_person_staff_identifier_fkey
duty_visit_version_participant.post_id post.id duty_visit_version_participant_post_id_fkey
duty_visit_version_participant.rank_code rank.code duty_visit_version_participant_rank_code_fkey
duty_visit_visit_category.duty_visit_id duty_visit.id duty_visit_visit_category_duty_visit_id_fkey
duty_visit_visit_category.visit_category_code visit_category.code duty_visit_visit_category_visit_category_code_fkey
external_contact.city_id city.id external_contact_city_id_fkey
external_contact.country_id country.id external_contact_country_id_fkey
external_contact.fsd_rank_code rank.code external_contact_fsd_rank_code_fkey
external_contact.organization_id organization.id external_contact_organization_id_fkey
external_contact.province_id province.id external_contact_province_id_fkey
external_contact_attachment.external_contact_id external_contact.id external_contact_attachment_external_contact_id_fkey
organization.city_id city.id organization_city_id_fkey
organization.country_id country.id organization_country_id_fkey
organization.organization_type_code organization_type.code organization_organization_type_code_fkey
organization.province_id province.id organization_province_id_fkey
organization_contact.organization_id organization.id organization_contact_organization_id_fkey
person.post_id post.id person_post_id_fkey
person_rank_history.person_staff_identifier person.staff_identifier person_rank_history_person_staff_identifier_fkey
person_rank_history.rank_code rank.code person_rank_history_rank_code_fkey
post.command_code command.code post_command_code_fkey
province.country_id country.id province_country_id_fkey
rank.rank_group_code rank_group.code rank_rank_group_code_fkey
seed_city.country_iso_code2 seed_country.iso_code2 seed_city_country_iso_code2_fkey
seed_city.province_seed_id seed_province.seed_id seed_city_province_seed_id_fkey
seed_country.continent_code seed_continent.code seed_country_continent_code_fkey
seed_province.country_iso_code2 seed_country.iso_code2 seed_province_country_iso_code2_fkey
tag.tag_group_id tag_group.id tag_tag_group_id_fkey
visit_list_item.duty_visit_id duty_visit.id visit_list_item_duty_visit_id_fkey
visit_list_item.visit_list_id visit_list.id visit_list_item_visit_list_id_fkey
visit_tag.duty_visit_id duty_visit.id visit_tag_duty_visit_id_fkey
visit_tag.tag_id tag.id visit_tag_tag_id_fkey
DBML-like text
Table alembic_version {
  version_num varchar [pk]
}

Table allowance_city_rate {
  id uuid [pk]
  city_id uuid
  rate_hkd numeric
  effective_from date
  effective_to date
  remarks text
}

Table allowance_country_rate {
  id uuid [pk]
  country_id uuid
  rate_hkd numeric
  effective_from date
  effective_to date
  remarks text
}

Table annual_vote_budget {
  id uuid [pk]
  approved_amount numeric
  approval_ref varchar
  remarks text
  fiscal_year_code varchar
  budget_vote_code varchar
}

Table association {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
  remarks text
  abbr_en varchar
  abbr_zh varchar
}

Table budget_item_type {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
}

Table budget_vote {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
  remarks text
  main_category_code varchar
}

Table city {
  id uuid [pk]
  country_id uuid
  province_id uuid
  name_en varchar
  name_zh varchar
  is_active bool
  remarks text
}

Table command {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
}

Table continent {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
}

Table country {
  id uuid [pk]
  iso_code varchar
  name_en varchar
  name_zh varchar
  continent_id uuid
  is_active bool
  remarks text
}

Table country_association {
  id uuid [pk]
  country_id uuid
  association_id uuid
  remarks text
}

Table duty_visit {
  id uuid [pk]
  visit_code varchar
  title_en varchar
  title_zh varchar
  report_required bool
  report_due_date date
  report_submitted_date date
  report_completed bool
  presentation_required bool
  presentation_due_date date
  presentation_completed_date date
  presentation_completed bool
  remarks text
  created_at timestamptz
  updated_at timestamptz
  visit_category_code varchar
  main_category_code varchar
  visit_direction_code varchar
  status_code varchar
  fiscal_year_code varchar
  event_series_code varchar
  stream duty_visit_stream_enum
  budget_annual_amount numeric
  estimation_before_departure_amount numeric
  actual_completion_amount numeric
  budget_annual_calc jsonb
  estimation_before_departure_calc jsonb
  actual_completion_calc jsonb
  actual_expenditure_items jsonb
  budget_vote_code varchar
}

Table duty_visit_attachment {
  id uuid [pk]
  duty_visit_id uuid
  attachment_type visit_attachment_type_enum
  file_name varchar
  file_path text
  uploaded_at timestamptz
  uploaded_by varchar
  remarks text
}

Table duty_visit_budget_allocation {
  id uuid [pk]
  duty_visit_id uuid
  annual_vote_budget_id uuid
  allocated_amount numeric
  remarks text
}

Table duty_visit_expenditure_item {
  id uuid [pk]
  duty_visit_plan_version_id uuid
  duty_visit_budget_allocation_id uuid
  expenditure_stage expenditure_stage_enum
  amount numeric
  currency_code varchar
  remarks text
  budget_item_type_code varchar
}

Table duty_visit_external_contact {
  id uuid [pk]
  duty_visit_id uuid
  external_contact_id uuid
  contact_role contact_role_enum
  met_via_org_id uuid
  remarks text
}

Table duty_visit_itinerary_item {
  id uuid [pk]
  duty_visit_plan_version_id uuid
  sequence_no int4
  start_datetime timestamptz
  end_datetime timestamptz
  country_id uuid
  province_id uuid
  city_id uuid
  organization_id uuid
  title varchar
  remarks text
}

Table duty_visit_plan_version {
  id uuid [pk]
  duty_visit_id uuid
  version_type plan_version_type_enum
  start_datetime timestamptz
  end_datetime timestamptz
  host_country_id uuid
  host_province_id uuid
  host_city_id uuid
  planned_headcount int4
  purpose text
  notes text
  created_at timestamptz
  updated_at timestamptz
  visit_location text
  planned_date_mode varchar
  planned_year int4
  planned_month int4
  planned_quarter int4
  location_to_be_confirmed bool
  host_continent_id uuid
}

Table duty_visit_unit {
  id uuid [pk]
  duty_visit_id uuid
  fsd_unit_id uuid
  remarks text
}

Table duty_visit_version_location {
  id uuid [pk]
  duty_visit_plan_version_id uuid
  sequence_no int4
  country_id uuid
  province_id uuid
  city_id uuid
  is_primary bool
  remarks text
}

Table duty_visit_version_organization {
  id uuid [pk]
  duty_visit_plan_version_id uuid
  organization_id uuid
  is_primary bool
  role_note varchar
  remarks text
}

Table duty_visit_version_participant {
  id uuid [pk]
  duty_visit_plan_version_id uuid
  certainty participant_certainty_enum
  rank_text_snapshot varchar
  participant_role participant_role_enum
  headcount int4
  remarks text
  person_staff_identifier varchar
  rank_code varchar
  post_id uuid
}

Table duty_visit_visit_category {
  duty_visit_id uuid [pk]
  visit_category_code varchar [pk]
  sort_order int4
  created_at timestamptz
}

Table event_series {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  is_active bool
  remarks text
}

Table external_contact {
  id uuid [pk]
  name_en varchar
  name_zh varchar
  rank_title_en varchar
  rank_title_zh varchar
  country_id uuid
  province_id uuid
  city_id uuid
  organization_id uuid
  office_phone varchar
  mobile_phone varchar
  email varchar
  whatsapp_number varchar
  wechat_id varchar
  notes text
  is_active bool
  created_at timestamptz
  updated_at timestamptz
  fsd_rank_code varchar
}

Table external_contact_attachment {
  id uuid [pk]
  external_contact_id uuid
  attachment_type external_contact_attachment_type_enum
  file_name varchar
  file_path text
  uploaded_at timestamptz
  uploaded_by varchar
  remarks text
}

Table fiscal_year {
  id uuid [pk]
  code varchar
  start_date date
  end_date date
  is_active bool
}

Table fsd_unit {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  unit_type fsd_unit_type_enum
  sort_order int4
  is_active bool
  remarks text
}

Table main_category {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
}

Table organization {
  id uuid [pk]
  name_en varchar
  name_zh varchar
  country_id uuid
  province_id uuid
  city_id uuid
  general_phone varchar
  general_email varchar
  website varchar
  is_active bool
  remarks text
  created_at timestamptz
  updated_at timestamptz
  organization_type_code varchar
  abbr_en varchar
  abbr_zh varchar
}

Table organization_contact {
  id uuid [pk]
  organization_id uuid
  name_en varchar
  name_zh varchar
  rank_title_en varchar
  rank_title_zh varchar
  email varchar
  phone varchar
  whatsapp_number varchar
  wechat_id varchar
  contact_notes text
  how_we_contacted text
  is_primary bool
  is_active bool
  created_at timestamptz
  updated_at timestamptz
}

Table organization_type {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
}

Table person {
  id uuid [pk]
  staff_identifier varchar
  name_en varchar
  name_zh varchar
  is_active bool
  remarks text
  created_at timestamptz
  updated_at timestamptz
  post_id uuid
}

Table person_rank_history {
  id uuid [pk]
  effective_from date
  effective_to date
  post_title varchar
  remarks text
  person_staff_identifier varchar
  rank_code varchar
}

Table post {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  command_code varchar
}

Table province {
  id uuid [pk]
  country_id uuid
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
  remarks text
}

Table rank {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
  rank_group_code varchar
}

Table rank_group {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
}

Table seed_city {
  seed_id varchar [pk]
  source varchar
  country_iso_code2 varchar
  province_seed_id varchar
  city_code varchar
  geoname_id int8
  feature_code varchar
  population int8
  name_en varchar
  name_zh_hant varchar
  zh_variant varchar
  sort_order int4
  is_active bool
  remarks text
}

Table seed_continent {
  code varchar [pk]
  name_en varchar
  name_zh_hant varchar
  geoname_id int8
  sort_order int4
  source varchar
  is_active bool
  remarks text
}

Table seed_country {
  iso_code2 varchar [pk]
  iso_code3 varchar
  iso_numeric varchar
  fips_code varchar
  geoname_id int8
  continent_code varchar
  name_en varchar
  name_zh_hant varchar
  capital_name varchar
  zh_variant varchar
  source varchar
  is_active bool
  remarks text
}

Table seed_dataset_sync {
  dataset_code varchar [pk]
  source_url text
  source_last_modified text
  loaded_at timestamptz
  row_count int4
  notes text
}

Table seed_province {
  seed_id varchar [pk]
  source varchar
  country_iso_code2 varchar
  province_code varchar
  geoname_id int8
  name_en varchar
  name_zh_hant varchar
  zh_variant varchar
  sort_order int4
  is_active bool
  remarks text
}

Table tag {
  id uuid [pk]
  tag_group_id uuid
  name varchar
  color_hex varchar
  sort_order int4
  is_active bool
  deleted_at timestamptz
  created_at timestamptz
  updated_at timestamptz
}

Table tag_group {
  id uuid [pk]
  name varchar
  is_exclusive bool
  color_hex varchar
  sort_order int4
  is_active bool
  created_at timestamptz
  updated_at timestamptz
}

Table visit_category {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
}

Table visit_direction {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
}

Table visit_list {
  id uuid [pk]
  name varchar
  sort_order int4
  created_at timestamptz
  updated_at timestamptz
}

Table visit_list_item {
  visit_list_id uuid [pk]
  duty_visit_id uuid [pk]
  sort_order int4
  created_at timestamptz
}

Table visit_status {
  id uuid [pk]
  code varchar
  name_en varchar
  name_zh varchar
  sort_order int4
  is_active bool
}

Table visit_tag {
  duty_visit_id uuid [pk]
  tag_id uuid [pk]
  created_at timestamptz
}

Ref: allowance_city_rate.city_id > city.id
Ref: allowance_country_rate.country_id > country.id
Ref: annual_vote_budget.budget_vote_code > budget_vote.code
Ref: annual_vote_budget.fiscal_year_code > fiscal_year.code
Ref: budget_vote.main_category_code > main_category.code
Ref: city.country_id > country.id
Ref: city.province_id > province.id
Ref: country.continent_id > continent.id
Ref: country_association.association_id > association.id
Ref: country_association.country_id > country.id
Ref: duty_visit.event_series_code > event_series.code
Ref: duty_visit.fiscal_year_code > fiscal_year.code
Ref: duty_visit.main_category_code > main_category.code
Ref: duty_visit.status_code > visit_status.code
Ref: duty_visit.visit_category_code > visit_category.code
Ref: duty_visit.visit_direction_code > visit_direction.code
Ref: duty_visit_attachment.duty_visit_id > duty_visit.id
Ref: duty_visit_budget_allocation.annual_vote_budget_id > annual_vote_budget.id
Ref: duty_visit_budget_allocation.duty_visit_id > duty_visit.id
Ref: duty_visit_expenditure_item.budget_item_type_code > budget_item_type.code
Ref: duty_visit_expenditure_item.duty_visit_budget_allocation_id > duty_visit_budget_allocation.id
Ref: duty_visit_expenditure_item.duty_visit_plan_version_id > duty_visit_plan_version.id
Ref: duty_visit_external_contact.duty_visit_id > duty_visit.id
Ref: duty_visit_external_contact.external_contact_id > external_contact.id
Ref: duty_visit_external_contact.met_via_org_id > organization.id
Ref: duty_visit_itinerary_item.city_id > city.id
Ref: duty_visit_itinerary_item.country_id > country.id
Ref: duty_visit_itinerary_item.duty_visit_plan_version_id > duty_visit_plan_version.id
Ref: duty_visit_itinerary_item.organization_id > organization.id
Ref: duty_visit_itinerary_item.province_id > province.id
Ref: duty_visit_plan_version.duty_visit_id > duty_visit.id
Ref: duty_visit_plan_version.host_city_id > city.id
Ref: duty_visit_plan_version.host_continent_id > continent.id
Ref: duty_visit_plan_version.host_country_id > country.id
Ref: duty_visit_plan_version.host_province_id > province.id
Ref: duty_visit_unit.duty_visit_id > duty_visit.id
Ref: duty_visit_unit.fsd_unit_id > fsd_unit.id
Ref: duty_visit_version_location.city_id > city.id
Ref: duty_visit_version_location.country_id > country.id
Ref: duty_visit_version_location.duty_visit_plan_version_id > duty_visit_plan_version.id
Ref: duty_visit_version_location.province_id > province.id
Ref: duty_visit_version_organization.duty_visit_plan_version_id > duty_visit_plan_version.id
Ref: duty_visit_version_organization.organization_id > organization.id
Ref: duty_visit_version_participant.duty_visit_plan_version_id > duty_visit_plan_version.id
Ref: duty_visit_version_participant.person_staff_identifier > person.staff_identifier
Ref: duty_visit_version_participant.post_id > post.id
Ref: duty_visit_version_participant.rank_code > rank.code
Ref: duty_visit_visit_category.duty_visit_id > duty_visit.id
Ref: duty_visit_visit_category.visit_category_code > visit_category.code
Ref: external_contact.city_id > city.id
Ref: external_contact.country_id > country.id
Ref: external_contact.fsd_rank_code > rank.code
Ref: external_contact.organization_id > organization.id
Ref: external_contact.province_id > province.id
Ref: external_contact_attachment.external_contact_id > external_contact.id
Ref: organization.city_id > city.id
Ref: organization.country_id > country.id
Ref: organization.organization_type_code > organization_type.code
Ref: organization.province_id > province.id
Ref: organization_contact.organization_id > organization.id
Ref: person.post_id > post.id
Ref: person_rank_history.person_staff_identifier > person.staff_identifier
Ref: person_rank_history.rank_code > rank.code
Ref: post.command_code > command.code
Ref: province.country_id > country.id
Ref: rank.rank_group_code > rank_group.code
Ref: seed_city.country_iso_code2 > seed_country.iso_code2
Ref: seed_city.province_seed_id > seed_province.seed_id
Ref: seed_country.continent_code > seed_continent.code
Ref: seed_province.country_iso_code2 > seed_country.iso_code2
Ref: tag.tag_group_id > tag_group.id
Ref: visit_list_item.duty_visit_id > duty_visit.id
Ref: visit_list_item.visit_list_id > visit_list.id
Ref: visit_tag.duty_visit_id > duty_visit.id
Ref: visit_tag.tag_id > tag.id