Accept isolated workshop billing draft trial with documented manual evidence
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
# Aceitação isolada — WORKSHOP-BILLING-DRAFT-SIM-v1
|
||||
|
||||
28/10/2026, Africa/Johannesburg. O utilizador confirmou «sim» à aceitação expressa desta entrega com a limitação de não haver capturas e à autorização de checkpoint exclusivamente local, sem credenciais ou dados privados. A migração `120000`, seis concessões e utilização real permanecem por autorizar.
|
||||
|
||||
Aceitação limitada a [WORKSHOP_BILLING_DELIVERY.md](WORKSHOP_BILLING_DELIVERY.md) e [âmbito aprovado](WORKSHOP_BILLING_DRAFT_SCOPE.md), exclusivamente sintético em `sgf_tempo_test`. Percurso relatado: ordem #1 → proposta #1 v1 → prestação #8 → rascunho #4, com 2 UN × 75 e 1,75 H × 200 = 500 MZN sem imposto. Origens utilizadas uma vez, revisão comercial distinta, destino ainda rascunho, sem confirmação B1. Custos internos não determinam preços; imposto e contabilidade continuam pendentes.
|
||||
|
||||
Preservada a evidência com limites: regressão completa de 175 testes / 3 094 asserções antes da última guarda de duplicação; depois, 24 testes / 271 asserções afectados e 14 testes / 156 asserções de A aprovados. Cinco provas concorrentes, compilação e verificação do formulário aprovadas. Percurso manual relatado pelo utilizador e reconciliação read-only das origens, decisões e linhas; separação de acessos observada manualmente. Capturas não recebidas/inspeccionadas e automação do Edge não recuperada. A aceitação não transforma estas limitações em provas realizadas.
|
||||
|
||||
Os campos negativos de aceitação/checkpoint nas provas anteriores são históricos e permanecem preservados. As referências anteriores a aceitação pendente são substituídas apenas por esta confirmação. Não se repetiram testes por este registo exclusivamente documental.
|
||||
|
||||
O commit que contém este registo é o checkpoint local autorizado, preservando `04870f0`, `090b7da` e alterações posteriores. Inclui fontes, testes, scripts, documentação e provas sintéticas revistas, sem `.env`/configurações privadas, ficheiros de entrada, palavras-passe ou dados reais. Sem push, publicação, novas concessões ou aplicação de migração. `110000` e as sete concessões do orçamento também continuam separadas e por autorizar. Guardas operacionais/fiscais mantidas; correcção/cancelamento comercial dos destinos gerados continua fora deste recorte.
|
||||
@@ -0,0 +1,73 @@
|
||||
# Oficina → rascunho — entrega técnica em verificação
|
||||
|
||||
**Aceitação posterior de 28/10/2026:** utilizador aceitou a entrega com a limitação de capturas e autorizou checkpoint exclusivamente local. Ver [WORKSHOP_BILLING_ACCEPTANCE.md](WORKSHOP_BILLING_ACCEPTANCE.md). As referências abaixo a aceitação/checkpoint pendentes são históricas; nenhuma prova pendente passa a realizada. `120000`, seis concessões e uso real continuam por autorizar.
|
||||
|
||||
## Percurso manual de geração relatado e reconciliado
|
||||
|
||||
**Conferência manual posterior do destino e dos acessos:** o utilizador enviou o detalhe do rascunho #4, origem prestação #8 v1, moeda MZN, linhas 2 × 75 e 1,75 × 200, base aritmética 500 e pendências fiscais/contabilísticas preservadas. Na consulta como Samira sintética, enviou também o destino sem edição/confirmação e a página específica Oficina → rascunho com proposta revista #1 v1 e geração existente, sem formulário de preparação ou botão de geração. Esta observação conclui os passos manuais pendentes descritos abaixo, segundo os textos enviados pelo utilizador; não equivale a captura inspeccionada ou automação recuperada. Não houve autorização de confirmação B1 ou emissão. Aceitação e checkpoint continuam pendentes.
|
||||
|
||||
Em 28/10/2026, o utilizador enviou os textos da proposta #1 v1, da revisão aprovada e da geração: ordem #1 → proposta #1 v1 → prestação #8 → rascunho de facturação #4. Material #6 v1, 2 UN × 75 = 150 MZN; trabalho #4 v1, 1,75 H × 200 = 350 MZN. Referência `WORKSHOP-SALES-SYNTHETIC-v1`, soma 500 MZN sem imposto. Relato evidencia alternância entre conta revisora sem botão de geração e preparador com botão; confirmação explícita da ausência dos formulários na revisora ainda não foi solicitada novamente como facto concluído.
|
||||
|
||||
Executado `scripts/sgf.ps1 php scripts/workshop-billing-manual-verify.php --env=browser-testing` em consulta read-only: confirmou geração única, duas utilizações canónicas, origens verificadas, versão exacta revista por identidade distinta, linhas do destino correspondentes à proposta, prestação/rascunho em estado draft, 500 MZN, imposto pendente, contabilidade não processada e nenhuma confirmação B1 deste rascunho. Nenhum dado ou credencial alterado. Ver [resultado estruturado](proofs/workshop-billing-manual-results.json).
|
||||
|
||||
Limites: textos enviados pelo utilizador e reconciliação técnica, sem capturas recebidas ou automação recuperada. Consulta visual do rascunho destino e confirmação explícita dos formulários ausentes na revisora continuam separadas; não se presumem aceitação ou checkpoint. As referências abaixo a percurso manual ainda não executado descrevem a preparação histórica.
|
||||
|
||||
## Correcção durante a prova manual — mensagem de validação
|
||||
|
||||
Na tentativa manual seguinte, o utilizador indicou ausência de resposta. Consulta read-only confirmou zero propostas/revisões/gerações: nenhuma submissão foi registada. Corrigida lacuna de feedback: a validação nativa do fundamento podia impedir a execução do handler sem mensagem da aplicação. O formulário passa a usar a validação explícita já testada; erros são trazidos para a zona visível e sucesso informa ID/versão. Falha de recarga após gravação é distinguida de falha da submissão, com instrução de não resubmeter. Substituído o placeholder que podia ser confundido com fonte já preenchida. Não se afirma qual campo concreto faltava no navegador do utilizador. Compilação aprovada; sem alteração de base ou credenciais. Novo script `workshop-billing-status.php` apenas para estado sintético read-only.
|
||||
|
||||
O utilizador encontrou `validation.required` ao submeter. O texto enviado não permitia identificar qual campo faltou; não se presume que a proposta tenha sido criada. Acrescentada validação local das origens seleccionadas, serviço, preço, fonte e fundamento, com mensagens por ID de origem antes de enviar. Servidor passou a fornecer mensagens portuguesas com nomes de campos, mantendo as regras. Não se preenchem preços/serviços automaticamente; zero explícito continua válido. Novo auxiliar `resources/js/workshopBillingProposal.js` e verificação `scripts/workshop-billing-form-check.mjs`, aprovada para omissões, zero e valores exactos. Compilação e sintaxe PHP aprovadas. Base, propostas e credenciais não alteradas; testes destrutivos não repetidos durante a prova manual activa. Sem aceitação/checkpoint.
|
||||
|
||||
**Estado final das verificações técnicas:** regressão completa 175 testes / 3 094 asserções sem falhas; após acrescentar protecção contra segundo rascunho pelo percurso normal, 24 testes / 271 asserções afectados e 14 testes / 156 asserções de A aprovados. Não somar estas execuções como casos distintos. Seis casos novos de conversão, cinco provas concorrentes e compilação aprovados. Ver [resumo exacto](proofs/workshop-billing-tests.json). Menções abaixo à regressão em execução são históricas. Prova manual no navegador ainda pendente, sem aceitação/checkpoint.
|
||||
|
||||
28/10/2026. `WORKSHOP-BILLING-DRAFT-SIM-v1`, [âmbito e decisões](WORKSHOP_BILLING_DRAFT_SCOPE.md), autorizado pelo utilizador após confirmar preços sintéticos. Preservados `04870f0`, `090b7da`, alterações posteriores e entregas aceites. **Sem aceitação presumida ou checkpoint de encerramento.** Nada aplicado em desenvolvimento.
|
||||
|
||||
## Percurso implementado
|
||||
|
||||
Selecção integral de apontamentos actuais de tempo efectivo e materiais consumidos da empresa, com tarefa actual verificada, origem/versionamento e decisão técnica identificados. Recusa entrega/devolução, material do cliente, origem pendente/recusada/obsoleta ou fora de autorização. Só dados da empresa/unidade seleccionadas; consulta comercial não atribui verificação técnica. Quantidades derivam da origem: 105 MIN → 1,75 H; 2 UN consumidas permanecem 2, sem descontar novamente devoluções.
|
||||
|
||||
Preparador liga cada origem a serviço de catálogo por ID/versão, preço comercial e fonte explícitos. Preço desconhecido impede proposta/geração, zero explícito é distinto. Moeda MZN, cliente da ordem conferido, catálogo e cliente versionados. A proposta guarda composição e fundamento/exclusões e é imutável; sucessora explícita requer nova revisão. Identidade distinta aprova/recusa versão exacta. Mudança da origem/tarefa/cadastro/cliente torna proposta desactualizada, sem escolha automática de sucessora ou aprovação herdada.
|
||||
|
||||
Ensaio aprovado como hipótese: `WORKSHOP-SALES-SYNTHETIC-v1`, preços sem imposto de 200 MZN/H e 75 MZN/UN. Soma exacta: 350 + 150 = **500 MZN**. Não são tarifas reais nem derivação do custo interno de 275 MZN; imposto/aplicabilidade continuam pendentes, sem chamar 500 de total fiscal ou quantia exigível. Aritmética exacta; fracção que não caiba no contrato decimal 16/8 do rascunho é recusada, sem arredondamento silencioso.
|
||||
|
||||
Geração reutiliza `ServiceWorkflow` e cria prestação de origem e rascunho de facturação na mesma transacção; a prestação é necessária pelo contrato existente. Não cria duas utilizações técnicas/comerciais. Vínculo único da origem canónica por ordem, geração única por ordem e referências exactas à proposta, apontamentos e versões. Chave idempotente recupera o mesmo destino; conteúdo diferente é conflito. Bloqueio de empresa serializa revisões e geração; auditoria/evento/outbox atómicos, rollback sem rascunhos ou vínculos órfãos. Nenhuma confirmação B1 automática.
|
||||
|
||||
Rascunhos gerados não podem ser editados/apagados directamente no SQL; aplicação responde com 409 ao tentar edição pelo fluxo existente. Correcção/cancelamento comercial não integra este recorte; uma origem utilizada não é libertada por edição ou nova versão técnica. Histórico preservado, sem reescrever fotografias B1. Propostas com origens alteradas ficam sinalizadas; os rascunhos gerados conservam a composição original e exigem circuito próprio de correcção antes de reutilização comercial.
|
||||
|
||||
Também bloqueada a criação de outro rascunho pelo percurso A usando a prestação já convertida: recusa 409 na aplicação e trigger de INSERT no SQL. A primeira geração ocorre atomicamente antes do registo final do vínculo; depois disso, não há caminho alternativo autorizado para reaproveitar essa prestação como segundo destino. Revogação de direitos de criação de destino é verificada também antes de recuperar um replay da geração.
|
||||
|
||||
## Interface e prova
|
||||
|
||||
Novo destino **Oficinas → Oficina → rascunho**, só com `workshop_billing.view`. Atalhos na página inicial por direitos explícitos de preparação/revisão, sem contagens fictícias. Revisor consulta proposta e toma decisão, sem formulário de preparação/geração. Preparador escolhe serviços/preços, submete, depois gera a partir da versão aprovada. Interface mostra IDs de prestação/rascunho, sem validade fiscal e fiscalidade pendente.
|
||||
|
||||
Regressão inicial relevante: **41 testes / 660 asserções aprovados**, incluindo quatro testes iniciais de conversão e regressões de oficinas/custo directo/B1/guardas. Acrescentados casos de sucessão, catálogo alterado e revogação de criação do destino no replay; regressão completa final em execução. Compilação aprovada, Vite 8.3.5, sem alterações de dependências. Cinco cenários concorrentes com processos sobrepostos aprovados em [workshop-billing-concurrency.json](proofs/workshop-billing-concurrency.json): proposta repetida, propostas sucessoras concorrentes, revisão repetida, geração repetida e geração com novas chaves já utilizada. Uma geração, dois vínculos canónicos.
|
||||
|
||||
**Navegador:** a automação do Edge já estava bloqueada, sem nova tentativa ou afirmação de recuperação. Nenhuma captura ou execução manual deste novo percurso é declarada. Preparação para prova manual, quando houver instância de teste vazia sob as guardas e nenhum teste destrutivo em execução:
|
||||
|
||||
```powershell
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/browser-proof.ps1 start -Port 8002
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/sgf.ps1 php scripts/workshop-billing-fixture.php --env=testing
|
||||
```
|
||||
|
||||
Fixture cria ordem/recursos sintéticos com verificação por técnico/verificador distintos dos papéis comerciais. Não preenche proposta/revisão/geração. Usar contas sintéticas do manifesto protegido fora do repositório; não exibir ou copiar palavras-passe para provas. Preparador selecciona o tempo e consumo, serviços exactos, preços 200/75 e referência acima; revisor entra separadamente e aprova versão exacta; preparador gera prestação/rascunho; conferir 500 MZN, estados pendentes e rastreabilidade no destino. Não correr testes que recriam a base enquanto essa prova estiver activa; parar apenas a instância SGF por `scripts/browser-proof.ps1 stop`.
|
||||
|
||||
Instância manual efectivamente preparada em 8002 após os testes finais, com ambiente confirmado por HTTP em [workshop-billing-environment.json](proofs/workshop-billing-environment.json). Entrada: `gestor@example.test` (preparação/geração) e `consulta@example.test` (revisão), mesmo contexto sintético. Instruções de entrada apenas em `C:\laragon\data\sgf-tempo\secrets\workshop-billing-manual-entry.txt`, fora do repositório, ACL do utilizador local/SYSTEM. Não usar as credenciais anteriores de outro ensaio. Nenhum passo manual foi declarado realizado; a instância permanece ligada para essa prova. Seleccionar o serviço «Serviço comercial exclusivamente sintético» e a sua versão apresentada. O validador comercial não recebeu direitos de verificação técnica.
|
||||
|
||||
## Migração e concessões apenas propostas
|
||||
|
||||
Migração **`2026_10_28_120000_create_workshop_billing_drafts.php`**, SQL `database/sql/workshop-billing.sql`, destino futuro **sgf_tempo_dev / 127.0.0.1:55432**, por caminho exclusivo com `sgf_dev_owner`; aplicação mantém `sgf_dev_app`. Depende da fundação/oficinas e guarda SQL de testes já existentes. Cria sete tabelas: `wb_proposals`, `wb_decisions`, `wb_generations`, `wb_claims`, `wb_commands`, `wb_events`, `wb_outbox`; índices, FKs, triggers de ambiente/imutabilidade, cadeia/revisão, vínculo único e protecção condicional dos rascunhos ligados. Amplia CHECK com quatro nomes de direitos; não atribui concessões. `down()` recusa destruição de história. Guardas da aplicação e INSERT nas sete tabelas mantêm uso restrito a `sgf_tempo_test`/55432; sem opção de activação real. SQL não é RLS nem uma segunda implementação do motor comercial completo.
|
||||
|
||||
Consulta `scripts/workshop-billing-permissions-preview.php` confirmou migração ausente, conversão real recusada e as seis concessões abaixo ausentes. **Não aplicadas**, exigem autorização específica separada. Todas: **tenant #1 / Tempo Lda #1 / SEGI #1**.
|
||||
|
||||
| Conta existente | Direitos propostos |
|
||||
| --- | --- |
|
||||
| Osmane #1 | `workshop_billing.view`, `workshop_billing.prepare`, `workshop_billing.generate` |
|
||||
| Samira #2 | `workshop_billing.view`, `workshop_billing.review`, `workshop.view` |
|
||||
|
||||
`workshop.view` para Samira é consulta técnica necessária à revisão comercial; não inclui `workshop.verify`, apontamentos, supervisão ou gestão de acessos. Os direitos de consulta empresarial de clientes/serviços das duas contas e os de consulta/criação de prestações/rascunhos da conta #1 já existem e foram conferidos; não são reaplicados ou derivados de custos. `110000` e sete concessões do orçamento permanecem separadas e pendentes.
|
||||
|
||||
## Ficheiros e limitações
|
||||
|
||||
Novos: `app/Modules/Workshop/WorkshopBilling.php`, controlador em `Http/WorkshopBillingController.php`, migração/SQL, `resources/js/WorkshopBillingWorkspace.jsx`, testes/fixture `WorkshopBillingTest.php`/`WorkshopBillingFixture.php`, scripts `workshop-billing-fixture.php`, `workshop-billing-worker.php`, `workshop-billing-concurrency.php`, `workshop-billing-permissions-preview.php`, documentação/provas. Integrações no router, navegação/página inicial e protecção de edição em `ServiceWorkflow.php`.
|
||||
|
||||
Uma ordem/cliente/MZN, selecção integral, um destino, cobrança por tempo efectivo e material consumido da empresa. Sem tarefa a preço fixo, repartição parcial, descontos, margens, stock, emissão, cálculos fiscais novos, recebimentos, lançamentos, publicação ou utilização real. Correcção/cancelamento de rascunhos ligados bloqueados até circuito próprio. Prova visual e aceitação continuam separadas; nenhuma pendência é promovida a prova realizada.
|
||||
@@ -0,0 +1,98 @@
|
||||
# Oficina → rascunho de facturação — especificação para decisão
|
||||
|
||||
**Autorização técnica posterior de 28/10/2026:** o utilizador autorizou implementar e demonstrar `WORKSHOP-BILLING-DRAFT-SIM-v1` exclusivamente em `sgf_tempo_test`, sem aplicar migrações/concessões em desenvolvimento, activar uso real ou publicar. A autorização substitui apenas as restrições anteriores de etapa documental; decisões comerciais e limites permanecem. Ver [entrega e estado das provas](WORKSHOP_BILLING_DELIVERY.md). Não presume aceitação ou checkpoint.
|
||||
|
||||
28/10/2026. Próximo recorte proposto: `WORKSHOP-BILLING-DRAFT-SIM-v1`. Nesta etapa **apenas documentação**: sem implementação, migrações, concessões, alteração de operações reais ou publicação. Preservar `04870f0` (orçamento aceite com limitação de capturas), `090b7da` (página inicial/menu com revisão visual pendente) e anteriores. Sem reabrir as respectivas aprovações ou transformar provas pendentes em realizadas.
|
||||
|
||||
## 1. Objectivo e menor incremento proposto
|
||||
|
||||
Numa futura prova exclusivamente sintética em `sgf_tempo_test`, seleccionar numa ordem os recursos elegíveis já verificados, preparar a sua conversão comercial, rever preços e gerar **um novo rascunho de facturação rastreável** na mesma empresa/unidade. Não voltar a digitar consumos/tempos, não transformar ordem em produção industrial e não criar um segundo acontecimento técnico para conseguir facturar.
|
||||
|
||||
Primeiro recorte recomendado: uma ordem, um cliente explicitamente confirmado, uma unidade, moeda de venda explícita, selecção integral de cada origem elegível, sem repartição parcial entre rascunhos. Prestações e facturação permanecem rascunhos; não confirmar internamente B1 automaticamente, emitir documentos, calcular/aprovar fiscalidade por consequência, receber ou contabilizar. Equipamentos e contratos reais não são criados como preparação deste ensaio.
|
||||
|
||||
## 2. Origem técnica e decisão de facturabilidade
|
||||
|
||||
Seleccionar IDs/versões actuais da ordem, tarefa e apontamento, autor, decisão de verificação e verificador distintos, quantidades/unidades e período de execução. Não seleccionar por descrição, último registo ou nome de técnico. Consulta da ordem exige direitos técnicos próprios; converter para rascunho exige direitos comerciais separados. Verificação técnica reconhece execução elegível; **não aprova cobrança ou preço**.
|
||||
|
||||
| Origem | Proposta para o primeiro recorte |
|
||||
| --- | --- |
|
||||
| Trabalho efectivo verificado ligado à tarefa | Elegível apenas após decisão comercial explícita: ligação a serviço de catálogo e forma de cobrança aprovada |
|
||||
| Material consumido verificado, propriedade da empresa | Elegível se comercialmente facturável, com descrição e unidade de venda compatíveis |
|
||||
| Material do cliente | Excluído da cobrança de material por omissão; não facturar propriedade do cliente. Serviço de aplicação, se acordado, é origem comercial distinta, sem inventar consumo |
|
||||
| Material requerido/entregue/devolvido | Não equivale a consumo facturável. Não somar entrega e consumo; não descontar novamente devolução de um consumo já líquido |
|
||||
| Origem pendente, recusada, obsoleta ou ocorrência fora de autorização apenas reconhecida | Não elegível. Não promover reconhecimento de auditoria a verificação válida |
|
||||
| Custo directo, orçamento, resultado industrial ou residual CIF | Não são preço, quantidade facturável ou nova origem técnica |
|
||||
|
||||
Proposta: tarefa a preço fixo **ou** tempo facturável derivado dos apontamentos seleccionados, nunca ambos para a mesma parcela. Para não misturar bases, começar por **tempo efectivo verificado × tarifa comercial** e material consumido verificado × preço comercial por unidade; preço fixo por tarefa fica como alternativa a confirmar antes da execução. Horas humanas não se confundem com HM de máquina. Não acrescentar deslocação, mínimos, descontos, margens, IVA ou despesas sem âmbito e dados próprios.
|
||||
|
||||
Excluir uma origem exige motivo visível, não apagamento. A revisão mostra a lista seleccionada, as exclusões e a diferença entre recurso executado e parcela comercial. Sem cobrança automática de todos os recursos só por estarem verificados.
|
||||
|
||||
## 3. Preços de venda e compatibilidade
|
||||
|
||||
Proposta: preços de venda introduzidos/seleccionados explicitamente pelo preparador a partir de uma referência comercial identificada e versionada; revisor confirma preço, unidade, moeda, data de referência e condições. Não usar taxa interna de material/trabalho, custo industrial ou preço de outra versão/cliente por omissão. Não adoptar tabela de preços, moeda ou imposto por suposição.
|
||||
|
||||
Manter cadeias decimais exactas do contrato A (até 16 inteiros/8 decimais), sem float ou truncagem fiscal. MIN/H conserva conversão exacta. Se quantidade comercial ou preço necessário não for exactamente representável pelo contrato do rascunho, bloquear a conversão e pedir decisão explícita; não arredondar silenciosamente. Preço zero explícito e revisto é distinto de preço desconhecido. Enquanto preço, cliente ou ligação comercial estiverem pendentes, a proposta pode ser revista, mas **não gerar um rascunho com zero fictício ou omissão silenciosa de linhas**.
|
||||
|
||||
Conferir empresa/unidade, cliente, serviço seleccionado, moeda, unidade física/de venda, quantidade, período e regra de cobrança. A ordem não prova por si a identidade fiscal do cliente. A ligação de cliente/serviço é explícita; criação ou correcção de cadastro permanece no circuito existente, sem concessão implícita. Compatibilidade fiscal/aplicabilidade mantém pendências próprias; gerar rascunho não resolve exigibilidade, apuramento ou emissão.
|
||||
|
||||
## 4. Revisão e responsabilidades propostas — por confirmar
|
||||
|
||||
**Proposta funcional:** Osmane selecciona recursos, prepara ligações comerciais e preços; Samira revê/valida ou recusa a versão exacta da proposta comercial por identidade distinta. Não atribui a Samira verificação técnica, gestão de acessos ou edição dos apontamentos. A geração é feita pelo preparador a partir da proposta revista, sem alterar as parcelas aprovadas; se mudar selecção, quantidade, preço, cliente, serviço ou moeda, criar sucessora e exigir nova revisão. Provas futuras com equivalentes sintéticos, sem contas ou concessões reais novas.
|
||||
|
||||
Estados propostos: proposta preparada/submetida → revista ou recusada → geração do rascunho. Submissão e decisões imutáveis, com sucessora e motivo explícitos. Geração não executa uma segunda aprovação fiscal nem confirmação B1. A validação comercial desta proposta é uma decisão nova e necessita confirmação do utilizador; não decorre dos papéis aprovados para custos/orçamento.
|
||||
|
||||
## 5. Rastreabilidade e não duplicação
|
||||
|
||||
Cada linha gerada conserva ordem/tarefa/apontamento por ID/versão, decisão de verificação, quantidade/unidade seleccionada, conversão comercial, serviço/cadastro exacto, preço/fonte/versão, proposta/revisão e autor. Pode apresentar descrição legível da ficha, sem perder as referências. Uma linha pode agregar origens só se a composição exacta permanecer recuperável e não misturar unidades/preços/regras incompatíveis; para o primeiro recorte, recomendar uma linha por parcela comercial.
|
||||
|
||||
Registar a utilização comercial da **identidade canónica da origem**, não só do ID da sua versão. Uma correcção técnica não permite voltar a facturar a mesma parcela com novo ID. A utilização comercial não é consumo de stock ou nova imputação de custos. Não duplicar a mesma parcela em prestação e factura como se fossem duas utilizações; o vínculo acompanha a origem até ao rascunho destino único.
|
||||
|
||||
Proposta, revisão, vínculo à origem, linhas do rascunho, auditoria e evento/outbox são atómicos. Chave de idempotência inclui contexto, autor, acção e conteúdo; repetição recupera o mesmo rascunho, conteúdo diferente é conflito. Duas selecções concorrentes da mesma origem só permitem um destino activo; falha ou perda de resposta não deixa reserva órfã nem cria duplicados.
|
||||
|
||||
Primeiro recorte sem facturação parcial, repartição entre clientes ou vários destinos. Correcção após geração conserva rascunho e referências originais; assinala proposta/rascunho desactualizados e bloqueia nova geração/uso da proposta antiga. **Não libertar a origem automaticamente** por editar/apagar um rascunho. Substituição/cancelamento comercial requer operação explícita, auditada e compatível com o estado do destino; se essa operação não integrar o recorte, a origem permanece bloqueada e o caso é remetido a revisão. Fotografia B1 já confirmada nunca é reescrita; geração não contorna correcções ou bloqueios de emissão.
|
||||
|
||||
## 6. Critérios para futura entrega
|
||||
|
||||
- Demonstrar uma ordem com trabalho e material verificados, ligações comerciais explícitas e rascunho com composição recuperável, sem reintroduzir quantidades técnicas.
|
||||
- Demonstrar que preço comercial pode diferir do custo interno, sem conversão automática, e que preço desconhecido impede gerar, sem virar zero. Caso zero explícito exige decisão própria.
|
||||
- Recusar material do cliente, apontamento não verificado/recusado/obsoleto e ocorrência apenas reconhecida; preservar motivos e histórico.
|
||||
- Recusar cobrança simultânea da tarefa fixa e dos mesmos tempos, dupla selecção, versão corrigida como nova cobrança ou dois destinos concorrentes. Entregas/devoluções não viram consumo comercial por inferência.
|
||||
- Refazer proposta materialmente alterada com nova versão/revisão, sem herdar aprovação; preservar origem e rascunho anteriores. Cliente/moeda/unidade/contexto incompatíveis recusados.
|
||||
- Verificar separação de identidades e permissões no servidor, contexto revisto, revogação no pedido seguinte e isolamento entre empresas/unidades; menus não são prova de autorização.
|
||||
- Demonstrar idempotência, concorrência, rollback de evento/outbox e recuperação de resposta, sem vínculos/reservas órfãos.
|
||||
- Regressões relevantes de oficinas, rascunhos/B1, custos e guardas; compilação e demonstração isolada com evidência e limitações explícitas. Sem emissão real, stock, recebimentos, lançamentos ou aceitação presumida.
|
||||
|
||||
## 7. Acessos e decisões novas antes de implementar
|
||||
|
||||
Propor direitos próprios de unidade para consulta/preparação/revisão/geração da conversão, além dos direitos de consulta às origens e de criação do rascunho destino. Não derivar de `workshop.verify`, `direct_costs.*`, `industrial_budgets.*` ou nomes. Nomes técnicos, contas e número de concessões só serão propostos concretamente depois de fechar o fluxo; nenhuma concessão autorizada aqui. Migração futura também separada, com destino e guardas explícitos antes de aplicação.
|
||||
|
||||
Decisões novas para o utilizador:
|
||||
|
||||
1. Confirmar facturabilidade: tempo verificado e material consumido da empresa, com material do cliente excluído, **ou** escolher tarefa a preço fixo em vez do tempo para a mesma parcela.
|
||||
2. Confirmar fonte/forma de aprovação dos preços comerciais e moeda do ensaio; custo interno nunca determina preço automaticamente.
|
||||
3. Confirmar Osmane como preparador/gerador e Samira como revisora comercial distinta, sem supervisão técnica implícita.
|
||||
4. Confirmar primeiro recorte com selecção integral por origem, um rascunho por proposta e sem repartição parcial, mantendo casos posteriores bloqueados até correcção/cancelamento próprios.
|
||||
|
||||
Estas propostas não são decisões já acordadas nem autorização de implementação. A primeira geração no sistema e a activação operacional continuam fora desta etapa documental.
|
||||
|
||||
## 8. Confirmação posterior e proposta concreta de preços do ensaio
|
||||
|
||||
Em 28/10/2026, o utilizador respondeu «sim prossiga» às quatro opções apresentadas: tempo verificado e material consumido da empresa, excluindo material do cliente e dupla cobrança de tarefa/tempo; preços comerciais explícitos com fonte identificada e revisão distinta, sem derivação do custo; Osmane prepara/gera e Samira revê a versão comercial; origens integrais, uma ordem e um rascunho por proposta, sem repartição parcial. Estas decisões substituem as respectivas pendências da secção 7. Não constituem concessões reais nem autorização de utilização operacional.
|
||||
|
||||
A fonte concreta dos preços, os valores e a moeda não tinham sido fornecidos. Para fechar esse ponto sem usar preços reais ou inferir valores a partir do custo, fica proposta para validação a referência **`WORKSHOP-SALES-SYNTHETIC-v1`**, tabela exclusivamente sintética, moeda **MZN**, preços sem imposto:
|
||||
|
||||
| Parcela comercial | Quantidade de referência técnica | Preço de venda sintético proposto | Montante sem imposto |
|
||||
| --- | --- | --- | ---: |
|
||||
| Trabalho efectivo verificado | 105 MIN = 1,75 H | 200 MZN/H | 350 MZN |
|
||||
| Material da empresa consumido e verificado | 2 UN | 75 MZN/UN | 150 MZN |
|
||||
| **Soma comercial do exemplo** | Mesma ordem sintética | Sem cálculo fiscal | **500 MZN** |
|
||||
|
||||
Valores **ainda não aprovados**. Não são tarifas do utilizador, preços de catálogo real, margens ou substitutos das taxas internas de custo. As origens técnicas do exemplo são as do percurso de oficina, reutilizadas por ID/versão, sem copiar consumos nem usar o resultado agregado de custo como origem comercial. Em futura prova, a referência e os preços exactos entram na proposta de conversão e só podem gerar rascunho depois da revisão comercial distinta. O cliente, serviços de catálogo e descrições devem ser sintéticos e explicitamente ligados, sem criar contas ou dados reais. IVA/aplicabilidade permanecem pendências separadas; 500 MZN é apenas soma de linhas sem imposto, não total fiscal ou montante exigível.
|
||||
|
||||
Próxima validação necessária: confirmar ou substituir a referência sintética, **MZN**, **200 MZN/H** e **75 MZN/UN**. Nenhum código, migração ou concessão implementado por esta actualização documental.
|
||||
|
||||
### 8.1 Aprovação dos valores pelo utilizador
|
||||
|
||||
Em 28/10/2026, o utilizador confirmou «sim» à proposta concreta acima. Ficam aprovados, **exclusivamente como pressupostos sintéticos do ensaio**, a referência `WORKSHOP-SALES-SYNTHETIC-v1`, moeda MZN e preços de venda sem imposto de 200 MZN/H e 75 MZN/UN: 105 MIN = 1,75 H → 350 MZN; 2 UN → 150 MZN; soma comercial 500 MZN. A indicação de valores por aprovar na secção anterior passa a histórica. Não se adopta política comercial real, preço derivado de custo ou tratamento fiscal.
|
||||
|
||||
Fechadas as decisões de facturabilidade, responsabilidades, selecção integral e base comercial deste recorte. Cada futura proposta continua a exigir revisão distinta da versão exacta antes da geração; a confirmação do desenho não constitui aprovação automática de registos no sistema. Preservar todos os checkpoints e bloqueios. Nesta etapa continua apenas a especificação: sem código, migrações, concessões, emissão, stock, lançamentos, publicação ou utilização real. Uma autorização técnica de implementação deverá delimitar provas sintéticas, direitos próprios e proposta separada de qualquer instalação em desenvolvimento.
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"policy": "WORKSHOP-BILLING-DRAFT-SIM-v1",
|
||||
"database": "sgf_tempo_test",
|
||||
"overlapping_processes_per_case": 2,
|
||||
"checks": {
|
||||
"proposal_replay_one_version": true,
|
||||
"competing_proposals_one_successor": true,
|
||||
"review_replay_one_decision": true,
|
||||
"generation_replay_one_draft": true,
|
||||
"new_keys_cannot_duplicate_generation": true
|
||||
},
|
||||
"one_generation_two_origin_claims": true
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"environment": "browser-testing",
|
||||
"database": "sgf_tempo_test",
|
||||
"role": "sgf_test_runner",
|
||||
"database_port": 55432,
|
||||
"session_driver": "file",
|
||||
"session_cookie": "sgf_browser_proof",
|
||||
"cache_store": "file",
|
||||
"synthetic_only": true
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"policy": "WORKSHOP-BILLING-DRAFT-SIM-v1",
|
||||
"date": "2026-10-28",
|
||||
"database": "sgf_tempo_test",
|
||||
"method": "user_reported_manual_browser_and_read_only_reconciliation",
|
||||
"order_id": 1,
|
||||
"proposal_id": 1,
|
||||
"proposal_version": 1,
|
||||
"service_draft_id": 8,
|
||||
"billing_draft_id": 4,
|
||||
"commercial_base_exact": "500",
|
||||
"currency": "MZN",
|
||||
"source_claims": 2,
|
||||
"distinct_commercial_review": true,
|
||||
"generated_lines_match_reviewed_proposal": true,
|
||||
"internal_confirmation_created": false,
|
||||
"fiscal_status": "pending",
|
||||
"accounting_status": "not_processed",
|
||||
"manual_user_reported_destination_lines_and_500_base": true,
|
||||
"manual_user_reported_reviewer_conversion_without_prepare_or_generate_controls": true,
|
||||
"manual_user_reported_reviewer_destination_read_only": true,
|
||||
"screenshots_received": false,
|
||||
"automated_browser_recovered": false,
|
||||
"records_changed": false,
|
||||
"user_acceptance": false,
|
||||
"closing_checkpoint_created": false
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"policy":"WORKSHOP-BILLING-DRAFT-SIM-v1",
|
||||
"date":"2026-10-28",
|
||||
"database":"sgf_tempo_test",
|
||||
"full_regression_before_final_duplicate_route_guard":{"tests":175,"assertions":3094,"errors":0,"failures":0},
|
||||
"final_targeted_after_guard":{"tests":24,"assertions":271,"errors":0,"failures":0},
|
||||
"final_services_a_after_guard":{"tests":14,"assertions":156,"errors":0,"failures":0},
|
||||
"new_workshop_billing_cases":6,
|
||||
"overlapping_process_cases":5,
|
||||
"build":{"vite":"8.3.5","passed":true,"dependencies_changed":false},
|
||||
"manual_browser":{"port":8002,"fixture_prepared":true,"environment_checked_by_http":true,"user_path_completed":false,"screenshots_received":false,"automatic_edge_retried":false},
|
||||
"development_migration_120000_applied":false,
|
||||
"new_real_grants_applied":false,
|
||||
"real_conversion_blocked":true,
|
||||
"user_acceptance":false,
|
||||
"closing_checkpoint_created":false
|
||||
}
|
||||
Reference in New Issue
Block a user