fix(offers): avoid Wayfinder report form name collision after safe deployment stop
tests / ci (push) Waiting to run

This commit is contained in:
2026-11-14 20:10:32 +02:00
parent 9cbd7fb97d
commit 1349789226
25 changed files with 1423 additions and 3 deletions
@@ -22,7 +22,7 @@ final class PrivateOfferOperationsController extends Controller
return response()->json($operations->presentation($request->user(), $id));
}
public function reportForm(Request $request, int $id, PrivateOfferOperations $operations): Response
public function reportPage(Request $request, int $id, PrivateOfferOperations $operations): Response
{
$record = Opportunity::findOrFail($id);
abort_unless($record->isPrivateOfferPreparation() && $operations->canReport($request->user(), $record), 404);
@@ -10217,3 +10217,6 @@ Por autorização específica, destino `teste-investidor.tempo.co.mz` confirmado
# Instalação autorizada das Ofertas — paragem de entrada, 14/11/2026
A Tempo autorizou expressamente `3558647e`, incluindo menus, mantendo fecho público. A verificação de entrada encontrou `main` e homologação em `96f51096`; o executor segue esse ramo. Em cumprimento da condição 4, a operação foi interrompida antes de qualquer push/pedido/instalação. Executor inactivo, zero pedidos; nenhuma migração, alteração operacional ou reversão. A instalação já está autorizada, mas a integração exacta e controlada de `3558647e` em `main` exige decisão após esta paragem; o fast-forward é possível sem força e pode accionar a instalação. Não reiniciar preparação/testes aceites para resolver esta diferença de ramo. Recibo: `outputs/offers-authorised-install-20261114/entry-blocked.json`.
# Instalação exacta das Ofertas — falha antes da promoção e correcção QA, 14/11/2026
O fast-forward autorizado `96f51096 → 3558647e` foi efectuado sem força ou commits posteriores. Janela com path automático pausado, lock exclusivo e chamada única ao executor existente, recusando qualquer outro SHA. Novo backup/restauro isolado 219 tabelas/417 ficheiros aprovado. O executor passou schema isolado 1/3106 e build, mas parou em tipos: colisão Wayfinder entre a acção GET `reportForm` e o formulário gerado para POST `report`. Sem promoção, migrações, alteração operacional ou reversão; homologação servida permanece `96f51096`, 219 tabelas/417 ficheiros reconferidos intactos. Lock libertado, path original restaurado, fila vazia. Correcção mínima em QA: acção GET `reportPage`, mesmo URL e corpo, com geração real/produção/tipos/PHPStan/Pint e 28 testes/403 asserções aprovados, numa base isolada separada da prévia. Nenhum novo push ou instalação. Relatório: `../v2/auditoria-portal/ofertas-instalacao-privada-incidente-wayfinder-20261114.md`; recibo `outputs/offers-exact-install-20261114/qa-result.json`. Nova revisão correctiva exige autorização expressa antes de integrar/instalar; publicação, correio, pagamentos e decisões jurídicas continuam nos limites anteriores.
File diff suppressed because one or more lines are too long
@@ -0,0 +1,71 @@
# Ofertas — tentativa exacta de instalação privada e correcção QA
14/11/2026. Autorização: fast-forward de `main` de `96f51096` para **`3558647e8d82092cd0e31eefbe8b9e5e9eacf573`**, sem força, sem revisões posteriores e exclusivamente para homologação privada.
**Resultado: instalação interrompida antes da promoção. A homologação mantém `96f510965f70581a4b41dd94463f598b77dd7cf5`.** O ramo remoto recebeu exactamente `3558647e`; o executor verificou e construiu essa candidata, mas recusou-a na verificação TypeScript. Nenhuma revisão posterior foi enviada ou instalada.
## Execução e salvaguarda
1. Ancestralidade confirmada e `main` inicialmente em `96f51096`; fast-forward possível, árvore local sem alterações inesperadas.
2. Janela reservada: path automático temporariamente pausado, serviço original inactivo e zero pedidos concorrentes. O lock existente `delivery.lock` foi adquirido sob o utilizador de implantação existente. O executor original não foi modificado: uma chamada única a `Delivery.deliver(3558647e)` reconfirmava o `main` real e lançava erro se encontrasse outro SHA, sem utilizar o ciclo que escolhe automaticamente revisões posteriores.
3. Backup **novo**, de 14/11/2026 às **19:51:40 Africa/Johannesburg (17:51:40 UTC)**, em `/var/backups/investmoz-offers-exact-install-3558647e-20261114/backup`. Restauro isolado aprovado para 219 tabelas, 417 ficheiros e dois conjuntos de MFA; nenhuma base operacional substituída. Cópia da release anterior preservada e integridade reconfirmada.
4. Push efectuado com referência exacta, sem força: `git push --porcelain origin 3558647e8d82092cd0e31eefbe8b9e5e9eacf573:refs/heads/main`. O remoto confirmou `96f51096..3558647e`; `ls-remote` reconfirmou o SHA integral. Os commits documentais posteriores não foram incluídos.
5. O pedido do webhook foi reservado fora da fila automática durante a janela. O build decorreu numa release separada e numa base CI isolada; a ligação `current` nunca mudou. A reserva temporária foi relançada antes do build para utilizar o mesmo UMask `0027` do serviço existente; não se modificaram as permissões/configuração do serviço original.
| Salvaguarda nova | Resultado |
| --- | --- |
| Dump de 219 tabelas | SHA256 `88152dc39367f5e59eb072f63b44d3a949e93d73ae855eccb33c3c0b9e37bf6c` |
| Arquivo de 417 ficheiros/configuração | SHA256 `aa6248e0eec3d27d58a4bbb3c16848a70dcb3524e6cafc6340b682984a8bbdb3` |
| Restauro | Rede `none`, base nova `offers_install_restore_20261114_test`, porta interna 55441; contagens/checksums e ficheiros iguais; container de ensaio removido |
| Integridade após a falha | 219/219 tabelas e 417/417 ficheiros sem diferenças face à cópia nova; sem alteração do código servido |
## Incidente concreto
O executor passou a preparação da candidata, Composer, guarda/schema isolado **1 teste / 3.106 asserções**, `npm ci` e build frontend. Parou em `npm run types:check`, antes dos unitários/frontend seguintes e antes de qualquer promoção ou `queue:restart` operacional.
O Wayfinder, com variantes de formulário, gerou em `resources/js/actions/App/Http/Controllers/PrivateOfferOperationsController.ts`:
- Linha 180: `export const reportForm` para a acção GET do formulário de denúncia;
- Linha 331: `const reportForm` como auxiliar do formulário da acção POST `report`.
O TypeScript recusou as duas declarações com **TS2395**. Não é falha de persistência, autorização, GD, estrutura ou dados. A verificação QA simplificada anterior reutilizava rotas geradas e não exercitou esta geração completa; por isso a colisão não tinha sido detectada antes da entrega. A verificação completa do executor funcionou e conservou a aplicação anterior.
Release falhada preservada para diagnóstico: `/var/www/investmoz-homologacao/releases/3558647e8d82092cd0e31eefbe8b9e5e9eacf573-a4916dfe`. Logs protegidos e recibos da chamada exacta em `/var/lib/investmoz-deploy/offers-exact-3558647e-20261114`. Não se editou essa release para contornar os tipos ou apresentar como instalado um código diferente de `3558647e`.
## Recuperação e estado real
- O manifesto servido e o recibo de instalação continuam em **`96f51096`**.
- Não houve promoção; **não foi necessário reverter código ou restaurar a base**. A release anterior permaneceu servida durante toda a tentativa.
- O lock foi libertado, o path automático voltou ao estado activo original e a fila ficou sem pedidos pendentes. O pedido reservado foi preservado no registo privado da operação, sem reexecutar automaticamente a revisão falhada.
- `main` permanece em **`3558647e`**, conforme o avanço autorizado. Não houve force push ou reversão implícita do ramo.
- Zero migrações operacionais, importações, alterações de permissões, alterações de `mne`, activações de pagamentos, emails ou publicação de Ofertas. As configurações protegidas e os dados operacionais foram reconferidos sem diferenças.
- As verificações pós-instalação do novo módulo em homologação não foram executadas: o módulo não chegou a ser instalado. Não se apresentam os testes QA como acesso autenticado real à nova versão no destino.
## Correcção mínima preparada apenas em QA
Dois pontos funcionais alterados:
| Ficheiro | Correcção |
| --- | --- |
| `app/Http/Controllers/PrivateOfferOperationsController.php` | Renomear a acção GET `reportForm` para `reportPage`; corpo e verificações intactos |
| `routes/web.php` | Apontar o mesmo GET `/{id}/denunciar` à acção `reportPage` |
Não se alteraram os URLs, verbos HTTP, acção POST `report`, permissões, serviços, dados, histórico, menu ou as cinco fases. O Wayfinder gera agora `reportPage`/`reportPageForm` para GET e `report`/`reportForm` para POST, sem colisão. Nenhuma nova funcionalidade foi iniciada.
| Verificação da correcção | Resultado |
| --- | --- |
| `php artisan wayfinder:generate --with-form` | Aprovado, geração real de acções/rotas/formulários |
| Build normal com `INVESTMOZ_QA_BUILD=0` | Aprovado; plugin Wayfinder activo, sem reutilização simplificada |
| `npm.cmd run types:check` depois desse build | Aprovado |
| PHPStan completo e Pint focado | Aprovados; zero erros PHPStan |
| Operações, denúncias, confidencialidade/NDA e continuidade | **28 testes / 403 asserções aprovados**, incluindo GET do formulário e POST das denúncias |
| Base do ensaio | `offers_wayfinder_fix_20261114_test`, loopback:55441, separada da prévia do utilizador |
| Preservação | Base da prévia não foi limpa; prova aceite de continuidade guardada/restaurada byte a byte, nova fixture retida separadamente |
Os comandos, resultados e hashes constam de `outputs/offers-exact-install-20261114/qa-result.json`. A correcção não foi enviada para `main` nem instalada: a autorização recebida limitava a instalação a `3558647e` e proibia revisões posteriores.
## Saldo e decisão necessária
**Instalação de `3558647e`: BLOQUEADA pelo build completo.** Integração técnica e dados das cinco fases preservados; correcção de compatibilidade do gerador pronta em QA nesta entrega. Nova autorização deverá identificar a revisão correctiva exacta e o fast-forward a partir do `main` actual `3558647e`, conservando instalação exclusivamente privada e as guardas de revisão/janela/salvaguarda.
Continuam pendentes, separadamente, a conferência visual/móvel autenticada no destino, processamento completo/galeria, email real restrito a caixa autorizada e as decisões jurídicas sobre NDA, comprovativos, avisos e validade. A geração corrigida não encerra essas pendências nem autoriza publicação pública.
@@ -4,6 +4,8 @@
## Parecer: APTO COM CONDIÇÕES
**Execução posterior autorizada e interrompida:** [incidente do build Wayfinder e correcção QA](ofertas-instalacao-privada-incidente-wayfinder-20261114.md). O fast-forward exacto para `3558647e` foi autorizado e efectuado; o executor recusou a candidata por TS2395 antes da promoção. Homologação preservada em `96f51096`, 219 tabelas/417 ficheiros intactos, sem migração ou reversão. Correcção mínima validada apenas em QA, dependente de nova autorização de revisão. Os estados de entrada abaixo descrevem verificações anteriores e não substituem este resultado de execução.
**Tentativa após autorização expressa de instalar `3558647e`: BLOQUEADA ANTES DE INICIAR.** A condição 4 da autorização determina interromper quando o executor usa o último `main` e este difere da candidata. `git ls-remote` confirmou `main=96f510965f70581a4b41dd94463f598b77dd7cf5`, enquanto a revisão autorizada é `3558647e8d82092cd0e31eefbe8b9e5e9eacf573`. A homologação continua em `96f51096`, executor inactivo, zero pedidos. Não se fez push, pedido, instalação, migração ou reversão. A autorização de instalação foi recebida; falta decidir a integração controlada exacta em `main` depois desta paragem. Existe fast-forward possível, sem força ou inclusão dos commits documentais posteriores, mas o push pode accionar o executor e não foi executado. Evidência: `outputs/offers-authorised-install-20261114/entry-blocked.json`. O parecer técnico e o restauro anteriormente comprovado mantêm-se; esta é uma precondição operacional concreta, não uma reprovação dos testes.
O destino é compatível com a **avaliação privada** das Ofertas. As estruturas verificadas estão presentes, não há migrações/dependências novas no delta, GD/WebP está disponível no destino e o backup/restauro actual passou. A conclusão não autoriza instalar nem declarar aceite a publicação operacional.
@@ -0,0 +1,13 @@
{
"stage": "/var/backups/investmoz-offers-exact-install-3558647e-20261114/backup",
"created_at": "2026-11-14T17:51:40Z",
"target": {
"database": "teste_investidor",
"port": 5432
},
"tables": 219,
"files_verified": 417,
"dump_sha256": "88152dc39367f5e59eb072f63b44d3a949e93d73ae855eccb33c3c0b9e37bf6c",
"files_sha256": "aa6248e0eec3d27d58a4bbb3c16848a70dcb3524e6cafc6340b682984a8bbdb3",
"restore_verified": false
}
@@ -0,0 +1,663 @@
{
"path": {
"funding_selections": [],
"preparation_action": null,
"private_investment": null,
"case": {
"id": "d51a3c8b-6210-4d2a-93ec-17ee61452e79",
"title": "Synthetic acquisition acceptance",
"version": 5,
"closed": false
},
"journey_id": "3da63c95-34ac-4f6f-9f97-9c35c261cb17",
"definition_id": "61000919-0000-4000-8000-000000000001",
"definition_version": 1,
"source_sha256": "aa13c53138ec15cd808de43d9dc2fc6808da86943d09d3352c9dd0944bdae364",
"phases": {
"1": "Ideia e viabilidade",
"2": "Formaliza\u00e7\u00e3o e dossier",
"3": "Licenciamento e terra",
"4": "Financiamento",
"5": "Execu\u00e7\u00e3o e acompanhamento"
},
"steps": [
{
"code": "S01",
"phase": 1,
"title": "Sistematizar a ideia",
"branch": null,
"sequence": 1,
"dependencies": [],
"source_paragraph": 22,
"id": "ad1b09ac-2082-454c-9fc9-dec3e94d61f7",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": false
},
{
"code": "S02",
"phase": 1,
"title": "An\u00e1lise preliminar",
"branch": null,
"sequence": 2,
"dependencies": [],
"source_paragraph": 23,
"id": "1d17b451-b95a-4a29-a829-d75990f75961",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": true
},
{
"code": "S03",
"phase": 1,
"title": "Decis\u00e3o sobre a viabilidade",
"branch": null,
"sequence": 3,
"dependencies": [],
"source_paragraph": 24,
"id": "32d9cd0f-e854-4129-8358-ed17a8574d95",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": true
},
{
"code": "S04",
"phase": 1,
"title": "Estruturar o investimento",
"branch": null,
"sequence": 4,
"dependencies": [],
"source_paragraph": 25,
"id": "0a2005fe-2cdd-4d49-a8e9-052403c61095",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": true
},
{
"code": "S05",
"phase": 2,
"title": "Constitui\u00e7\u00e3o e registo",
"branch": null,
"sequence": 5,
"dependencies": [],
"source_paragraph": 26,
"id": "cf6c4c1b-61a0-4c7f-85c7-b6a21c7adbb4",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": false
},
{
"code": "S06",
"phase": 2,
"title": "Preparar o dossier",
"branch": null,
"sequence": 6,
"dependencies": [],
"source_paragraph": 27,
"id": "881cd5ed-81a1-48ce-8278-2d2cb568e27b",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": false
},
{
"code": "S07",
"phase": 2,
"title": "Submeter quando aplic\u00e1vel",
"branch": null,
"sequence": 7,
"dependencies": {
"submit": [
"S06"
]
},
"source_paragraph": 28,
"id": "0d57e596-26f3-4ec1-a8fd-aae1cf3aecce",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": {
"submit": [
"S06"
]
},
"context_review_required": false
},
{
"code": "S08",
"phase": 3,
"title": "Licenciamento pr\u00e9vio",
"branch": null,
"sequence": 8,
"dependencies": [],
"source_paragraph": 29,
"id": "51be4636-e771-4a90-8b02-a7e7e19799d2",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": true
},
{
"code": "S09",
"phase": 3,
"title": "Necessidade de terra",
"branch": null,
"sequence": 9,
"dependencies": [],
"source_paragraph": 30,
"id": "8860d60b-557a-4cae-9e9a-ffce052f0ac1",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": false
},
{
"code": "S10",
"phase": 3,
"title": "Regulariza\u00e7\u00e3o da terra",
"branch": "land_needed",
"sequence": 10,
"dependencies": [],
"source_paragraph": 31,
"id": "fefbb44c-0346-4309-a626-d64f89dc3ed8",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "undetermined",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": false
},
{
"code": "S11",
"phase": 3,
"title": "Confirmar regulariza\u00e7\u00e3o aplic\u00e1vel",
"branch": null,
"sequence": 11,
"dependencies": [],
"source_paragraph": 32,
"id": "c91ca8c7-8075-4ddc-b2dc-d7f1fd820b54",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": false
},
{
"code": "S12",
"phase": 4,
"title": "Necessidade e estrutura de financiamento",
"branch": null,
"sequence": 12,
"dependencies": [],
"source_paragraph": 33,
"id": "073bae02-69a6-463e-90b9-d85a3750c5c1",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": true
},
{
"code": "S13",
"phase": 4,
"title": "Dilig\u00eancia e negocia\u00e7\u00e3o financeira",
"branch": "external_funding",
"sequence": 13,
"dependencies": [],
"source_paragraph": 34,
"id": "9610ed18-2b00-42b7-ba45-109d786fbfab",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "undetermined",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": true
},
{
"code": "S14",
"phase": 4,
"title": "Decis\u00e3o do financiador",
"branch": "external_funding",
"sequence": 14,
"dependencies": [],
"source_paragraph": 35,
"id": "0d9db59f-8237-4541-a962-ef91d38431e2",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "undetermined",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": true
},
{
"code": "S15",
"phase": 4,
"title": "Fecho e desembolso",
"branch": "external_funding",
"sequence": 15,
"dependencies": {
"execute": [
"S14"
]
},
"source_paragraph": 36,
"id": "071057b5-cae7-4bfe-abec-749ff219f46a",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "undetermined",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": {
"execute": [
"S14"
]
},
"context_review_required": true
},
{
"code": "S16",
"phase": 5,
"title": "Implementa\u00e7\u00e3o",
"branch": null,
"sequence": 16,
"dependencies": [],
"source_paragraph": 37,
"id": "f6cdd881-7ceb-49e4-a092-c1b7677de0c9",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": false
},
{
"code": "S17",
"phase": 5,
"title": "Inspec\u00e7\u00f5es, testes e licen\u00e7a de opera\u00e7\u00e3o",
"branch": null,
"sequence": 17,
"dependencies": [],
"source_paragraph": 38,
"id": "53e9c8ea-3fe2-4945-92d9-c46d6a053b21",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": true
},
{
"code": "S18",
"phase": 5,
"title": "In\u00edcio de opera\u00e7\u00e3o",
"branch": null,
"sequence": 18,
"dependencies": {
"operate": [
"S17"
]
},
"source_paragraph": 39,
"id": "31728d61-5f97-41ce-ab31-17aa1c7712fe",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": {
"operate": [
"S17"
]
},
"context_review_required": false
},
{
"code": "S19",
"phase": 5,
"title": "Acompanhamento recorrente",
"branch": null,
"sequence": 19,
"dependencies": [],
"source_paragraph": 40,
"id": "c90e77d5-55ae-4e94-a0bb-4aeed7a418c6",
"version": 1,
"state": "not_started",
"saved_state": "not_started",
"applicability": "applicable",
"reason": "",
"detail": {
"state": "not_started"
},
"preparation_allowed": true,
"action_gaps": [],
"context_review_required": false
}
],
"facts": {
"land_needed": "unknown",
"external_funding": "unknown",
"viability": "unknown"
},
"fact_reasons": [],
"context_opportunity": null,
"opportunity_options": [],
"fintech": null,
"canWrite": true,
"canReview": false,
"next": {
"code": "S01",
"title": "Sistematizar a ideia",
"action": "Preparar",
"href": "#S01"
},
"investment_context": {
"opportunity_choices": [],
"preparation_documents": [],
"preparation_snapshot": null,
"revision": 1,
"selection": {
"opportunity": {
"key": "opportunity:28",
"kind": "opportunity",
"id": "28",
"title": "Synthetic acquisition acceptance",
"version": 5,
"href": "\/minhas-oportunidades\/ofertas\/28",
"fields": {
"project_title": "Synthetic acquisition acceptance",
"project_summary": "Existing company description to reuse once in investment preparation.",
"province": "Synthetic province",
"province_id": "855412e5-27b2-4e0f-90e2-c690e2698ae3",
"location": "Synthetic province"
},
"documents": [],
"visibility": "private",
"state": "approved",
"sha256": "54f87633f70b4b840a9b5ed445e8b437f7dd6c21097119b0324d79b0322dfce3"
}
},
"fields": {
"project_title": "Synthetic acquisition acceptance",
"investment_regime": "general",
"special_zone_id": "",
"currency": "MZN",
"project_summary": "Existing company description to reuse once in investment preparation.",
"province": "Synthetic province",
"province_id": "855412e5-27b2-4e0f-90e2-c690e2698ae3",
"location": "Synthetic province"
},
"provenance": {
"project_title": {
"kind": "dossier",
"id": "d51a3c8b-6210-4d2a-93ec-17ee61452e79",
"version": 2
},
"currency": {
"kind": "process_declaration",
"actor_id": 126,
"context_revision": 1
},
"project_summary": {
"key": "opportunity:28",
"kind": "opportunity",
"id": "28",
"title": "Synthetic acquisition acceptance",
"version": 5,
"href": "\/minhas-oportunidades\/ofertas\/28",
"documents": [],
"visibility": "private",
"state": "approved",
"sha256": "54f87633f70b4b840a9b5ed445e8b437f7dd6c21097119b0324d79b0322dfce3"
},
"province": {
"key": "opportunity:28",
"kind": "opportunity",
"id": "28",
"title": "Synthetic acquisition acceptance",
"version": 5,
"href": "\/minhas-oportunidades\/ofertas\/28",
"documents": [],
"visibility": "private",
"state": "approved",
"sha256": "54f87633f70b4b840a9b5ed445e8b437f7dd6c21097119b0324d79b0322dfce3"
},
"province_id": {
"key": "opportunity:28",
"kind": "opportunity",
"id": "28",
"title": "Synthetic acquisition acceptance",
"version": 5,
"href": "\/minhas-oportunidades\/ofertas\/28",
"documents": [],
"visibility": "private",
"state": "approved",
"sha256": "54f87633f70b4b840a9b5ed445e8b437f7dd6c21097119b0324d79b0322dfce3"
},
"location": {
"key": "opportunity:28",
"kind": "opportunity",
"id": "28",
"title": "Synthetic acquisition acceptance",
"version": 5,
"href": "\/minhas-oportunidades\/ofertas\/28",
"documents": [],
"visibility": "private",
"state": "approved",
"sha256": "54f87633f70b4b840a9b5ed445e8b437f7dd6c21097119b0324d79b0322dfce3"
}
},
"review_steps": {
"S02": {
"revision": 1,
"reason": "O contexto mudou; reveja os pressupostos e a evid\u00eancia aplic\u00e1vel."
},
"S03": {
"revision": 1,
"reason": "O contexto mudou; reveja os pressupostos e a evid\u00eancia aplic\u00e1vel."
},
"S04": {
"revision": 1,
"reason": "O contexto mudou; reveja os pressupostos e a evid\u00eancia aplic\u00e1vel."
},
"S08": {
"revision": 1,
"reason": "O contexto mudou; reveja os pressupostos e a evid\u00eancia aplic\u00e1vel."
},
"S12": {
"revision": 1,
"reason": "O contexto mudou; reveja os pressupostos e a evid\u00eancia aplic\u00e1vel."
},
"S13": {
"revision": 1,
"reason": "O contexto mudou; reveja os pressupostos e a evid\u00eancia aplic\u00e1vel."
},
"S14": {
"revision": 1,
"reason": "O contexto mudou; reveja os pressupostos e a evid\u00eancia aplic\u00e1vel."
},
"S15": {
"revision": 1,
"reason": "O contexto mudou; reveja os pressupostos e a evid\u00eancia aplic\u00e1vel."
},
"S17": {
"revision": 1,
"reason": "O contexto mudou; reveja os pressupostos e a evid\u00eancia aplic\u00e1vel."
}
},
"dependency_hash": "7c4eca9a9377b1c42478becca10e833db253fe5abb566731a9d9bb0a6ba72baf",
"updated_at": "2026-11-14T18:07:17+00:00",
"updated_by": 126,
"requirements_assessment": {
"version": "context-requirements-20261023",
"requirements": [],
"fiscal_notice": "Localiza\u00e7\u00e3o, corredor, cluster ou projecto \u00e2ncora n\u00e3o activam benef\u00edcios fiscais. O simulador mant\u00e9m as condi\u00e7\u00f5es, fonte, per\u00edodo e \u00e2mbito pr\u00f3prios; condi\u00e7\u00f5es ausentes permanecem indeterminadas."
},
"complements": []
},
"results": [
{
"id": "2f494a79-71e0-4ed9-a2b1-51b6b60987c4",
"source_key": "f840ebc37a03761ad285d6c22abfc1a5383f2ec87433c0690472420abd21baea",
"draft_id": "b1c4e61e-1d8e-49bc-9f12-7bc1fea93724",
"draft_version": 1,
"snapshot_sha256": "47f89ac2f2882e4adc27a74e2cd0a986f612b0779f2f5f6a7774d3734ba70ea2",
"financial_snapshot": "{\"version\":1,\"data\":{\"budgetPeriod\":\"Mensal\",\"loan\":{\"principal\":\"100000\",\"rate\":\"0\",\"months\":\"24\",\"rateType\":\"nominal\",\"periodMonths\":\"1\",\"gracePeriods\":\"0\",\"upfrontFee\":\"0\",\"recurringFee\":\"0\"},\"breakEven\":{\"fixed\":\"3000\",\"price\":\"100\",\"variable\":\"50\"},\"funding\":{\"total\":\"100000\",\"secured\":\"30000\"},\"incomes\":[{\"label\":\"Synthetic scenario revenue\",\"amount\":\"10000\"}],\"expenses\":[{\"label\":\"Declared rent at synthetic province\",\"amount\":\"2000\"},{\"label\":\"Declared transport at synthetic province\",\"amount\":\"1000\"}]}}",
"context_opportunity": null,
"currency": "MZN",
"engine": "financial-calculators:v1",
"kind": "local_calculation_inputs",
"context_state": "current",
"context_revision": 1,
"context_dependency_hash": "7c4eca9a9377b1c42478becca10e833db253fe5abb566731a9d9bb0a6ba72baf",
"recorded_at": "2026-11-14T18:07:20+00:00"
}
],
"requests": [],
"documents": [],
"fiscal_reports": [],
"land_report": null,
"preparation_report": null,
"company_reports": [],
"zone_contexts": [],
"sector_contexts": [],
"sector_references": [],
"content_sources": [],
"tasks": [],
"services": [],
"tools": {
"funding": "\/fundos?kind=institution&location_mode=physical&context=d51a3c8b-6210-4d2a-93ec-17ee61452e79",
"simulator": "\/simulador-fiscal?context=d51a3c8b-6210-4d2a-93ec-17ee61452e79&draft=b1c4e61e-1d8e-49bc-9f12-7bc1fea93724",
"preparation": null,
"company": "\/investimentos\/d51a3c8b-6210-4d2a-93ec-17ee61452e79\/forma-juridica",
"desk": "\/balcao-virtual\/dossiers\/d51a3c8b-6210-4d2a-93ec-17ee61452e79",
"guidance": "\/balcao-virtual\/dossiers\/d51a3c8b-6210-4d2a-93ec-17ee61452e79\/orientacao",
"library": "\/documentos?context=d51a3c8b-6210-4d2a-93ec-17ee61452e79",
"opportunities": "\/oportunidades?context=d51a3c8b-6210-4d2a-93ec-17ee61452e79",
"territory": "\/zonas?context=d51a3c8b-6210-4d2a-93ec-17ee61452e79",
"partners": "\/parcerias\/painel?context=d51a3c8b-6210-4d2a-93ec-17ee61452e79",
"land": "\/investidor\/terra-duat\/novo?context=d51a3c8b-6210-4d2a-93ec-17ee61452e79"
}
},
"saved": {
"project_title": "Synthetic acquisition acceptance",
"currency": "MZN",
"project_summary": "Existing company description to reuse once in investment preparation.",
"province_id": "855412e5-27b2-4e0f-90e2-c690e2698ae3",
"journey_type": "investor",
"purpose": "simulate_only",
"context_applicability_snapshot": "{\"version\":1,\"context_revision\":1,\"consumer_opportunity\":null,\"portfolio_origin\":null,\"zone\":null,\"provenance\":{\"project_title\":{\"kind\":\"dossier\",\"id\":\"d51a3c8b-6210-4d2a-93ec-17ee61452e79\",\"version\":2},\"currency\":{\"kind\":\"process_declaration\",\"actor_id\":126,\"context_revision\":1},\"project_summary\":{\"key\":\"opportunity:28\",\"kind\":\"opportunity\",\"id\":\"28\",\"title\":\"Synthetic acquisition acceptance\",\"version\":5,\"href\":\"\\\/minhas-oportunidades\\\/ofertas\\\/28\",\"documents\":[],\"visibility\":\"private\",\"state\":\"approved\",\"sha256\":\"54f87633f70b4b840a9b5ed445e8b437f7dd6c21097119b0324d79b0322dfce3\"},\"province\":{\"key\":\"opportunity:28\",\"kind\":\"opportunity\",\"id\":\"28\",\"title\":\"Synthetic acquisition acceptance\",\"version\":5,\"href\":\"\\\/minhas-oportunidades\\\/ofertas\\\/28\",\"documents\":[],\"visibility\":\"private\",\"state\":\"approved\",\"sha256\":\"54f87633f70b4b840a9b5ed445e8b437f7dd6c21097119b0324d79b0322dfce3\"},\"province_id\":{\"key\":\"opportunity:28\",\"kind\":\"opportunity\",\"id\":\"28\",\"title\":\"Synthetic acquisition acceptance\",\"version\":5,\"href\":\"\\\/minhas-oportunidades\\\/ofertas\\\/28\",\"documents\":[],\"visibility\":\"private\",\"state\":\"approved\",\"sha256\":\"54f87633f70b4b840a9b5ed445e8b437f7dd6c21097119b0324d79b0322dfce3\"},\"location\":{\"key\":\"opportunity:28\",\"kind\":\"opportunity\",\"id\":\"28\",\"title\":\"Synthetic acquisition acceptance\",\"version\":5,\"href\":\"\\\/minhas-oportunidades\\\/ofertas\\\/28\",\"documents\":[],\"visibility\":\"private\",\"state\":\"approved\",\"sha256\":\"54f87633f70b4b840a9b5ed445e8b437f7dd6c21097119b0324d79b0322dfce3\"}},\"opportunity_choices\":[],\"complements\":[],\"requirements_assessment\":{\"version\":\"context-requirements-20261023\",\"requirements\":[],\"fiscal_notice\":\"Localiza\u00e7\u00e3o, corredor, cluster ou projecto \u00e2ncora n\u00e3o activam benef\u00edcios fiscais. O simulador mant\u00e9m as condi\u00e7\u00f5es, fonte, per\u00edodo e \u00e2mbito pr\u00f3prios; condi\u00e7\u00f5es ausentes permanecem indeterminadas.\"},\"path\":{\"definition_id\":\"61000919-0000-4000-8000-000000000001\",\"definition_version\":1,\"source_sha256\":\"aa13c53138ec15cd808de43d9dc2fc6808da86943d09d3352c9dd0944bdae364\",\"steps\":[{\"code\":\"S10\",\"title\":\"Regulariza\u00e7\u00e3o da terra\",\"state\":\"not_started\",\"applicability\":\"undetermined\",\"reason\":\"\",\"context_review_required\":false},{\"code\":\"S13\",\"title\":\"Dilig\u00eancia e negocia\u00e7\u00e3o financeira\",\"state\":\"not_started\",\"applicability\":\"undetermined\",\"reason\":\"\",\"context_review_required\":true},{\"code\":\"S14\",\"title\":\"Decis\u00e3o do financiador\",\"state\":\"not_started\",\"applicability\":\"undetermined\",\"reason\":\"\",\"context_review_required\":true},{\"code\":\"S15\",\"title\":\"Fecho e desembolso\",\"state\":\"not_started\",\"applicability\":\"undetermined\",\"reason\":\"\",\"context_review_required\":true}]},\"land_preparation\":{\"need\":\"unknown\",\"reason\":\"\"},\"field_provenance\":{\"project_title\":{\"kind\":\"dossier\",\"version\":2},\"currency\":{\"kind\":\"process_declaration\",\"context_revision\":1},\"project_summary\":{\"kind\":\"opportunity\",\"title\":\"Synthetic acquisition acceptance\",\"version\":5},\"province\":{\"kind\":\"opportunity\",\"title\":\"Synthetic acquisition acceptance\",\"version\":5},\"province_id\":{\"kind\":\"opportunity\",\"title\":\"Synthetic acquisition acceptance\",\"version\":5},\"location\":{\"kind\":\"opportunity\",\"title\":\"Synthetic acquisition acceptance\",\"version\":5}},\"preparation\":null,\"fields\":{\"investment_regime\":\"general\",\"currency\":\"MZN\"},\"notice\":\"Refer\u00eancias e declara\u00e7\u00f5es para prepara\u00e7\u00e3o; sem reconhecimento autom\u00e1tico de elegibilidade ou benef\u00edcio.\"}",
"financial_tools_snapshot": "{\"version\":1,\"data\":{\"budgetPeriod\":\"Mensal\",\"loan\":{\"principal\":\"100000\",\"rate\":\"0\",\"months\":\"24\",\"rateType\":\"nominal\",\"periodMonths\":\"1\",\"gracePeriods\":\"0\",\"upfrontFee\":\"0\",\"recurringFee\":\"0\"},\"breakEven\":{\"fixed\":\"3000\",\"price\":\"100\",\"variable\":\"50\"},\"funding\":{\"total\":\"100000\",\"secured\":\"30000\"},\"incomes\":[{\"label\":\"Synthetic scenario revenue\",\"amount\":\"10000\"}],\"expenses\":[{\"label\":\"Declared rent at synthetic province\",\"amount\":\"2000\"},{\"label\":\"Declared transport at synthetic province\",\"amount\":\"1000\"}]}}"
}
}
@@ -0,0 +1 @@
{"tool":"phpstan","result":"passed","errors":0}
@@ -0,0 +1,324 @@
> build
> vp build
[plugin @laravel/vite-plugin-wayfinder] Types generated for actions, routes, form variants
npm.cmd : [plugin laravel:fonts] Optimized font fallbacks require the optional "fontaine" package. Install it, or set
"optimizedFallbacks: false" on your fonts to disable the feature.
At line:9 char:444
+ ... _BUILD='0'; npm.cmd run build *> outputs/offers-exact-install-2026111 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ([plugin laravel...le the feature.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
transforming...
✓ 2849 modules transformed.
rendering chunks...
computing gzip size...
public/build/assets/layers-BWBAp2CZ.png 0.69 kB
public/build/assets/layers-2x-Bpkbi35X.png 1.25 kB
public/build/assets/marker-icon-hN30_KVU.png 1.46 kB
public/build/fonts-manifest.json 5.74 kB │ gzip: 0.71 kB
public/build/assets/instrument-sans-400-normal-DRC__1Mx.woff2 16.86 kB
public/build/assets/instrument-sans-500-normal-Dk9ku72i.woff2 17.23 kB
public/build/assets/instrument-sans-600-normal-B7fBEWYG.woff2 17.40 kB
public/build/assets/instrument-sans-400-normal-D1W7dsQl.woff 21.24 kB
public/build/assets/instrument-sans-500-normal-Z6ESRlEs.woff 21.65 kB
public/build/assets/instrument-sans-600-normal-B9e8oLYv.woff 21.67 kB
public/build/manifest.json 114.69 kB │ gzip: 12.01 kB
public/build/assets/fonts-C9MNnjVw.css 2.35 kB │ gzip: 0.38 kB
public/build/assets/investment-catalogue-WaRR19FV.css 8.15 kB │ gzip: 2.00 kB
public/build/assets/interactive-investment-map-1DTFk8zz.css 10.57 kB │ gzip: 2.63 kB
public/build/assets/app-UznX-FqS.css 157.42 kB │ gzip: 25.28 kB
public/build/assets/input-text-BlEFHnL-.js 0.09 kB │ gzip: 0.10 kB
public/build/assets/check-PcBNn_NG.js 0.12 kB │ gzip: 0.14 kB
public/build/assets/company-comparison-qLTgpXjz.js 0.12 kB │ gzip: 0.13 kB
public/build/assets/chevron-down-Bjkqe1aH.js 0.12 kB │ gzip: 0.14 kB
public/build/assets/chevron-right-K0fOEtTQ.js 0.12 kB │ gzip: 0.14 kB
public/build/assets/display-value-DRR1EAAK.js 0.13 kB │ gzip: 0.12 kB
public/build/assets/value-text-BztaYdGl.js 0.14 kB │ gzip: 0.12 kB
public/build/assets/loader-circle-DS8Tf4er.js 0.14 kB │ gzip: 0.15 kB
public/build/assets/shared-B-QpuOU2.js 0.15 kB │ gzip: 0.13 kB
public/build/assets/arrow-left-DMVHIw8Z.js 0.16 kB │ gzip: 0.16 kB
public/build/assets/arrow-up-right-BIVouzdL.js 0.16 kB │ gzip: 0.15 kB
public/build/assets/search-BRvPeo47.js 0.17 kB │ gzip: 0.16 kB
public/build/assets/circle-check-DckzuBoW.js 0.17 kB │ gzip: 0.16 kB
public/build/assets/product-usage-CHhCL93_.js 0.18 kB │ gzip: 0.17 kB
public/build/assets/editorial-states-Bc7NQzsj.js 0.19 kB │ gzip: 0.16 kB
public/build/assets/types-BoD_IJFv.js 0.19 kB │ gzip: 0.16 kB
public/build/assets/participation-identity-BWabb4yN.js 0.24 kB │ gzip: 0.18 kB
public/build/assets/circle-alert-uV7omYjr.js 0.24 kB │ gzip: 0.18 kB
public/build/assets/eye-CmcEBfxN.js 0.25 kB │ gzip: 0.20 kB
public/build/assets/log-in-Wgc8VLfq.js 0.25 kB │ gzip: 0.22 kB
public/build/assets/partnership-history-CfclSLAo.js 0.27 kB │ gzip: 0.19 kB
public/build/assets/compiler-runtime-sKsOXjDo.js 0.27 kB │ gzip: 0.23 kB
public/build/assets/file-text-CEJtuNfp.js 0.33 kB │ gzip: 0.21 kB
public/build/assets/confirm-Culw9Q-x.js 0.36 kB │ gzip: 0.22 kB
public/build/assets/text-link-BBvcP60s.js 0.40 kB │ gzip: 0.27 kB
public/build/assets/content-management-entry-C_oY4VyW.js 0.42 kB │ gzip: 0.31 kB
public/build/assets/handshake-YqyTTm3a.js 0.44 kB │ gzip: 0.28 kB
public/build/assets/investment-guides-DO58L8zr.js 0.45 kB │ gzip: 0.26 kB
public/build/assets/catalogue-context-1vQ0-xK7.js 0.47 kB │ gzip: 0.30 kB
public/build/assets/operation-key-Dr4VtGxa.js 0.51 kB │ gzip: 0.35 kB
public/build/assets/spinner-Dmx1j41V.js 0.52 kB │ gzip: 0.36 kB
public/build/assets/types-Cxp_Nskt.js 0.55 kB │ gzip: 0.32 kB
public/build/assets/sliders-horizontal-D-4FqAHA.js 0.58 kB │ gzip: 0.26 kB
public/build/assets/page-preparation-guard-B-OckhBt.js 0.59 kB │ gzip: 0.35 kB
public/build/assets/portal-presentation-fH7FShU8.js 0.62 kB │ gzip: 0.38 kB
public/build/assets/confidentiality-C2eqbRBb.js 0.64 kB │ gzip: 0.41 kB
public/build/assets/dist-RzQD0wUd.js 0.68 kB │ gzip: 0.43 kB
public/build/assets/dist-qw3FPjRO.js 0.74 kB │ gzip: 0.49 kB
public/build/assets/labels-DxqjesIG.js 0.74 kB │ gzip: 0.46 kB
public/build/assets/wayfinder-Dp7PqxvV.js 0.89 kB │ gzip: 0.53 kB
public/build/assets/createLucideIcon-oMeAlXbs.js 0.95 kB │ gzip: 0.56 kB
public/build/assets/use-interest-draft-waHUBAew.js 0.99 kB │ gzip: 0.51 kB
public/build/assets/context-documents-Bh7vrWBo.js 1.01 kB │ gzip: 0.57 kB
public/build/assets/label-Dpfg_IeY.js 1.02 kB │ gzip: 0.62 kB
public/build/assets/technical-incident-labels-DlL6bSeE.js 1.02 kB │ gzip: 0.51 kB
public/build/assets/investment-consumer-identity-Cxp_hGfX.js 1.07 kB │ gzip: 0.59 kB
public/build/assets/article-Bp95nIri.js 1.08 kB │ gzip: 0.65 kB
public/build/assets/search-state-RHLy6yI7.js 1.10 kB │ gzip: 0.68 kB
public/build/assets/rolldown-runtime-Dd_uD5pT.js 1.10 kB │ gzip: 0.62 kB
public/build/assets/catalogue-investment-map-C5u-ZS7q.js 1.12 kB │ gzip: 0.62 kB
public/build/assets/investment-contexts-BQGiwu9n.js 1.17 kB │ gzip: 0.60 kB
public/build/assets/profile-json-Bza-VQzw.js 1.20 kB │ gzip: 0.72 kB
public/build/assets/document-COw_wOdO.js 1.23 kB │ gzip: 0.72 kB
public/build/assets/shared-JTxA6RNb.js 1.24 kB │ gzip: 0.74 kB
public/build/assets/public-detail-3AU70Dv-.js 1.25 kB │ gzip: 0.72 kB
public/build/assets/demographic-context-BMdtlxjJ.js 1.27 kB │ gzip: 0.73 kB
public/build/assets/public-offer-card-BDRgf7-u.js 1.30 kB │ gzip: 0.70 kB
public/build/assets/input-BJ-Jg-jz.js 1.37 kB │ gzip: 0.75 kB
public/build/assets/cluster-competitiveness-hNV0FaaW.js 1.37 kB │ gzip: 0.73 kB
public/build/assets/verify-email-DLyeS-ky.js 1.40 kB │ gzip: 0.74 kB
public/build/assets/business-types-SGCXhH6X.js 1.47 kB │ gzip: 0.75 kB
public/build/assets/verification-BOcn3HIw.js 1.48 kB │ gzip: 0.52 kB
public/build/assets/country-select-4uP5BvMf.js 1.49 kB │ gzip: 0.78 kB
public/build/assets/territorial-source-evidence-eKB4ZB36.js 1.53 kB │ gzip: 0.83 kB
public/build/assets/manage-rHtSD5LS.js 1.56 kB │ gzip: 0.74 kB
public/build/assets/educational-article-card-0rCqZ1kX.js 1.59 kB │ gzip: 0.72 kB
public/build/assets/partnership-source-links-VfrXk2FZ.js 1.65 kB │ gzip: 0.91 kB
public/build/assets/catalogue-BtBt9fvW.js 1.78 kB │ gzip: 0.96 kB
public/build/assets/technical-incident-notice-CjziWA6m.js 1.79 kB │ gzip: 0.89 kB
public/build/assets/report-DRxtlCFu.js 1.80 kB │ gzip: 0.93 kB
public/build/assets/preparation-index-CdgPdpQ-.js 1.87 kB │ gzip: 0.89 kB
public/build/assets/opportunity-technical-incidents-C4aVbut7.js 1.88 kB │ gzip: 0.98 kB
public/build/assets/password-input-DdsNob7W.js 1.89 kB │ gzip: 1.06 kB
public/build/assets/passkey-verify-Xyqvu_s4.js 2.04 kB │ gzip: 1.15 kB
public/build/assets/public-record-offline-BmjvnSLE.js 2.07 kB │ gzip: 1.22 kB
public/build/assets/investors-Di6y94fY.js 2.09 kB │ gzip: 1.15 kB
public/build/assets/forgot-password-yYaDq9Uu.js 2.10 kB │ gzip: 0.98 kB
public/build/assets/sources-HCmnzcAX.js 2.13 kB │ gzip: 1.12 kB
public/build/assets/saved-wal8Mb1T.js 2.21 kB │ gzip: 1.11 kB
public/build/assets/zone-map-oV9KEwxY.js 2.26 kB │ gzip: 1.16 kB
public/build/assets/appearance-BP-b3aFc.js 2.36 kB │ gzip: 1.14 kB
public/build/assets/shared-CBJ3c_x-.js 2.37 kB │ gzip: 1.24 kB
public/build/assets/editorial-subjects-C6_MfRSK.js 2.38 kB │ gzip: 1.14 kB
public/build/assets/context-installation-D9SIQHPi.js 2.39 kB │ gzip: 1.23 kB
public/build/assets/workspace-4_R1CLYI.js 2.40 kB │ gzip: 1.20 kB
public/build/assets/reset-password-D-TXit1d.js 2.43 kB │ gzip: 0.98 kB
public/build/assets/public-document-content-BHvs9J7S.js 2.47 kB │ gzip: 0.80 kB
public/build/assets/manage-h1Vaw3Xs.js 2.47 kB │ gzip: 1.10 kB
public/build/assets/confirm-password-Bz70GAZg.js 2.47 kB │ gzip: 1.06 kB
public/build/assets/structures-Dr2nXdub.js 2.49 kB │ gzip: 1.35 kB
public/build/assets/bootstrap-confirmation-9RmA5-Yz.js 2.55 kB │ gzip: 1.19 kB
public/build/assets/territory-associations-ODVIHiZU.js 2.55 kB │ gzip: 1.11 kB
public/build/assets/installation-Dly8Xg6e.js 2.59 kB │ gzip: 1.28 kB
public/build/assets/technical-support-DlW3Jv7q.js 2.60 kB │ gzip: 1.18 kB
public/build/assets/management-CvdeRZYq.js 2.68 kB │ gzip: 1.18 kB
public/build/assets/experiments-DitFKzM4.js 2.73 kB │ gzip: 1.31 kB
public/build/assets/password-CB_NxgQN.js 2.73 kB │ gzip: 0.73 kB
public/build/assets/opportunity-install-B232n6lM.js 2.75 kB │ gzip: 1.34 kB
public/build/assets/dist-BobFCjoG.js 2.92 kB │ gzip: 1.29 kB
public/build/assets/offer-navigation-DLl-_mMp.js 2.98 kB │ gzip: 1.11 kB
public/build/assets/portal-api-CpQBRfcu.js 2.98 kB │ gzip: 1.50 kB
public/build/assets/two-factor-challenge-DXHJ-XjZ.js 3.24 kB │ gzip: 1.52 kB
public/build/assets/territory-geometry-preview-TlklAYvq.js 3.25 kB │ gzip: 1.47 kB
public/build/assets/workspace-D6eSwMPE.js 3.29 kB │ gzip: 1.44 kB
public/build/assets/partnership-agreement-instrument-CCnuZNBy.js 3.43 kB │ gzip: 1.49 kB
public/build/assets/funding-classification-DxK67Gr_.js 3.44 kB │ gzip: 1.64 kB
public/build/assets/guide-mndEuKFT.js 3.45 kB │ gzip: 1.43 kB
public/build/assets/history-DSPDM8gM.js 3.46 kB │ gzip: 1.70 kB
public/build/assets/audit-Xdo8qR4z.js 3.51 kB │ gzip: 1.69 kB
public/build/assets/show-D0mDuHqC.js 3.60 kB │ gzip: 1.82 kB
public/build/assets/demography-D_JHlax_.js 3.70 kB │ gzip: 1.79 kB
public/build/assets/corridor-agribusiness-BcIVf-hW.js 3.72 kB │ gzip: 1.53 kB
public/build/assets/business-opportunity-CNz7NAr0.js 3.73 kB │ gzip: 1.63 kB
public/build/assets/management-access-D4VE9LUB.js 3.75 kB │ gzip: 1.43 kB
public/build/assets/businesses-QQGbugDY.js 3.76 kB │ gzip: 1.57 kB
public/build/assets/editorial-reading-DUFQmJtD.js 3.89 kB │ gzip: 1.68 kB
public/build/assets/catalog-B6dpdVsW.js 3.95 kB │ gzip: 1.51 kB
public/build/assets/desk-assignments-CfWpiIpK.js 3.99 kB │ gzip: 1.95 kB
public/build/assets/dashboard-CxoTLkSg.js 3.99 kB │ gzip: 1.61 kB
public/build/assets/investment-context-cards-gJe_oyxw.js 4.05 kB │ gzip: 1.84 kB
public/build/assets/shared-B4FWNTYh.js 4.09 kB │ gzip: 2.05 kB
public/build/assets/opportunity-contact-form-Cb6iDQ1U.js 4.10 kB │ gzip: 1.67 kB
public/build/assets/demographic-evidence-DGwOnf5g.js 4.38 kB │ gzip: 1.84 kB
public/build/assets/conversation-BxjnUMLV.js 4.42 kB │ gzip: 1.95 kB
public/build/assets/portfolio-5GQ_KZiC.js 4.45 kB │ gzip: 1.74 kB
public/build/assets/reference-DUYC0k47.js 4.46 kB │ gzip: 2.00 kB
public/build/assets/territory-geometry-import-BnSl5jzG.js 4.49 kB │ gzip: 1.90 kB
public/build/assets/opportunity-origin-D3o6OTRg.js 4.64 kB │ gzip: 2.07 kB
public/build/assets/context-inheritance-dd0VgP8h.js 4.64 kB │ gzip: 2.00 kB
public/build/assets/installation-CnslW5oi.js 4.67 kB │ gzip: 1.95 kB
public/build/assets/opportunities-YsMGMCR_.js 4.73 kB │ gzip: 1.77 kB
public/build/assets/references-Dpnc1rzq.js 4.79 kB │ gzip: 2.22 kB
public/build/assets/offer-confidential-access-Bu9EgZ3d.js 4.83 kB │ gzip: 1.91 kB
public/build/assets/opportunity-curation-7Gt2cWer.js 4.88 kB │ gzip: 2.04 kB
public/build/assets/business-verifications-CrRulyQa.js 4.90 kB │ gzip: 1.72 kB
public/build/assets/crm-edit-comparison-Db53T7I7.js 4.91 kB │ gzip: 1.99 kB
public/build/assets/investment-complements-CqmFjvBN.js 5.00 kB │ gzip: 2.05 kB
public/build/assets/service-CbUB6_Ll.js 5.05 kB │ gzip: 2.33 kB
public/build/assets/agreement-history-BfSa8E7Q.js 5.13 kB │ gzip: 2.10 kB
public/build/assets/catalogue-DY6Wy5Cg.js 5.13 kB │ gzip: 2.54 kB
public/build/assets/workspace-BeyUwWtD.js 5.20 kB │ gzip: 2.18 kB
public/build/assets/article-editor-ByLxbPbJ.js 5.25 kB │ gzip: 2.20 kB
public/build/assets/context-start-hE9CWWCV.js 5.46 kB │ gzip: 2.10 kB
public/build/assets/economic-references-C7dNVUC6.js 5.61 kB │ gzip: 2.52 kB
public/build/assets/convert-B3LtI2n6.js 5.81 kB │ gzip: 2.40 kB
public/build/assets/editorial-subject-form-B2W8E2NJ.js 5.87 kB │ gzip: 2.66 kB
public/build/assets/public-sector-cards-Esb1aTm6.js 5.94 kB │ gzip: 2.55 kB
public/build/assets/demography-install-B57rikBv.js 6.05 kB │ gzip: 2.50 kB
public/build/assets/context-to-HP9u9.js 6.06 kB │ gzip: 2.65 kB
public/build/assets/request-BUGHIRJq.js 6.10 kB │ gzip: 2.41 kB
public/build/assets/structure-geography-lV-3bl6R.js 6.12 kB │ gzip: 2.22 kB
public/build/assets/editorial-workflow-DYYZzXOw.js 6.22 kB │ gzip: 2.29 kB
public/build/assets/investment-map-panel-BXYumzxQ.js 6.27 kB │ gzip: 2.88 kB
public/build/assets/procurement-B_QkirDu.js 6.35 kB │ gzip: 2.73 kB
public/build/assets/register-CSFi8mO-.js 6.43 kB │ gzip: 2.71 kB
public/build/assets/funding-BPHyNawC.js 6.49 kB │ gzip: 2.00 kB
public/build/assets/leads-Bu2UK8ON.js 6.56 kB │ gzip: 2.82 kB
public/build/assets/business-marketplace-DfUAwAmq.js 6.59 kB │ gzip: 2.51 kB
public/build/assets/interest-xqtiIFPC.js 6.63 kB │ gzip: 2.23 kB
public/build/assets/demography-BxaBdOBx.js 6.66 kB │ gzip: 2.51 kB
public/build/assets/fiscal-qa-review-CEzw2OQP.js 6.75 kB │ gzip: 2.70 kB
public/build/assets/business-interest-fAZE_Pbt.js 6.82 kB │ gzip: 2.60 kB
public/build/assets/interests-BcpPowrJ.js 6.83 kB │ gzip: 2.78 kB
public/build/assets/catalogue-j9LhZ6Oa.js 6.84 kB │ gzip: 2.82 kB
public/build/assets/company-comparison-BwxGUPs3.js 6.92 kB │ gzip: 2.60 kB
public/build/assets/business-classification-Bu0hQkg7.js 7.01 kB │ gzip: 2.57 kB
public/build/assets/dist-Ddn_hEUd.js 7.02 kB │ gzip: 2.71 kB
public/build/assets/blank-2jFZEe2q.js 7.07 kB │ gzip: 2.77 kB
public/build/assets/analysis--82QOZav.js 7.11 kB │ gzip: 2.96 kB
public/build/assets/profile-DWCNp6hP.js 7.19 kB │ gzip: 2.47 kB
public/build/assets/install-DfaXd1NZ.js 7.23 kB │ gzip: 3.03 kB
public/build/assets/investor-COYuuRY_.js 7.30 kB │ gzip: 2.89 kB
public/build/assets/investor-path-CSExMjAt.js 7.36 kB │ gzip: 3.02 kB
public/build/assets/proactive-supply-review-Bspf5LP7.js 7.55 kB │ gzip: 2.73 kB
public/build/assets/legacy-Cgz97_0u.js 7.67 kB │ gzip: 2.56 kB
public/build/assets/jsx-runtime-BpzPEenQ.js 7.89 kB │ gzip: 2.99 kB
public/build/assets/shared-BFCbvJo7.js 7.90 kB │ gzip: 3.08 kB
public/build/assets/business-objects-DfCgkko7.js 7.95 kB │ gzip: 2.57 kB
public/build/assets/assisted-BH08iYu-.js 8.06 kB │ gzip: 3.16 kB
public/build/assets/value-network-Cp8UYtMs.js 8.06 kB │ gzip: 3.08 kB
public/build/assets/editor-d2dUaWdK.js 8.21 kB │ gzip: 2.97 kB
public/build/assets/territorial-editorial-B0ni24WA.js 8.22 kB │ gzip: 3.03 kB
public/build/assets/opportunity-promotion-CyWpImc1.js 8.40 kB │ gzip: 2.96 kB
public/build/assets/publication-history-DfLO6jOc.js 8.42 kB │ gzip: 3.02 kB
public/build/assets/print-Tn3aXHlY.js 8.66 kB │ gzip: 3.55 kB
public/build/assets/dialog-BY5pP6XP.js 8.81 kB │ gzip: 2.76 kB
public/build/assets/shared-DXIXdF9G.js 8.92 kB │ gzip: 3.83 kB
public/build/assets/iva-modelo-a-CNylSdBc.js 8.94 kB │ gzip: 3.27 kB
public/build/assets/zone-relations-DYVN38G6.js 8.95 kB │ gzip: 2.99 kB
public/build/assets/investment-territory-CoaAvOfZ.js 8.96 kB │ gzip: 3.43 kB
public/build/assets/similar-businesses-HTwQGVGQ.js 9.11 kB │ gzip: 3.58 kB
public/build/assets/interactive-investment-map-C6RYkxx2.js 9.13 kB │ gzip: 3.60 kB
public/build/assets/investment-land-preparation-BHeC9B2U.js 9.15 kB │ gzip: 3.33 kB
public/build/assets/why-invest-BVa_hDq4.js 9.16 kB │ gzip: 3.49 kB
public/build/assets/interest-history-oHNykKmC.js 9.48 kB │ gzip: 3.45 kB
public/build/assets/content-hub-CdhSC7BG.js 9.95 kB │ gzip: 2.93 kB
public/build/assets/privacy-policy-LI1lpUCK.js 10.36 kB │ gzip: 3.07 kB
public/build/assets/editorial-edition-Zq39X7mf.js 10.36 kB │ gzip: 3.47 kB
public/build/assets/panel-la1QJ_S6.js 10.46 kB │ gzip: 4.30 kB
public/build/assets/result-yez5wOFo.js 10.57 kB │ gzip: 4.73 kB
public/build/assets/dashboard-TckpOQI6.js 10.92 kB │ gzip: 3.47 kB
public/build/assets/zone-attachments-DS2XtuU6.js 10.94 kB │ gzip: 2.75 kB
public/build/assets/business-DjxEhMj7.js 11.10 kB │ gzip: 3.09 kB
public/build/assets/detail-Y-uQOHvE.js 11.73 kB │ gzip: 4.31 kB
public/build/assets/login-DSqCNzQj.js 11.89 kB │ gzip: 4.92 kB
public/build/assets/support-installation-tsBpnQkP.js 12.36 kB │ gzip: 4.86 kB
public/build/assets/show-DOVW9TBF.js 12.37 kB │ gzip: 3.99 kB
public/build/assets/tempo-brand-BXcnRsyn.js 12.38 kB │ gzip: 5.01 kB
public/build/assets/show-cuRBkf3d.js 12.40 kB │ gzip: 4.39 kB
public/build/assets/guide-B9b6jazd.js 12.58 kB │ gzip: 4.03 kB
public/build/assets/contact-7Fur8Mlo.js 12.65 kB │ gzip: 4.33 kB
public/build/assets/project-dossier-document-BLKfe4tL.js 12.68 kB │ gzip: 5.20 kB
public/build/assets/dossier-prefill-CkDZdN8F.js 12.72 kB │ gzip: 4.64 kB
public/build/assets/technical-incident-GDB_x0wp.js 12.73 kB │ gzip: 4.96 kB
public/build/assets/competitiveness-60nqrOfg.js 12.74 kB │ gzip: 4.23 kB
public/build/assets/editor-BHONLvty.js 12.91 kB │ gzip: 3.75 kB
public/build/assets/fiscal-forms-CElK0P88.js 13.04 kB │ gzip: 4.75 kB
public/build/assets/opportunity-classification-Dm_W66ep.js 13.44 kB │ gzip: 4.55 kB
public/build/assets/react-CjVep8xp.js 13.90 kB │ gzip: 4.61 kB
public/build/assets/opportunity-search-filters-BwOuTqi6.js 14.74 kB │ gzip: 4.72 kB
public/build/assets/case-wwTeoOmv.js 14.77 kB │ gzip: 5.38 kB
public/build/assets/product-usage-BMGM5Fsp.js 14.81 kB │ gzip: 5.30 kB
public/build/assets/company-preparation-Cvt3Dsqm.js 15.17 kB │ gzip: 4.92 kB
public/build/assets/terms-of-use-CUQdwKes.js 15.27 kB │ gzip: 4.20 kB
public/build/assets/edit-C3UH5lGB.js 15.38 kB │ gzip: 5.15 kB
public/build/assets/relationship-repair-brZoqSge.js 16.29 kB │ gzip: 5.62 kB
public/build/assets/edit-DpqBs8fP.js 16.60 kB │ gzip: 4.88 kB
public/build/assets/edit-CUKYr1QN.js 16.93 kB │ gzip: 4.91 kB
public/build/assets/search-DHadj8Kw.js 17.16 kB │ gzip: 5.69 kB
public/build/assets/funding-institution-DsJ7OfOI.js 17.24 kB │ gzip: 5.83 kB
public/build/assets/use-two-factor-auth-D9w0KtSq.js 17.31 kB │ gzip: 6.30 kB
public/build/assets/administration-CgUGyaX7.js 17.41 kB │ gzip: 4.30 kB
public/build/assets/notifications-3_Mc-VMV.js 17.61 kB │ gzip: 5.83 kB
public/build/assets/ai-BjK1MByI.js 18.08 kB │ gzip: 6.92 kB
public/build/assets/project-dossier-report-BiY2DIQg.js 18.98 kB │ gzip: 6.95 kB
public/build/assets/submission-B_ilbHzj.js 19.99 kB │ gzip: 6.32 kB
public/build/assets/opportunity-resources-CHCOX5-_.js 20.20 kB │ gzip: 7.22 kB
public/build/assets/about-BtlawfeW.js 20.95 kB │ gzip: 7.03 kB
public/build/assets/zones-OjzXPNvW.js 21.16 kB │ gzip: 5.22 kB
public/build/assets/service-editor-DNfxjEmc.js 21.30 kB │ gzip: 6.58 kB
public/build/assets/context-DLdtN62b.js 21.56 kB │ gzip: 6.99 kB
public/build/assets/declaration-Bzl3lixx.js 22.15 kB │ gzip: 7.14 kB
public/build/assets/Combination-BBDI-RbM.js 23.03 kB │ gzip: 8.24 kB
public/build/assets/desk-internal-operations-DrgSmbnS.js 23.14 kB │ gzip: 6.54 kB
public/build/assets/education-BsVVdx6J.js 23.40 kB │ gzip: 8.19 kB
public/build/assets/investment-opportunity-choices-DI6ST39H.js 24.28 kB │ gzip: 8.06 kB
public/build/assets/preparation-CykIAPcD.js 24.56 kB │ gzip: 6.73 kB
public/build/assets/utils-CCDJ05Ll.js 27.31 kB │ gzip: 8.71 kB
public/build/assets/business-wizard-BTqJxN9S.js 28.60 kB │ gzip: 9.42 kB
public/build/assets/proactive-investment-DfIQuXvs.js 28.65 kB │ gzip: 9.16 kB
public/build/assets/lead-vUXgd2g8.js 29.03 kB │ gzip: 9.96 kB
public/build/assets/preparation-ChwKCAm0.js 29.25 kB │ gzip: 8.51 kB
public/build/assets/form-G3wES2VJ.js 29.80 kB │ gzip: 8.04 kB
public/build/assets/profile-MnSD-8CY.js 30.71 kB │ gzip: 9.33 kB
public/build/assets/welcome-DS4fmTKK.js 30.73 kB │ gzip: 6.49 kB
public/build/assets/manage-GV_WvYCX.js 31.17 kB │ gzip: 7.63 kB
public/build/assets/security-CY6Mu2UR.js 32.11 kB │ gzip: 10.06 kB
public/build/assets/editor-CWbYf7YK.js 35.03 kB │ gzip: 11.76 kB
public/build/assets/case-Bpi6HtJI.js 37.38 kB │ gzip: 10.33 kB
public/build/assets/room-Bg8k9V54.js 38.25 kB │ gzip: 12.14 kB
public/build/assets/simulation-form-CVV000gF.js 39.43 kB │ gzip: 10.27 kB
public/build/assets/request-B4WvIFJy.js 41.86 kB │ gzip: 11.29 kB
public/build/assets/detail-DtYLHmDW.js 46.42 kB │ gzip: 15.18 kB
public/build/assets/PortalInvestidor-BE-j5EhK.js 48.72 kB │ gzip: 14.86 kB
public/build/assets/business-financial-plan-s1uoiktr.js 49.19 kB │ gzip: 11.98 kB
public/build/assets/catalogue-bVIBH9Td.js 50.02 kB │ gzip: 16.10 kB
public/build/assets/dropdown-menu-DeBy_kF_.js 57.05 kB │ gzip: 19.02 kB
public/build/assets/zone-DkB12lZg.js 62.42 kB │ gzip: 15.63 kB
public/build/assets/show-Dzl53Tk_.js 68.49 kB │ gzip: 21.16 kB
public/build/assets/opportunity-draft-C9kNlVYV.js 70.65 kB │ gzip: 20.89 kB
public/build/assets/document-zip-bqFSTgG4.js 95.97 kB │ gzip: 28.50 kB
public/build/assets/app-wUAfzkDv.js 147.52 kB │ gzip: 45.59 kB
public/build/assets/leaflet-src-CUWrUTR2.js 148.82 kB │ gzip: 43.39 kB
public/build/assets/dist-BRfsww6z.js 307.99 kB │ gzip: 96.67 kB
public/build/assets/document-word-CqTGSyXu.js 403.66 kB │ gzip: 115.44 kB
public/build/assets/services-C4DSfyGy.js 965.96 kB │ gzip: 226.50 kB
public/build/assets/project-dossier-a3IvmE5B.js 1,009.94 kB │ gzip: 274.44 kB
✓ built in 32.12s
[plugin builtin:vite-reporter]
(!) Some chunks are larger than 500 kB after minification. Consider:
- Using dynamic import() to code-split the application
- Use build.rolldownOptions.output.codeSplitting to improve chunking:
https://rolldown.rs/reference/OutputOptions.codeSplitting
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
[PLUGIN_TIMINGS] Your build spent 98% of 32.1s inside plugin hooks (31.4s).
Measured inside the callback, so queue time is excluded and time the callback itself awaited is not:
- @rolldown/plugin-babel transform (61%, 19.7s, 412 calls)
- @laravel/vite-plugin-wayfinder buildStart (20%, 6.6s, 1 call)
- @tailwindcss/vite:generate:build transform (14%, 4.4s, 3 calls)
- vite:css transform (11%, 3.4s, 3 calls)
See https://rolldown.rs/reference/InputOptions.checks#plugintimings for more details.
@@ -0,0 +1 @@
{"tool":"phpunit","result":"passed","tests":28,"passed":28,"assertions":403,"duration_ms":266357}
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="CLI Arguments" tests="28" assertions="403" errors="0" failures="0" skipped="0" time="266.318700">
<testsuite name="Tests\Feature\PrivateOfferOperationsTest" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" tests="13" assertions="180" errors="0" failures="0" skipped="0" time="134.671764">
<testcase name="test_withdrawal_is_immediate_with_a_stale_form_and_excludes_every_public_consumer" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="104" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="16" time="17.786787"/>
<testcase name="test_reactivation_requires_a_new_exact_validation_and_does_not_resurrect_old_publication" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="122" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="21" time="18.507967"/>
<testcase name="test_withdrawal_during_review_can_be_reopened_by_the_owner_without_erasing_history" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="145" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="7" time="7.055661"/>
<testcase name="test_expiry_is_immediate_at_the_boundary_frozen_and_independent_of_nda_and_scheduler" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="158" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="16" time="8.647696"/>
<testcase name="test_no_deadline_is_invented_when_the_policy_is_pending" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="184" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="7" time="6.434084"/>
<testcase name="test_strangers_reviewers_wrong_scopes_and_auditors_cannot_withdraw_or_reactivate" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="195" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="8" time="4.959006"/>
<testcase name="test_reports_are_private_idempotent_and_treated_in_the_existing_dashboard_and_tasks" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="207" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="24" time="11.035164"/>
<testcase name="test_drafts_cannot_be_reported_by_unrelated_users_and_report_read_requires_current_scope_and_mfa" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="237" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="7" time="4.831239"/>
<testcase name="test_highlights_are_versioned_administrative_only_and_cannot_set_commercial_flags" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="250" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="12" time="6.810183"/>
<testcase name="test_a_withdrawn_first_draft_still_requires_its_first_editorial_validation" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="268" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="10" time="9.624057"/>
<testcase name="test_withdrawal_and_revalidation_do_not_restore_previous_nda_grants" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="280" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="16" time="17.343348"/>
<testcase name="test_operational_and_report_screens_use_real_compiled_entries_and_private_cache_headers" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="309" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="23" time="6.368529"/>
<testcase name="test_an_edited_private_approval_does_not_extend_the_existing_public_deadline" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferOperationsTest.php" line="332" class="Tests\Feature\PrivateOfferOperationsTest" classname="Tests.Feature.PrivateOfferOperationsTest" assertions="13" time="15.268044"/>
</testsuite>
<testsuite name="Tests\Feature\PrivateOfferConfidentialityTest" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" tests="11" assertions="161" errors="0" failures="0" skipped="0" time="106.681963">
<testcase name="test_confirmed_specific_fields_save_recover_and_bind_the_editorial_version" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" line="109" class="Tests\Feature\PrivateOfferConfidentialityTest" classname="Tests.Feature.PrivateOfferConfidentialityTest" assertions="9" time="7.920911"/>
<testcase name="test_property_fields_are_optional_and_categories_and_unknown_fields_are_enforced" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" line="120" class="Tests\Feature\PrivateOfferConfidentialityTest" classname="Tests.Feature.PrivateOfferConfidentialityTest" assertions="7" time="6.171176"/>
<testcase name="test_six_photos_limit_includes_restoration_and_alternate_routes_and_cleans_failed_uploads" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" line="131" class="Tests\Feature\PrivateOfferConfidentialityTest" classname="Tests.Feature.PrivateOfferConfidentialityTest" assertions="15" time="12.991090"/>
<testcase name="test_upload_validation_and_quarantine_do_not_grant_publication_or_read_access" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" line="173" class="Tests\Feature\PrivateOfferConfidentialityTest" classname="Tests.Feature.PrivateOfferConfidentialityTest" assertions="9" time="8.173232"/>
<testcase name="test_proof_bytes_are_encrypted_and_only_a_scoped_internal_validator_can_read_them" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" line="187" class="Tests\Feature\PrivateOfferConfidentialityTest" classname="Tests.Feature.PrivateOfferConfidentialityTest" assertions="14" time="5.222205"/>
<testcase name="test_nda_absence_keeps_access_closed_and_acceptance_alone_never_grants_access" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" line="209" class="Tests\Feature\PrivateOfferConfidentialityTest" classname="Tests.Feature.PrivateOfferConfidentialityTest" assertions="13" time="8.975220"/>
<testcase name="test_both_conditions_exact_versions_revocation_and_audit_are_required_on_every_read" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" line="227" class="Tests\Feature\PrivateOfferConfidentialityTest" classname="Tests.Feature.PrivateOfferConfidentialityTest" assertions="18" time="9.934931"/>
<testcase name="test_nda_version_changes_withdrawal_session_revocation_and_private_revision_close_access" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" line="259" class="Tests\Feature\PrivateOfferConfidentialityTest" classname="Tests.Feature.PrivateOfferConfidentialityTest" assertions="35" time="19.377575"/>
<testcase name="test_nda_integrity_and_authority_loss_are_rechecked_without_exposing_the_company" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" line="299" class="Tests\Feature\PrivateOfferConfidentialityTest" classname="Tests.Feature.PrivateOfferConfidentialityTest" assertions="14" time="10.601570"/>
<testcase name="test_compiled_confidential_page_has_no_company_data_before_both_conditions" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" line="323" class="Tests\Feature\PrivateOfferConfidentialityTest" classname="Tests.Feature.PrivateOfferConfidentialityTest" assertions="11" time="6.396441"/>
<testcase name="test_photo_metadata_and_original_are_bound_to_the_editorial_fingerprint" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\PrivateOfferConfidentialityTest.php" line="337" class="Tests\Feature\PrivateOfferConfidentialityTest" classname="Tests.Feature.PrivateOfferConfidentialityTest" assertions="16" time="10.917612"/>
</testsuite>
<testsuite name="Tests\Feature\OfferInvestmentAcceptanceAuditTest" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\OfferInvestmentAcceptanceAuditTest.php" tests="4" assertions="62" errors="0" failures="0" skipped="0" time="24.964973">
<testcase name="test_saved_offer_reuses_its_description_in_the_existing_investment_context" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\OfferInvestmentAcceptanceAuditTest.php" line="41" class="Tests\Feature\OfferInvestmentAcceptanceAuditTest" classname="Tests.Feature.OfferInvestmentAcceptanceAuditTest" assertions="8" time="1.306170"/>
<testcase name="test_native_context_options_do_not_disclose_another_owners_private_offer" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\OfferInvestmentAcceptanceAuditTest.php" line="55" class="Tests\Feature\OfferInvestmentAcceptanceAuditTest" classname="Tests.Feature.OfferInvestmentAcceptanceAuditTest" assertions="7" time="2.462590"/>
<testcase name="test_private_description_is_not_truncated_and_does_not_replace_an_existing_summary" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\OfferInvestmentAcceptanceAuditTest.php" line="67" class="Tests\Feature\OfferInvestmentAcceptanceAuditTest" classname="Tests.Feature.OfferInvestmentAcceptanceAuditTest" assertions="5" time="2.079312"/>
<testcase name="test_approved_offer_continues_in_same_dossier_location_analysis_saved_result_and_report_input" file="C:\laragon\www\portal-investidor-qa-editorial-20261113\tests\Feature\OfferInvestmentAcceptanceAuditTest.php" line="80" class="Tests\Feature\OfferInvestmentAcceptanceAuditTest" classname="Tests.Feature.OfferInvestmentAcceptanceAuditTest" assertions="42" time="19.116900"/>
</testsuite>
</testsuite>
</testsuites>
@@ -0,0 +1,3 @@
> types:check
> tsc --noEmit
@@ -0,0 +1,3 @@
> types:check
> tsc --noEmit
@@ -0,0 +1,9 @@
{
"database_tables_rechecked": 219,
"tables_changed_since_backup": [],
"release_files_rechecked": 417,
"release_files_changed": [],
"installed_revision": "96f510965f70581a4b41dd94463f598b77dd7cf5",
"active_data_writes": 0,
"source_read_only_transactions": true
}
@@ -0,0 +1,7 @@
{
"remote_main_verified": "3558647e8d82092cd0e31eefbe8b9e5e9eacf573",
"guarded_executor_started_for_exact_revision": true,
"automatic_path": "paused",
"lock_held": true,
"other_revisions_forbidden": true
}
@@ -0,0 +1,58 @@
{
"executor_status": {
"state": "stopped",
"target": "3558647e8d82092cd0e31eefbe8b9e5e9eacf573",
"previous": "96f510965f70581a4b41dd94463f598b77dd7cf5",
"lock_held": false,
"error_type": "RuntimeError",
"error": "Verification command failed: npm (see protected build log)",
"installed_revision": "96f510965f70581a4b41dd94463f598b77dd7cf5",
"automatic_path_restored": true
},
"recovery": {
"state": "failed_before_promotion_recovered",
"authorised_revision": "3558647e8d82092cd0e31eefbe8b9e5e9eacf573",
"installed_revision_preserved": "96f510965f70581a4b41dd94463f598b77dd7cf5",
"source_drift": false,
"live_promotion": false,
"rollback_needed": false,
"migration_executed": false,
"lock_released": true,
"automatic_path_restored": true,
"pending_requests": 0,
"generated_collision": [
{
"line": 180,
"code": "export const reportForm = (args: { id: string | number } | [id: string | number ] | string | number, options?: RouteQueryOptions): RouteDefinition<'get'> => ({"
},
{
"line": 242,
"code": "const reportFormForm = (args: { id: string | number } | [id: string | number ] | string | number, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({"
},
{
"line": 331,
"code": "const reportForm = (args: { id: string | number } | [id: string | number ] | string | number, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({"
}
],
"failed_release_preserved": [
"/var/www/investmoz-homologacao/releases/3558647e8d82092cd0e31eefbe8b9e5e9eacf573-a4916dfe"
],
"operational_data_writes": 0,
"main_not_reverted_or_force_pushed": true
},
"schema_test_results": [
"OK (1 test, 3106 assertions)"
],
"typescript_errors": [
"resources/js/actions/App/Http/Controllers/PrivateOfferOperationsController.ts(180,14): error TS2395: Individual declarations in merged declaration 'reportForm' must be all exported or all local.",
"resources/js/actions/App/Http/Controllers/PrivateOfferOperationsController.ts(331,7): error TS2395: Individual declarations in merged declaration 'reportForm' must be all exported or all local."
],
"npm_build_passed": true,
"typed_check_passed": false,
"promotion_occurred": false,
"installed": "96f510965f70581a4b41dd94463f598b77dd7cf5",
"automatic_path": "active",
"deploy_service": "inactive",
"pending_requests": 0,
"served_revision": "96f510965f70581a4b41dd94463f598b77dd7cf5"
}
@@ -0,0 +1,51 @@
import pathlib,os,json,time,fcntl,importlib.util,uuid,sys
TARGET='3558647e8d82092cd0e31eefbe8b9e5e9eacf573';OLD='96f510965f70581a4b41dd94463f598b77dd7cf5'
operation=pathlib.Path('/var/lib/investmoz-deploy/offers-exact-3558647e-20261114')
spec=importlib.util.spec_from_file_location('investmoz_existing_pipeline','/var/www/deploy/investmoz-pipeline.py');module=importlib.util.module_from_spec(spec);spec.loader.exec_module(module)
config=json.loads(pathlib.Path('/etc/investmoz-deploy/delivery.json').read_text());assert config['target_url']=='https://teste-investidor.tempo.co.mz' and config['branch']=='main'
runner=module.Delivery(config);state=pathlib.Path(config['state_root'])
def status(value,**extra):
(operation/'status.json').write_text(json.dumps({'state':value,'target':TARGET,'previous':OLD,'lock_held':True,**extra}))
with (state/'delivery.lock').open('a') as lock:
fcntl.flock(lock,fcntl.LOCK_EX|fcntl.LOCK_NB)
try:
assert json.loads((state/'installed.json').read_text())['commit']==OLD
assert not list((state/'requests').glob('*.json'))
status('reserved_waiting_backup_and_fast_forward',installation_started=False)
deadline=time.monotonic()+1200
while not (operation/'go.json').exists():
if (operation/'abort.json').exists():raise RuntimeError('Authorised operation cancelled before installation')
if time.monotonic()>deadline:raise RuntimeError('Reservation timed out without starting installation')
time.sleep(1)
proof=json.loads((operation/'go.json').read_text());assert proof['target']==TARGET and proof['backup_restore_verified'] is True
original_latest=runner.latest
def pinned_latest():
actual=original_latest()
if actual!=TARGET:raise RuntimeError('MAIN_REVISION_MISMATCH: refusing every other revision')
return actual
runner.latest=pinned_latest
assert pinned_latest()==TARGET
runner.git('merge-base','--is-ancestor',OLD,TARGET)
assert all(x.stem==TARGET for x in (state/'requests').glob('*.json'))
with (operation/'build.log').open('wb') as log:
runner.log=log;status('installing_exact_revision',installation_started=True)
result=runner.deliver(TARGET);runner.log=None
assert result.get('commit')==TARGET and result.get('status') in ['installed','already_installed']
assert json.loads((state/'installed.json').read_text())['commit']==TARGET
(operation/'executor-result.json').write_text(json.dumps(result,indent=2))
status('installed_waiting_postverification',installation_started=True,installed_revision=TARGET)
deadline=time.monotonic()+1800
while not (operation/'finish.json').exists():
if (operation/'abort.json').exists():raise RuntimeError('Postverification requires recovery; watcher remains paused')
if time.monotonic()>deadline:raise RuntimeError('Postverification timed out; watcher remains paused')
time.sleep(1)
assert json.loads((operation/'finish.json').read_text())['postverified'] is True
assert pinned_latest()==TARGET
requests=list((state/'requests').glob('*.json'));assert all(x.stem==TARGET for x in requests)
for item in requests:item.rename(state/'processed'/(item.stem+'-exact-offers-'+uuid.uuid4().hex[:8]+'.json'))
status('verified_complete',installation_started=True,installed_revision=TARGET)
except Exception as error:
runner.log=None
status('stopped',error_type=type(error).__name__,error=str(error),installed_revision=json.loads((state/'installed.json').read_text()).get('commit'))
raise
finally:fcntl.flock(lock,fcntl.LOCK_UN)
@@ -0,0 +1,95 @@
{
"authorised_revision": "3558647e8d82092cd0e31eefbe8b9e5e9eacf573",
"main_fast_forward_received_exactly": true,
"main_after_attempt": "3558647e8d82092cd0e31eefbe8b9e5e9eacf573",
"installed_and_served_revision": "96f510965f70581a4b41dd94463f598b77dd7cf5",
"installation_result": "FAILED_BEFORE_PROMOTION",
"failure": "Wayfinder form variants generated reportForm twice: GET action and POST report helper. TS2395 stopped the existing executor.",
"live_source_and_data_preserved": {
"tables": 219,
"files": 417,
"all_unchanged": true
},
"rollback_needed": false,
"automatic_path_restored": true,
"pending_requests": 0,
"operational_migrations": false,
"mne_changed": false,
"permissions_changed": false,
"public_offers_activated": false,
"external_notifications_activated": false,
"payments_activated": false,
"remediation_scope": "QA only: rename GET controller action to reportPage and adjust route mapping; preserve URLs, auth, data, services and all five phases. No new push or installation.",
"corrected_verification": {
"production_wayfinder_generation": "passed with form variants, no QA skip",
"normal_production_build": "passed",
"typescript_after_build": "passed",
"phpstan": "full analysis passed, zero errors",
"pint": "passed",
"phpunit": {
"tests": 28,
"assertions": 403,
"errors": 0,
"failures": 0,
"suites": [
{
"name": "Tests\\Feature\\PrivateOfferOperationsTest",
"tests": "13",
"assertions": "180",
"failures": "0",
"errors": "0"
},
{
"name": "Tests\\Feature\\PrivateOfferConfidentialityTest",
"tests": "11",
"assertions": "161",
"failures": "0",
"errors": "0"
},
{
"name": "Tests\\Feature\\OfferInvestmentAcceptanceAuditTest",
"tests": "4",
"assertions": "62",
"failures": "0",
"errors": "0"
}
]
},
"test_database": "offers_wayfinder_fix_20261114_test, loopback:55441",
"user_preview_database_and_accepted_evidence_preserved": true
},
"requires_new_exact_revision_authorisation": true,
"evidence_hash_encoding": "SHA256 of UTF-8 text with Git LF normalisation",
"evidence_sha256": {
"backup-summary.json": "a67f9bfb9229b8622607bf0e43deb76ee3d2161209a465da5dcb89b233e363a3",
"corrected-integrated-report-input.json": "e41bc34459b1ff94cbf5050c36e56634bae0c0ab591f0778b3ed0646824a7a85",
"corrected-phpstan.log": "c10f74fb840de989bba7e9c2dfee7f8419b5d2ac0cc0daf18a4a187f6530aa43",
"corrected-production-build.log": "7e2dfa067638e1c9adf6fbdd40e04ba83caa5f9fd922b48d2a2f0cb02bf6a987",
"corrected-regression.log": "eb3f9b8535270480ec764a46fb4c2942027128a28cd08b898be2f5e61ef4e4a9",
"corrected-regression.xml": "d3a8675085940d4dffebd46c91559dcdfaf8fdf74801e8af8502e1c332676599",
"corrected-types-after-build.log": "b59cdb3ff539a29c8ae6c37772ecc1a93a5266c49959d408f16b17487b7ac755",
"corrected-types.log": "b59cdb3ff539a29c8ae6c37772ecc1a93a5266c49959d408f16b17487b7ac755",
"data-integrity.json": "d3bdd17f1c28f7e54104a65fde84b58615a1a0cdd43651a9e9bb99bd62f956ad",
"exact-sha-start.json": "726f44fe33dadeebe378bd0fecd70af3d63d8705151bec7708b35b6600c3d38b",
"executor-failure.json": "7fbf9a0e605f347f1e7b3fa2abd68e38776ef2b9296528331bff03cb63fab168",
"guarded-executor-used.py": "b9a34edefd4de3f6a6077fa06b3eb28641b3ab4d79e60ead025299d02ddc4d00",
"recovery.json": "e7c0ecab88759b40bda6d5856cfbbb856f598ac6bc808ff38524e9c5eb35a2d4",
"reservation-context.json": "b83e5c1ba9ebaa5a6568e49c05e3707b642b8c248d8b47c71ece7a5a80b8bc02",
"reservation.json": "5d544d573d12f470d6ff8eec16b8ba6582dd151ef6bf1c49206ae2d935691346",
"restore-summary.json": "c7ac5cc3bee9a456127b27aff87193739b2d1380e55eb8f14355a1a66db078ba",
"safeguard-verified.json": "3e8b37dc60ff110a8731834bcfa680e584a330015912692312f012bac61f8689",
"wayfinder-generation.log": "0fe46f117980a58f4e45f763d67dcfc5e1bc221809ec089a3f787c856fca9267"
},
"corrective_source_sha256": {
"app/Http/Controllers/PrivateOfferOperationsController.php": "15da904c466be9bb38fa9a673beff55816026caf72569bc4289d399c77f10cce",
"routes/web.php": "50dbec32d17dbbd334298eb0bf77585b15d98781c9368fcb3f398642b83b2168"
},
"functional_delta_since_authorised_revision": [
"app/Http/Controllers/PrivateOfferOperationsController.php",
"routes/web.php"
],
"generated_symbols_unique": {
"reportForm": 1,
"reportPage": 1
}
}
@@ -0,0 +1,31 @@
{
"state": "failed_before_promotion_recovered",
"authorised_revision": "3558647e8d82092cd0e31eefbe8b9e5e9eacf573",
"installed_revision_preserved": "96f510965f70581a4b41dd94463f598b77dd7cf5",
"source_drift": false,
"live_promotion": false,
"rollback_needed": false,
"migration_executed": false,
"lock_released": true,
"automatic_path_restored": true,
"pending_requests": 0,
"generated_collision": [
{
"line": 180,
"code": "export const reportForm = (args: { id: string | number } | [id: string | number ] | string | number, options?: RouteQueryOptions): RouteDefinition<'get'> => ({"
},
{
"line": 242,
"code": "const reportFormForm = (args: { id: string | number } | [id: string | number ] | string | number, options?: RouteQueryOptions): RouteFormDefinition<'get'> => ({"
},
{
"line": 331,
"code": "const reportForm = (args: { id: string | number } | [id: string | number ] | string | number, options?: RouteQueryOptions): RouteFormDefinition<'post'> => ({"
}
],
"failed_release_preserved": [
"/var/www/investmoz-homologacao/releases/3558647e8d82092cd0e31eefbe8b9e5e9eacf573-a4916dfe"
],
"operational_data_writes": 0,
"main_not_reverted_or_force_pushed": true
}
@@ -0,0 +1,7 @@
{
"temporary_reservation_relaunched_before_build": true,
"executor_umask_preserved": "0027",
"authorised_webhook_requests_reserved": 1,
"served_revision": "96f51096",
"installation_started": false
}
@@ -0,0 +1,7 @@
{
"watcher": "paused",
"served_revision_preserved": "96f51096",
"reservation_unit": "investmoz-offers-exact-3558647e-20261114",
"automatic_latest_loop_not_used": true,
"existing_executor_delegated_without_modification": true
}
@@ -0,0 +1,16 @@
{
"restore_verified": true,
"all_table_counts_and_checksums_match": true,
"tables": 219,
"isolated_network": "none",
"isolated_database": "offers_install_restore_20261114_test",
"isolated_port": 55441,
"schema_changes": 0,
"operational_data_writes": 0,
"files_restored_and_verified": 417,
"encryption": {
"encrypted_originals_recovered": 0,
"mfa_envelopes_recovered": 2,
"preserved_keys_verified": true
}
}
@@ -0,0 +1,12 @@
{
"backup_restore_verified": true,
"tables": 219,
"files": 417,
"dump_sha256": "88152dc39367f5e59eb072f63b44d3a949e93d73ae855eccb33c3c0b9e37bf6c",
"files_sha256": "aa6248e0eec3d27d58a4bbb3c16848a70dcb3524e6cafc6340b682984a8bbdb3",
"release_drift": false,
"exclusive_lock": true,
"automatic_path": "paused",
"pending_requests": 0,
"installation_started": false
}
@@ -0,0 +1,4 @@
 [Wayfinder] Generated actions in C:\laragon\www\portal-investidor-qa-editorial-20261113\resources\js\actions
 [Wayfinder] Generated routes in C:\laragon\www\portal-investidor-qa-editorial-20261113\resources\js\routes
+1 -1
View File
@@ -255,7 +255,7 @@ Route::middleware(['auth', 'verified', EnsurePortalProfiles::class])->group(func
Route::get('/{id}/nda', [$offers, 'nda'])->whereNumber('id');
Route::get('/{id}/operacoes', [PrivateOfferOperationsController::class, 'show'])->whereNumber('id');
Route::post('/{id}/operacoes', [PrivateOfferOperationsController::class, 'owner'])->whereNumber('id');
Route::get('/{id}/denunciar', [PrivateOfferOperationsController::class, 'reportForm'])->whereNumber('id');
Route::get('/{id}/denunciar', [PrivateOfferOperationsController::class, 'reportPage'])->whereNumber('id');
Route::post('/{id}/denuncias', [PrivateOfferOperationsController::class, 'report'])->whereNumber('id');
Route::post('/{id}/denuncias/{reportId}', [PrivateOfferOperationsController::class, 'handleReport'])->whereNumber('id')->whereUuid('reportId');
Route::post('/{id}/destaque-administrativo', [PrivateOfferOperationsController::class, 'highlight'])->whereNumber('id');