Skip to content

docs use cases uc 003 select location

AlexandreZanata edited this page Sep 30, 2026 · 1 revision

UC-003 — Select Location (State + City)

Field Value
ID UC-003
Name Select Location
Actors End User
Layer UI → Application → Domain

Goal

Let the user choose a Brazilian state and municipality to view fuel prices.

Preconditions

  • At least one SurveyWeek imported (BR-005).
  • DataReadiness is READY, PARTIAL, or STALE.

Main flow

  1. User opens location picker from home or search tab.
  2. System displays list of 27 BrazilianState values (localized display names via i18n).
  3. User selects a state.
  4. System loads all catalog municipalities for the state (BR-016), each annotated with DataAvailability for latest SurveyWeek (BR-006).
  5. User selects a municipality from the list (including cities without current-week data).
  6. System validates selection exists in MunicipalityCatalog.
  7. System persists preferredState and preferredMunicipality (BR-012).
  8. System emits CitySelected.
  9. System navigates to UC-005 (municipality prices).

Alternative flows

A1 — Municipality has no data for selected week

  • WHEN municipality list item has DataAvailability.NO_DATA_THIS_WEEK or NEVER_IN_ANP
  • THEN allow selection; UC-005 shows informative empty state (BR-010)

A2 — State has no catalog municipalities

  • WHEN municipality list is empty for state
  • THEN show empty state (BR-010) with message to pick another state

A3 — User changes location from home

  • WHEN user already has a preferred city
  • THEN picker pre-selects current state/municipality

Business rules

  • BR-005, BR-006, BR-010, BR-012, BR-016

Domain events

  • CitySelected(municipality, state, surveyWeekId)

Postconditions

  • Home screen reflects selected municipality.
  • Preference survives app restart.

i18n keys

  • location_picker_title
  • location_state_label
  • location_municipality_label
  • location_empty_state
  • location_no_data_this_week

Fuel prices wiki

Source: AlexandreZanata/brazil-fuel-prices @ 08a54dc49c2e43a85aba56a7b56ae96d692cec61

Clone this wiki locally