feat: add full project - backend, frontend, docker, specs and configs
This commit is contained in:
parent
b77c7d5a01
commit
e6cb06255b
24489 changed files with 61341 additions and 36 deletions
163
specs/020-politica-de-privacidade/data-model.md
Normal file
163
specs/020-politica-de-privacidade/data-model.md
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
# Data Model: Página de Política de Privacidade
|
||||
|
||||
**Feature**: 020-politica-de-privacidade
|
||||
**Phase**: 1 — Design & Contracts
|
||||
**Status**: Complete
|
||||
|
||||
---
|
||||
|
||||
## Nota sobre "Data Model" para feature 100% frontend
|
||||
|
||||
Esta feature não envolve entidades de banco de dados nem estado gerenciado em store. O "modelo de dados" aqui descreve a estrutura lógica do conteúdo estático e o contrato de componentes React.
|
||||
|
||||
---
|
||||
|
||||
## Entidades de Componente
|
||||
|
||||
### PrivacyPolicyPage
|
||||
|
||||
| Propriedade | Tipo | Descrição |
|
||||
|---|---|---|
|
||||
| — | — | Componente sem props (stateless, sem hooks) |
|
||||
|
||||
**Estrutura JSX**:
|
||||
|
||||
```
|
||||
PrivacyPolicyPage
|
||||
├── <Navbar />
|
||||
├── <main id="main-content" className="min-h-screen bg-canvas">
|
||||
│ └── <div className="max-w-[800px] mx-auto px-6 pt-16 pb-20">
|
||||
│ ├── Header (label + título + data de atualização)
|
||||
│ └── Seções (1–8)
|
||||
│ └── <section> com <h2> numerado + <p>/<ul> de conteúdo
|
||||
└── <Footer />
|
||||
```
|
||||
|
||||
**Seções (hardcoded)**:
|
||||
|
||||
```typescript
|
||||
type PolicySection = {
|
||||
id: number // 1–8
|
||||
title: string // "1. Instituição Responsável" etc.
|
||||
content: ReactNode // JSX com paragrafos / listas
|
||||
}
|
||||
```
|
||||
|
||||
*Observação*: O tipo `PolicySection` NÃO precisa ser exportado nem criado como shared type — é usado somente internamente no componente. Principle VI: sem abstração prematura.
|
||||
|
||||
---
|
||||
|
||||
### Footer (atualizado)
|
||||
|
||||
Mudança pontual: adicionar `<Link to="/politica-de-privacidade">` no bloco `<nav>` existente.
|
||||
|
||||
**Estado atual do array `footerLinks`**:
|
||||
```typescript
|
||||
const footerLinks = [
|
||||
{ label: 'Imóveis', href: '/imoveis' },
|
||||
{ label: 'Sobre', href: '#sobre' },
|
||||
{ label: 'Contato', href: '#contato' },
|
||||
]
|
||||
```
|
||||
|
||||
**Após a mudança** — o array `footerLinks` **não é alterado**. Um novo link `<Link>` do react-router-dom é adicionado manualmente no `<ul>` após os links existentes:
|
||||
|
||||
```tsx
|
||||
import { Link } from 'react-router-dom'
|
||||
|
||||
// no <ul> dos footerLinks, após o map existente:
|
||||
<li>
|
||||
<Link
|
||||
to="/politica-de-privacidade"
|
||||
className="text-xs text-text-tertiary hover:text-text-secondary transition-colors duration-150"
|
||||
>
|
||||
Política de Privacidade
|
||||
</Link>
|
||||
</li>
|
||||
```
|
||||
|
||||
**Rationale**: Adicionar ao array seria inconsistente (o array usa `href` para `<a>`, mas esse precisa de `<Link>`). Manter separado é mais claro e não requer refatorar o loop existente.
|
||||
|
||||
---
|
||||
|
||||
### Rota (App.tsx)
|
||||
|
||||
| Campo | Valor |
|
||||
|---|---|
|
||||
| `path` | `/politica-de-privacidade` |
|
||||
| `element` | `<PrivacyPolicyPage />` |
|
||||
| Posição no arquivo | Após a rota `/corretores`, antes da rota `/login` |
|
||||
| Guards | Nenhum — rota pública |
|
||||
|
||||
---
|
||||
|
||||
## Conteúdo estático das seções
|
||||
|
||||
### Seção 1 — Instituição Responsável
|
||||
|
||||
Nome: `[NOME DA EMPRESA]`
|
||||
CNPJ: `[CNPJ]`
|
||||
Endereço: `[ENDEREÇO COMPLETO]`
|
||||
*Esta empresa é a controladora dos dados pessoais tratados neste site.*
|
||||
|
||||
### Seção 2 — Coleta e Uso de Dados Pessoais
|
||||
|
||||
Dados coletados:
|
||||
- Nome completo, e-mail e telefone ao preencher formulários de contato
|
||||
- Dados de navegação (páginas visitadas, tempo de sessão) via cookies analíticos
|
||||
- Dados fornecidos voluntariamente ao solicitar visitas a imóveis
|
||||
|
||||
Finalidades:
|
||||
- Responder solicitações de contato e agendamento de visitas
|
||||
- Melhorar a experiência de uso do site
|
||||
- Enviar comunicações sobre imóveis compatíveis com o perfil do usuário (com consentimento)
|
||||
|
||||
### Seção 3 — Transferência de Dados Pessoais
|
||||
|
||||
Compartilhamento com:
|
||||
- Corretores parceiros, apenas dados necessários para conduzir visitas
|
||||
- Plataformas de análise de tráfego (ex.: Google Analytics) — dados anonimizados
|
||||
- Não vendemos ou alugamos dados pessoais a terceiros
|
||||
|
||||
### Seção 4 — Uso de Cookies
|
||||
|
||||
Tipos de cookies utilizados:
|
||||
- **Essenciais**: necessários para o funcionamento do site (autenticação, preferências)
|
||||
- **Analíticos**: medem o uso do site para melhoria contínua
|
||||
- O usuário pode desativar cookies analíticos nas configurações do navegador
|
||||
|
||||
### Seção 5 — Direitos do Usuário (LGPD)
|
||||
|
||||
Conforme a Lei 13.709/2018 (LGPD), o titular dos dados tem direito a:
|
||||
- **Acesso**: confirmar a existência e solicitar cópia dos dados tratados
|
||||
- **Correção**: atualizar dados incompletos, inexatos ou desatualizados
|
||||
- **Exclusão**: solicitar a eliminação de dados desnecessários ou tratados com consentimento
|
||||
- **Portabilidade**: receber seus dados em formato estruturado
|
||||
- **Revogação de consentimento**: retirar o consentimento a qualquer momento
|
||||
|
||||
### Seção 6 — Segurança dos Dados
|
||||
|
||||
- Utilizamos conexões HTTPS em todo o site
|
||||
- Dados sensíveis são armazenados com criptografia
|
||||
- Acesso interno limitado ao pessoal autorizado
|
||||
- Revisamos regularmente nossas práticas de segurança
|
||||
|
||||
### Seção 7 — Alterações nesta Política
|
||||
|
||||
Podemos atualizar esta Política periodicamente. A data de "última atualização" é exibida no topo da página. Recomendamos revisão periódica.
|
||||
|
||||
### Seção 8 — Contato / DPO
|
||||
|
||||
Para exercer seus direitos ou esclarecer dúvidas sobre o tratamento de seus dados:
|
||||
E-mail do Encarregado (DPO): `[EMAIL DO DPO]`
|
||||
Link exibido como `<a href="mailto:[EMAIL DO DPO]">` abrindo cliente de e-mail.
|
||||
|
||||
---
|
||||
|
||||
## Validações e regras de estado
|
||||
|
||||
| Regra | Implementação |
|
||||
|---|---|
|
||||
| Sem chamadas de API | Componente não usa `useEffect`, `useState`, nem imports de `services/` |
|
||||
| Sem estado de loading | Nenhum skeleton, spinner ou estado condicional |
|
||||
| Links externos abrem em nova aba | `target="_blank" rel="noopener noreferrer"` no link do e-mail DPO |
|
||||
Loading…
Add table
Add a link
Reference in a new issue