ajustes de memoria

This commit is contained in:
Luiz Silva 2026-07-07 23:31:14 -03:00
parent 768ceb8c1b
commit a3cbd154f5
18 changed files with 449 additions and 19 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,102 @@
---
type: rule
name: css-global-betha
description: Define o padrão de CSS global com variáveis --bth-* para todos os frontends do ecossistema GOV (QUIPO-FRONT, QUIPO-PORTAL3, AUTENTICACAO-FRONT, QUIPO-CONSOLE)
scope: global
trigger: context_match
priority: alta
updatedAt: "2026-07-02"
---
# Regra: CSS Global Betha — Variáveis `--bth-*`
Todo frontend do ecossistema GOV deve possuir um arquivo CSS global com as variáveis `--bth-*` e reset visual Betha.
## Localização por Frontend
| Frontend | Arquivo | Importado em |
|----------|---------|-------------|
| QUIPO-FRONT | `src/styles/index.css` | `index.tsx` |
| QUIPO-PORTAL3 | `src/styles/globals.css` | `layout.tsx` |
| AUTENTICACAO-FRONT | `src/styles/global.css` | `App.tsx` |
| QUIPO-CONSOLE | `src/styles/global.css` | `main.ts` |
## Variáveis Obrigatórias
```css
:root {
/* Cores primárias */
--bth-primary: #007bff;
--bth-dark: #343a40;
--bth-body-bg: #EBEDF0;
--bth-white: #ffffff;
--bth-border: #dee2e6;
/* Texto */
--bth-text: #212529;
--bth-text-muted: #495057;
--bth-secondary: #6c757d;
/* Semânticas */
--bth-success: #28a745;
--bth-danger: #dc3545;
--bth-warning: #ffc107;
--bth-info: #17a2b8;
/* Utilitárias */
--bth-light-bg: #f8f9fa;
--bth-border-radius: 0.25rem;
--bth-font: "Open Sans", Arial, sans-serif;
--bth-shadow-sm: 0 0 0 1px rgba(63,63,68,.05), 0 1px 3px 0 rgba(63,63,68,.15);
--bth-shadow: 0 0.5rem 1rem rgba(0,0,0,.15);
/* Seleção de itens (cartões interativos) */
--bth-selected-bg: #cce5ff;
--bth-selected-hover: #b8daff;
}
```
## Reset Global Obrigatório
```css
body {
font-family: var(--bth-font);
font-size: 0.875rem; /* 14px */
background-color: var(--bth-body-bg);
color: var(--bth-text);
margin: 0;
}
/* Scrollbar personalizada */
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: #ced4da; border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: #6c757d; }
```
## Fonte Open Sans
- **QUIPO-PORTAL3:** usa `@fontsource/open-sans` (npm package) — sem request externo
- **Outros frontends:** importar via `<link>` no `index.html`:
```html
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&display=swap" rel="stylesheet" />
```
## Regras
✅ **Correto:** usar `var(--bth-primary)` nos componentes
✅ **Correto:** o arquivo global é a única fonte das variáveis — componentes não redeclaram
❌ **Incorreto:** declarar cores hardcoded (`#007bff`, `#343a40`) diretamente nos componentes
❌ **Incorreto:** ter `--bth-*` duplicadas em múltiplos arquivos CSS
## Impacto
Garante consistência visual entre todos os frontends e facilita troca de tema — alterar uma variável reflete em todo o sistema.
## Referências
- Memória: https://memoria-ia.idz.one (código: 63)
- Rule: `estilos-design-system`

View file

