# Changelog

## 0.9.3-cpanel — 2026-08-08

- Instalador web autónomo em `/instalar/`.
- Redirecionamento automático para o instalador antes da primeira instalação.
- Suporte MySQL/MariaDB para alojamento cPanel.
- Criação opcional da BD/utilizador via cPanel UAPI.
- Geração segura do `.env` e `APP_KEY`.
- Instalação automática de dependências Composer quando o alojamento permite `proc_open` e acesso HTTPS.
- Migrations, seeders, superadministrador e organização inicial executados pelo instalador.
- Bloqueio de utilização única através de `storage/app/installed.lock`.
- Geração de comandos Cron para scheduler e filas.

## 0.9.2 - 2026-08-08

- Docker local alterado de PHP 8.3 Alpine para PHP 8.3 FPM Debian Bookworm.
- Dependências nativas de GD, ICU, PostgreSQL, ZIP, XML e cURL instaladas explicitamente.
- PECL Redis compilado com toolchain completa.
- Healthcheck do container `app`.
- Worker e scheduler aguardam o `app` saudável.
- Adicionado `scripts/first-install-local.ps1` para primeira instalação no Windows.
- Mantido volume dedicado para `vendor/`.

# 0.9.2 - Docker bootstrap fix

- Corrige compilação da extensão Redis no Docker.
- Usa PHP 8.3 para compatibilidade consistente com o projeto.
- Impede o bind mount de ocultar `vendor/`.
- Cria automaticamente o bucket MinIO `digital-dossier`.
- Adiciona extensão PHP cURL e reduz paralelismo de compilação.

# Changelog

## 0.8.0 — 2026-08-06

### Permissões ACL por pasta

- ACL na raiz do dossiê e em qualquer nível da árvore de pastas;
- permissões `view`, `download`, `upload`, `create_subfolder`, `rename`, `delete`, `share` e `manage_acl`;
- regras allow/deny para todos, role, grupo ou utilizador;
- negação com precedência e interrupção configurável da herança;
- grupos ACL multi-tenant com membros validados;
- bypass de recuperação para superadministrador, owner e admin;
- cache de decisões com invalidação por `tenants.acl_version`;
- árvore multinível, renomeação, movimentação e remoção segura de pastas vazias;
- aplicação efetiva a uploads, downloads, remoções, partilhas, anexos, geração de PDF e pedidos de assinatura;
- lotes de comunicação filtrados e novamente autorizados em consulta, exportação e ações operacionais;
- movimentação de pastas protegida por `manage_acl` na origem e no destino para evitar alterações indiretas da herança;
- dashboards, listagens e relatórios filtrados pela localização efetivamente autorizada;
- execução do importador reservada a owner/admin para não contornar restrições de pasta;
- auditoria de regras, herança e grupos;
- testes de negação, herança interrompida, concessão por grupo e download bloqueado.

## 0.7.0 — 2026-08-06

### Relatórios completos de pedidos pendentes

- relatório consolidado de pedidos de assinatura e PDFs preparados sem pedido criado;
- estado principal, indicação explícita “Considerado pendente?” e ação recomendada;
- preparados sem envio são classificados como não assinados e pendentes;
- identificação da origem, utilizador e motivo da preparação;
- destinatário, documento, modelo, dossiê, pasta e número de regiões;
- datas de preparação, envio, abertura, OTP, assinatura, validade, receção e verificação;
- métricas de pendentes, preparados sem envio, enviados não abertos, concluídos, falhas, atrasos e anomalias;
- análise de antiguidade em 0–2, 3–7, 8–14 e 15+ dias;
- filtros por estado, pendência, receção, envio, origem, dossiê, modelo, utilizador e intervalo de datas;
- exportação CSV e XLSX com resumo, detalhe, filtros, autofiltro e proteção contra fórmulas;
- registo de número e data do último reenvio;
- confirmação explícita de receção do PDF assinado no dossiê;
- comando `signatures:verify-receipts` para validar existência, assinatura `%PDF-` e checksum;
- verificação diária pelo scheduler e sinalização de ficheiros em falta ou adulterados;
- testes de PDFs preparados, pedidos concluídos e anomalias de receção.

## 0.6.0 — 2026-08-06

### Importador XLSX com mapeamentos

- carregamento privado de `.xlsx`, checksum SHA-256 e validação estrutural do contentor ZIP;
- bloqueio de macros, caminhos inseguros, expansão excessiva e ligações externas configurável;
- seleção de folha e linha de cabeçalho, limites de folhas, linhas e colunas;
- pré-visualização dos valores e sugestões automáticas para cabeçalhos portugueses e técnicos;
- catálogo completo de dossiê, utente, sala, responsáveis e quatro sócios;
- uma coluna para vários destinos e várias colunas para o mesmo destino;
- constantes e conversões de texto, datas Excel, números, booleanos, emails, telefones, NIF e NISS;
- Nº Utente ou referência externa como identificador principal, sem reutilizar IDs de outro sistema;
- deteção de repetidos no ficheiro e colisões existentes;
- modos criar, atualizar e upsert, com políticas de células vazias e valores opcionais inválidos;
- criação automática de salas, sala forçada, ano letivo por defeito e nomes em maiúsculas;
- validação completa sem gravação;
- processamento assíncrono em chunks, progresso, cancelamento e repetição explícita;
- resultado persistente por linha e relatório `.xlsx` com resumo, ações, erros, avisos e dados mapeados;
- templates reutilizáveis, aplicação por cabeçalho e importação/exportação JSON com políticas de duplicados;
- isolamento multi-tenant, auditoria e testes de transformações, mapeamentos, sugestões e escrita relacional.

## 0.5.0 — 2026-08-06

### Comunicações em lote e tracking de entrega

