# Feature Specification: Cadastro Completo de Imóvel v2 **Feature Branch**: `010-property-form-v2` **Created**: 2026-04-14 **Status**: In Progress ## Contexto Expansão da feature 009 com: upload real de fotos, IPTU anual, validação completa, código auto-gerado, formulário full-screen, guard de saída não salva, e nova página de gestão de Cidades/Bairros/Amenidades. ## User Stories ### US1 — Upload de fotos (P1) **Given** admin no formulário de imóvel, **When** arrasta ou seleciona fotos, **Then** o arquivo é enviado ao backend e a URL retornada é adicionada à lista. ### US2 — Código auto-gerado (P2) **Given** admin clica em novo imóvel, **When** formulário abre, **Then** campo código já vem preenchido com valor sequencial/único editável. ### US3 — Validação completa (P1) **Given** admin tenta salvar, **When** campo obrigatório vazio, **Then** campo fica destacado em vermelho com mensagem. ### US4 — Formulário full-screen (P2) **Given** admin clica em editar ou novo imóvel, **When** formulário abre, **Then** ocupa toda a área de conteúdo (respeitando sidebar + header). ### US5 — Guard de saída não salva (P2) **Given** admin editou campos mas não salvou, **When** tenta navegar ou fechar aba, **Then** alerta de confirmação aparece. ### US6 — Gestão de Cidades e Bairros (P1) **Given** admin acessa `/admin/cidades`, **When** página carrega, **Then** pode criar/editar/remover cidades e seus bairros. ### US7 — Gestão de Amenidades (P2) **Given** admin no formulário de imóvel, **When** seleciona amenidades, **Then** as selecionadas ficam marcadas; pode adicionar nova amenidade na hora. ## Acceptance Criteria - Upload multipart de imagens (jpg/png/webp, máx 5 MB) - Código auto-gerado no padrão `IM-NNNN` baseado no último código existente - Campos obrigatórios com highlight visual e mensagem - IPTU anual (Decimal, opcional) - Formulário ocupa `calc(100vh - 56px)` com scroll interno por seção - `beforeunload` + `usePrompt` para guard de navegação - CRUD completo de cidades com aninhamento de bairros - Amenidades listadas por grupo com toggles, e botão para criar nova