fix(erp): enable erp pages and menu items

This commit is contained in:
Erik Silva
2025-12-29 17:23:59 -03:00
parent e124a64a5d
commit adbff9bb1e
13990 changed files with 1110936 additions and 59 deletions

74
.agent/agent-gemini.md Normal file
View File

@@ -0,0 +1,74 @@
# Agent Gemini - Log de Evolução do Projeto Aggios
Este arquivo documenta as contribuições do Agente Code AI (Gemini) e a compreensão técnica consolidada sobre o ecossistema Aggios.
## 🚀 Visão Geral do Projeto
O **Aggios** é uma plataforma SaaS multi-tenant focada em agências, oferecendo uma suíte "all-in-one" que inclui CRM, ERP, Gestão de Projetos, entre outros.
### Stack Tecnológica
- **Frontend:** Next.js (App Router), TypeScript, Tailwind CSS, Headless UI.
- **Backend:** Go (Golang) com roteamento `gorilla/mux`.
- **Banco de Dados:** PostgreSQL (migrações SQL puras).
- **Infraestrutura:** Docker Compose (backend, agency-frontend, minio, postgres, redis).
---
## 🛠️ Contribuições do Agente (Dezembro/2025)
### 1. Módulo ERP - Finanças & Caixa
- **Gestão de Múltiplas Contas:** Implementação completa (CRUD) de contas bancárias no backend e frontend.
- **Controle de Saldo em Tempo Real:** Desenvolvimento da lógica de repositório em Go para atualizar o `current_balance` de contas baseando-se no status das transações financeiras (`paid`, `pending`).
- **Resumo Financeiro:** Refatoração dos cartões de estatísticas para exibir o "Saldo de Caixa" real (somatório de contas) em vez de apenas totais de lançamentos filtrados.
- **Dashboard ERP Real:** Dados reais, gráficos automáticos e filtros de status/data avançados.
- **Módulo de Documentos:** Implementado sistema de documentos (estilo Google Docs) com editor de texto e gestão por tenant.
### 2. UI/UX & Design System (Padrão Aggios)
- **Refinação Minimalista Flat:** Aplicação do padrão visual "Clean & Flat" na página de finanças, removendo sombras pesadas e mantendo foco no contraste e tipografia.
- **Componentização:** Utilização e refinamento de componentes em `components/ui` (Input, CustomSelect, DataTable).
- **Barra de Busca:** Implementação de busca reativa integrada ao `Input` padronizado.
### 3. Otimização e Reatividade
- **Correção de Cache da API:** Configuração de `cache: 'no-store'` nas chamadas de serviço para garantir integridade dos dados sem necessidade de recarregar a página (F5).
- **Sync de Estado:** Ajuste nos handlers do React para usar `await fetchData()` em todas as operações de escrita, garantindo que a UI reflita as mudanças do backend instantaneamente.
### 4. Novas Funcionalidades (27 de Dezembro de 2025)
- **Ações em Lote (Bulk Actions):** Implementação de seleção múltipla em transações financeiras e produtos. Adição de barra de ações flutuante para exclusão em massa e atualização de status coletiva.
- **Melhorias no Dashboard & Filtros:** Refinamento dos filtros de data, busca reativa e integração de ações em lote nos módulos de "Contas a Pagar" e "Contas a Receber".
- **Gestão de Contas Bancárias:** Refatoração da interface de contas (cards) com feedback visual de saldo e integração direta com o fluxo de caixa.
---
## 🧠 Entendimento Técnico do Sistema
### Arquitetura de Soluções
O sistema utiliza um sistema de **Solutions** vinculadas a **Planos**.
- Slugs identificados: `crm`, `erp`, `projetos`, `helpdesk`, `pagamentos`, `contratos`, `documentos`, `social`.
- O acesso é controlado via `SolutionGuard` no frontend e middleware de tenant no backend.
### Estrutura de Autenticação
- **Níveis de Acesso:** `SUPERADMIN` (Aggios), `ADMIN_AGENCIA` (Dono da agência/Tenant), `CLIENTE` (Portal do Cliente).
- **Segurança:** JWT armazenado no `localStorage` com envio no header `Authorization`.
### Padrão de Design "Aggios Pattern"
- **Cards:** Bordas sutis (`zinc-100/800`), sem sombras, `rounded-2xl` ou `[32px]`.
- **Botões:** Uso de gradientes (`var(--gradient)`) para ações primárias e visual flat para secundárias.
- **Feedback:** Uso intensivo de `react-hot-toast` para notificações de sucesso/erro.
---
## 🛠️ Diretrizes de Desenvolvimento
### 📋 Uso de Templates e Padronização
Para manter a consistência visual e técnica do ecossistema Aggios, o Agente deve seguir rigorosamente estas regras:
1. **Aggios App Pattern:** Sempre basear novas telas e funcionalidades no workflow `aggios-app-pattern.md`. Isso garante que a hierarquia visual (PageHeader -> StatsCards -> Tabs -> DataTable) seja preservada.
2. **Componentes UI Reutilizáveis:** Nunca criar elementos de interface ad-hoc se existir um componente correspondente em `components/ui`. Priorizar o uso de:
- `DataTable` para listagens.
- `Input` e `CustomSelect` para formulários e buscas.
- `StatsCard` para indicadores numéricos e financeiros.
3. **Visual Minimalista Flat:** Evitar o uso de sombras (`shadow`), utilizando bordas sutis (`border-zinc-100` / `dark:border-zinc-800`) e fundos contrastantes para separar camadas.
4. **Reatividade Garantida:** Manter o padrão de execução assíncrona com `await fetchData()` e desativação de cache da API para que os templates reflitam mudanças instantaneamente sem recarregar a página.
5. **Rebuild de Containers:** Sempre que houver mudanças estruturais no frontend (especialmente no `front-end-agency`), é necessário rodar `docker-compose up -d --build agency` para refletir as alterações no ambiente de produção/Docker.
---
*Documentado por Gemini (Agent Gemini) em 27 de Dezembro de 2025.*