- criação, rascunho, agendamento, pausa, retoma, cancelamento e repetição de falhas;
- públicos personalizados, por dossiês, por salas ou todos os contactos ativos;
- filtros por tipo de responsável e contacto principal;
- normalização, validação, deduplicação e exclusão por supressão;
- modelos reutilizáveis, placeholders contextuais e versões HTML/texto;
- remetente, reply-to, tracking e cancelamento configuráveis por lote;
- anexos diretamente do armazenamento privado, com limites e isolamento por tenant;
- filas `DispatchCommunicationBatch` e `SendCommunicationRecipient`, tentativas e recuperação de workers interrompidos;
- token individual encriptado, pixel de abertura e redirecionamento seguro de links;
- contadores e datas de envio, entrega, abertura, clique, rejeição, denúncia e cancelamento;
- lista de supressão por tenant, gestão administrativa e verificação dupla antes do envio;
- cabeçalhos `List-Unsubscribe` e cancelamento one-click;
- webhooks assinados para Mailgun, Postmark e provider genérico/SendGrid;
- correlação por recipient ID, message ID e cabeçalhos específicos de provider;
- eventos idempotentes e métricas consolidadas;
- exportação CSV integral do lote;
- comandos `communications:dispatch-scheduled` e `communications:maintain`;
- testes para deduplicação, supressões, renderização, tracking, envio e cancelamento público.

## 0.4.0 — 2026-08-06

### Assinatura pública, OTP e aplicação visual

- Gestão administrativa completa de pedidos de assinatura por PDF gerado e por região.
- Convites por email com token aleatório guardado exclusivamente por SHA-256.
- Envio síncrono dos segredos de convite e OTP, evitando a sua persistência temporária em payloads de fila.
- Rotação e invalidação do link em reenvios.
- OTP por email com HMAC, expiração, utilização única, cooldown, limites e bloqueio de tentativas.
- Sessões públicas HttpOnly e temporárias, com opção de vinculação ao user-agent e IP.
- Consulta privada do documento apenas após verificação.
- Captura de assinatura desenhada, escrita ou carregada, normalizada para PNG privado, com remoção segura de fundos quase brancos.
- Consentimento explícito, nome do signatário e atribuição a regiões de assinatura/rubrica.
- Aplicação visual multipágina através de FPDI/TCPDF numa fila dedicada.
- Novo documento assinado imutável, preservando o PDF original e os respetivos checksums.
- Certificado de evidência opcional anexado ao PDF.
- Evidência JSON descarregável, cadeia de eventos encadeada por HMAC e assinatura HMAC do payload integral com verificação antes do download.
- Estados enviado, aberto, OTP pendente, verificado, processamento, assinado, recusado, cancelado, expirado e falhou.
- Reprocessamento administrativo sem solicitar novamente a assinatura quando a imagem já foi capturada.
- Comando horário `signatures:maintain` para expiração e limpeza de autenticação pública.
- Correção adicional da declaração duplicada de `drawImage` no renderer da versão 0.3.0.

## 0.3.0 — 2026-08-06

- preenchimento automático de regiões a partir do tenant, dossiê, utente, sala, responsáveis e sócios;
- overrides manuais com validação de obrigatórios, listas, datas, checkboxes e imagens;
- transformações de texto, datas por extenso, validação de datas, ajuste automático da fonte, alinhamento vertical e encaixe de imagens;
- cópia imutável do modelo, snapshots de regiões e valores e verificação por SHA-256;
- motor FPDI/TCPDF multipágina com texto UTF-8, rotação, fundos, contornos opcionais, checkboxes e imagens;
- geração por fila dedicada sem manter o PDF completo em memória;
- arquivo automático do resultado como documento do dossiê;
- histórico, estados, download, cancelamento, retry, tentativas e erros operacionais;
- preparação de regiões de assinatura sem bloquear a geração;
- comandos CLI para geração e limpeza de temporários;
- Docker com GD/WebP e worker a escutar as filas `pdf,default`;
- proteção adicional de caminhos, discos e assets de imagem entre tenants;
- testes unitários e funcionais para resolução, transformação, validação e criação de gerações.

## 0.2.0 — 2026-08-06

- editor visual multipágina de regiões PDF;
- armazenamento privado de modelos e imagens;
- nove tipos de campo e catálogo completo de origens de dados;
- arrastar, mover, redimensionar, grelha, zoom e pré-visualização;
- inspector de posição, estilo, validação, seleção, assinatura e imagem;
- gravação automática, bloqueio otimista e proteção contra edições concorrentes;
- desfazer/refazer, copiar/colar, duplicar e atalhos de teclado;
- publicação, arquivo, duplicação, importação/exportação JSON e revisões restauráveis;
- permissões por função e feature gate do add-on `pdf_forms`;
- auditoria das operações do editor;
- script opcional para alojar PDF.js localmente.

## 0.1.0 — 2026-08-06

- primeira base Laravel independente de WordPress;
- tenancy por organização;
- subscrições Stripe/Cashier;
- catálogo de planos e módulos;
- dossiês, pastas, documentos e armazenamento privado;
- partilhas temporárias e auditoria;
- estruturas Workflow e Educação;
- Docker Compose e exemplo de add-on Composer.

## 0.9.0 — 2026-08-06

- Consola central exclusiva para superadministradores.
- Gestão e pesquisa de clientes, estado da organização e indicadores de utilização.
- Licenças manuais com plano, ciclo, limites, trial, renovação e término.
- Ativação e desativação de módulos/add-ons por cliente.
- Notas internas por cliente.
- Sistema de suporte com referências, prioridades, atribuição, estados, mensagens e notas internas.
- Middleware dedicado `super_admin` e rotas isoladas em `/platform`.
- Licenças da consola passam a ser consideradas no controlo de acesso da subscrição.
