Files
compras/docs/proposta-desenvolvimento-sgf.md
2026-11-02 20:27:11 +02:00

66 lines
9.0 KiB
Markdown

# Proposta única — percurso completo no desenvolvimento isolado
02/11/2026. **Proposta para confirmação; nenhuma alteração de acesso executada.** Substitui como próximo passo a instalação técnica desactivada no SGF real. O objectivo é disponibilizar e deixar utilizável o percurso requisição → submissão → aprovação independente → consulta na instância sintética existente, sem criar outra instalação.
## Destino existente, confirmado por leitura
| Elemento | Valor |
| --- | --- |
| Pasta reutilizada | `C:\laragon\data\sgf-tempo\run\modular-regression-2576427d1939\development-app` |
| URL | `http://127.0.0.1:8039` |
| Cluster exclusivo | `sgf_modular_regression_2576427d1939`, loopback `127.0.0.1:55439` |
| Base persistente | `sgf_modules_dev_2576427d1939` |
| Ligação existente/proprietário da base | `sgf_modules_qa_2576427d1939` |
| Tenant sintético existente | `Cliente de demonstração` |
| Empresa sintética existente | `Empresa Horizonte — Demonstração` |
| Unidade sintética escolhida | `Unidade Central — Demonstração` |
| Contas existentes a reutilizar | Desenvolvimento — Preparador; Desenvolvimento — Revisor; Desenvolvimento — Consulta |
A leitura PostgreSQL em transacção READ ONLY confirmou base, role/proprietário, nomes sintéticos e ausência de tabelas `cb_*`, `ir_*`, `sgc_installations`. A documentação da navegação modular confirma a origem sintética das contas. Resolver os IDs exactos pelo registo privado de provisionamento e conferir tenant/empresa/unidade; não usar igualdade de nome para fundir entidades. Outras empresas/unidades e respectivos dados permanecem preservados e fora do âmbito da integração proposta. Não recriar a base de regressão nem reaplicar o provisionador destrutivo.
## Configuração sintética proposta — ainda não aplicada
Estes valores são deliberadamente **dados de demonstração**, sujeitos à confirmação desta proposta; não representam centros, dotações, pessoas, impostos ou políticas da Tempo.
| Parâmetro | Proposta concreta |
| --- | --- |
| Área/opção | Compras / Compras internas (`procurement.internal`) |
| Módulo | `purchasing`, activado exclusivamente no âmbito sintético acima |
| Centro | Código `SINTETICO-REPRO`, departamento/referência `OPER` |
| Dotação | Exercício **2026**, natureza operacional (`operating`), **10.000,00 MZN sintéticos**, inclui impostos; preparação e aprovação por identidades distintas |
| Política | Activa; orçamento obrigatório; cálculo de limites com impostos; primeiro limite 1.000.000 unidades mínimas (10.000,00), segundo 2.000.000 (20.000,00); centro e preparador/revisor vinculados a `OPER` |
| Recorte executável | Consumíveis, serviços e outros; equipamentos/peças rejeitados; sem contratação para terceiros |
| Exemplo manual | Requisição sintética de 100,00, sem imposto, inferior ao primeiro limite; não declara taxa fiscal aplicável à empresa |
Os valores retomam a configuração já exercitada na prova isolada. A dotação limita os pedidos deste exemplo ao primeiro nível; não se promete exercitar os níveis de compras/finanças sem identidades/direitos adicionais. A submissão reserva orçamento pelo motor existente, e as repetições não criam outra requisição/reserva. Nenhum valor é importado do SGF real. Criar centro/dotação pela interface/API existente, com autoria, motivo e chaves de idempotência.
## Identidades e acessos funcionais a confirmar
Reutilizar as três contas sintéticas existentes, suas credenciais privadas e permissões anteriores; acrescentar apenas os direitos abaixo no âmbito exacto escolhido, com auditoria. Não criar contas, publicar palavras-passe ou atribuir estes perfis a pessoas reais.
| Identidade existente | Responsabilidade proposta | Direitos adicionais da candidata |
| --- | --- | --- |
| Desenvolvimento — Preparador | Administrar/configurar este exemplo, criar centro, preparar dotação/requisição e submeter | `purchasing_requisitions.view`, `.prepare`, `.configure`, `.approve.department_head`; `purchasing_budget.view`, `.create`, `.approve`, `.record` |
| Desenvolvimento — Revisor | Aprovar a dotação e a requisição preparadas pela outra identidade; consultar | `purchasing_requisitions.view`, `.approve.department_head`; `purchasing_budget.view`, `.approve` |
| Desenvolvimento — Consulta | Consultar requisição e orçamento; sem escrita/aprovação/administração | `purchasing_requisitions.view`; `purchasing_budget.view` |
Os sufixos da tabela pertencem ao prefixo da mesma célula. O Preparador conserva a administração sintética existente (`access.manage` na empresa). Os direitos de aprovação na conta administradora permitem a delegação nativa de direitos que detém; **não permitem aprovar a sua própria requisição ou dotação**. O Revisor não recebe preparação ou administração. A Consulta não recebe mutações. Manter os direitos nativos já existentes de consulta da empresa/unidade e pertenças; não ampliar o seu âmbito. A configuração inicial usa o mecanismo explícito e auditado da candidata; posteriores outorgas/revogações usam o catálogo nativo.
**Não é exigido um segundo administrador para esta demonstração isolada.** A orientação existente do proprietário, secção «Administração e entrega» do AGENTS.md, diz: «A configuração inicial/entrega exige dois administradores nominativos da empresa» e «Manter pelo menos dois administradores permanentes». Trata-se de requisito para a configuração/entrega empresarial; esta proposta não é essa entrega, não altera a administração real nem cria uma nova exigência para a demonstração. Preparador e Revisor continuam obrigatoriamente identidades diferentes para aprovar.
## SQL: direitos existentes e alterações propostas
**Nenhum novo GRANT, REVOKE, CREATE ROLE, ALTER ROLE ou transferência de ownership é proposto para este ambiente.** A role existente `sgf_modules_qa_2576427d1939` já é proprietária da base isolada e foi criada para esse desenvolvimento. Reutilizá-la para migração e execução evita alterar acessos ou criar outra instalação/role por arrasto. Isso mantém uma limitação explícita: este ambiente persistente não demonstra separação owner/runtime com privilégio mínimo; essa separação já foi ensaiada nas bases descartáveis da prova corrigida, não é atribuída retroactivamente a esta instância.
Não executar o plano `sgf-corrected-sql-plan.json`: ele é dirigido a `sgf_dev_app` da implantação real e **não pertence a esta proposta**. Não criar ou conceder acesso dessa role ao cluster 55439. As escritas funcionais em `permission_grants` da base sintética, discriminadas acima, também aguardam confirmação. A migração autorizada futura cria 16 tabelas e altera o catálogo de `permission_grants` somente nesta base sintética; DDL não equivale a conceder direitos. Caso a conferência mostre que a role existente não tem a autoridade necessária, parar e apresentar os comandos SQL exactos em falta para nova confirmação, sem os executar e sem promover a role.
## Candidata, execução e recuperação propostas
Reutilizar o ZIP existente `OPERATIONAL-CANDIDATE-401ce31ae5f2dd20`, SHA-256 `59dbdc64c4d9f14dfb4025a6177b829d136a4e2cb633ca036b10b5ae3197e703`, manifesto `a6478223e17a5430652f0fcbf31a44a931ae2a99cd90b151c98d2df5df43c10b`. Os planos/fingerprints do destino real **não se aplicam** a esta instância. Gerar os seus planos próprios; a normalização física de guardas para 55439 já documentada deve ser respeitada. Se os overlays exactos do ZIP recusarem diferenças dessa cópia, preparar variante de compatibilidade identificada e apresentar novo hash antes de aplicação; não desligar guardas nem assumir compatibilidade byte a byte.
Após confirmação da proposta completa: guardar backup privado desta base/configuração/código sintéticos; ensaiar recuperação sem sobrescrever a base; preparar schema e código com planos próprios, habilitar a composição só no âmbito acima, atribuir os direitos explicitados, preparar/aprovar a dotação, e deixar a instância acessível em 8039. Conferir o percurso por HTTP e reutilizar as provas aceites de concorrência/recuperação; não repetir navegador bloqueado ou suites integrais por rotina. Guardar configurações/credenciais privadas fora de Git/raiz web e fornecer o local existente de acesso, sem imprimir segredos.
Em falha, manter esta instância fechada, preservar journal e restaurar código ou recuperar dados/schema em base alternativa, conforme a natureza da falha; não recriar os perfis nem resetar a demonstração. Código e dados têm recuperação separada. O cluster/base 55432 e a configuração real da Tempo não participam em nenhuma dessas operações.
**Confirmação pendente:** reutilização desta instância, habilitação da candidata e configuração/acessos sintéticos acima. Não foi executada nenhuma alteração nesta proposta. Implantação real permanece etapa posterior separada; `sgf_tempo_dev` e o seu pacote **0.1.1** são preservados.