Initial commit of the complete City10 virtual city simulation platform. Backend (Laravel 13): - REST API with Sanctum tokens and session-based web authentication - Role-based access control (admin/user) with middleware protection - AI agent CRUD with OpenRouter.ai integration restricted to free models - Store management with 3D coordinates and AI shopkeeper assignment - Versioned legal documents (Terms, Privacy, Cookies) with LGPD audit trail - Math CAPTCHA on public forms and multi-language support (pt_BR, en, es) Frontend: - Responsive Blade templates with Tailwind CSS v4 - Three.js 3D city viewer with SSE chat streaming to AI agents - Admin panel for store and user administration Infrastructure: - MariaDB/MySQL database with comprehensive migrations - Database seeders for demo content and test accounts - PHPUnit test suite and Laravel Pint code styling - Vite build configuration with hot reload
443 lines
21 KiB
PHP
Executable File
443 lines
21 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Models\LegalDocument;
|
|
use Illuminate\Database\Seeder;
|
|
|
|
/**
|
|
* Seeds the initial version (1.0.0) of the three legal documents.
|
|
*
|
|
* Content is provided in Portuguese (Brazil), English and Spanish and
|
|
* covers the requirements of the Brazilian LGPD (Lei nº 13.709/2018):
|
|
* data collection, storage, processing, sharing, deletion rights and the
|
|
* cookie policy with consent management.
|
|
*/
|
|
class LegalDocumentSeeder extends Seeder
|
|
{
|
|
/**
|
|
* Seed the legal documents table.
|
|
*/
|
|
public function run(): void
|
|
{
|
|
$publishedAt = now();
|
|
|
|
LegalDocument::updateOrCreate(
|
|
['type' => LegalDocument::TYPE_TERMS, 'version' => '1.0.0'],
|
|
[
|
|
'title' => [
|
|
'pt_BR' => 'Termos de Uso e Política de Privacidade',
|
|
'en' => 'Terms of Use and Privacy Policy',
|
|
'es' => 'Términos de Uso y Política de Privacidad',
|
|
],
|
|
'body' => [
|
|
'pt_BR' => $this->termsPtBr(),
|
|
'en' => $this->termsEn(),
|
|
'es' => $this->termsEs(),
|
|
],
|
|
'is_current' => true,
|
|
'published_at' => $publishedAt,
|
|
],
|
|
);
|
|
|
|
LegalDocument::updateOrCreate(
|
|
['type' => LegalDocument::TYPE_PRIVACY, 'version' => '1.0.0'],
|
|
[
|
|
'title' => [
|
|
'pt_BR' => 'Política de Privacidade (LGPD)',
|
|
'en' => 'Privacy Policy (LGPD)',
|
|
'es' => 'Política de Privacidad (LGPD)',
|
|
],
|
|
'body' => [
|
|
'pt_BR' => $this->privacyPtBr(),
|
|
'en' => $this->privacyEn(),
|
|
'es' => $this->privacyEs(),
|
|
],
|
|
'is_current' => true,
|
|
'published_at' => $publishedAt,
|
|
],
|
|
);
|
|
|
|
LegalDocument::updateOrCreate(
|
|
['type' => LegalDocument::TYPE_COOKIES, 'version' => '1.0.0'],
|
|
[
|
|
'title' => [
|
|
'pt_BR' => 'Política de Cookies',
|
|
'en' => 'Cookie Policy',
|
|
'es' => 'Política de Cookies',
|
|
],
|
|
'body' => [
|
|
'pt_BR' => $this->cookiesPtBr(),
|
|
'en' => $this->cookiesEn(),
|
|
'es' => $this->cookiesEs(),
|
|
],
|
|
'is_current' => true,
|
|
'published_at' => $publishedAt,
|
|
],
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Terms of Use body in Portuguese (Brazil).
|
|
*/
|
|
private function termsPtBr(): string
|
|
{
|
|
return <<<'TXT'
|
|
# Termos de Uso — City10
|
|
|
|
**Versão 1.0.0** — Vigência a partir da data de aceite pelo usuário.
|
|
|
|
## 1. Objeto
|
|
O City10 é uma plataforma de simulação urbana 3D com agentes de inteligência artificial, operada pela Syspanel (contato@syspanel.com.br). Ao criar uma conta e utilizar a plataforma, o usuário declara ter lido e concordado com estes Termos e com a Política de Privacidade.
|
|
|
|
## 2. Cadastro e Conta
|
|
2.1. O usuário deve fornecer informações verdadeiras (nome e e-mail).
|
|
2.2. A conta é pessoal e intransferível. O usuário é responsável pela guarda de sua senha.
|
|
2.3. Contas administrativas possuem privilégios adicionais de gestão da cidade e dos agentes de IA.
|
|
|
|
## 3. Uso Aceitável
|
|
3.1. É vedado utilizar a plataforma para fins ilícitos, ofensivos ou que violem direitos de terceiros.
|
|
3.2. É vedado tentar contornar mecanismos de segurança, exceder limites de uso da API ou inserir conteúdo malicioso.
|
|
3.3. Os agentes de IA operam com modelos de linguagem de terceiros (OpenRouter.ai). As decisões simuladas por esses agentes são ficção e não constituem aconselhamento profissional.
|
|
|
|
## 4. Propriedade Intelectual
|
|
4.1. O software, marca City10 e respectivos código-fonte são propriedade da Syspanel, regidos pela Licença Proprietária anexa (LICENSE).
|
|
4.2. O conteúdo gerado pelo usuário permanece de sua titulariedade, concedendo à plataforma a licença mínima necessária para exibição.
|
|
|
|
## 5. Limitação de Responsabilidade
|
|
5.1. A plataforma é fornecida "no estado em que se encontra". A Syspanel não garante disponibilidade ininterrupta.
|
|
5.2. A Syspanel não se responsabiliza por decisões tomadas com base em simulações produzidas pelos agentes de IA.
|
|
|
|
## 6. Encerramento
|
|
6.1. A Syspanel pode suspender ou encerrar contas que violem estes Termos, mediante notificação quando possível.
|
|
6.2. O usuário pode solicitar a exclusão de seus dados a qualquer momento (direito de eliminação, art. 18, VI, LGPD).
|
|
|
|
## 7. Foro
|
|
Fica eleito o foro da comarca de Santa Rita do Sapucaí — MG, Brasil, para dirimir controvérsias decorrentes destes Termos.
|
|
TXT;
|
|
}
|
|
|
|
/**
|
|
* Terms of Use body in English.
|
|
*/
|
|
private function termsEn(): string
|
|
{
|
|
return <<<'TXT'
|
|
# Terms of Use — City10
|
|
|
|
**Version 1.0.0** — Effective from the date of user acceptance.
|
|
|
|
## 1. Purpose
|
|
City10 is a 3D urban simulation platform with artificial intelligence agents, operated by Syspanel (contato@syspanel.com.br). By creating an account and using the platform, the user acknowledges having read and agreed to these Terms and to the Privacy Policy.
|
|
|
|
## 2. Registration and Account
|
|
2.1. Users must provide truthful information (name and email).
|
|
2.2. Accounts are personal and non-transferable. The user is responsible for safeguarding their password.
|
|
2.3. Administrative accounts hold additional privileges to manage the city and its AI agents.
|
|
|
|
## 3. Acceptable Use
|
|
3.1. Using the platform for unlawful, offensive purposes or that infringe third-party rights is prohibited.
|
|
3.2. Circumventing security mechanisms, exceeding API usage limits or injecting malicious content is prohibited.
|
|
3.3. AI agents run on third-party language models (OpenRouter.ai). Agent decisions are fictional and do not constitute professional advice.
|
|
|
|
## 4. Intellectual Property
|
|
4.1. The software, the City10 brand and its source code are property of Syspanel, governed by the proprietary License attached (LICENSE).
|
|
4.2. User-generated content remains owned by the user, who grants the platform the minimal licence required for display.
|
|
|
|
## 5. Limitation of Liability
|
|
5.1. The platform is provided "as is". Syspanel does not guarantee uninterrupted availability.
|
|
5.2. Syspanel is not liable for decisions taken based on simulations produced by AI agents.
|
|
|
|
## 6. Termination
|
|
6.1. Syspanel may suspend or terminate accounts that violate these Terms, with notice when possible.
|
|
6.2. Users may request deletion of their data at any time (right of erasure, art. 18, VI, LGPD).
|
|
|
|
## 7. Governing Law
|
|
The courts of Santa Rita do Sapucaí — MG, Brazil, are elected to settle disputes arising from these Terms.
|
|
TXT;
|
|
}
|
|
|
|
/**
|
|
* Terms of Use body in Spanish.
|
|
*/
|
|
private function termsEs(): string
|
|
{
|
|
return <<<'TXT'
|
|
# Términos de Uso — City10
|
|
|
|
**Versión 1.0.0** — Vigente desde la fecha de aceptación por el usuario.
|
|
|
|
## 1. Objeto
|
|
City10 es una plataforma de simulación urbana 3D con agentes de inteligencia artificial, operada por Syspanel (contato@syspanel.com.br). Al crear una cuenta y utilizar la plataforma, el usuario declara haber leído y aceptado estos Términos y la Política de Privacidad.
|
|
|
|
## 2. Registro y Cuenta
|
|
2.1. El usuario debe proporcionar información verídica (nombre y correo electrónico).
|
|
2.2. La cuenta es personal e intransferible. El usuario es responsable de la custodia de su contraseña.
|
|
2.3. Las cuentas administrativas poseen privilegios adicionales de gestión de la ciudad y de los agentes de IA.
|
|
|
|
## 3. Uso Aceptable
|
|
3.1. Está prohibido utilizar la plataforma con fines ilícitos, ofensivos o que violen derechos de terceros.
|
|
3.2. Está prohibido eludir mecanismos de seguridad, exceder límites de uso de la API o inyectar contenido malicioso.
|
|
3.3. Los agentes de IA operan con modelos de lenguaje de terceros (OpenRouter.ai). Las decisiones simuladas son ficción y no constituyen asesoramiento profesional.
|
|
|
|
## 4. Propiedad Intelectual
|
|
4.1. El software, la marca City10 y su código fuente son propiedad de Syspanel, regidos por la Licencia Proprietaria adjunta (LICENSE).
|
|
4.2. El contenido generado por el usuario sigue siendo de su titularidad, concediendo a la plataforma la licencia mínima necesaria para su exhibición.
|
|
|
|
## 5. Limitación de Responsabilidad
|
|
5.1. La plataforma se ofrece "tal cual". Syspanel no garantiza disponibilidad ininterrumpida.
|
|
5.2. Syspanel no se responsabiliza por decisiones tomadas en base a simulaciones producidas por los agentes de IA.
|
|
|
|
## 6. Terminación
|
|
6.1. Syspanel puede suspender o terminar cuentas que violen estos Términos, con notificación cuando sea posible.
|
|
6.2. El usuario puede solicitar la eliminación de sus datos en cualquier momento (derecho de supresión, art. 18, VI, LGPD).
|
|
|
|
## 7. Ley Aplicable
|
|
Se elige el foro de Santa Rita do Sapucaí — MG, Brasil, para resolver controversias derivadas de estos Términos.
|
|
TXT;
|
|
}
|
|
|
|
/**
|
|
* Privacy Policy body in Portuguese (Brazil).
|
|
*/
|
|
private function privacyPtBr(): string
|
|
{
|
|
return <<<'TXT'
|
|
# Política de Privacidade — City10 (LGPD)
|
|
|
|
**Versão 1.0.0** — Em conformidade com a Lei nº 13.709/2018 (LGPD).
|
|
|
|
## 1. Controlador dos Dados
|
|
Syspanel — contato@syspanel.com.br — Santa Rita do Sapucaí/MG, Brasil.
|
|
|
|
## 2. Dados Pessoais Coletados
|
|
2.1. **Dados de cadastro:** nome, e-mail e senha (armazenada em formato irreversível — hash bcrypt).
|
|
2.2. **Dados de consentimento:** data/hora, versão dos documentos aceitos, endereço IP e user agent (auditoria LGPD).
|
|
2.3. **Dados de uso:** registros de acesso (logs) e preferência de idioma.
|
|
|
|
## 3. Finalidades e Bases Legais
|
|
3.1. **Execução do contrato** (art. 7º, V): prestação da plataforma, autenticação e funcionamento da cidade 3D.
|
|
3.2. **Consentimento** (art. 7º, I): aceite dos Termos, Política de Privacidade e Política de Cookies.
|
|
3.3. **Legítimo interesse** (art. 7º, IX): segurança, prevenção a fraudes e melhoria do serviço, com testes de balanceamento.
|
|
|
|
## 4. Compartilhamento
|
|
4.1. Os dados são compartilhados exclusivamente com: (i) provedor de infraestrutura ( hospedagem em Docker ); (ii) OpenRouter.ai, exclusivamente com prompts contendo contexto simulado da cidade — nunca dados cadastrais do usuário.
|
|
4.2. Não vendemos dados pessoais a terceiros.
|
|
|
|
## 5. Transferência Internacional
|
|
O serviço de modelos de IA (OpenRouter.ai) pode processar prompts fora do Brasil. Nesses casos, adotamos salvaguardas contratuais adequadas.
|
|
|
|
## 6. Tempo de Conservação
|
|
6.1. Dados de cadastro: enquanto a conta estiver ativa + 6 meses após encerramento.
|
|
6.2. Registros de consentimento: pelo prazo mínimo de 5 anos (art. 37, LGPD — dever de guarda de registros).
|
|
|
|
## 7. Direitos do Titular (art. 18)
|
|
O usuário pode solicitar: confirmação de tratamento; acesso; correção; anonimização, bloqueio ou eliminação; portabilidade; informação sobre compartilhamento; revogação do consentimento. Solicitações: contato@syspanel.com.br, respondidas em até 15 dias.
|
|
|
|
## 8. Segurança
|
|
Utilizamos hash de senhas (bcrypt), controle de acesso por papel (roles), tokens de API revogáveis e trilhas de auditoria.
|
|
|
|
## 9. Encarregado de Dados (DPO)
|
|
contato@syspanel.com.br — canal direto para o Encarregado pelo tratamento de dados pessoais.
|
|
TXT;
|
|
}
|
|
|
|
/**
|
|
* Privacy Policy body in English.
|
|
*/
|
|
private function privacyEn(): string
|
|
{
|
|
return <<<'TXT'
|
|
# Privacy Policy — City10 (LGPD)
|
|
|
|
**Version 1.0.0** — Compliant with Brazilian Law nº 13.709/2018 (LGPD).
|
|
|
|
## 1. Data Controller
|
|
Syspanel — contato@syspanel.com.br — Santa Rita do Sapucaí/MG, Brazil.
|
|
|
|
## 2. Personal Data Collected
|
|
2.1. **Registration data:** name, email and password (stored irreversibly as a bcrypt hash).
|
|
2.2. **Consent data:** date/time, accepted document versions, IP address and user agent (LGPD audit trail).
|
|
2.3. **Usage data:** access logs and language preference.
|
|
|
|
## 3. Purposes and Legal Bases
|
|
3.1. **Contract performance** (art. 7, V): platform delivery, authentication and 3D city operation.
|
|
3.2. **Consent** (art. 7, I): acceptance of Terms, Privacy Policy and Cookie Policy.
|
|
3.3. **Legitimate interest** (art. 7, IX): security, fraud prevention and service improvement.
|
|
|
|
## 4. Sharing
|
|
4.1. Data is shared exclusively with: (i) the infrastructure provider (Docker hosting); (ii) OpenRouter.ai, strictly with prompts containing simulated city context — never user registration data.
|
|
4.2. We do not sell personal data to third parties.
|
|
|
|
## 5. International Transfer
|
|
The AI model service (OpenRouter.ai) may process prompts outside Brazil. Adequate contractual safeguards are applied.
|
|
|
|
## 6. Retention Period
|
|
6.1. Registration data: while the account is active + 6 months after termination.
|
|
6.2. Consent records: minimum of 5 years (art. 37, LGPD — record-keeping duty).
|
|
|
|
## 7. Data Subject Rights (art. 18)
|
|
Users may request: confirmation of processing; access; correction; anonymisation, blocking or deletion; portability; information on sharing; withdrawal of consent. Requests: contato@syspanel.com.br, answered within 15 days.
|
|
|
|
## 8. Security
|
|
We use password hashing (bcrypt), role-based access control, revocable API tokens and audit trails.
|
|
|
|
## 9. Data Protection Officer (DPO)
|
|
contato@syspanel.com.br — direct channel to the officer responsible for personal data processing.
|
|
TXT;
|
|
}
|
|
|
|
/**
|
|
* Privacy Policy body in Spanish.
|
|
*/
|
|
private function privacyEs(): string
|
|
{
|
|
return <<<'TXT'
|
|
# Política de Privacidad — City10 (LGPD)
|
|
|
|
**Versión 1.0.0** — En conformidad con la Ley nº 13.709/2018 (LGPD).
|
|
|
|
## 1. Controlador de los Datos
|
|
Syspanel — contato@syspanel.com.br — Santa Rita do Sapucaí/MG, Brasil.
|
|
|
|
## 2. Datos Personales Recabados
|
|
2.1. **Datos de registro:** nombre, correo electrónico y contraseña (almmacenada de forma irreversible — hash bcrypt).
|
|
2.2. **Datos de consentimiento:** fecha/hora, versión de los documentos aceptados, dirección IP y user agent (auditoría LGPD).
|
|
2.3. **Datos de uso:** registros de acceso (logs) e idioma preferido.
|
|
|
|
## 3. Finalidades y Bases Legales
|
|
3.1. **Ejecución del contrato** (art. 7, V): prestación de la plataforma, autenticación y funcionamiento de la ciudad 3D.
|
|
3.2. **Consentimiento** (art. 7, I): aceptación de los Términos, Política de Privacidad y Política de Cookies.
|
|
3.3. **Interés legítimo** (art. 7, IX): seguridad, prevención de fraudes y mejora del servicio.
|
|
|
|
## 4. Compartición
|
|
4.1. Los datos se comparten exclusivamente con: (i) el proveedor de infraestructura (hospedaje en Docker); (ii) OpenRouter.ai, estrictamente con prompts que contienen contexto simulado de la ciudad — nunca datos del usuario.
|
|
4.2. No vendemos datos personales a terceros.
|
|
|
|
## 5. Transferencia Internacional
|
|
El servicio de modelos de IA (OpenRouter.ai) puede procesar prompts fuera de Brasil. Se aplican salvaguardas contractuales adecuadas.
|
|
|
|
## 6. Plazo de Conservación
|
|
6.1. Datos de registro: mientras la cuenta esté activa + 6 meses tras la finalización.
|
|
6.2. Registros de consentimiento: plazo mínimo de 5 años (art. 37, LGPD).
|
|
|
|
## 7. Derechos del Titular (art. 18)
|
|
El usuario puede solicitar: confirmación del tratamiento; acceso; corrección; anonimización, bloqueo o eliminación; portabilidad; información sobre compartición; revocación del consentimiento. Solicitudes: contato@syspanel.com.br, respondidas en hasta 15 días.
|
|
|
|
## 8. Seguridad
|
|
Utilizamos hash de contraseñas (bcrypt), control de acceso por rol, tokens de API revocables y rastros de auditoría.
|
|
|
|
## 9. Encargado de Datos (DPO)
|
|
contato@syspanel.com.br — canal directo con el encargado del tratamiento de datos personales.
|
|
TXT;
|
|
}
|
|
|
|
/**
|
|
* Cookie Policy body in Portuguese (Brazil).
|
|
*/
|
|
private function cookiesPtBr(): string
|
|
{
|
|
return <<<'TXT'
|
|
# Política de Cookies — City10
|
|
|
|
**Versão 1.0.0**
|
|
|
|
## 1. O que são cookies
|
|
Cookies são pequenos arquivos de texto armazenados no navegador durante a navegação, essenciais para o funcionamento de sessões e preferências.
|
|
|
|
## 2. Cookies Utilizados
|
|
|
|
| Cookie | Tipo | Finalidade | Duração | Consentimento |
|
|
|---|---|---|---|---|
|
|
| city10-session | Estritamente necessário | Manter a sessão autenticada (CSRF + login) | Sessão / 120 min | Isento (necessário) |
|
|
| XSRF-TOKEN | Estritamente necessário | Proteção contra ataques CSRF | Sessão | Isento (necessário) |
|
|
| city10-locale | Desempenho | Guardar o idioma escolhido pelo usuário | 1 ano | Sim |
|
|
| city10-consent | Estritamente necessário | Registrar a versão dos termos aceitos | 1 ano | Isento (necessário) |
|
|
| city10-analytics | Analítico | Métricas agregadas de uso (futuro) | 90 dias | Sim |
|
|
|
|
## 3. Gestão do Consentimento
|
|
3.1. Ao acessar a plataforma, o usuário visualiza o banner de cookies com opções de **Aceitar todos**, **Recusar opcionais** e **Personalizar**.
|
|
3.2. Cookies estritamente necessários não podem ser desativados, pois sem eles a sessão e a proteção CSRF deixam de funcionar.
|
|
3.3. A escolha é armazenada no cookie `city10-consent` e pode ser alterada a qualquer momento em **Preferências de Privacidade** no dashboard.
|
|
|
|
## 4. Base Legal
|
|
Tratamento de cookies não necessários ocorre com base no consentimento (art. 7º, I, LGPD e Marco Civil da Internet, Lei nº 12.965/2014).
|
|
|
|
## 5. Exclusão
|
|
O usuário pode remover os cookies a qualquer momento pelas configurações do navegador, ciente de que recursos personalizados voltarão aos padrões.
|
|
TXT;
|
|
}
|
|
|
|
/**
|
|
* Cookie Policy body in English.
|
|
*/
|
|
private function cookiesEn(): string
|
|
{
|
|
return <<<'TXT'
|
|
# Cookie Policy — City10
|
|
|
|
**Version 1.0.0**
|
|
|
|
## 1. What cookies are
|
|
Cookies are small text files stored in the browser during navigation, essential for session handling and preferences.
|
|
|
|
## 2. Cookies Used
|
|
|
|
| Cookie | Type | Purpose | Duration | Consent |
|
|
|---|---|---|---|---|
|
|
| city10-session | Strictly necessary | Keep the authenticated session (CSRF + login) | Session / 120 min | Exempt (necessary) |
|
|
| XSRF-TOKEN | Strictly necessary | CSRF attack protection | Session | Exempt (necessary) |
|
|
| city10-locale | Performance | Store the user's chosen language | 1 year | Yes |
|
|
| city10-consent | Strictly necessary | Record the accepted terms version | 1 year | Exempt (necessary) |
|
|
| city10-analytics | Analytics | Aggregated usage metrics (future) | 90 days | Yes |
|
|
|
|
## 3. Consent Management
|
|
3.1. On first access the user sees the cookie banner with **Accept all**, **Reject optional** and **Customise** options.
|
|
3.2. Strictly necessary cookies cannot be disabled because sessions and CSRF protection depend on them.
|
|
3.3. The choice is stored in the `city10-consent` cookie and can be changed at any time under **Privacy Preferences** in the dashboard.
|
|
|
|
## 4. Legal Basis
|
|
Processing of non-essential cookies relies on consent (art. 7, I, LGPD and the Brazilian Internet Civil Framework, Law nº 12.965/2014).
|
|
|
|
## 5. Deletion
|
|
Users may remove cookies at any time through browser settings, understanding that customised features will return to defaults.
|
|
TXT;
|
|
}
|
|
|
|
/**
|
|
* Cookie Policy body in Spanish.
|
|
*/
|
|
private function cookiesEs(): string
|
|
{
|
|
return <<<'TXT'
|
|
# Política de Cookies — City10
|
|
|
|
**Versión 1.0.0**
|
|
|
|
## 1. Qué son las cookies
|
|
Las cookies son pequeños archivos de texto almacenados en el navegador durante la navegación, esenciales para el funcionamiento de sesiones y preferencias.
|
|
|
|
## 2. Cookies Utilizadas
|
|
|
|
| Cookie | Tipo | Finalidad | Duración | Consentimiento |
|
|
|---|---|---|---|---|
|
|
| city10-session | Estrictamente necesario | Mantener la sesión autenticada (CSRF + login) | Sesión / 120 min | Exento (necesario) |
|
|
| XSRF-TOKEN | Estrictamente necesario | Protección contra ataques CSRF | Sesión | Exento (necesario) |
|
|
| city10-locale | Rendimiento | Guardar el idioma elegido por el usuario | 1 año | Sí |
|
|
| city10-consent | Estrictamente necesario | Registrar la versión de los términos aceptados | 1 año | Exento (necesario) |
|
|
| city10-analytics | Analítico | Métricas agregadas de uso (futuro) | 90 días | Sí |
|
|
|
|
## 3. Gestión del Consentimiento
|
|
3.1. Al acceder a la plataforma, el usuario visualiza el banner de cookies con opciones de **Aceptar todos**, **Rechazar opcionales** y **Personalizar**.
|
|
3.2. Las cookies estrictamente necesarias no pueden desactivarse, ya que sin ellas la sesión y la protección CSRF dejan de funcionar.
|
|
3.3. La elección se almacena en la cookie `city10-consent` y puede modificarse en **Preferencias de Privacidad** del dashboard.
|
|
|
|
## 4. Base Legal
|
|
El tratamiento de cookies no necesarias se basa en el consentimiento (art. 7, I, LGPD y Marco Civil de Internet, Ley nº 12.965/2014).
|
|
|
|
## 5. Eliminación
|
|
El usuario puede eliminar las cookies en cualquier momento desde la configuración del navegador, sabiendo que las funciones personalizadas volverán a los valores predeterminados.
|
|
TXT;
|
|
}
|
|
}
|