@ -4,7 +4,7 @@ name: estilos-design-system
description: Define os dois design systems do ecossistema e-licencie — Floreta (iniciativa privada) e Betha (governo) — e quando usar cada um
scope: global
trigger: always
updatedAt: "2026-07-01"
updatedAt: "2026-07-02"
---
# Regra: Estilos e Design Systems do Ecossistema
@ -110,15 +110,96 @@ Usado em: aplicações integradas à plataforma Betha (gestão municipal, e-Gov)
- Interfaces que operam dentro do ecossistema e-Gov Betha
- Aplicações web com `body class="suite-pla iv"`
### Tokens Reais — Ecossistema GOV (React/MUI)
Os frontends React (QUIPO-FRONT, QUIPO-PORTAL3, AUTENTICACAO-FRONT) usam estes tokens via MUI ThemeProvider:
| Token | Hex | Uso |
|-------|-----|-----|
| primary | `#007bff` | botões, links, destaques |
| primary dark | `#0069d9` | hover de botões primários |
| secondary | `#6c757d` | ações secundárias |
| dark (header) | `#343a40` | header de telas, DialogTitle, navbar |
| body bg | `#EBEDF0` | background da aplicação |
| light bg | `#f8f9fa` | DialogActions, cards neutros |
| border | `#dee2e6` | bordas de separadores |
| text | `#212529` | texto principal |
| text muted | `#495057` | texto secundário/labels |
| success | `#28a745` | status positivo |
| danger | `#dc3545` | erro/exclusão |
| warning | `#ffc107` | alerta |
| info | `#17a2b8` | informação |
| e-licencie primary | `#688c00` | substituição de primary quando marca e-licencie ativa |
**Seleção de itens (cartões interativos):**
- Selecionado: `#cce5ff` / hover: `#b8daff`
- Não selecionado: `#f8f9fa` / hover: `#e9ecef`
### Vue 3 + Vuetify — QUIPO-CONSOLE
O QUIPO-CONSOLE usa Vue 3 + Vuetify 3. Configuração do tema em `src/plugins/vuetify.ts`:
```typescript
theme: {
defaultTheme: "bethaTema",
themes: {
bethaTema: {
dark: false,
colors: {
primary: "#007bff",
secondary: "#6c757d",
background: "#EBEDF0",
surface: "#ffffff",
error: "#dc3545",
warning: "#ffc107",
success: "#28a745",
info: "#17a2b8",
}
}
}
}
```
- **Navbar** (`App.vue`): `<v-app-bar flat color="#343a40" theme="dark">`
- **Botões:** sempre `color="primary"` para usar o token do tema
---
## 3. Branding Dinâmico — eBetha() nos Footers
Todos os footers do ecossistema usam a função `eBetha()` para determinar a identidade da empresa exibida:
```typescript
import { eBetha } from "p-ambiente";
// eBetha() == true → Betha Sistemas Ltda, CNPJ 00.456.865/0001-67, Criciúma-SC
// eBetha() == false → Azteca Software LTDA, CNPJ 29.979.144/0001-13, Içara-SC
```
**Arquivos de footer por frontend:**
| Frontend | Arquivo |
|----------|---------|
| QUIPO-FRONT | `src/components/Footer.tsx` e `src/pages/Portal/PortalFooter.tsx` |
| QUIPO-PORTAL3 | `src/components/Footer/Footer.tsx` |
| AUTENTICACAO-FRONT | sem footer próprio |
- O footer exibe sempre a versão da API e do frontend
- O logotipo é condicional: logotipo diferente por marca
---
## Decisão: Como identificar qual estilo usar
1. **Pergunte o contexto:** se o operador não especificar, pergunte se o módulo é para iniciativa privada (Floreta/Vuetify) ou governo (Betha)
2. **Nunca misture:** um módulo usa UM estilo — nunca combine Vuetify com Betha Design
3. **Header identifica:** header azul-escuro com logo "B" = Betha; barra lateral com menu Vuetify = Floreta
3. **Header identifica:** header `#343a40` com logo = Betha; barra lateral com menu Vuetify customizado = Floreta
## Referências
- Betha Design System: https://design.plataforma.betha.cloud/doc/index.html
- Framework Design CDN: https://cdn.betha.cloud/base/g4/design/4.0.0/
- Rule: `css-global-betha` (variáveis --bth-*)
- Rule: `theme-provider-mui-betha` (arquitetura ThemeProvider)
- Rule: `modal-dialog-padrao-betha` (estrutura de modais)
- Memórias: https://memoria-ia.idz.one (códigos: 59, 62, 65)