View File

@@ -0,0 +1,117 @@
---
description: Padrão de Design Aggios App para Páginas de Listagem e Dashboards
---
# Padrão de Design Aggios App
Este workflow descreve como construir uma página seguindo o design system da Aggios, utilizando os componentes padronizados na pasta `components/ui`.
## 1. Estrutura Básica da Página
Toda página deve ser envolvida por um container com padding e largura máxima:
```tsx
<div className="p-6 max-w-[1600px] mx-auto space-y-6">
{/* Conteúdo aqui */}
</div>
```
## 2. Cabeçalho (`PageHeader`)
Utilize o `PageHeader` para títulos, descrições e ações globais da página.
```tsx
<PageHeader
title="Título da Página"
description="Breve descrição da funcionalidade."
primaryAction={{
label: "Novo Item",
icon: <PlusIcon className="w-4 h-4" />,
onClick: () => handleCreate()
}}
/>
```
## 3. Cartões de Estatísticas (`StatsCard`)
Para dashboards ou resumos, utilize o grid de stats:
```tsx
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
<StatsCard
title="Métrica"
value="R$ 1.000"
icon={<CurrencyDollarIcon className="w-6 h-6" />}
trend={{ value: '10%', label: 'vs ontem', type: 'up' }}
/>
</div>
```
## 4. Filtros e Pesquisa (Minimalista Flat)
Os filtros não devem ter sombras nem cores de marca no estado inicial/focus. Devem usar um visual "Clean" com contraste sólido.
```tsx
<div className="flex flex-col md:flex-row gap-4 items-center">
<div className="flex-1 w-full">
<Input
placeholder="Pesquisar..."
leftIcon={<MagnifyingGlassIcon className="w-5 h-5 text-zinc-400" />}
className="bg-white dark:bg-zinc-900 border-zinc-200 dark:border-zinc-800 focus:border-zinc-400 dark:focus:border-zinc-500"
/>
</div>
<div className="w-full md:w-80">
<DatePicker
value={dateRange}
onChange={setDateRange}
buttonClassName="bg-white dark:bg-zinc-900 border-zinc-200 dark:border-zinc-800 text-zinc-700 dark:text-zinc-300 hover:border-zinc-400"
/>
</div>
<div className="w-full md:w-56">
<CustomSelect
value={status}
onChange={setStatus}
options={[
{ label: 'Todos', value: 'all' },
{ label: 'Ativo', value: 'active', color: 'bg-emerald-500' },
]}
buttonClassName="bg-white dark:bg-zinc-900 border-zinc-200 dark:border-zinc-800 hover:border-zinc-400"
/>
</div>
</div>
```
## 5. Abas e Tabelas (`Tabs` & `DataTable`)
Para organizar o conteúdo principal, utilize o componente `Tabs`. Dentro de cada aba, utilize `Card` com `noPadding` para envolver a `DataTable`.
```tsx
<Tabs
variant="pills" // ou 'underline'
items={[
{
label: 'Listagem',
icon: <TableIcon />,
content: (
<Card noPadding title="Itens" description="Gerenciamento de registros.">
<DataTable
columns={COLUMNS}
data={DATA}
pagination={{ ... }}
/>
</Card>
)
}
]}
/>
```
## Regras de Estilo e Cores
- **Botões Primários**: Sempre use `variant="primary"` e aplique o gradiente via style/classe: `style={{ background: 'var(--gradient)' }} className="shadow-lg shadow-brand-500/20"`.
- **Bordas**: Use `border-zinc-200` para light mode e `dark:border-zinc-800` para dark mode.
- **Backgrounds**: Use `bg-white` (light) e `dark:bg-zinc-900` (dark) para componentes elevados.
- **Cards & Containers (Flat Design)**:
- **Cards:** Fundo branco/zinc-900, bordas sutis (`border-zinc-200` / `dark:border-zinc-800`), **SEM SOMBRAS**.
- **Border Radius:** Usar `rounded-2xl` (16px) ou `rounded-[32px]` para containers grandes.
- **StatsCards:** Texto de valor em `font-bold` ou `font-black`, ícones em boxes coloridos com opacidade 10% no dark mode.
- **Hover:** Apenas transições de cor ou escalas sutis, evitar sombras no hover.