# Logs do Sistema — Views e UX

> Uma única tela no CMS. O módulo não tem representação no portal público.

---

## 1. Layout

| View | Caminho | Papel |
|---|---|---|
| Layout do CMS | `v6/resources/views/admin/layouts/app.blade.php` | Container AdminLTE; inclui `assets/js/utilities/table.js` e `assets/js/modulos/sweetalert/sweetalert2.min.js` |
| Menu do AdminLTE | `v6/resources/views/vendor/adminlte/page.blade.php` | Item "Logs do sistema" (linhas 284-293) — **condicionalmente invisível** |

---

## 2. Tela de logs

`v6/resources/views/admin/activities-logs/index.blade.php` (arquivo único
do módulo):

```blade
@extends('admin.layouts.app')

@section('content')
    <div class="row">
        <div class="col-xs-12">
            <div class="box box-success">
                <div class="box-header with-border">
                    <h3 class="box-title align-middle">Logs dos Sistema</h3>
                </div>
                <div class="box-body table-responsive">
                    <table id="tabela_logs" class="table table-striped w-100">
                        <thead>
                            <tr>
                                <th style="width: 5%">ID</th>
                                <th style="width: 15%">Data</th>
                                <th style="width: 30%">Descrição</th>
                                <th>Detalhes</th>
                                <th>IP</th>
                                <th>Navegador</th>
                            </tr>
                        </thead>
                        <tbody></tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
@endsection

@section('other-scripts')
    @parent
    <script src="{{ asset('assets/js/custom/config/logs/datatable.js') }}"></script>
@endsection
```

Características da UI:

- Cabeçalho "Logs dos Sistema" (gramática incorreta no original).
- **Nenhum** botão de ação, **nenhum** filtro, **nenhuma** paginação
  server-side, **nenhuma** exportação.
- A coluna "Detalhes" é a concatenação de todas as chaves do JSON
  `properties` (produzida no backend).

---

## 3. JavaScript

`v6/public/assets/js/custom/config/logs/datatable.js`:

```js
let collums = [
    { data: 'data',      render: function (data) { return `<div style='padding:8px'>${data}</div>`; } },
    { data: 'descricao', render: function (data) { return `<div style='padding:8px'>${data}</div>`; } },
    { data: 'detalhes', render: function (data) { return `<div class='w-100' style='padding:8px'>${data}</div>`; } },
    { data: 'ip',       render: function (data) { return `<div class='w-100' style='padding:8px'>${data}</div>`; } },
    { data: 'navegador',render: function (data) { return `<div class='w-100' style='padding:8px'>${data}</div>`; } }
];

runDatatables('logs', collums);
```

- `runDatatables(url, columns)` monta a DataTable com
  `ajax.url = /cms/datatable/${url}` e `id = #tabela_${url}`
  (`v6/public/assets/js/custom/utilities/table.js:168-186`).
- A coluna "ID" declarada no `<thead>` **não tem** correspondente em
  `collums`; o backend envia `value` (índice sequencial) e o
  DataTables, por padrão, associa colunas **posicionalmente** — o resultado
  é que a coluna "ID" exibe o campo `value` (1..N), e não o `id` real do
  registro. Isso é coerente com a intenção (o id real não é enviado), mas
  o cabeçalho "ID" é enganoso.
- Não há polling nem atualização automática.
- Não há `createBTN`/`createActiveButton`: a tela é somente leitura.

---

## 4. A tela `/cms/modulos` (exposição da duplicidade)

`v6/resources/views/admin/modulos/index.blade.php` +
`v6/resources/views/admin/modulos/form.blade.php`.

O formulário (`form.blade.php:32-48`) itera **todas** as linhas de
`modulos` e gera:

```blade
<input type="checkbox" class="d-none" name="{{ $modulo->id }}" checked value="0">
<input type="checkbox" class="check" name="{{ $modulo->id }}" id="{{ $modulo->slug }}" @if($modulo->status) checked @endif value="1">
```

Consequências da duplicidade:

1. **Duas linhas visualmente idênticas** ("Logs do Sistema").
2. **`id` HTML duplicado**: `id="logs-do-sistema"` aparece duas vezes no
   DOM (HTML inválido).
3. Cada `input` tem `name` = **id** do módulo (7 e 32), não o slug. O
   `POST` envia os dois ids e `ModulosController@update` atualiza **cada
   linha separadamente** (`Modulos::find($key)->update(['status' => ...])`).
   Ou seja, ativar a linha 7 e desativar a 32 **não** resolve: a chave do
   `pluck` continua sendo a última linha (32).
4. O usuário só consegue o item de menu de volta se **marcar as duas
   linhas** (7 e 32) como ativas — e nesse estado o módulo aparece, mas a
   tela continua mostrando duas linhas idênticas, e a matriz de
   permissões continua sem a linha "Logs do Sistema" (porque o recurso
   id 36 aponta para o módulo 32, que precisa estar ativo — e agora
   estaria, mas a permissão `registro-de-atividades.index` checada no menu
   continua inexistente no catálogo `resources`).

---

## 5. Exportações

**Nenhuma.** Não há geração de Excel, PDF ou CSV de logs. A única forma de
extrair os dados é ler o JSON do endpoint AJAX ou acessar o banco.

---

## 6. O que o operador vê

1. (Não há item de menu — é preciso digitar `/cms/log`.)
2. Uma tabela com até 5000 linhas (na prática, as **mais antigas**,
   por causa do duplo `orderBy` — ver `03-ROTAS-E-CONTROLADORES.md`).
3. Colunas: ID (índice), Data, Descrição, Detalhes, IP, Navegador.
4. Nenhuma ação disponível.

## 7. O que o cidadão vê

**Nada.** Nenhuma rota do portal público expõe `activity_log`. O único
ponto de contato indireto é o rodapé do portal, que exibe a **versão** do
sistema (tabela `update_logs`, um conceito diferente).

---

## 8. Itens de UX a preservar na v7

- Tela única, somente leitura, dentro do CMS.
- Colunas Data / Descrição / Detalhes / IP / Navegador (a "pista de
  auditoria" completa).
- O agrupamento das properties em um único campo "Detalhes" é útil para
  depuração rápida; na v7 pode virar uma lista expansível com chave/valor.
- O módulo precisa **voltar a aparecer no menu** — é requisito de
  usabilidade, não opcional.