View file

@ -0,0 +1,106 @@
---
type: rule
name: modal-dialog-padrao-betha
description: Define a estrutura obrigatória de modais e dialogs MUI no padrão Betha — header escuro, body branco, footer cinza — para os frontends React do ecossistema GOV
scope: global
trigger: context_match
priority: alta
updatedAt: "2026-07-02"
---
# Regra: Padrão Modal/Dialog MUI — Estrutura Betha
Todo modal/dialog nos frontends React do ecossistema GOV deve seguir a estrutura visual Betha: **header escuro + body branco + footer cinza**.
## Estrutura Obrigatória
```typescript
<Dialog
open={open}
onClose={onClose}
PaperProps={{
sx: {
borderRadius: "0.25rem",
boxShadow: "0 0.5rem 1rem rgba(0,0,0,.15)",
}
}}
>
{/* HEADER — escuro */}
<DialogTitle
sx={{
backgroundColor: "#343a40",
color: "#ffffff",
padding: "0.75rem 1rem",
position: "relative",
}}
>
Título do Modal
<IconButton
onClick={onClose}
size="small"
sx={{ position: "absolute", right: 8, top: 8, color: "#ffffff" }}
>
<CloseIcon fontSize="small" />
</IconButton>
</DialogTitle>
{/* BODY — branco */}
<DialogContent sx={{ backgroundColor: "#ffffff", padding: "1rem" }}>
{/* conteúdo */}
</DialogContent>
{/* FOOTER — cinza claro */}
<DialogActions
sx={{
backgroundColor: "#f8f9fa",
borderTop: "1px solid #dee2e6",
padding: "0.75rem 1rem",
}}
>
<Button variant="outlined" color="secondary" onClick={onClose}>
Cancelar
</Button>
<Button variant="contained" color="primary" onClick={onConfirm}>
Confirmar
</Button>
</DialogActions>
</Dialog>
```
## Tokens dos Estilos
| Região | Cor | Hex |
|--------|-----|-----|
| DialogTitle bg | Dark | `#343a40` |
| DialogTitle color | Branco | `#ffffff` |
| DialogContent bg | Branco | `#ffffff` |
| DialogActions bg | Light | `#f8f9fa` |
| DialogActions border | Border | `#dee2e6` |
| Dialog shadow | — | `0 0.5rem 1rem rgba(0,0,0,.15)` |
| Dialog radius | — | `0.25rem` |
## Botões de Ação
| Papel | Variante | Cor |
|-------|---------|-----|
| Cancelar / Fechar | `outlined` | `secondary` |
| Confirmar / Salvar | `contained` | `primary` |
| Destrutivo (excluir) | `contained` | `error` |
## Regras
✅ **Correto:** sempre usar `IconButton` com `CloseIcon` no `DialogTitle` em posição `absolute`
✅ **Correto:** `DialogActions` sempre com `borderTop` e `backgroundColor` cinza
❌ **Incorreto:** header branco ou sem cor de fundo definida
❌ **Incorreto:** botões sem variante e cor explícitas
❌ **Incorreto:** usar `Modal` nu do MUI — sempre usar `Dialog` com as 3 regiões
## Impacto
Evita modais com aparências inconsistentes entre telas e garante conformidade com a identidade visual Betha exigida pelo parceiro.
## Referências
- Memória: https://memoria-ia.idz.one (código: 61)
- Rule: `theme-provider-mui-betha`
- Rule: `estilos-design-system`

View file

@ -0,0 +1,91 @@
---
type: rule
name: theme-provider-mui-betha
description: Define a arquitetura centralizada do ThemeProvider MUI Betha nos frontends React do ecossistema GOV (AUTENTICACAO-FRONT, QUIPO-FRONT, QUIPO-PORTAL3)
scope: global
trigger: context_match
priority: alta
updatedAt: "2026-07-02"
---
# Regra: ThemeProvider MUI Centralizado — Arquitetura Betha
Os frontends React do ecossistema GOV usam MUI com tema centralizado. **Nunca criar temas locais em componentes.**
## Arquitetura de Camadas
```
themeOptions.ts
├── tema-betha.ts → createTheme(themeOptions) — marca Betha
├── tema-e-licencie.ts → createTheme({...themeOptions, — marca e-licencie
│ palette: { primary: { main: "#688c00" } }})
└── tema.ts → exporta { tema } baseado em eBetha()
↓
index.tsx / App.tsx
<ThemeProvider theme={tema.tema}>
```
## Tokens do `themeOptions.ts`
```typescript
const themeOptions = {
palette: {
primary: { main: "#007bff", dark: "#0069d9" },
secondary: { main: "#6c757d" },
error: { main: "#dc3545" },
warning: { main: "#ffc107" },
info: { main: "#17a2b8" },
success: { main: "#28a745" },
background:{ default: "#EBEDF0", paper: "#ffffff" },
},
typography: {
fontFamily: '"Open Sans", Arial, sans-serif',
fontSize: 14,
button: { textTransform: "none" },
},
shape: {
borderRadius: 4, // 0.25rem
},
shadows: [
"none",
"0 0 0 1px rgba(63,63,68,.05), 0 1px 3px 0 rgba(63,63,68,.15)",
// ... MUI padrão para os demais
],
};
```
## Regras
✅ **Correto:** importar `tema` de `styles/tema-betha.ts` quando um componente isolado precisa de ThemeProvider próprio
✅ **Correto:** `themeOptions.ts` é a única fonte de tokens — modificar só lá
❌ **Incorreto:** `createTheme()` vazio ou com tokens hardcoded dentro de componentes
❌ **Incorreto:** múltiplos `ThemeProvider` aninhados com temas distintos
## Exemplo — Componente que precisa de ThemeProvider próprio
```typescript
// ✅ Importar de styles/tema-betha.ts, NUNCA criar novo
import { tema } from "@/styles/tema-betha";
<ThemeProvider theme={tema}>
<Passos />
</ThemeProvider>
```
## AUTENTICACAO-FRONT — Estrutura específica
```
src/_FRONT/Components/Plugins/tema.ts
→ exporta themeBetha e themeELicencie
→ App.tsx decide qual usar via eBetha()
```
## Impacto
Evita divergências visuais entre telas e garante que a troca de marca (Betha ↔ e-licencie) seja controlada por um único ponto.
## Referências
- Memória: https://memoria-ia.idz.one (código: 60)
- Rule: `estilos-design-system`
- Rule: `css-global-betha`

View file

@ -1,7 +1,7 @@
{
"versao": "3.0.0",
"base_url": "https://paiol.idz.one/desenvolvimento/agent-ia",
"gerado_em": "2026-07-01T20:38:56-03:00",
"gerado_em": "2026-07-02T10:07:14-03:00",
"artefatos": {
"global": {
"rules": [
@ -9,6 +9,7 @@
"global/rules/carta-principios-agente-azteca",
"global/rules/coleta-automatica-memorias",
"global/rules/consultar-banco-query-ia",
"global/rules/css-global-betha",
"global/rules/escrita-natural",
"global/rules/estilos-design-system",
"global/rules/feedback-visivel",
@ -17,8 +18,10 @@
"global/rules/jsdoc-padrao",
"global/rules/limite-linhas",
"global/rules/mensagens-usuario",
"global/rules/modal-dialog-padrao-betha",
"global/rules/proibido-commit-ia",
"global/rules/regras-negocio-md",
"global/rules/theme-provider-mui-betha",
"global/rules/tsconfig-ignore-deprecations",
"global/rules/typescript-module-resolution",
"global/rules/typescript-sem-any",

View file

@ -3,7 +3,7 @@ type: workflow
name: aprimorar-IA
description: Dois comandos para extrair conhecimento das conversas e aplicá-lo nas estruturas do ecossistema de agentes
scope: global
updatedAt: "2026-07-01"
updatedAt: "2026-07-02"
---
# Workflow: Aprimorar IA Global
@ -228,9 +228,17 @@ sh verificar-linhas.sh
sh gerar-manifesto.sh
```
### Passo 6 — Sinalizar memórias aplicadas (opcional, recomendado)
### Passo 6 — Atualizar memórias após aplicação
Registrar que o item foi incorporado ao ecossistema:
Após aplicar cada item ao ecossistema, avaliar a relevância contínua da memória e agir conforme o caso:
#### Caso A — Memória ainda relevante (manter)
Se o conhecimento ainda é útil para consultas futuras (contexto histórico, referência de padrão, ADR):
1. **Remover a tag `aprimorar-ia`** — ela não precisa mais ser reprocessada
2. **Atualizar o conteúdo** se houver informação complementar gerada durante a aplicação
3. **Adicionar `aplicado-no-ecossistema`** para rastreabilidade
```bash
curl -s -X POST "https://memoria-ia.idz.one/api/memorias/editar" \
@ -243,6 +251,45 @@ curl -s -X POST "https://memoria-ia.idz.one/api/memorias/editar" \
}'
```
> **Atenção:** ao editar `tags`, envie **apenas as tags que devem permanecer** — a tag `aprimorar-ia` é removida simplesmente por não ser incluída na lista.
#### Caso B — Memória sem mais relevância (remover ou ocultar)
Se o conhecimento foi totalmente absorvido pelo ecossistema e não agrega valor como referência futura (itens pontuais, contexto temporário, bugs já superados):
**Opção 1 — Exclusão lógica** (preferida: mantém histórico, oculta das buscas)
```bash
curl -s -X POST "https://memoria-ia.idz.one/api/memorias/excluir" \
-H 'Content-Type: application/json' \
-H "CHAVE: banana" \
-d '{"codigo": "CODIGO_DA_MEMORIA"}'
```
**Opção 2 — Sinalizar como obsoleta** (quando há valor histórico, mas não operacional)
```bash
curl -s -X POST "https://memoria-ia.idz.one/api/memorias/sinalizar" \
-H 'Content-Type: application/json' \
-H "CHAVE: banana" \
-d '{
"codigo": "CODIGO_DA_MEMORIA",
"obsoleto": true,
"motivo": "Conhecimento integrado ao ecossistema em AAAA-MM-DD",
"sinalizado_por": "@ag-agente"
}'
```
#### Critérios de decisão
| Situação | Ação |
|----------|------|
| Decisão arquitetural (ADR), padrão ou regra de negócio duradoura | **Manter** — remove `aprimorar-ia`, adiciona `aplicado-no-ecossistema` |
| Solução de problema genérica (workaround reutilizável) | **Manter** — idem acima |
| Contexto pontual de uma conversa, já registrado em artefato | **Excluir** logicamente |
| Bug específico já resolvido e sem valor futuro | **Excluir** logicamente |
| Item com valor histórico mas sem uso operacional | **Sinalizar** como obsoleta |
### Checklist da Fase 2
- [ ] Memória consultada e registros relevantes identificados
@ -252,7 +299,7 @@ curl -s -X POST "https://memoria-ia.idz.one/api/memorias/editar" \
- [ ] Referências cruzadas apontam para caminhos válidos (sem extensão)
- [ ] `agent.json` regenerados após mudanças em rules ou personas
- [ ] `manifesto.json` regerado via `sh gerar-manifesto.sh`
- [ ] Memórias aplicadas sinalizadas com tag `aplicado-no-ecossistema`
- [ ] Cada memória tratada após aplicação (Caso A ou Caso B do Passo 6)
- [ ] Alterações informadas ao usuário para commit
---