diff --git a/docs/investmoz/public-portal-context-images.json b/docs/investmoz/public-portal-context-images.json
new file mode 100644
index 00000000..7abaa410
--- /dev/null
+++ b/docs/investmoz/public-portal-context-images.json
@@ -0,0 +1,710 @@
+{
+ "date": "2026-10-23",
+ "decision": "Pedido expresso da Tempo: aplicar o anexo de identidade visual aos cinco cartões de Encontre o contexto do seu investimento.",
+ "instructionSource": {
+ "path": "C:\\Users\\jorge\\.codex\\attachments\\637b878f-1f58-490d-bd07-d5cd10ae2377\\Pasted text.txt",
+ "sha256": "fcc24dcce4b5df3f10e29add48052808d48ddcf674d052287854e11910e01d69"
+ },
+ "source": {
+ "type": "AI-generated photorealistic illustrative images",
+ "tool": "image_gen, built-in mode",
+ "skill": "C:/Users/jorge/.codex/skills/.system/imagegen/SKILL.md",
+ "externalPhotographsUsed": false,
+ "namedRealLocationsDepicted": false,
+ "note": "Cenas ilustrativas plausíveis, sem atribuição a instalações, pessoas, instituições ou projectos reais."
+ },
+ "analysisAndPlan": "docs/investmoz/public-portal-sections.md#fotografias-nos-cartões-de-contexto-do-investimento--23102026",
+ "filesChanged": [
+ "resources/js/pages/PortalInvestidor.tsx",
+ "resources/js/components/investment-context-cards.tsx",
+ "tools/portal-context-cards-qa.mjs",
+ "docs/investmoz/public-portal-sections.md",
+ "docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv",
+ "docs/investmoz/public-portal-context-images.json"
+ ],
+ "images": [
+ {
+ "key": "clusters-agroindustria",
+ "prompt": "Use case: photorealistic-natural. Asset type: an individual navigation card photograph for a professional investment portal. Generate ONE clean, realistic editorial photograph in horizontal 16:9 composition. Natural daylight, realistic restrained colours, excellent photographic detail, balanced uncluttered framing, one clear subject readable at a small thumbnail size. Contemporary setting plausible in Mozambique in southern Africa. This is a generic illustrative scene, NOT a depiction or claim about any named real facility, project, landmark or institution. No text, lettering, titles, captions, logos, brands, watermarks, flags, official emblems, maps, diagrams, graphical overlays, UI elements, collages, artificial colour filters, futuristic architecture or advertising poster treatment. Realistic people, hands, equipment and perspective; dignified candid activity instead of posed stock photography. Subject: a modest, well maintained agro-processing packing facility linking commercial agriculture to local industry. Wide three-quarter view into an airy open-sided processing shed with pale walls and a few orderly wooden or reusable produce crates, stainless processing/sorting benches and an unobtrusive commercial agricultural field visible beyond. Two Black southern African workers in clean practical workwear sorting harvested vegetables naturally, faces not prominent. Show production and transformation together in ONE genuine-looking continuous scene, no montage. Clear simple geometry, warm-neutral sunlight, subtle vegetation.",
+ "source": "C:\\Users\\jorge\\.codex\\generated_images\\01a167bd-3f26-71a0-8ec3-3f17519d2bfd\\exec-f72e66b0-d788-4476-8b20-c39b22d5d6dc.png",
+ "original": "outputs/investment-context-20261023/originals/clusters-agroindustria.png",
+ "originalSha256": "75e04a694081ab757831fc9b37323949d09806e622c83d07588fc47c423c9033",
+ "originalDimensions": {
+ "width": 1672,
+ "height": 941
+ },
+ "derivatives": [
+ {
+ "file": "public/images/investment-context/clusters-agroindustria.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 116796,
+ "sha256": "12494b31ab551cffb79f81c7d1519c0c4a2d4236e7f129bec1ce32251b39d847"
+ },
+ {
+ "file": "public/images/investment-context/clusters-agroindustria-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 42060,
+ "sha256": "76e3152c99ed188f748542dcf0464787307dbdc1c6299e7264dfd1bd86ad75e3"
+ },
+ {
+ "file": "public/images/investment-context/clusters-agroindustria-fallback.webp",
+ "width": 240,
+ "height": 135,
+ "bytes": 9596,
+ "sha256": "9f668da50f7d64955b31940d239b420ac18dbb76a8120c8bedab3f2c04710288"
+ }
+ ]
+ },
+ {
+ "key": "corredores-logisticos",
+ "prompt": "Use case: photorealistic-natural. Asset type: an individual navigation card photograph for a professional investment portal. Generate ONE clean, realistic editorial photograph in horizontal 16:9 composition. Natural daylight, realistic restrained colours, excellent photographic detail, balanced uncluttered framing, one clear subject readable at a small thumbnail size. Contemporary setting plausible in Mozambique in southern Africa. This is a generic illustrative scene, NOT a depiction or claim about any named real facility, project, landmark or institution. No text, lettering, titles, captions, logos, brands, watermarks, flags, official emblems, maps, diagrams, graphical overlays, UI elements, collages, artificial colour filters, futuristic architecture or advertising poster treatment. Realistic people, hands, equipment and perspective; dignified candid activity instead of posed stock photography. Subject: a commercial freight terminal serving a southern African logistics corridor. Elevated medium-wide viewpoint showing an orderly short line of unbranded freight containers, one realistic container-handling crane and a freight truck on a paved lane, with a calm strip of water and low coastal industrial vegetation in the distance. Infrastructure of credible modest contemporary scale, generic and unidentifiable; do not reproduce or name Maputo, Beira, Nacala or any real port. Spatially coherent containers, road and handling equipment; clean clear subject with no excessive machinery.",
+ "source": "C:\\Users\\jorge\\.codex\\generated_images\\01a167bd-3f26-71a0-8ec3-3f17519d2bfd\\exec-0363da23-f9cb-413b-bb64-024539085c4b.png",
+ "original": "outputs/investment-context-20261023/originals/corredores-logisticos-v2.png",
+ "originalSha256": "2151d1a59265c6f7151d18af6ef6ad78f9fc6e0cd58ac9cc5c64b50a25c5058e",
+ "originalDimensions": {
+ "width": 1672,
+ "height": 941
+ },
+ "derivatives": [
+ {
+ "file": "public/images/investment-context/corredores-logisticos-v2.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 85184,
+ "sha256": "1939c26df297588b6c3e5ea08b700d4cda5d1183cf3e5faed06a1ca060d2475e"
+ },
+ {
+ "file": "public/images/investment-context/corredores-logisticos-v2-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 26222,
+ "sha256": "06dc0e7126cb2c13eb3f9a98f6ee58f5d64f9d07c28620975f744f263744fe15"
+ },
+ {
+ "file": "public/images/investment-context/corredores-logisticos-v2-fallback.webp",
+ "width": 240,
+ "height": 135,
+ "bytes": 5334,
+ "sha256": "f9fd6e6c3a2d4654df1a8fdb287e122f1889b5d318c104c4816ee393c793e242"
+ }
+ ],
+ "selectedSource": "C:\\Users\\jorge\\.codex\\generated_images\\01a167bd-3f26-71a0-8ec3-3f17519d2bfd\\exec-c2cff7da-d602-4191-9aca-380918a09619.png",
+ "editPrompt": "Edit the provided photograph: REMOVE THE ENTIRE FOREGROUND TRUCK, including cab, wheels, long trailer and the red freight container on that trailer. The big truck at lower left/centre must be completely gone. Replace the removed truck's area with a continuous empty realistic paved road surface matching the surrounding pavement and road markings. Leave the stacked stationary freight containers along the quay, the water, the large port crane, the lifted container and workers. All remaining equipment and containers should have plain surfaces without readable lettering, logos, numbers or brands. No new truck, vehicle, symbol, text or overlay. Keep a single clean editorial photograph, natural lighting and horizontal 16:9 framing. Generic commercial port scene, not a named real facility."
+ },
+ {
+ "key": "projectos-ancora",
+ "prompt": "Use case: photorealistic-natural. Asset type: an individual navigation card photograph for a professional investment portal. Generate ONE clean, realistic editorial photograph in horizontal 16:9 composition. Natural daylight, realistic restrained colours, excellent photographic detail, balanced uncluttered framing, one clear subject readable at a small thumbnail size. Contemporary setting plausible in Mozambique in southern Africa. This is a generic illustrative scene, NOT a depiction or claim about any named real facility, project, landmark or institution. No text, lettering, titles, captions, logos, brands, watermarks, flags, official emblems, maps, diagrams, graphical overlays, UI elements, collages, artificial colour filters, futuristic architecture or advertising poster treatment. Realistic people, hands, equipment and perspective; dignified candid activity instead of posed stock photography. Subject: a small team of two Black southern African engineering professionals, one woman and one man, in realistic hard hats and restrained protective workwear, seen candidly from a three-quarter rear angle reviewing an unmarked folded technical plan at a utility-scale solar installation. Low rows of realistic blue solar panels and a simple low service building recede into a dry green southern African landscape. No readable drawing or numbers on the plan. Focus on credible engineering and investment project scale; clean composition, quiet professional atmosphere, no landmark or company identifiers.",
+ "source": "C:\\Users\\jorge\\.codex\\generated_images\\01a167bd-3f26-71a0-8ec3-3f17519d2bfd\\exec-19fcd882-542b-43c9-81e7-593fd75083f6.png",
+ "original": "outputs/investment-context-20261023/originals/projectos-ancora.png",
+ "originalSha256": "f23cf6e64307a280f3aa58741454a23480ac28fcae01a0810adf134b783a3a74",
+ "originalDimensions": {
+ "width": 1672,
+ "height": 941
+ },
+ "derivatives": [
+ {
+ "file": "public/images/investment-context/projectos-ancora.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 77114,
+ "sha256": "de0b59774246fee982761de59618b3e7707c3fe30f2b1bcbb6017d4dce53c4dc"
+ },
+ {
+ "file": "public/images/investment-context/projectos-ancora-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 29484,
+ "sha256": "268e405112ed341fce3c9792c3caa47053984100cd4a204453e31bbe5db6e890"
+ },
+ {
+ "file": "public/images/investment-context/projectos-ancora-fallback.webp",
+ "width": 240,
+ "height": 135,
+ "bytes": 6750,
+ "sha256": "db7e4b4382e09eb6b4f9f2a4603ccac4b4eacc53ba0f6776429e33dbf5131954"
+ }
+ ]
+ },
+ {
+ "key": "educacao-formacao",
+ "prompt": "Use case: photorealistic-natural. Asset type: an individual navigation card photograph for a professional investment portal. Generate ONE clean, realistic editorial photograph in horizontal 16:9 composition. Natural daylight, realistic restrained colours, excellent photographic detail, balanced uncluttered framing, one clear subject readable at a small thumbnail size. Contemporary setting plausible in Mozambique in southern Africa. This is a generic illustrative scene, NOT a depiction or claim about any named real facility, project, landmark or institution. No text, lettering, titles, captions, logos, brands, watermarks, flags, official emblems, maps, diagrams, graphical overlays, UI elements, collages, artificial colour filters, futuristic architecture or advertising poster treatment. Realistic people, hands, equipment and perspective; dignified candid activity instead of posed stock photography. Subject: a candid technical training classroom with three Black southern African young adult students of different genders and one instructor working together at a practical electronics and computing workbench. Bright modest well maintained vocational classroom, natural window light, simple laboratory equipment and unbranded closed or angled laptops whose screens have no visible interface or text. Focus on two students engaged in a realistic small hands-on electronics exercise with normal anatomy and correct equipment proportions. Dignified contemporary clothing, natural concentration, professional skills and human capital investment, no posed smiles or stereotypes.",
+ "source": "C:\\Users\\jorge\\.codex\\generated_images\\01a167bd-3f26-71a0-8ec3-3f17519d2bfd\\exec-d21314d7-c726-41ad-862c-3c8b64df6b53.png",
+ "original": "outputs/investment-context-20261023/originals/educacao-formacao.png",
+ "originalSha256": "e59ec599e8c64ab84195d0cb37871d3102df178a13275806ca3b7f98e6bfa895",
+ "originalDimensions": {
+ "width": 1672,
+ "height": 941
+ },
+ "derivatives": [
+ {
+ "file": "public/images/investment-context/educacao-formacao.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 68224,
+ "sha256": "e3e5dbd292cac555a45bcbd94a0fa6b60e6b710debc0c827c68603f40bfb8a28"
+ },
+ {
+ "file": "public/images/investment-context/educacao-formacao-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 27384,
+ "sha256": "d3b743fbba7a8cb40e45999ee8c345cbfc0332cf85f5c5c2d6a5cf1240a395e4"
+ },
+ {
+ "file": "public/images/investment-context/educacao-formacao-fallback.webp",
+ "width": 240,
+ "height": 135,
+ "bytes": 7156,
+ "sha256": "0b2a12898043c57cf4354b54ebcba8adec8d41b3886bc574584ccc12af7b1e4c"
+ }
+ ]
+ },
+ {
+ "key": "documentos-formularios",
+ "prompt": "Use case: photorealistic-natural. Asset type: an individual navigation card photograph for a professional investment portal. Generate ONE clean, realistic editorial photograph in horizontal 16:9 composition. Natural daylight, realistic restrained colours, excellent photographic detail, balanced uncluttered framing, one clear subject readable at a small thumbnail size. Contemporary setting plausible in Mozambique in southern Africa. This is a generic illustrative scene, NOT a depiction or claim about any named real facility, project, landmark or institution. No text, lettering, titles, captions, logos, brands, watermarks, flags, official emblems, maps, diagrams, graphical overlays, UI elements, collages, artificial colour filters, futuristic architecture or advertising poster treatment. Realistic people, hands, equipment and perspective; dignified candid activity instead of posed stock photography. Subject: a close-medium editorial photograph of a tidy modern administrative office desk where a Black southern African professional in a plain light blue shirt is naturally reviewing organised business documentation. Frame hands, desk and partial torso, no prominent portrait. Neat neutral folders, a few sheets with only faint out-of-focus non-readable printing, a pen and an unbranded laptop angled away with no visible UI. Soft window light, white and pale neutral surfaces with subtle blue accents. Absolutely no readable personal data, invented official seals or highlighted fake text; realistic fingers and documents, calm minimal composition.",
+ "source": "C:\\Users\\jorge\\.codex\\generated_images\\01a167bd-3f26-71a0-8ec3-3f17519d2bfd\\exec-f1c8e22e-6885-4578-ac7d-02692c5cc071.png",
+ "original": "outputs/investment-context-20261023/originals/documentos-formularios.png",
+ "originalSha256": "cfbd38a9cc9b9acf35f38220f5bd9c1ab1feafe411bc1d4bbdb3658de557e052",
+ "originalDimensions": {
+ "width": 1672,
+ "height": 941
+ },
+ "derivatives": [
+ {
+ "file": "public/images/investment-context/documentos-formularios.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 43002,
+ "sha256": "70ddea3256e6a8d981b1fae5ee7b4de6c910d757137b79a59306c268c278402f"
+ },
+ {
+ "file": "public/images/investment-context/documentos-formularios-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 17996,
+ "sha256": "436865c948acbb7b6e9e482bef8f5bd626c6960f2f155608e40dfcd0e76b84cb"
+ },
+ {
+ "file": "public/images/investment-context/documentos-formularios-fallback.webp",
+ "width": 240,
+ "height": 135,
+ "bytes": 4958,
+ "sha256": "fad6a6ab825a82ec2541d2e0c6de9d85486e4bbca159b912f87bec9cc0aeeba5"
+ }
+ ]
+ }
+ ],
+ "primaryImagesBytesTotal": 390320,
+ "responsive480ImagesBytesTotal": 143146,
+ "implementation": {
+ "gridColumns": [
+ 1,
+ 2,
+ 4
+ ],
+ "aspectRatio": "16:9",
+ "responsiveImages": true,
+ "lazyLoading": true,
+ "altLanguage": "pt",
+ "fallback": "Derivado pequeno da própria imagem; se também falhar, estado acessível Imagem indisponível, com dimensão reservada e link mantido.",
+ "globalCSSChanged": false,
+ "businessLogicChanged": false,
+ "databaseChanged": false,
+ "heroChanged": false
+ },
+ "visualReview": "Cinco composições individuais distintas, cores naturais e luz editorial; sem títulos/colagens ou mapas. A composição de Corredores foi revista para remover o camião com marca. Capturas em computador e telemóvel inspeccionadas.",
+ "verification": {
+ "browser": {
+ "results": [
+ {
+ "width": 320,
+ "dpr": 1,
+ "columns": 1,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria-480.webp",
+ "width": 320,
+ "height": 180
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2-480.webp",
+ "width": 320,
+ "height": 180
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora-480.webp",
+ "width": 320,
+ "height": 180
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao-480.webp",
+ "width": 320,
+ "height": 180
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios-480.webp",
+ "width": 320,
+ "height": 180
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 390,
+ "dpr": 2,
+ "columns": 1,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria.webp",
+ "width": 389,
+ "height": 219
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2.webp",
+ "width": 389,
+ "height": 219
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora.webp",
+ "width": 389,
+ "height": 219
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao.webp",
+ "width": 389,
+ "height": 219
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios.webp",
+ "width": 389,
+ "height": 219
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 768,
+ "dpr": 1,
+ "columns": 2,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria-480.webp",
+ "width": 384,
+ "height": 216
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2-480.webp",
+ "width": 384,
+ "height": 216
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora-480.webp",
+ "width": 384,
+ "height": 216
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao-480.webp",
+ "width": 384,
+ "height": 216
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios-480.webp",
+ "width": 384,
+ "height": 216
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 1024,
+ "dpr": 1,
+ "columns": 4,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria-480.webp",
+ "width": 256,
+ "height": 144
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2-480.webp",
+ "width": 256,
+ "height": 144
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora-480.webp",
+ "width": 256,
+ "height": 144
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao-480.webp",
+ "width": 256,
+ "height": 144
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios-480.webp",
+ "width": 256,
+ "height": 144
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 1440,
+ "dpr": 2,
+ "columns": 4,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios.webp",
+ "width": 266,
+ "height": 149
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 1920,
+ "dpr": 1,
+ "columns": 4,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria-480.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2-480.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora-480.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao-480.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios-480.webp",
+ "width": 266,
+ "height": 149
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "fail": "primary",
+ "status": "passed"
+ },
+ {
+ "fail": "all",
+ "status": "passed"
+ }
+ ],
+ "errors": [],
+ "navigation": [
+ "/clusters",
+ "/corredores",
+ "/projectos-ancora",
+ "/educacao",
+ "/documentos"
+ ],
+ "databaseAccess": false
+ },
+ "script": "tools/portal-context-cards-qa.mjs",
+ "screenshots": [
+ "outputs/investment-context-20261023/cards-1024-dpr1.png",
+ "outputs/investment-context-20261023/cards-1440-dpr2.png",
+ "outputs/investment-context-20261023/cards-1920-dpr1.png",
+ "outputs/investment-context-20261023/cards-320-dpr1.png",
+ "outputs/investment-context-20261023/cards-390-dpr2.png",
+ "outputs/investment-context-20261023/cards-768-dpr1.png",
+ "outputs/investment-context-20261023/fallback-all.png",
+ "outputs/investment-context-20261023/fallback-primary.png"
+ ],
+ "types": {
+ "command": "npm run types:check",
+ "exitCode": 0
+ },
+ "lint": {
+ "files": [
+ "resources/js/components/investment-context-cards.tsx",
+ "resources/js/pages/PortalInvestidor.tsx",
+ "tools/portal-context-cards-qa.mjs"
+ ],
+ "exitCode": 0
+ },
+ "build": {
+ "command": "npm run build",
+ "exitCode": 0,
+ "pageAsset": "assets/PortalInvestidor-fh5VZanx.js",
+ "log": "outputs/investment-context-20261023/build-local.log"
+ }
+ },
+ "scope": "Aplicado no código e pacote locais. API e navegação simuladas na verificação visual; sem dados activos ou publicação externa.",
+ "matrixReferences": [
+ "MASTER-efd550fd-0104",
+ "MASTER-55050f60-0001"
+ ],
+ "acceptanceLimit": "Prova restrita à apresentação e navegação dos cinco cartões; não encerra critérios funcionais mais amplos da matriz.",
+ "layoutRevision": {
+ "date": "2026-10-23",
+ "decision": "Pedido expresso da Tempo: título a vermelho e menos espaço em branco dentro dos cartões.",
+ "changes": "Título no vermelho #ed1c24; removidas alturas mínimas de título e descrição; preenchimento 20→16 px, intervalo 8→6 px e entrelinhas 28/24→24/20 px. Mantidos imagens, conteúdos, links e alinhamento por linha da grelha.",
+ "browser": {
+ "results": [
+ {
+ "width": 320,
+ "dpr": 1,
+ "columns": 1,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria-480.webp",
+ "width": 320,
+ "height": 180
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2-480.webp",
+ "width": 320,
+ "height": 180
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora-480.webp",
+ "width": 320,
+ "height": 180
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao-480.webp",
+ "width": 320,
+ "height": 180
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios-480.webp",
+ "width": 320,
+ "height": 180
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 390,
+ "dpr": 2,
+ "columns": 1,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria.webp",
+ "width": 389,
+ "height": 219
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2.webp",
+ "width": 389,
+ "height": 219
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora.webp",
+ "width": 389,
+ "height": 219
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao.webp",
+ "width": 389,
+ "height": 219
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios.webp",
+ "width": 389,
+ "height": 219
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 768,
+ "dpr": 1,
+ "columns": 2,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria-480.webp",
+ "width": 384,
+ "height": 216
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2-480.webp",
+ "width": 384,
+ "height": 216
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora-480.webp",
+ "width": 384,
+ "height": 216
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao-480.webp",
+ "width": 384,
+ "height": 216
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios-480.webp",
+ "width": 384,
+ "height": 216
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 1024,
+ "dpr": 1,
+ "columns": 4,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria-480.webp",
+ "width": 256,
+ "height": 144
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2-480.webp",
+ "width": 256,
+ "height": 144
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora-480.webp",
+ "width": 256,
+ "height": 144
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao-480.webp",
+ "width": 256,
+ "height": 144
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios-480.webp",
+ "width": 256,
+ "height": 144
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 1440,
+ "dpr": 2,
+ "columns": 4,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios.webp",
+ "width": 266,
+ "height": 149
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 1920,
+ "dpr": 1,
+ "columns": 4,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/clusters-agroindustria-480.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/corredores-logisticos-v2-480.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/projectos-ancora-480.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/educacao-formacao-480.webp",
+ "width": 266,
+ "height": 149
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-context/documentos-formularios-480.webp",
+ "width": 266,
+ "height": 149
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "fail": "primary",
+ "status": "passed"
+ },
+ {
+ "fail": "all",
+ "status": "passed"
+ }
+ ],
+ "errors": [],
+ "navigation": [
+ "/clusters",
+ "/corredores",
+ "/projectos-ancora",
+ "/educacao",
+ "/documentos"
+ ],
+ "databaseAccess": false
+ },
+ "lintExitCode": 0,
+ "buildExitCode": 0,
+ "pageAsset": "assets/PortalInvestidor-CYCMhSzW.js",
+ "screenshots": [
+ "outputs/investment-context-compact-20261023/cards-1024-dpr1.png",
+ "outputs/investment-context-compact-20261023/cards-1440-dpr2.png",
+ "outputs/investment-context-compact-20261023/cards-1920-dpr1.png",
+ "outputs/investment-context-compact-20261023/cards-320-dpr1.png",
+ "outputs/investment-context-compact-20261023/cards-390-dpr2.png",
+ "outputs/investment-context-compact-20261023/cards-768-dpr1.png"
+ ],
+ "databaseChanged": false
+ }
+}
diff --git a/docs/investmoz/public-portal-sections.md b/docs/investmoz/public-portal-sections.md
index 0bef3264..97706309 100644
--- a/docs/investmoz/public-portal-sections.md
+++ b/docs/investmoz/public-portal-sections.md
@@ -84,3 +84,55 @@ O script `tools/portal-hero-qa.mjs` demonstra a escrita progressiva, a ordem tí
Pedido expresso da Tempo na continuação de 23/10/2026: remover do hero o grupo com o botão de pausa e as duas bolinhas de selecção de imagem. Removidos o grupo, os ícones e o estado de pausa manual. A troca automática de imagens e a escrita dinâmica permanecem; conservam-se a pausa da rotação por foco/ponteiro, a suspensão em separador oculto e a preferência de movimento reduzido. Esta decisão substitui os controlos visíveis introduzidos como escolha de implementação nas revisões anteriores.
O script existente de interface foi adaptado para demonstrar a ausência dos controlos e a continuação da rotação automática, escrita e pesquisa, com capturas em `outputs/portal-hero-no-controls-20261023/`. Evidência e pacote local registados em `public-portal-hero-validation.json`, mantendo o histórico das revisões e os estados dos requisitos da matriz.
+
+## Fotografias nas etapas de Como Investir — 23/10/2026
+
+Origem: pedido expresso da Tempo para analisar e ilustrar exclusivamente os cartões “1. Explorar”, “2. Preparar” e “3. Acompanhar”. Aplicam-se as orientações permanentes de `AGENTS.md` de 12/10 e 22/10/2026; componentes e optimização de recursos são escolhas técnicas, sem novas regras operacionais.
+
+Análise e plano: os cartões existentes são âncoras estáticas na home React/Inertia, numa grelha de três colunas a partir de 768 px. Explorar liga a `/oportunidades` e representa a identificação de sector, território e oportunidade; Preparar liga a `/como-investir` e representa percurso/documentação; Acompanhar liga a `/balcao-virtual` e representa envio/consulta de pedido e protocolo. Os recursos locais existentes ilustram outras secções; preparar três fotografias distintas para evitar repetição. Gerar cenas editoriais plausíveis com `imagegen`, rever composição, guardar originais e versões WebP locais, integrar imagens 16:9 com dimensões reservadas e carregamento diferido, manter textos/destinos/título vermelho, verificar comportamento responsivo, navegação e falhas de imagem, compilar. Âmbito exclusivamente visual, sem alterações em dados, autenticação, apoio ou rodapé. Referência documental na linha existente `MASTER-efd550fd-0104`, sem criar outra matriz nem encerrar o critério mais amplo.
+
+Implementação: `components/investment-steps.tsx` reúne os três cartões, preservando títulos, descrições e âncoras. Fotografias individuais geradas com a ferramenta integrada `image_gen`, sem local ou projecto real atribuído: avaliação de oportunidade num parque empresarial genérico, preparação documental numa reunião e consulta de pedido no computador. Originais em `outputs/investment-steps-20261023/originals/`; recursos locais em `public/images/investment-steps/` com WebP 960×540, 480×270 e alternativa própria 240×135. Os cartões usam `srcset`, `sizes`, `loading="lazy"`, dimensões reservadas, corte 16:9, alt em português, foco visível e texto compacto com 16 px de preenchimento. Se também falhar a alternativa pequena, o cartão mantém a área reservada, descrição acessível e destino utilizável.
+
+Verificação desta secção: componentes reais com API sintética e sem base de dados, seis larguras de 320 a 1920 px, duas densidades de ecrã, três imagens distintas, texto/destinos conservados, navegação por teclado, ausência de transbordo e deslocamento no carregamento, falhas dos recursos principais e de todos os recursos. Oito cenários sem erros JavaScript. Fotografias, prompts, hashes, capturas, relatório de browser e compilação documentados em `public-portal-steps-images.json` e `outputs/investment-steps-20261023/`. Ajuste restrito a esta secção; apoio, acesso à gestão e rodapé mantidos.
+
+## Fotografias nos cartões de contexto do investimento — 23/10/2026
+
+Origem: pedido expresso da Tempo para aplicar o anexo “Melhorar as imagens e a identidade visual do Portal do Investidor de Moçambique” exclusivamente à secção “Encontre o contexto do seu investimento”. O anexo define estética fotográfica editorial, imagens individuais contextualizadas, recursos locais, acessibilidade, desempenho e preservação dos cinco destinos e conteúdos. Aplicam-se as orientações permanentes de `AGENTS.md` de 12/10 e 22/10/2026; os pormenores de implementação abaixo são escolhas técnicas.
+
+Análise prévia: Laravel/Inertia 3 e React, com Tailwind existente; os cinco cartões estavam embutidos em `pages/PortalInvestidor.tsx`. `EducationalArticleCard` destina-se a artigos com acções e metadados diferentes, pelo que não foi alterado. A secção foi extraída para `components/investment-context-cards.tsx`, mantendo o título, descrições, âncoras e grelha de uma/duas/quatro colunas. Não foram alteradas as páginas de destino, dados, APIs ou estilos globais.
+
+Foram geradas cinco imagens distintas com a ferramenta integrada `image_gen`, segundo a skill `imagegen`: agro-indústria, terminal logístico, acompanhamento de instalação solar, formação técnica e análise documental. São imagens fotográficas ilustrativas geradas, sem localização ou instituição real atribuída, e não fotografias documentais de projectos cadastrados. A imagem do terminal foi revista para remover o camião com marca visível. Não foram usadas fotografias externas nem URLs de serviços de imagens. Originais seleccionados, prompts e hashes estão registados no manifesto `public-portal-context-images.json`; os originais foram preservados dentro do workspace.
+
+Recursos finais em `public/images/investment-context/`: `clusters-agroindustria`, `corredores-logisticos-v2`, `projectos-ancora`, `educacao-formacao` e `documentos-formularios`, em WebP 960×540, com variantes 480×270 e alternativas 240×135. As imagens mantêm 16:9, `object-cover`, textos alternativos em português, dimensões reservadas, `srcset`, `sizes`, `loading="lazy"` e descodificação assíncrona. Cada cartão conserva o seu título e descrição; o foco usa o azul e os tons neutros pedidos no anexo.
+
+Se um recurso principal falhar, o cartão usa a sua própria variante pequena, evitando repetir a fotografia de outra secção. Se também essa falhar, apresenta “Imagem indisponível” no mesmo espaço reservado, com descrição acessível e link operacional. Este é apenas um estado de erro; os cinco cartões usam imagens fotográficas na apresentação normal.
+
+Verificação reproduzível: `tools/portal-context-cards-qa.mjs`, com o portal e cabeçalho reais, API sintética e acesso exclusivo aos recursos locais. Exercita seis larguras de ecrã, ecrãs de alta densidade, os cinco destinos por teclado, imagens carregadas e distintas, alinhamento, dimensões, ausência de deslocamento no carregamento e dois cenários de falha. Capturas e resultados em `outputs/investment-context-20261023/`; síntese, fontes/prompts e compilação em `public-portal-context-images.json`. Referências acrescentadas às linhas existentes `MASTER-efd550fd-0104` e `MASTER-55050f60-0001`, sem encerrar os respectivos critérios mais amplos.
+
+Revisão expressa da Tempo de 23/10/2026: título da secção no vermelho da identidade existente (`#ed1c24`) e cartões mais compactos. Removidas as alturas mínimas de 56 e 72 px do título/descrição; reduzidos o preenchimento de 20 para 16 px, o intervalo de 8 para 6 px e as entrelinhas. As alturas passam a acompanhar o conteúdo, com alinhamento por linha da grelha, conservando imagens, textos e destinos. A reserva das dimensões das imagens mantém-se. Evidência desta revisão em `outputs/investment-context-compact-20261023/` e no campo `layoutRevision` do manifesto existente.
+
+## Sectores da home e catálogo completo — 23/10/2026
+
+Origem: pedido expresso da Tempo para adaptar a estrutura de “Áreas de Investimento” do projecto `D:/Projects/Tempo_Investidor/tempo-dashboard`, incluindo cartões, botão para mais sectores e respectiva página, e uniformizar a vermelho os títulos das secções da home. Aplicadas as orientações permanentes `AGENTS.md` de 12/10 e 22/10/2026: as decisões de produto são da Tempo; as escolhas técnicas abaixo não criam requisitos organizacionais.
+
+Análise prévia: a referência usa `components/investor-portal/homepage/homepage-sectors.tsx` e `pages/investor-portal/sectors/index.tsx`. Mostra cinco cartões com fotografia e título sobreposto, resumo, “Saiba mais” e ligação central arredondada para o catálogo. O V2 já dispunha de `/sectores`, fichas `/sectores/{slug}`, especialização Fintech e dados de `SectorOrganization`. Foram reutilizados esses contratos e percursos, sem importar Framer Motion, traduções ou rotas exclusivas da referência.
+
+Implementação: `components/public-sector-cards.tsx` partilha os cartões entre a home e o catálogo. A home mostra os primeiros cinco sectores, na ordem recebida da API, com “Ler mais” para a ficha existente e “Ver mais sectores” para `/sectores`. A página existente apresenta todos os sectores publicados, na mesma estrutura visual, e “Voltar ao início”. Mantêm-se nomes, descrições, contagens, valores zero, especializações e URLs canónicos recebidos. Descrições ausentes não são preenchidas com dados da referência. Fintech permanece ligado à ficha própria, sem âncoras HTML aninhadas.
+
+Foram inventariados os onze JPG disponíveis em `storage/app/public/investor-portal/sectors` na referência, copiados os originais para evidência e preparados derivados locais WebP 960×540/480×270 em `public/images/sectors/`. O mapeamento visual por slug é de apresentação e não altera a taxonomia. Para Imobiliário e sectores sem imagem específica usa-se a vista empresarial genérica disponível na referência; para Bens de Consumo e Franquias usa-se a imagem de actividade industrial. A variante genérica também serve como alternativa em caso de erro; se ambas falharem, o título e as ligações continuam visíveis num fundo neutro. Não se atribui aos ficheiros uma origem oficial, licença externa ou localização documental não comprovada.
+
+Os seis títulos de secção da home — contexto do investimento, sectores, Como Investir, oportunidades em destaque, documentos essenciais e apoio — usam `HOME_SECTION_HEADING` em `lib/portal-presentation.ts`: vermelho `#ed1c24`, 24 px, entrelinha de 32 px e peso 700. O cartão de Apoio passou a superfície clara para manter contraste com o título vermelho. O título principal animado do hero mantém a sua hierarquia própria. `PORTAL_MORE_LINK` centraliza o botão arredondado, contorno vermelho e estado de foco, seguindo a referência.
+
+Verificação: `tools/portal-home-sectors-qa.mjs` carrega os componentes reais com dez sectores sintéticos, descrições nulas e especialização Fintech, sem base de dados. Exercita seis larguras, prévia de cinco/cartálogo de dez, estilos dos seis títulos, percurso por teclado, dez fichas, Fintech, regresso à home, catálogo vazio e dois cenários de indisponibilidade de imagens. Capturas, inventário, hashes e resultados em `outputs/home-sectors-20261023/`; resumo persistente em `public-portal-sectors-validation.json`. Referências na matriz existente: `MASTER-efd550fd-0104` e `MASTER-9f5719c8-0077`. Esta adaptação não encerra critérios mais amplos nem altera dados, permissões, regras operacionais ou publicação noutro servidor.
+
+Pedido expresso da Tempo, 23/10/2026 — botão “Contactar Apoio ao Investidor”: em `layouts/portal-navigation.tsx`, a faixa de largura total foi substituída por um botão centrado, com largura ajustada ao texto, altura mínima de 44 px, preenchimento reduzido, sombra discreta e vermelho `#ed1c24`, conservando `/apoio` e o foco visível. Verificado a 320, 390 e 1440 px: cerca de 223×44 px, sem transbordo ou erros JavaScript. Evidência em `outputs/support-button-20261023/qa-results.json` e capturas; compilação local no mesmo directório. Ajuste de apresentação por decisão do proprietário, sem nova regra operacional nem alteração de dados.
+
+Revisão anterior de 23/10/2026, superada pela correcção de âmbito abaixo: o Codex interpretou o pedido de abreviação como aplicável à zona inferior inteira e alterou indevidamente o botão de apoio e o rodapé partilhado. Essa interpretação não foi uma decisão da Tempo. A revisão removeu o bloco interno, abreviou o botão para “Apoio” e recolheu contactos/ligações em “Informações” num rodapé claro; estas alterações fora do bloco indicado foram revertidas após a clarificação expressa do proprietário. O registo desta revisão é histórico e não descreve a apresentação actual.
+
+Evidência histórica da revisão superada: `outputs/footer-compact-20261023/qa-results.json`, capturas e `check.mjs`. Não constitui aceitação do âmbito pelo proprietário.
+
+Correcção expressa da Tempo, 23/10/2026: o pedido abrange exclusivamente o bloco “INVESTE Moçambique / Portal do Investidor — conheça as oportunidades… / Acesso à gestão”. Em `pages/PortalInvestidor.tsx`, esse bloco fica abreviado num ícone de acesso à gestão, com nome acessível e descrição “Acesso à gestão”, destino `/acesso-gestao`, área de interacção de 44 px e fundo branco, sem o título e parágrafo anteriores. O botão de apoio foi restaurado exactamente à apresentação anterior à abreviação: “Contactar Apoio ao Investidor”, compacto, vermelho e sem ícone. `components/tempo-footer.tsx` e os estilos `.tempo-footer` foram integralmente restaurados ao estado anterior, incluindo contactos e ligações visíveis e o fundo original do rodapé geral. Não se altera autenticação nem dados. Esta correcção substitui a interpretação indevida acima e mantém as restantes alterações previamente pedidas.
+
+Evidência da correcção: `outputs/footer-scope-correction-20261023/check.mjs`, `qa-results.json`, capturas e `build-local.log`; componentes reais com API sintética a 320, 390 e 1440 px, ícone de gestão focável, bloco específico claro sem parágrafo, botão de apoio completo/vermelho, rodapé geral restaurado, contactos e ligações legais visíveis, sem transbordo ou erros JavaScript. Lint dos componentes alterados e compilação local. Referência na linha existente `MASTER-efd550fd-0104`, sem encerramento do critério amplo nem alteração dos seus estados.
+
+Continuação expressa da Tempo, 23/10/2026: acrescentado o título visível “Acesso à gestão” ao lado do ícone nesse mesmo bloco, para tornar o destino compreensível. O acesso mantém-se compacto, vermelho e com fundo claro, conservando `/acesso-gestao`. Ajuste restrito a essa ligação; apoio e rodapé geral conservam a apresentação restaurada. Referência: `MASTER-efd550fd-0104` e a evidência da revisão anterior acima. Verificado a 320, 390 e 1440 px, sem transbordo ou erros JavaScript; lint e compilação aprovados. Evidência em `outputs/management-label-20261023/qa-results.json`, capturas e `build-local.log`. No pedido seguinte, a Tempo determinou o alinhamento desse acesso à esquerda; aplicado `justify-start` apenas no seu contentor.
diff --git a/docs/investmoz/public-portal-sectors-validation.json b/docs/investmoz/public-portal-sectors-validation.json
new file mode 100644
index 00000000..50c79c03
--- /dev/null
+++ b/docs/investmoz/public-portal-sectors-validation.json
@@ -0,0 +1,748 @@
+{
+ "date": "2026-10-23",
+ "decision": "Pedido expresso da Tempo: adaptar Áreas de Investimento do tempo-dashboard aos sectores da home e ao catálogo completo, copiar a estrutura dos botões e uniformizar a vermelho os títulos de secção da home.",
+ "reference": {
+ "project": "D:/Projects/Tempo_Investidor/tempo-dashboard",
+ "files": [
+ "resources/js/components/investor-portal/homepage/homepage-sectors.tsx",
+ "resources/js/pages/investor-portal/sectors/index.tsx"
+ ],
+ "structure": "Cinco cartões com fotografia, título sobreposto, resumo e acção de leitura; botão central arredondado/contorno vermelho para o catálogo."
+ },
+ "analysisAndPlan": "docs/investmoz/public-portal-sections.md#sectores-da-home-e-catálogo-completo--23102026",
+ "filesChanged": [
+ "resources/js/components/public-sector-cards.tsx",
+ "resources/js/lib/portal-presentation.ts",
+ "resources/js/components/investment-context-cards.tsx",
+ "resources/js/lib/portal-api.ts",
+ "resources/js/pages/PortalInvestidor.tsx",
+ "resources/js/pages/portal/services.tsx",
+ "tools/portal-home-sectors-qa.mjs",
+ "docs/investmoz/public-portal-sections.md",
+ "docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv"
+ ],
+ "behaviour": {
+ "homePreview": 5,
+ "previewOrder": "Ordem recebida da API, sem novos filtros de publicação.",
+ "readMore": "Ler mais, para a URL recebida ou ficha existente /sectores/{slug}.",
+ "moreSectors": "Ver mais sectores, botão arredondado para /sectores.",
+ "catalogue": "Todos os sectores publicados devolvidos pelo cadastro existente; Voltar ao início para /.",
+ "specializations": "Fintech conservado como ligação própria; sem âncoras aninhadas.",
+ "countsAndDescriptions": "Preservados dados recebidos, incluindo zero e descrições ausentes; não importados textos ou registos do outro projecto.",
+ "headings": [
+ {
+ "title": "Encontre o contexto do seu investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Sectores de investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Como Investir",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Oportunidades em destaque",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Documentos essenciais",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Apoio ao Investidor",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ }
+ ],
+ "supportCard": "Superfície clara para contraste com o título vermelho."
+ },
+ "assets": [
+ {
+ "source": "D:\\Projects\\Tempo_Investidor\\tempo-dashboard\\storage\\app\\public\\investor-portal\\sectors\\agronegocio.jpg",
+ "sourceBytes": 444057,
+ "original": "outputs/home-sectors-20261023/originals/agronegocio.jpg",
+ "sha256": "7337b689a6ad8b0b4c8d716ea356db14e22bd2982089825bb2382121ed3482f6",
+ "derivatives": [
+ {
+ "file": "public/images/sectors/agronegocio.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 110310,
+ "sha256": "3e9d3be22556300f880be39837f86e764e3d05433beff1da6694ef6cee1d5c34"
+ },
+ {
+ "file": "public/images/sectors/agronegocio-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 31592,
+ "sha256": "fd1f7624f7fd9224fc1c7bd11746806e419c645ba43c257b1edd9ba250cd47f1"
+ }
+ ]
+ },
+ {
+ "source": "D:\\Projects\\Tempo_Investidor\\tempo-dashboard\\storage\\app\\public\\investor-portal\\sectors\\economia-azul.jpg",
+ "sourceBytes": 456892,
+ "original": "outputs/home-sectors-20261023/originals/economia-azul.jpg",
+ "sha256": "1a2c04d0d9ed4a26129553daefd2ee18f6d820026ab1203acf3bcf91b0550f69",
+ "derivatives": [
+ {
+ "file": "public/images/sectors/economia-azul.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 107626,
+ "sha256": "bf3751e66839c1b3c585c91ffe65d32b9ee79ebd7d08e5e2c95c6cd581b04f8f"
+ },
+ {
+ "file": "public/images/sectors/economia-azul-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 29350,
+ "sha256": "aaf8ee66709d8e15c4304690dd03830b4368d14468a597d5617ccdb71d614331"
+ }
+ ]
+ },
+ {
+ "source": "D:\\Projects\\Tempo_Investidor\\tempo-dashboard\\storage\\app\\public\\investor-portal\\sectors\\energia.jpg",
+ "sourceBytes": 386678,
+ "original": "outputs/home-sectors-20261023/originals/energia.jpg",
+ "sha256": "a164e2c8ef155a6a198ae400feca132e79ba75e022473893ec48ebfa0557f679",
+ "derivatives": [
+ {
+ "file": "public/images/sectors/energia.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 81236,
+ "sha256": "b5605d9bb8645c5042baa511aaf39fcb187080a48d8e067b130fc974c4c9196d"
+ },
+ {
+ "file": "public/images/sectors/energia-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 21926,
+ "sha256": "7e53977fc6ce11755455f8092ac3f8c7126f54d909a3935e522f8dae0ab834be"
+ }
+ ]
+ },
+ {
+ "source": "D:\\Projects\\Tempo_Investidor\\tempo-dashboard\\storage\\app\\public\\investor-portal\\sectors\\industria.jpg",
+ "sourceBytes": 357131,
+ "original": "outputs/home-sectors-20261023/originals/industria.jpg",
+ "sha256": "d70c4257ac58a4b5e9f8b8b1a4cf6d98c0514043442c3ce46f5c98399038527f",
+ "derivatives": [
+ {
+ "file": "public/images/sectors/industria.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 80422,
+ "sha256": "ca8ddd2d65647f1ed7a9906271fa2ea3d027f310b89434fd7781a37a3d18322d"
+ },
+ {
+ "file": "public/images/sectors/industria-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 25194,
+ "sha256": "8bd695231209c0042b94e68b0e2095fa7202297708dabff0f78b337500b8c9b7"
+ }
+ ]
+ },
+ {
+ "source": "D:\\Projects\\Tempo_Investidor\\tempo-dashboard\\storage\\app\\public\\investor-portal\\sectors\\infraestruturas.jpg",
+ "sourceBytes": 395383,
+ "original": "outputs/home-sectors-20261023/originals/infraestruturas.jpg",
+ "sha256": "ac6cde89507af68991faebee19540f955146724d3be901839b85a4098fe1674b",
+ "derivatives": [
+ {
+ "file": "public/images/sectors/infraestruturas.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 86654,
+ "sha256": "14754a59477e5c62a62c190be812c89d9616608b3c98acb6100ad70d94d34df0"
+ },
+ {
+ "file": "public/images/sectors/infraestruturas-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 25772,
+ "sha256": "eca58096087d05dae3eea2b4d063c103f9fc85b0ea20fc5051313cf9bfa1020f"
+ }
+ ]
+ },
+ {
+ "source": "D:\\Projects\\Tempo_Investidor\\tempo-dashboard\\storage\\app\\public\\investor-portal\\sectors\\logistica-transportes.jpg",
+ "sourceBytes": 413702,
+ "original": "outputs/home-sectors-20261023/originals/logistica-transportes.jpg",
+ "sha256": "5976ead23da0d4e7d5debf875262f0229d389826aaeb7e7be4ebbac3f5129a9e",
+ "derivatives": [
+ {
+ "file": "public/images/sectors/logistica-transportes.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 96254,
+ "sha256": "0d235e7bbd160cccd3f97daa3337d6b27fde49db9782ad2ba0599c6a83022b6c"
+ },
+ {
+ "file": "public/images/sectors/logistica-transportes-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 28816,
+ "sha256": "32f5137e0a7f6a7894b186edb2ca38f12cdfdca04dda3588de3969fb3d2e333a"
+ }
+ ]
+ },
+ {
+ "source": "D:\\Projects\\Tempo_Investidor\\tempo-dashboard\\storage\\app\\public\\investor-portal\\sectors\\mineracao.jpg",
+ "sourceBytes": 415161,
+ "original": "outputs/home-sectors-20261023/originals/mineracao.jpg",
+ "sha256": "7e6d1e5a17d434456ad937680a6c5501bd33bd624d2cc7ebf4b643185a9440aa",
+ "derivatives": [
+ {
+ "file": "public/images/sectors/mineracao.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 96642,
+ "sha256": "12c93df378f54108b13260c10d29789564af7844cc84bcd9281d2be917d83354"
+ },
+ {
+ "file": "public/images/sectors/mineracao-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 26034,
+ "sha256": "be3e7763fb8cd2e02f576204269821c40d93a7c155d8088a5084064b7269e4d6"
+ }
+ ]
+ },
+ {
+ "source": "D:\\Projects\\Tempo_Investidor\\tempo-dashboard\\storage\\app\\public\\investor-portal\\sectors\\outros-sectores.jpg",
+ "sourceBytes": 328152,
+ "original": "outputs/home-sectors-20261023/originals/outros-sectores.jpg",
+ "sha256": "4aaac0869dc7e61c4c7a87e1af95beb108aa9be0da082702f6f70722e62b1e7a",
+ "derivatives": [
+ {
+ "file": "public/images/sectors/outros-sectores.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 75414,
+ "sha256": "f47b3d0da5b0cd5153d393c6f779484ba89043e50195e968338108e893a88077"
+ },
+ {
+ "file": "public/images/sectors/outros-sectores-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 24936,
+ "sha256": "a4fc00551d75c96a1648ad4f81d759d4d6ecd7e6fc5689689216a96934bd1ea2"
+ }
+ ]
+ },
+ {
+ "source": "D:\\Projects\\Tempo_Investidor\\tempo-dashboard\\storage\\app\\public\\investor-portal\\sectors\\servicos-financeiros.jpg",
+ "sourceBytes": 348386,
+ "original": "outputs/home-sectors-20261023/originals/servicos-financeiros.jpg",
+ "sha256": "f932a56248d5544bff92aa30f4af3a5a63044c311969d4370d06f157b097d570",
+ "derivatives": [
+ {
+ "file": "public/images/sectors/servicos-financeiros.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 72144,
+ "sha256": "15379485db7de7b2efebe8bdbd4cbd8e911eb34ab8a23b3dd114c849bb4ae65c"
+ },
+ {
+ "file": "public/images/sectors/servicos-financeiros-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 20698,
+ "sha256": "c21949201e35e63625d3d2e7520e10912fe65be1186954142b2784f6efca51ed"
+ }
+ ]
+ },
+ {
+ "source": "D:\\Projects\\Tempo_Investidor\\tempo-dashboard\\storage\\app\\public\\investor-portal\\sectors\\tic-economia-digital.jpg",
+ "sourceBytes": 417398,
+ "original": "outputs/home-sectors-20261023/originals/tic-economia-digital.jpg",
+ "sha256": "b09703bd079f55fb5a8ec3167ce96e1fdb1e5090813a81c817b9a33909427d94",
+ "derivatives": [
+ {
+ "file": "public/images/sectors/tic-economia-digital.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 97892,
+ "sha256": "b1d79c1a941085582d6a72799140bafed1bf38ec0201a4dfe5f6faf54ea55ae8"
+ },
+ {
+ "file": "public/images/sectors/tic-economia-digital-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 28242,
+ "sha256": "c4279a27ed402ca2feb62f11a8a954cbcae993912d3c8c27a2d9644fdf922114"
+ }
+ ]
+ },
+ {
+ "source": "D:\\Projects\\Tempo_Investidor\\tempo-dashboard\\storage\\app\\public\\investor-portal\\sectors\\turismo.jpg",
+ "sourceBytes": 393339,
+ "original": "outputs/home-sectors-20261023/originals/turismo.jpg",
+ "sha256": "1a76db252bc8c1a9dc1f3c650bd95e55337c36a6f604753d61cad96c19b1875f",
+ "derivatives": [
+ {
+ "file": "public/images/sectors/turismo.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 93234,
+ "sha256": "de46707dfdd8b98c48ec88d19f3df0b1d6c130adfcbd97d5a7c2e6fa2db62bef"
+ },
+ {
+ "file": "public/images/sectors/turismo-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 27012,
+ "sha256": "4d3d9a04b9426474dca9ba8895021b48fffbe7e4d4a4551272b8c832cf83488e"
+ }
+ ]
+ }
+ ],
+ "assetMapping": {
+ "agronegocio": "agronegocio",
+ "turismo": "turismo",
+ "infraestruturas": "infraestruturas",
+ "economia-azul": "economia-azul",
+ "mercado-financeiro": "servicos-financeiros",
+ "mineracao": "mineracao",
+ "energia-especifica": "energia",
+ "imobiliario": "outros-sectores",
+ "bens-de-consumo-e-franquias": "industria",
+ "tecnologias-de-informacao": "tic-economia-digital"
+ },
+ "assetSource": "JPG locais do projecto de referência indicado pelo proprietário, inventariados e copiados sem alteração; WebP derivados para apresentação. Sem alegação adicional de licença externa, origem oficial ou localização documental. Imagem genérica reutilizada como alternativa funcional e para sectores sem imagem específica.",
+ "assetBytes960": 997828,
+ "assetBytes480": 289572,
+ "verification": {
+ "browser": {
+ "results": [
+ {
+ "width": 320,
+ "homeSectors": 5,
+ "catalogueSectors": 10,
+ "homeColumns": 2,
+ "headings": [
+ {
+ "title": "Encontre o contexto do seu investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Sectores de investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Como Investir",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Oportunidades em destaque",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Documentos essenciais",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Apoio ao Investidor",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 390,
+ "homeSectors": 5,
+ "catalogueSectors": 10,
+ "homeColumns": 2,
+ "headings": [
+ {
+ "title": "Encontre o contexto do seu investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Sectores de investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Como Investir",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Oportunidades em destaque",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Documentos essenciais",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Apoio ao Investidor",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 768,
+ "homeSectors": 5,
+ "catalogueSectors": 10,
+ "homeColumns": 3,
+ "headings": [
+ {
+ "title": "Encontre o contexto do seu investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Sectores de investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Como Investir",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Oportunidades em destaque",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Documentos essenciais",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Apoio ao Investidor",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 1024,
+ "homeSectors": 5,
+ "catalogueSectors": 10,
+ "homeColumns": 5,
+ "headings": [
+ {
+ "title": "Encontre o contexto do seu investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Sectores de investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Como Investir",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Oportunidades em destaque",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Documentos essenciais",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Apoio ao Investidor",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 1440,
+ "homeSectors": 5,
+ "catalogueSectors": 10,
+ "homeColumns": 5,
+ "headings": [
+ {
+ "title": "Encontre o contexto do seu investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Sectores de investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Como Investir",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Oportunidades em destaque",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Documentos essenciais",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Apoio ao Investidor",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "width": 1920,
+ "homeSectors": 5,
+ "catalogueSectors": 10,
+ "homeColumns": 5,
+ "headings": [
+ {
+ "title": "Encontre o contexto do seu investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Sectores de investimento",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Como Investir",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Oportunidades em destaque",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Documentos essenciais",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ },
+ {
+ "title": "Apoio ao Investidor",
+ "size": "24px",
+ "weight": "700",
+ "color": "rgb(237, 28, 36)",
+ "lineHeight": "32px"
+ }
+ ],
+ "status": "passed"
+ },
+ {
+ "fail": "primary",
+ "status": "passed"
+ },
+ {
+ "fail": "all",
+ "status": "passed"
+ },
+ {
+ "emptyCatalogue": true,
+ "status": "passed"
+ }
+ ],
+ "errors": [],
+ "navigation": [
+ "/sectores",
+ "/sectores",
+ "/sectores",
+ "/sectores",
+ "/sectores",
+ "/sectores/agronegocio",
+ "/sectores",
+ "/sectores/turismo",
+ "/sectores",
+ "/sectores/infraestruturas",
+ "/sectores",
+ "/sectores/economia-azul",
+ "/sectores",
+ "/sectores/mercado-financeiro",
+ "/sectores",
+ "/sectores/mineracao",
+ "/sectores",
+ "/sectores/energia-especifica",
+ "/sectores",
+ "/sectores/imobiliario",
+ "/sectores",
+ "/sectores/bens-de-consumo-e-franquias",
+ "/sectores",
+ "/sectores/tecnologias-de-informacao",
+ "/sectores",
+ "/sectores/mercado-financeiro/fintech",
+ "/sectores",
+ "/",
+ "/sectores",
+ "/sectores"
+ ],
+ "databaseAccess": false
+ },
+ "script": "tools/portal-home-sectors-qa.mjs",
+ "screenshots": [
+ "outputs/home-sectors-20261023/catalogue-1024.png",
+ "outputs/home-sectors-20261023/catalogue-1440.png",
+ "outputs/home-sectors-20261023/catalogue-1920.png",
+ "outputs/home-sectors-20261023/catalogue-320.png",
+ "outputs/home-sectors-20261023/catalogue-390.png",
+ "outputs/home-sectors-20261023/catalogue-768.png",
+ "outputs/home-sectors-20261023/fallback-all.png",
+ "outputs/home-sectors-20261023/fallback-primary.png",
+ "outputs/home-sectors-20261023/home-sectors-1024.png",
+ "outputs/home-sectors-20261023/home-sectors-1440.png",
+ "outputs/home-sectors-20261023/home-sectors-1920.png",
+ "outputs/home-sectors-20261023/home-sectors-320.png",
+ "outputs/home-sectors-20261023/home-sectors-390.png",
+ "outputs/home-sectors-20261023/home-sectors-768.png",
+ "outputs/home-sectors-20261023/homepage-1440.png"
+ ],
+ "existingFrontendTests": {
+ "command": "node --test tests/frontend/portal-api.test.mjs tests/frontend/portal-navigation.test.mjs",
+ "passed": 20
+ },
+ "types": {
+ "command": "npm run types:check",
+ "exitCode": 0
+ },
+ "lint": {
+ "exitCode": 0
+ },
+ "build": {
+ "command": "npm run build",
+ "exitCode": 0,
+ "assets": {
+ "resources/js/pages/PortalInvestidor.tsx": "assets/PortalInvestidor-Q1OJxvfZ.js",
+ "resources/js/pages/portal/services.tsx": "assets/services-DiuG4Zkv.js"
+ },
+ "log": "outputs/home-sectors-20261023/build-local.log"
+ }
+ },
+ "scope": {
+ "appliedLocally": true,
+ "databaseChanged": false,
+ "migrationsRun": false,
+ "businessRulesChanged": false,
+ "routesChanged": false,
+ "sourceProjectChanged": false,
+ "newDependencies": false,
+ "externalDeployment": false
+ },
+ "limits": "Interface e navegação exercitadas com API e páginas públicas em fixtures; não equivale a demonstração integral dos workflows operacionais ou de critérios mais amplos da matriz.",
+ "matrixReferences": [
+ "MASTER-efd550fd-0104",
+ "MASTER-9f5719c8-0077"
+ ]
+}
diff --git a/docs/investmoz/public-portal-steps-images.json b/docs/investmoz/public-portal-steps-images.json
new file mode 100644
index 00000000..c432aec1
--- /dev/null
+++ b/docs/investmoz/public-portal-steps-images.json
@@ -0,0 +1,406 @@
+{
+ "date": "2026-10-23",
+ "decision": "Pedido expresso da Tempo: analisar e acrescentar imagens adequadas exclusivamente aos três cartões de Como Investir.",
+ "analysisAndPlan": "docs/investmoz/public-portal-sections.md#fotografias-nas-etapas-de-como-investir--23102026",
+ "source": {
+ "type": "Fotografias ilustrativas geradas por IA, sem atribuição a pessoas, instituições, locais ou projectos reais.",
+ "tool": "image_gen, modo integrado",
+ "skill": "C:/Users/jorge/.codex/skills/.system/imagegen/SKILL.md",
+ "externalPhotographsUsed": false
+ },
+ "images": [
+ {
+ "key": "explorar",
+ "prompt": "Use case: photorealistic-natural. Asset for a small navigation card on a Mozambique investor portal. Create one individual photorealistic editorial photograph, horizontal 16:9, professional restrained style, natural soft daylight, realistic skin and materials, neutral colors, documentary composition readable at 350px wide. Illustration of a plausible setting, no identifiable named project or official building. No text, lettering, logos, watermarks, flags, maps, diagrams, graphic overlays, montage, or advertisement styling. Keep main subject inside the central 80% for responsive crop. Stage 1 EXPLORE opportunities, sector and territory: two Mozambican business professionals, a woman and man in smart casual clothing, standing outdoors by a quiet access road at a modest business park, naturally discussing a tablet held by the woman. Generic unbranded low warehouse buildings and green productive land visible in background, credible southern African environment. Eye-level medium-wide candid composition, both people three-quarter view, looking at tablet and surroundings rather than camera. Business evaluation and discovery, no construction work or hard hats.",
+ "source": "C:\\Users\\jorge\\.codex\\generated_images\\01a167bd-3f26-71a0-8ec3-3f17519d2bfd\\exec-42eb9338-4350-40bf-9098-858c12994189.png",
+ "original": "outputs/investment-steps-20261023/originals/explorar.png",
+ "originalSha256": "a3c4ec1a0d2deaf87e0c8e765616c74ab70067eade9a862effce9e6befbbccb6",
+ "originalDimensions": {
+ "width": 1672,
+ "height": 941
+ },
+ "derivatives": [
+ {
+ "file": "public/images/investment-steps/explorar.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 52266,
+ "sha256": "c3e151ae649ce3cb66f5babc39978fa5803d320cacc95a27e798db4ec2d45a4c"
+ },
+ {
+ "file": "public/images/investment-steps/explorar-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 19312,
+ "sha256": "d3f383d9a58b23fada37472ea853f985aca8c3146123747d777b27704d32c7e0"
+ },
+ {
+ "file": "public/images/investment-steps/explorar-fallback.webp",
+ "width": 240,
+ "height": 135,
+ "bytes": 5300,
+ "sha256": "ba12ac4d2e81ac8a2c2e681667ccb08a3abfdba24de39e6e942d6378b700f2a9"
+ }
+ ]
+ },
+ {
+ "key": "preparar",
+ "prompt": "Use case: photorealistic-natural. Asset for a small navigation card on a Mozambique investor portal. Create one individual photorealistic editorial photograph, horizontal 16:9, professional restrained style, natural soft daylight, realistic skin and materials, neutral colors, documentary composition readable at 350px wide. Illustration of a plausible setting, no identifiable named project or official building. No text, lettering, logos, watermarks, flags, maps, diagrams, graphic overlays, montage, or advertisement styling. Keep main subject inside the central 80% for responsive crop. Stage 2 PREPARE investment and organize documents: a Mozambican woman entrepreneur and a male business adviser seated at a light wood office desk, calmly reviewing and sorting a small tidy set of document folders and loose sheets beside a closed laptop. One points to a page while the other organizes a folder. No visible readable writing or personal data; papers at an angle. Bright modest professional meeting room, view from slightly above table height, hands and folders clear in foreground, natural candid interaction, realistic anatomy.",
+ "source": "C:\\Users\\jorge\\.codex\\generated_images\\01a167bd-3f26-71a0-8ec3-3f17519d2bfd\\exec-5f07618a-1e86-42d9-aaf8-3acd0abf2164.png",
+ "original": "outputs/investment-steps-20261023/originals/preparar.png",
+ "originalSha256": "679a6875bb3ec79a9b71c27c9d785334376746be2bb305f461db9e19b0a0b7ea",
+ "originalDimensions": {
+ "width": 1672,
+ "height": 941
+ },
+ "derivatives": [
+ {
+ "file": "public/images/investment-steps/preparar.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 57942,
+ "sha256": "6de28042d3abce238a3680fb878779682f3672c3feb97b7e42b72e9a0a0ffbac"
+ },
+ {
+ "file": "public/images/investment-steps/preparar-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 19950,
+ "sha256": "671ba0fc207f85833b91027d3f6dad91599e95702cfea439e558906f92a2bfac"
+ },
+ {
+ "file": "public/images/investment-steps/preparar-fallback.webp",
+ "width": 240,
+ "height": 135,
+ "bytes": 6008,
+ "sha256": "645b34cd60b31fdc8e6586dedb71061c08add9ff985ce90909333b0bd1e0aa3e"
+ }
+ ]
+ },
+ {
+ "key": "acompanhar",
+ "prompt": "Use case: photorealistic-natural. Asset for a small navigation card on a Mozambique investor portal. Create one individual photorealistic editorial photograph, horizontal 16:9, professional restrained style, natural soft daylight, realistic skin and materials, neutral colors, documentary composition readable at 350px wide. Illustration of a plausible setting, no identifiable named project or official building. No text, lettering, logos, watermarks, flags, maps, diagrams, graphic overlays, montage, or advertisement styling. Keep main subject inside the central 80% for responsive crop. Stage 3 FOLLOW UP submitted request and protocol: a Mozambican male entrepreneur seated at a tidy desk using a laptop to check an online application, one hand naturally on trackpad, a small closed document folder nearby. Three-quarter side view showing focused face and laptop, warm daylight from side window, modest contemporary office with soft greenery out of focus. Laptop screen is oblique and softly out of focus with only indistinct neutral interface rows, no readable text, official seal, logo or invented dashboard details. Convey calm digital self-service and progress checking, not a call centre or signing documents.",
+ "source": "C:\\Users\\jorge\\.codex\\generated_images\\01a167bd-3f26-71a0-8ec3-3f17519d2bfd\\exec-f896c5f8-19a0-49b0-af8e-0d12bfe4c7aa.png",
+ "original": "outputs/investment-steps-20261023/originals/acompanhar.png",
+ "originalSha256": "17d453445f2afb4c7641909950d2ecfb8276c433a4e28eeee94d0a57d1bdad46",
+ "originalDimensions": {
+ "width": 1672,
+ "height": 941
+ },
+ "derivatives": [
+ {
+ "file": "public/images/investment-steps/acompanhar.webp",
+ "width": 960,
+ "height": 540,
+ "bytes": 43722,
+ "sha256": "fe764c8161de36ee597f856face5341260670d1a28ab482bd01a0f5120ad0588"
+ },
+ {
+ "file": "public/images/investment-steps/acompanhar-480.webp",
+ "width": 480,
+ "height": 270,
+ "bytes": 16176,
+ "sha256": "79ceaecb0ef23c6729e43d04b7e91493d6784ea9f658d540dda3550702dc3623"
+ },
+ {
+ "file": "public/images/investment-steps/acompanhar-fallback.webp",
+ "width": 240,
+ "height": 135,
+ "bytes": 5298,
+ "sha256": "cd4530cfef4f19f23f640ceae59cfd73d0ee269643118b458f2a4748f5845fc6"
+ }
+ ]
+ }
+ ],
+ "cards": [
+ {
+ "title": "1. Explorar",
+ "description": "Identifique o sector, território e oportunidade.",
+ "href": "/oportunidades",
+ "image": "explorar"
+ },
+ {
+ "title": "2. Preparar",
+ "description": "Conheça o percurso e organize os documentos.",
+ "href": "/como-investir",
+ "image": "preparar"
+ },
+ {
+ "title": "3. Acompanhar",
+ "description": "Envie o pedido e acompanhe o protocolo.",
+ "href": "/balcao-virtual",
+ "image": "acompanhar"
+ }
+ ],
+ "presentation": {
+ "component": "resources/js/components/investment-steps.tsx",
+ "homeIntegration": "resources/js/pages/PortalInvestidor.tsx",
+ "aspectRatio": "16:9",
+ "responsiveImages": [
+ 960,
+ 480
+ ],
+ "fallback": "Variante própria de 240 px; se também falhar, espaço reservado com descrição acessível e Imagem indisponível.",
+ "columns": "Uma coluna abaixo de 768 px, três a partir de 768 px.",
+ "compactText": "16 px de preenchimento, sem altura mínima de texto.",
+ "accessibility": "Alt em português, nomes e descrições das âncoras, foco visível, dimensões reservadas e loading lazy.",
+ "headings": "Título vermelho partilhado da home preservado."
+ },
+ "verification": {
+ "browser": {
+ "results": [
+ {
+ "width": 320,
+ "dpr": 1,
+ "fail": "none",
+ "columns": 1,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/explorar-480.webp",
+ "alt": "Dois profissionais avaliam uma oportunidade de investimento no terreno com apoio de um tablet.",
+ "lazy": "lazy",
+ "ratio": 1.7820512820512822
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/preparar-480.webp",
+ "alt": "Empreendedora e consultor analisam documentos e organizam pastas numa reunião de preparação.",
+ "lazy": "lazy",
+ "ratio": 1.7820512820512822
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/acompanhar-480.webp",
+ "alt": "Empreendedor consulta um pedido no computador portátil numa secretária de escritório.",
+ "lazy": "lazy",
+ "ratio": 1.7820512820512822
+ }
+ ],
+ "layoutShift": false,
+ "overflow": false
+ },
+ {
+ "width": 390,
+ "dpr": 2,
+ "fail": "none",
+ "columns": 1,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/explorar.webp",
+ "alt": "Dois profissionais avaliam uma oportunidade de investimento no terreno com apoio de um tablet.",
+ "lazy": "lazy",
+ "ratio": 1.7755102040816326
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/preparar.webp",
+ "alt": "Empreendedora e consultor analisam documentos e organizam pastas numa reunião de preparação.",
+ "lazy": "lazy",
+ "ratio": 1.7755102040816326
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/acompanhar.webp",
+ "alt": "Empreendedor consulta um pedido no computador portátil numa secretária de escritório.",
+ "lazy": "lazy",
+ "ratio": 1.7755102040816326
+ }
+ ],
+ "layoutShift": false,
+ "overflow": false
+ },
+ {
+ "width": 768,
+ "dpr": 1,
+ "fail": "none",
+ "columns": 3,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/explorar-480.webp",
+ "alt": "Dois profissionais avaliam uma oportunidade de investimento no terreno com apoio de um tablet.",
+ "lazy": "lazy",
+ "ratio": 1.7734375
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/preparar-480.webp",
+ "alt": "Empreendedora e consultor analisam documentos e organizam pastas numa reunião de preparação.",
+ "lazy": "lazy",
+ "ratio": 1.7734375
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/acompanhar-480.webp",
+ "alt": "Empreendedor consulta um pedido no computador portátil numa secretária de escritório.",
+ "lazy": "lazy",
+ "ratio": 1.7734375
+ }
+ ],
+ "layoutShift": false,
+ "overflow": false
+ },
+ {
+ "width": 1024,
+ "dpr": 1,
+ "fail": "none",
+ "columns": 3,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/explorar-480.webp",
+ "alt": "Dois profissionais avaliam uma oportunidade de investimento no terreno com apoio de um tablet.",
+ "lazy": "lazy",
+ "ratio": 1.7784090909090908
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/preparar-480.webp",
+ "alt": "Empreendedora e consultor analisam documentos e organizam pastas numa reunião de preparação.",
+ "lazy": "lazy",
+ "ratio": 1.7784090909090908
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/acompanhar-480.webp",
+ "alt": "Empreendedor consulta um pedido no computador portátil numa secretária de escritório.",
+ "lazy": "lazy",
+ "ratio": 1.7784090909090908
+ }
+ ],
+ "layoutShift": false,
+ "overflow": false
+ },
+ {
+ "width": 1440,
+ "dpr": 2,
+ "fail": "none",
+ "columns": 3,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/explorar.webp",
+ "alt": "Dois profissionais avaliam uma oportunidade de investimento no terreno com apoio de um tablet.",
+ "lazy": "lazy",
+ "ratio": 1.775
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/preparar.webp",
+ "alt": "Empreendedora e consultor analisam documentos e organizam pastas numa reunião de preparação.",
+ "lazy": "lazy",
+ "ratio": 1.775
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/acompanhar.webp",
+ "alt": "Empreendedor consulta um pedido no computador portátil numa secretária de escritório.",
+ "lazy": "lazy",
+ "ratio": 1.775
+ }
+ ],
+ "layoutShift": false,
+ "overflow": false
+ },
+ {
+ "width": 1920,
+ "dpr": 1,
+ "fail": "none",
+ "columns": 3,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/explorar-480.webp",
+ "alt": "Dois profissionais avaliam uma oportunidade de investimento no terreno com apoio de um tablet.",
+ "lazy": "lazy",
+ "ratio": 1.775
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/preparar-480.webp",
+ "alt": "Empreendedora e consultor analisam documentos e organizam pastas numa reunião de preparação.",
+ "lazy": "lazy",
+ "ratio": 1.775
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/acompanhar-480.webp",
+ "alt": "Empreendedor consulta um pedido no computador portátil numa secretária de escritório.",
+ "lazy": "lazy",
+ "ratio": 1.775
+ }
+ ],
+ "layoutShift": false,
+ "overflow": false
+ },
+ {
+ "width": 390,
+ "dpr": 2,
+ "fail": "primary",
+ "columns": 1,
+ "photos": [
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/explorar-fallback.webp",
+ "alt": "Dois profissionais avaliam uma oportunidade de investimento no terreno com apoio de um tablet.",
+ "lazy": "lazy",
+ "ratio": 1.7755102040816326
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/preparar-fallback.webp",
+ "alt": "Empreendedora e consultor analisam documentos e organizam pastas numa reunião de preparação.",
+ "lazy": "lazy",
+ "ratio": 1.7755102040816326
+ },
+ {
+ "src": "http://127.0.0.1:5174/images/investment-steps/acompanhar-fallback.webp",
+ "alt": "Empreendedor consulta um pedido no computador portátil numa secretária de escritório.",
+ "lazy": "lazy",
+ "ratio": 1.7755102040816326
+ }
+ ],
+ "layoutShift": false,
+ "overflow": false
+ },
+ {
+ "width": 390,
+ "dpr": 2,
+ "fail": "all",
+ "columns": 1,
+ "photos": [],
+ "layoutShift": false,
+ "overflow": false
+ }
+ ],
+ "errors": [],
+ "navigation": [
+ "/oportunidades",
+ "/como-investir",
+ "/balcao-virtual"
+ ],
+ "databaseAccess": false
+ },
+ "script": "outputs/investment-steps-20261023/check.mjs",
+ "screenshots": [
+ "outputs/investment-steps-20261023/cards-1024-none.png",
+ "outputs/investment-steps-20261023/cards-1440-none.png",
+ "outputs/investment-steps-20261023/cards-1920-none.png",
+ "outputs/investment-steps-20261023/cards-320-none.png",
+ "outputs/investment-steps-20261023/cards-390-all.png",
+ "outputs/investment-steps-20261023/cards-390-none.png",
+ "outputs/investment-steps-20261023/cards-390-primary.png",
+ "outputs/investment-steps-20261023/cards-768-none.png"
+ ],
+ "lint": {
+ "exitCode": 0
+ },
+ "types": {
+ "command": "npm run types:check",
+ "exitCode": 0,
+ "log": "outputs/investment-steps-20261023/types.log"
+ },
+ "build": {
+ "command": "npm run build",
+ "exitCode": 0,
+ "homeAsset": "assets/PortalInvestidor-C1QTZ3-t.js",
+ "log": "outputs/investment-steps-20261023/build-local.log"
+ }
+ },
+ "scope": {
+ "appliedLocally": true,
+ "otherSectionsChanged": false,
+ "supportAndFooterChanged": false,
+ "databaseAccess": false,
+ "businessRulesChanged": false,
+ "routesChanged": false,
+ "newDependencies": false,
+ "externalDeployment": false
+ },
+ "matrixReferences": [
+ "MASTER-efd550fd-0104"
+ ],
+ "limits": "Componentes reais com API sintética e destinos interceptados para verificar a navegação; não demonstra os workflows operacionais completos nem encerra o critério mais amplo da matriz."
+}
diff --git a/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv b/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv
index 6b2f2979..5b6ce4ea 100644
--- a/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv
+++ b/docs/investmoz/v2/auditoria-portal/matriz-requisitos.csv
@@ -1014,7 +1014,7 @@ MASTER-efd550fd-0100,"A migration de opportunities deve conter: id, sector_id co
MASTER-efd550fd-0101,"O InterestRequestController deve receber manifestações de interesse públicas, validar os campos, gerar uma referência interna, gravar o pedido e devolver uma resposta segura. A validação deve ser feita preferencialmente num StoreInterestRequestRequest, separando as regras do controller.",portal do investidor\backup\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1024 | portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1174,CRM/solicitações,//; /Simulador; /api/v1/documents/recommendations; /api/v1/investment/submissions; /api/v1/investment/submissions/{id}; /api/v1/investment/submissions/{id}/attachments; /api/v1/investment/submissions/{id}/attachments/{attachment}; /api/v1/investment/submissions/{id}/submit; /apoio; /balcao-virtual; /como-investir; /documentos,"investors/contacts/leads/tasks, OpportunityContacts, acompanhamento interno existente. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"Converter sem duplicar, tarefa/responsável/próxima ação recuperáveis; corrigir apenas falha comprovada. Critério individual original preservado; cobertura atual ainda não individualizada.",Relações mestre/contexto e autorizações; não depende de CRM externo. C131 sóQA. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"MASTER-efd550fd-0101: O InterestRequestController deve receber manifestações de interesse públicas, validar os campos, gerar uma referência interna, gravar o pedido e devolver uma resposta segura. A validação deve ser feita preferencialmente num StoreInterestRequestRequest, separando as regras do controller. | MASTER-9f5719c8-0126: O InterestRequestController deve receber manifestações de interesse públicas, validar os campos, gerar uma referência interna, gravar o pedido e devolver uma resposta segura. A validação deve ser feita preferencialmente num StoreInterestRequestRequest, separando as regras do controller.",P2,MASTER-efd550fd-0101: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-9f5719c8-0126: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-efd550fd-0101 | MASTER-9f5719c8-0126,2,"[{""id"":""MASTER-efd550fd-0101"",""pedido"":""O InterestRequestController deve receber manifestações de interesse públicas, validar os campos, gerar uma referência interna, gravar o pedido e devolver uma resposta segura. A validação deve ser feita preferencialmente num StoreInterestRequestRequest, separando as regras do controller."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1024""],""aceitacao"":""O InterestRequestController deve receber manifestações de interesse públicas, validar os campos, gerar uma referência interna, gravar o pedido e devolver uma resposta segura. A validação deve ser feita preferencialmente num StoreInterestRequestRequest, separando as regras do controller."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""CRM/solicitações""},{""id"":""MASTER-9f5719c8-0126"",""pedido"":""O InterestRequestController deve receber manifestações de interesse públicas, validar os campos, gerar uma referência interna, gravar o pedido e devolver uma resposta segura. A validação deve ser feita preferencialmente num StoreInterestRequestRequest, separando as regras do controller."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1174""],""aceitacao"":""O InterestRequestController deve receber manifestações de interesse públicas, validar os campos, gerar uma referência interna, gravar o pedido e devolver uma resposta segura. A validação deve ser feita preferencialmente num StoreInterestRequestRequest, separando as regras do controller."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""CRM/solicitações""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.interest_requests: 4 registos; public.leads: 0 registos; public.investors: 3 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.","Converter sem duplicar, tarefa/responsável/próxima ação recuperáveis; corrigir apenas falha comprovada. Critério individual original preservado; cobertura atual ainda não individualizada.","investors/contacts/leads/tasks, OpportunityContacts, acompanhamento interno existente",Relações mestre/contexto e autorizações; não depende de CRM externo. C131 sóQA.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: acompanhamento. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,acompanhamento,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Http/Controllers/CrmController.php; app/Services/DeclaredOriginStatistics.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"InterestSubmissionTest, InvestmentWorkspaceTest, PortalOriginCompatibilityTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-efd550fd-0102,"Lógica recomendada: receber StoreInterestRequestRequest; obter dados validados; gerar reference no formato IR-YYYY-000001; criar registo em InterestRequest; guardar IP, user_agent e consentimento de privacidade; associar opportunity_id quando a opportunityReference existir; devolver JsonResponse com success true, message, data.reference, data.status, data.nextStep e submittedAt. Em caso de falha, registar o erro no log e devolver mensagem genérica sem expor detalhes internos.",portal do investidor\backup\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1025 | portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1175,Balcão/orientação,/balcao-virtual/contextos; /balcao-virtual/dossiers; /balcao-virtual/dossiers/{id}; /balcao-virtual/dossiers/{id}/documentos; /balcao-virtual/dossiers/{id}/documentos/{document}; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /balcao-virtual/dossiers/{id}/etapas; /balcao-virtual/dossiers/{id}/fontes; /balcao-virtual/dossiers/{id}/orientacao; /balcao-virtual/dossiers/{id}/pedidos; /balcao-virtual/dossiers/{id}/pressupostos; /balcao-virtual/dossiers/{id}/recomendacoes,"VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-efd550fd-0102: Lógica recomendada: receber StoreInterestRequestRequest; obter dados validados; gerar reference no formato IR-YYYY-000001; criar registo em InterestRequest; guardar IP, user_agent e consentimento de privacidade; associar opportunity_id quando a opportunityReference existir; devolver JsonResponse com success true, message, data.reference, data.status, data.nextStep e submittedAt. Em caso de falha, registar o erro no log e devolver mensagem genérica sem expor detalhes internos. | MASTER-9f5719c8-0127: Lógica recomendada: receber StoreInterestRequestRequest; obter dados validados; gerar reference no formato IR-YYYY-000001; criar registo em InterestRequest; guardar IP, user_agent e consentimento de privacidade; associar opportunity_id quando a opportunityReference existir; devolver JsonResponse com success true, message, data.reference, data.status, data.nextStep e submittedAt. Em caso de falha, registar o erro no log e devolver mensagem genérica sem expor detalhes internos.",P2,MASTER-efd550fd-0102: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-9f5719c8-0127: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-efd550fd-0102 | MASTER-9f5719c8-0127,2,"[{""id"":""MASTER-efd550fd-0102"",""pedido"":""Lógica recomendada: receber StoreInterestRequestRequest; obter dados validados; gerar reference no formato IR-YYYY-000001; criar registo em InterestRequest; guardar IP, user_agent e consentimento de privacidade; associar opportunity_id quando a opportunityReference existir; devolver JsonResponse com success true, message, data.reference, data.status, data.nextStep e submittedAt. Em caso de falha, registar o erro no log e devolver mensagem genérica sem expor detalhes internos."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1025""],""aceitacao"":""Lógica recomendada: receber StoreInterestRequestRequest; obter dados validados; gerar reference no formato IR-YYYY-000001; criar registo em InterestRequest; guardar IP, user_agent e consentimento de privacidade; associar opportunity_id quando a opportunityReference existir; devolver JsonResponse com success true, message, data.reference, data.status, data.nextStep e submittedAt. Em caso de falha, registar o erro no log e devolver mensagem genérica sem expor detalhes internos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-9f5719c8-0127"",""pedido"":""Lógica recomendada: receber StoreInterestRequestRequest; obter dados validados; gerar reference no formato IR-YYYY-000001; criar registo em InterestRequest; guardar IP, user_agent e consentimento de privacidade; associar opportunity_id quando a opportunityReference existir; devolver JsonResponse com success true, message, data.reference, data.status, data.nextStep e submittedAt. Em caso de falha, registar o erro no log e devolver mensagem genérica sem expor detalhes internos."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1175""],""aceitacao"":""Lógica recomendada: receber StoreInterestRequestRequest; obter dados validados; gerar reference no formato IR-YYYY-000001; criar registo em InterestRequest; guardar IP, user_agent e consentimento de privacidade; associar opportunity_id quando a opportunityReference existir; devolver JsonResponse com success true, message, data.reference, data.status, data.nextStep e submittedAt. Em caso de falha, registar o erro no log e devolver mensagem genérica sem expor detalhes internos."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.desk_cases: 1 registos; public.desk_requests: 0 registos; public.desk_institutional_links: 0 registos; public.desk_messages: 0 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.","Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento","Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: balcão. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,balcão,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Services/VirtualDesk.php; app/Services/Ai/InvestorGuidance.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,InvestorGuidanceTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.,Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-efd550fd-0103,"Regras mínimas de validação: fullName obrigatório com 3 a 150 caracteres; email obrigatório e válido; phone opcional até 30 caracteres; investorType obrigatório entre individual, empresa, fundo, entidade_publica, parceiro_tecnico e outro; country obrigatório; sectorInterest obrigatório; opportunityReference opcional e existente quando informado; investmentRange opcional; message obrigatória com 20 a 2000 caracteres; privacyConsent obrigatório e verdadeiro. Aplicar rate limiting por IP e email para reduzir spam.",portal do investidor\backup\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1026 | portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1176,negócios,/api/v1/business-opportunities; /api/v1/business-opportunities/{slug}; /api/v1/existing-business/listings; /api/v1/existing-business/listings/{id}; /api/v1/existing-business/listings/{id}/objects; /api/v1/existing-business/listings/{id}/objects/{object}; /api/v1/existing-business/listings/{id}/transitions; /api/v1/existing-business/listings/{id}/verifications; /api/v1/existing-business/reviews; /api/v1/simulation-drafts/linkable-businesses; /api/v1/simulation-drafts/{id}/business-link; /investidor/negocios,"ExistingBusinessDrafts/Policy, anúncio público, InterestSubmission e filtros atuais. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Negócio→revisão/publicação→interesse→origem→estatística única→recuperação; preparar caso existente autorizado sem forçar estado. Critério individual original preservado; cobertura atual ainda não individualizada.,Políticas legadas próprias e docs/mandatos; QA18445zero anúncios publicados; notificaçõesOFF. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"MASTER-efd550fd-0103: Regras mínimas de validação: fullName obrigatório com 3 a 150 caracteres; email obrigatório e válido; phone opcional até 30 caracteres; investorType obrigatório entre individual, empresa, fundo, entidade_publica, parceiro_tecnico e outro; country obrigatório; sectorInterest obrigatório; opportunityReference opcional e existente quando informado; investmentRange opcional; message obrigatória com 20 a 2000 caracteres; privacyConsent obrigatório e verdadeiro. Aplicar rate limiting por IP e email para reduzir spam. | MASTER-9f5719c8-0128: Regras mínimas de validação: fullName obrigatório com 3 a 150 caracteres; email obrigatório e válido; phone opcional até 30 caracteres; investorType obrigatório entre individual, empresa, fundo, entidade_publica, parceiro_tecnico e outro; country obrigatório; sectorInterest obrigatório; opportunityReference opcional e existente quando informado; investmentRange opcional; message obrigatória com 20 a 2000 caracteres; privacyConsent obrigatório e verdadeiro. Aplicar rate limiting por IP e email para reduzir spam.",P2,MASTER-efd550fd-0103: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-9f5719c8-0128: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-efd550fd-0103 | MASTER-9f5719c8-0128,2,"[{""id"":""MASTER-efd550fd-0103"",""pedido"":""Regras mínimas de validação: fullName obrigatório com 3 a 150 caracteres; email obrigatório e válido; phone opcional até 30 caracteres; investorType obrigatório entre individual, empresa, fundo, entidade_publica, parceiro_tecnico e outro; country obrigatório; sectorInterest obrigatório; opportunityReference opcional e existente quando informado; investmentRange opcional; message obrigatória com 20 a 2000 caracteres; privacyConsent obrigatório e verdadeiro. Aplicar rate limiting por IP e email para reduzir spam."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1026""],""aceitacao"":""Regras mínimas de validação: fullName obrigatório com 3 a 150 caracteres; email obrigatório e válido; phone opcional até 30 caracteres; investorType obrigatório entre individual, empresa, fundo, entidade_publica, parceiro_tecnico e outro; country obrigatório; sectorInterest obrigatório; opportunityReference opcional e existente quando informado; investmentRange opcional; message obrigatória com 20 a 2000 caracteres; privacyConsent obrigatório e verdadeiro. Aplicar rate limiting por IP e email para reduzir spam."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""negócios""},{""id"":""MASTER-9f5719c8-0128"",""pedido"":""Regras mínimas de validação: fullName obrigatório com 3 a 150 caracteres; email obrigatório e válido; phone opcional até 30 caracteres; investorType obrigatório entre individual, empresa, fundo, entidade_publica, parceiro_tecnico e outro; country obrigatório; sectorInterest obrigatório; opportunityReference opcional e existente quando informado; investmentRange opcional; message obrigatória com 20 a 2000 caracteres; privacyConsent obrigatório e verdadeiro. Aplicar rate limiting por IP e email para reduzir spam."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1176""],""aceitacao"":""Regras mínimas de validação: fullName obrigatório com 3 a 150 caracteres; email obrigatório e válido; phone opcional até 30 caracteres; investorType obrigatório entre individual, empresa, fundo, entidade_publica, parceiro_tecnico e outro; country obrigatório; sectorInterest obrigatório; opportunityReference opcional e existente quando informado; investmentRange opcional; message obrigatória com 20 a 2000 caracteres; privacyConsent obrigatório e verdadeiro. Aplicar rate limiting por IP e email para reduzir spam."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""negócios""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.existing_businesses: 2 registos; public.existing_business_revisions: 2 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Negócio→revisão/publicação→interesse→origem→estatística única→recuperação; preparar caso existente autorizado sem forçar estado. Critério individual original preservado; cobertura atual ainda não individualizada.,"ExistingBusinessDrafts/Policy, anúncio público, InterestSubmission e filtros atuais",Políticas legadas próprias e docs/mandatos; QA18445zero anúncios publicados; notificaçõesOFF.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: negócios. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,negócios,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Http/Controllers/ExistingBusinessController.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"ExistingBusinessFoundationTest, ExistingBusinessIntakeTest, ExistingBusinessWizardTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
-MASTER-efd550fd-0104,"Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada.",portal do investidor\backup\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1029 | portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1179,oportunidades,/api/v1/business-opportunities; /api/v1/business-opportunities/{slug}; /investidor/terra-duat; /investidor/terra-duat/novo; /investidor/terra-duat/{id}; /investidor/terra-duat/{id}/actualizacoes; /investidor/terra-duat/{id}/documentos; /investidor/terra-duat/{id}/documentos/{attachment}; /investidor/terra-duat/{id}/editar; /investidor/terra-duat/{id}/imprimir; /investidor/terra-duat/{id}/solicitar-apoio; /management/opportunities,"OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada.,"030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-efd550fd-0104: Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada. | MASTER-9f5719c8-0129: Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada.",P1,MASTER-efd550fd-0104: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-9f5719c8-0129: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-efd550fd-0104 | MASTER-9f5719c8-0129,2,"[{""id"":""MASTER-efd550fd-0104"",""pedido"":""Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1029""],""aceitacao"":""Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""oportunidades""},{""id"":""MASTER-9f5719c8-0129"",""pedido"":""Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1179""],""aceitacao"":""Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""oportunidades""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.opportunities: 6 registos; public.opportunity_images: tabela ausente; public.opportunity_documents: tabela ausente; public.opportunity_location_drafts: tabela ausente,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global. | 23/10/2026 — adequação do hero por pedido expresso da Tempo. Aplicadas as orientações permanentes AGENTS.md de 12/10 e 22/10/2026: regras da Tempo, escolhas técnicas identificadas e preservação de dados/histórico. Rotação, WebP e composição são escolhas de implementação. Pesquisa mantém o catálogo existente; não constitui pesquisa global de legislação/licenciamento nem nova restrição organizacional. | 23/10/2026 — revisão expressa da Tempo: escrita dinâmica do hero e remoção do acesso jurídico no hero substituem as escolhas técnicas da primeira iteração. Pedido do proprietário aplicado segundo AGENTS.md de 12/10 e 22/10/2026; sem criar regras de negócio. Histórico, critérios e estados anteriores preservados. | 23/10/2026 — decisão expressa da Tempo: remover controlos visíveis do hero. Substitui os controlos adicionados como escolha de implementação, segundo as orientações permanentes AGENTS.md de 12/10 e 22/10/2026; dados, histórico e estados preservados.",Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada.,"OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources","030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: oportunidades. Esforço de código adicional só após lacuna reproduzida.,"outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | 23/10/2026 — adequação do hero por pedido expresso da Tempo: docs/investmoz/public-portal-hero-validation.json; tools/portal-hero-qa.mjs; outputs/portal-hero-20261023/qa-results.json e capturas. Componentes reais com API/navegação sintéticas, sem base activa. Prova limitada ao hero, pesquisa de oportunidades e preservação da entrada documental; critérios mais amplos não encerrados. | 23/10/2026 — revisão expressa da Tempo: escrita dinâmica do hero; remoção de Termos de uso no hero. tools/portal-hero-qa.mjs; outputs/portal-hero-typing-20261023/qa-results.json (sete cenários, sem erros JavaScript); docs/investmoz/public-portal-hero-validation.json:latestRevision. Demonstrados título→frase, reinício manual/automático, pausa/retoma, movimento reduzido e posição estável da pesquisa. TypeScript/lint/build aprovados; dados sintéticos, sem base activa. O critério amplo desta linha não é encerrado. | 23/10/2026 — decisão expressa da Tempo: remover controlos visíveis do hero. Ausência de botão de pausa e bolinhas, rotação automática e escrita dinâmica demonstradas em sete cenários sem erros JavaScript. outputs/portal-hero-no-controls-20261023/qa-results.json; docs/investmoz/public-portal-hero-validation.json:latestRevision. Lint e compilação aprovados. Prova limitada à revisão visual; critério amplo não encerrado.",oportunidades,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Services/OpportunityManagement.php; app/Services/OpportunityResources.php; resources/js/pages/management/opportunity-draft.tsx — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"OpportunityManagementTest, OpportunityResourcesTest, OpportunityOriginReviewTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
+MASTER-efd550fd-0104,"Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada.",portal do investidor\backup\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1029 | portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1179,oportunidades,/api/v1/business-opportunities; /api/v1/business-opportunities/{slug}; /investidor/terra-duat; /investidor/terra-duat/novo; /investidor/terra-duat/{id}; /investidor/terra-duat/{id}/actualizacoes; /investidor/terra-duat/{id}/documentos; /investidor/terra-duat/{id}/documentos/{attachment}; /investidor/terra-duat/{id}/editar; /investidor/terra-duat/{id}/imprimir; /investidor/terra-duat/{id}/solicitar-apoio; /management/opportunities,"OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada.,"030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-efd550fd-0104: Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada. | MASTER-9f5719c8-0129: Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada.",P1,MASTER-efd550fd-0104: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-9f5719c8-0129: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-efd550fd-0104 | MASTER-9f5719c8-0129,2,"[{""id"":""MASTER-efd550fd-0104"",""pedido"":""Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1029""],""aceitacao"":""Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""oportunidades""},{""id"":""MASTER-9f5719c8-0129"",""pedido"":""Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1179""],""aceitacao"":""Código sugerido: importar React, useEffect e useState; definir API_BASE_URL com import.meta.env.VITE_API_URL; criar estado para homeData, loading, error e searchTerm; carregar dados com fetch(`${API_BASE_URL}/api/v1/home?locale=pt`); validar response.ok; guardar JSON em homeData; apresentar loading enquanto carrega; apresentar mensagem de erro se falhar; renderizar Header, hero, botões rápidos, pesquisa, sectores estratégicos, oportunidades em destaque, percurso do investidor, incentivos, estatísticas e footer. A navegação dos botões pode usar window.location.href ou React Router conforme a arquitectura adoptada."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""oportunidades""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.opportunities: 6 registos; public.opportunity_images: tabela ausente; public.opportunity_documents: tabela ausente; public.opportunity_location_drafts: tabela ausente,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global. | 23/10/2026 — adequação do hero por pedido expresso da Tempo. Aplicadas as orientações permanentes AGENTS.md de 12/10 e 22/10/2026: regras da Tempo, escolhas técnicas identificadas e preservação de dados/histórico. Rotação, WebP e composição são escolhas de implementação. Pesquisa mantém o catálogo existente; não constitui pesquisa global de legislação/licenciamento nem nova restrição organizacional. | 23/10/2026 — revisão expressa da Tempo: escrita dinâmica do hero e remoção do acesso jurídico no hero substituem as escolhas técnicas da primeira iteração. Pedido do proprietário aplicado segundo AGENTS.md de 12/10 e 22/10/2026; sem criar regras de negócio. Histórico, critérios e estados anteriores preservados. | 23/10/2026 — decisão expressa da Tempo: remover controlos visíveis do hero. Substitui os controlos adicionados como escolha de implementação, segundo as orientações permanentes AGENTS.md de 12/10 e 22/10/2026; dados, histórico e estados preservados. | 23/10/2026 — imagens dos cinco cartões de contexto, pedido e anexo da Tempo. Aplicadas AGENTS.md de 12/10 e 22/10/2026. O anexo define as exigências visuais; componente React, WebP responsivo e alternativas por ficheiro são escolhas técnicas. Sem novas condições organizacionais, alteração de dados, rotas, permissões ou histórico. | 23/10/2026 — revisão Tempo: título vermelho e cartões compactos. Pedido do proprietário substitui as alturas mínimas e espaçamentos anteriores, que eram escolhas técnicas. Aplicadas as orientações AGENTS.md de 12/10 e 22/10/2026; conteúdos, dados, histórico e destinos preservados. | 23/10/2026 — adaptação de sectores do tempo-dashboard e títulos vermelhos, pedido da Tempo. Aplicadas AGENTS.md de 12/10 e 22/10/2026: referência e estrutura expressamente indicadas pelo proprietário; componentes, WebP e estilos partilhados são escolhas técnicas. Dados, contagens, descrições, classificação, especializações, URLs, permissões, histórico e estados preservados; sem importar regras de negócio ou dados de outro projecto.",Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada.,"OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources","030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: oportunidades. Esforço de código adicional só após lacuna reproduzida.,"outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | 23/10/2026 — adequação do hero por pedido expresso da Tempo: docs/investmoz/public-portal-hero-validation.json; tools/portal-hero-qa.mjs; outputs/portal-hero-20261023/qa-results.json e capturas. Componentes reais com API/navegação sintéticas, sem base activa. Prova limitada ao hero, pesquisa de oportunidades e preservação da entrada documental; critérios mais amplos não encerrados. | 23/10/2026 — revisão expressa da Tempo: escrita dinâmica do hero; remoção de Termos de uso no hero. tools/portal-hero-qa.mjs; outputs/portal-hero-typing-20261023/qa-results.json (sete cenários, sem erros JavaScript); docs/investmoz/public-portal-hero-validation.json:latestRevision. Demonstrados título→frase, reinício manual/automático, pausa/retoma, movimento reduzido e posição estável da pesquisa. TypeScript/lint/build aprovados; dados sintéticos, sem base activa. O critério amplo desta linha não é encerrado. | 23/10/2026 — decisão expressa da Tempo: remover controlos visíveis do hero. Ausência de botão de pausa e bolinhas, rotação automática e escrita dinâmica demonstradas em sete cenários sem erros JavaScript. outputs/portal-hero-no-controls-20261023/qa-results.json; docs/investmoz/public-portal-hero-validation.json:latestRevision. Lint e compilação aprovados. Prova limitada à revisão visual; critério amplo não encerrado. | 23/10/2026 — imagens dos cinco cartões de contexto, pedido e anexo da Tempo: docs/investmoz/public-portal-context-images.json; tools/portal-context-cards-qa.mjs; outputs/investment-context-20261023/qa-results.json (seis larguras e dois cenários de falha, sem erros JavaScript), capturas e build. Fotos ilustrativas geradas com prompts/hashes, sem atribuição geográfica. Destinos/títulos/descrições preservados; critério amplo não encerrado. | 23/10/2026 — revisão Tempo: título vermelho e cartões compactos. outputs/investment-context-compact-20261023/qa-results.json e capturas; oito cenários aprovados, sem erros JavaScript; lint/build aprovados. docs/investmoz/public-portal-context-images.json:layoutRevision. Prova limitada à apresentação dos cartões, sem encerrar o critério amplo. | 23/10/2026 — adaptação de sectores do tempo-dashboard e títulos vermelhos, pedido da Tempo: docs/investmoz/public-portal-sectors-validation.json; tools/portal-home-sectors-qa.mjs; outputs/home-sectors-20261023/qa-results.json e capturas. Nove cenários, seis larguras, cinco/dez sectores, dez fichas, Fintech, regresso, imagens alternativas, catálogo vazio e seis títulos uniformes; sem erros JavaScript. Vinte testes frontend existentes, TypeScript/lint/build aprovados. Dados sintéticos; critério amplo não encerrado. | 23/10/2026 — botão de apoio compacto e vermelho, pedido expresso da Tempo: layouts/portal-navigation.tsx; outputs/support-button-20261023/qa-results.json. Três larguras, cerca de 223×44 px, ligação /apoio e foco preservados, sem transbordo/erros JavaScript. Orientações AGENTS.md de 12/10 e 22/10 aplicadas; escolha visual anterior substituída pela decisão do proprietário. Critério amplo e dados não alterados. | [REVISÃO SUPERADA: interpretação indevida do Codex, não decisão da Tempo; apoio e rodapé geral restaurados] 23/10/2026 — revisão histórica do rodapé abreviado e claro: docs/investmoz/public-portal-sections.md; outputs/footer-compact-20261023/qa-results.json, check.mjs, capturas e build-local.log. Removida faixa escura duplicada; apoio compacto com ícone, gestão por ícone acessível, detalhes institucionais/legais recolhidos e disponíveis por teclado. Três larguras sem transbordo ou erros JavaScript; lint e build locais aprovados. Escolhas de apresentação; dados, URLs, autenticação, estados e critérios preservados. Interface com dados sintéticos, sem alteração na base activa; critério amplo não encerrado. | 23/10/2026 — correcção expressa do âmbito da abreviação pela Tempo: apenas o bloco INVESTE Moçambique/descrição/Acesso à gestão foi abreviado num ícone acessível para /acesso-gestao, com fundo branco. Restaurados integralmente rodapé geral e respectivos estilos; botão Contactar Apoio ao Investidor restaurado à apresentação compacta/vermelha sem ícone. docs/investmoz/public-portal-sections.md e outputs/footer-scope-correction-20261023/{check.mjs,qa-results.json,build-local.log,capturas}. Três larguras, teclado, contactos/links visíveis, sem transbordo ou erros JavaScript; lint/build locais aprovados. Dados e estados preservados; critério amplo não encerrado. | 23/10/2026 — imagens nas três etapas de Como Investir, pedido expresso da Tempo: docs/investmoz/public-portal-steps-images.json, docs/investmoz/public-portal-sections.md e outputs/investment-steps-20261023/{check.mjs,qa-results.json,capturas,build-local.log,types.log}. Três fotografias ilustrativas geradas distintas; originais, prompts e hashes preservados; WebP 960/480/240, alt, lazy e dimensões reservadas. Oito cenários: seis larguras, três destinos por teclado, carregamento sem deslocamento e duas falhas de imagem; sem transbordo ou erros JavaScript. TypeScript/lint/build aprovados. Componente/derivados são escolhas técnicas; textos, destinos, dados, apoio/rodapé e restantes secções preservados. QA com API sintética, sem base activa; critério amplo não encerrado.",oportunidades,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Services/OpportunityManagement.php; app/Services/OpportunityResources.php; resources/js/pages/management/opportunity-draft.tsx — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"OpportunityManagementTest, OpportunityResourcesTest, OpportunityOriginReviewTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-efd550fd-0105,"O controller deve ser colocado em app/Http/Controllers/Api/V1/HomeController.php. A versão inicial pode devolver um payload estruturado directamente, mas a versão recomendada para produção deve delegar a composição dos dados para um HomeService, permitindo cache, testes unitários e separação da lógica de negócio.",portal do investidor\backup\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1031 | portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1181,Balcão/orientação,/balcao-virtual/contextos; /balcao-virtual/dossiers; /balcao-virtual/dossiers/{id}; /balcao-virtual/dossiers/{id}/documentos; /balcao-virtual/dossiers/{id}/documentos/{document}; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /balcao-virtual/dossiers/{id}/etapas; /balcao-virtual/dossiers/{id}/fontes; /balcao-virtual/dossiers/{id}/orientacao; /balcao-virtual/dossiers/{id}/pedidos; /balcao-virtual/dossiers/{id}/pressupostos; /balcao-virtual/dossiers/{id}/recomendacoes,"VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-efd550fd-0105: O controller deve ser colocado em app/Http/Controllers/Api/V1/HomeController.php. A versão inicial pode devolver um payload estruturado directamente, mas a versão recomendada para produção deve delegar a composição dos dados para um HomeService, permitindo cache, testes unitários e separação da lógica de negócio. | MASTER-9f5719c8-0130: O controller deve ser colocado em app/Http/Controllers/Api/V1/HomeController.php. A versão inicial pode devolver um payload estruturado directamente, mas a versão recomendada para produção deve delegar a composição dos dados para um HomeService, permitindo cache, testes unitários e separação da lógica de negócio.",P2,MASTER-efd550fd-0105: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-9f5719c8-0130: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-efd550fd-0105 | MASTER-9f5719c8-0130,2,"[{""id"":""MASTER-efd550fd-0105"",""pedido"":""O controller deve ser colocado em app/Http/Controllers/Api/V1/HomeController.php. A versão inicial pode devolver um payload estruturado directamente, mas a versão recomendada para produção deve delegar a composição dos dados para um HomeService, permitindo cache, testes unitários e separação da lógica de negócio."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1031""],""aceitacao"":""O controller deve ser colocado em app/Http/Controllers/Api/V1/HomeController.php. A versão inicial pode devolver um payload estruturado directamente, mas a versão recomendada para produção deve delegar a composição dos dados para um HomeService, permitindo cache, testes unitários e separação da lógica de negócio."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-9f5719c8-0130"",""pedido"":""O controller deve ser colocado em app/Http/Controllers/Api/V1/HomeController.php. A versão inicial pode devolver um payload estruturado directamente, mas a versão recomendada para produção deve delegar a composição dos dados para um HomeService, permitindo cache, testes unitários e separação da lógica de negócio."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1181""],""aceitacao"":""O controller deve ser colocado em app/Http/Controllers/Api/V1/HomeController.php. A versão inicial pode devolver um payload estruturado directamente, mas a versão recomendada para produção deve delegar a composição dos dados para um HomeService, permitindo cache, testes unitários e separação da lógica de negócio."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.desk_cases: 1 registos; public.desk_requests: 0 registos; public.desk_institutional_links: 0 registos; public.desk_messages: 0 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.","Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento","Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: balcão. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,balcão,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Services/VirtualDesk.php; app/Services/Ai/InvestorGuidance.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,InvestorGuidanceTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.,Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-efd550fd-0106,"Estrutura lógica recomendada: definir namespace App\Http\Controllers\Api\V1; importar Request, JsonResponse, Cache e modelos públicos; criar método show(Request $request): JsonResponse; validar locale com valores permitidos pt e en; aplicar cache por locale durante 10 a 30 minutos; devolver hero, quickActions, searchSuggestions, sectors, featuredOpportunities, investorJourney, incentivesPreview, legalHighlights, partnershipExchange e stats; limitar os campos expostos para evitar publicação de dados sensíveis.",portal do investidor\backup\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1032 | portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1182,Balcão/orientação,/balcao-virtual/contextos; /balcao-virtual/dossiers; /balcao-virtual/dossiers/{id}; /balcao-virtual/dossiers/{id}/documentos; /balcao-virtual/dossiers/{id}/documentos/{document}; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /balcao-virtual/dossiers/{id}/etapas; /balcao-virtual/dossiers/{id}/fontes; /balcao-virtual/dossiers/{id}/orientacao; /balcao-virtual/dossiers/{id}/pedidos; /balcao-virtual/dossiers/{id}/pressupostos; /balcao-virtual/dossiers/{id}/recomendacoes,"VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-efd550fd-0106: Estrutura lógica recomendada: definir namespace App\Http\Controllers\Api\V1; importar Request, JsonResponse, Cache e modelos públicos; criar método show(Request $request): JsonResponse; validar locale com valores permitidos pt e en; aplicar cache por locale durante 10 a 30 minutos; devolver hero, quickActions, searchSuggestions, sectors, featuredOpportunities, investorJourney, incentivesPreview, legalHighlights, partnershipExchange e stats; limitar os campos expostos para evitar publicação de dados sensíveis. | MASTER-9f5719c8-0131: Estrutura lógica recomendada: definir namespace App\Http\Controllers\Api\V1; importar Request, JsonResponse, Cache e modelos públicos; criar método show(Request $request): JsonResponse; validar locale com valores permitidos pt e en; aplicar cache por locale durante 10 a 30 minutos; devolver hero, quickActions, searchSuggestions, sectors, featuredOpportunities, investorJourney, incentivesPreview, legalHighlights, partnershipExchange e stats; limitar os campos expostos para evitar publicação de dados sensíveis.",P2,MASTER-efd550fd-0106: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-9f5719c8-0131: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-efd550fd-0106 | MASTER-9f5719c8-0131,2,"[{""id"":""MASTER-efd550fd-0106"",""pedido"":""Estrutura lógica recomendada: definir namespace App\\Http\\Controllers\\Api\\V1; importar Request, JsonResponse, Cache e modelos públicos; criar método show(Request $request): JsonResponse; validar locale com valores permitidos pt e en; aplicar cache por locale durante 10 a 30 minutos; devolver hero, quickActions, searchSuggestions, sectors, featuredOpportunities, investorJourney, incentivesPreview, legalHighlights, partnershipExchange e stats; limitar os campos expostos para evitar publicação de dados sensíveis."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1032""],""aceitacao"":""Estrutura lógica recomendada: definir namespace App\\Http\\Controllers\\Api\\V1; importar Request, JsonResponse, Cache e modelos públicos; criar método show(Request $request): JsonResponse; validar locale com valores permitidos pt e en; aplicar cache por locale durante 10 a 30 minutos; devolver hero, quickActions, searchSuggestions, sectors, featuredOpportunities, investorJourney, incentivesPreview, legalHighlights, partnershipExchange e stats; limitar os campos expostos para evitar publicação de dados sensíveis."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""},{""id"":""MASTER-9f5719c8-0131"",""pedido"":""Estrutura lógica recomendada: definir namespace App\\Http\\Controllers\\Api\\V1; importar Request, JsonResponse, Cache e modelos públicos; criar método show(Request $request): JsonResponse; validar locale com valores permitidos pt e en; aplicar cache por locale durante 10 a 30 minutos; devolver hero, quickActions, searchSuggestions, sectors, featuredOpportunities, investorJourney, incentivesPreview, legalHighlights, partnershipExchange e stats; limitar os campos expostos para evitar publicação de dados sensíveis."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1182""],""aceitacao"":""Estrutura lógica recomendada: definir namespace App\\Http\\Controllers\\Api\\V1; importar Request, JsonResponse, Cache e modelos públicos; criar método show(Request $request): JsonResponse; validar locale com valores permitidos pt e en; aplicar cache por locale durante 10 a 30 minutos; devolver hero, quickActions, searchSuggestions, sectors, featuredOpportunities, investorJourney, incentivesPreview, legalHighlights, partnershipExchange e stats; limitar os campos expostos para evitar publicação de dados sensíveis."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.desk_cases: 1 registos; public.desk_requests: 0 registos; public.desk_institutional_links: 0 registos; public.desk_messages: 0 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.","Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento","Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: balcão. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,balcão,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Services/VirtualDesk.php; app/Services/Ai/InvestorGuidance.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,InvestorGuidanceTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.,Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-efd550fd-0107,"Para manter controllers limpos e regras reutilizáveis, os formulários públicos devem usar Form Requests. Os exemplos prioritários para a home são: StoreInterestRequest, StoreContactRequest e SearchOpportunityRequest.",portal do investidor\backup\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1041 | portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1191,biblioteca,//; /Simulador; /api/v1/ai/documents; /api/v1/documents/recommendations; /api/v2/investment/admin/legal-sources; /api/v2/investment/admin/legal-sources/{id}/{action}; /apoio; /balcao-virtual; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /como-investir; /documentos; /documentos/{id},"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"MASTER-efd550fd-0107: Para manter controllers limpos e regras reutilizáveis, os formulários públicos devem usar Form Requests. Os exemplos prioritários para a home são: StoreInterestRequest, StoreContactRequest e SearchOpportunityRequest. | MASTER-9f5719c8-0132: Para manter controllers limpos e regras reutilizáveis, os formulários públicos devem usar Form Requests. Os exemplos prioritários para a home são: StoreInterestRequest, StoreContactRequest e SearchOpportunityRequest.",P2,MASTER-efd550fd-0107: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas | MASTER-9f5719c8-0132: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-efd550fd-0107 | MASTER-9f5719c8-0132,2,"[{""id"":""MASTER-efd550fd-0107"",""pedido"":""Para manter controllers limpos e regras reutilizáveis, os formulários públicos devem usar Form Requests. Os exemplos prioritários para a home são: StoreInterestRequest, StoreContactRequest e SearchOpportunityRequest."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor 1.docx; SHA efd550fd2a9d2a21785d7b3c140d4608f1ba27c52f156e2709e9fbf388a1a569; w:p 1041""],""aceitacao"":""Para manter controllers limpos e regras reutilizáveis, os formulários públicos devem usar Form Requests. Os exemplos prioritários para a home são: StoreInterestRequest, StoreContactRequest e SearchOpportunityRequest."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""biblioteca""},{""id"":""MASTER-9f5719c8-0132"",""pedido"":""Para manter controllers limpos e regras reutilizáveis, os formulários públicos devem usar Form Requests. Os exemplos prioritários para a home são: StoreInterestRequest, StoreContactRequest e SearchOpportunityRequest."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 1191""],""aceitacao"":""Para manter controllers limpos e regras reutilizáveis, os formulários públicos devem usar Form Requests. Os exemplos prioritários para a home são: StoreInterestRequest, StoreContactRequest e SearchOpportunityRequest."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""biblioteca""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.documents: 4 registos; public.portal_resources: 4 registos; public.portal_resource_links: 19 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas",Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: documentos e legado. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,documentos e legado,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Http/Controllers/PortalServicesController.php; app/Jobs/ScanDocumentForMalware.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"PortalServicesTest, DocumentLibrarySchemaCompatibilityTest, ImportDocumentBatchTest, ClamDScannerIntegrationTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
@@ -1083,7 +1083,7 @@ MASTER-efd550fd-0190,"A pesquisa deve aparecer antes dos sectores, com sugestõe
MASTER-9f5719c8-0001,"Para melhorar a leitura e facilitar a execução do projecto, o documento deve passar a organizar o conteúdo em capítulos próprios, separando a fundamentação estratégica, o diagnóstico do portal, as recomendações de UX, os modelos funcionais e a implementação técnica. Toda a programação em React e Laravel deve ficar concentrada no capítulo técnico, em sequência lógica de desenvolvimento.",portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 87,Balcão/orientação,/balcao-virtual/contextos; /balcao-virtual/dossiers; /balcao-virtual/dossiers/{id}; /balcao-virtual/dossiers/{id}/documentos; /balcao-virtual/dossiers/{id}/documentos/{document}; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /balcao-virtual/dossiers/{id}/etapas; /balcao-virtual/dossiers/{id}/fontes; /balcao-virtual/dossiers/{id}/orientacao; /balcao-virtual/dossiers/{id}/pedidos; /balcao-virtual/dossiers/{id}/pressupostos; /balcao-virtual/dossiers/{id}/recomendacoes,"VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-9f5719c8-0001: Para melhorar a leitura e facilitar a execução do projecto, o documento deve passar a organizar o conteúdo em capítulos próprios, separando a fundamentação estratégica, o diagnóstico do portal, as recomendações de UX, os modelos funcionais e a implementação técnica. Toda a programação em React e Laravel deve ficar concentrada no capítulo técnico, em sequência lógica de desenvolvimento.",P2,MASTER-9f5719c8-0001: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-9f5719c8-0001,1,"[{""id"":""MASTER-9f5719c8-0001"",""pedido"":""Para melhorar a leitura e facilitar a execução do projecto, o documento deve passar a organizar o conteúdo em capítulos próprios, separando a fundamentação estratégica, o diagnóstico do portal, as recomendações de UX, os modelos funcionais e a implementação técnica. Toda a programação em React e Laravel deve ficar concentrada no capítulo técnico, em sequência lógica de desenvolvimento."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 87""],""aceitacao"":""Para melhorar a leitura e facilitar a execução do projecto, o documento deve passar a organizar o conteúdo em capítulos próprios, separando a fundamentação estratégica, o diagnóstico do portal, as recomendações de UX, os modelos funcionais e a implementação técnica. Toda a programação em React e Laravel deve ficar concentrada no capítulo técnico, em sequência lógica de desenvolvimento."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""Balcão/orientação""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.desk_cases: 1 registos; public.desk_requests: 0 registos; public.desk_institutional_links: 0 registos; public.desk_messages: 0 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.","Pedido contextual→gravar→submeter→nova sessão→gestor→mensagem/documentos/resultado, reaproveitando A/B. Critério individual original preservado; cobertura atual ainda não individualizada.","VirtualDesk, pedidos/casos, anexos, contexto dossier e acompanhamento","Perfis próprios do Balcão; serviços/campos e decisões externas aplicáveis, sem inventar destinatário/prazo.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: balcão. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,balcão,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Services/VirtualDesk.php; app/Services/Ai/InvestorGuidance.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,InvestorGuidanceTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.,Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-9f5719c8-0063,"Organização do capítulo: todo o código React e Laravel, exemplos de payload JSON, migrations, controllers, services, componentes, testes e instruções de integração devem ficar concentrados neste Capítulo 9. Para evitar dispersão, os exemplos práticos devem ser separados da documentação técnica explicativa, mantendo primeiro a arquitectura e depois os blocos de implementação copiáveis.",portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 702,biblioteca,//; /Simulador; /api/v1/ai/documents; /api/v1/documents/recommendations; /api/v2/investment/admin/legal-sources; /api/v2/investment/admin/legal-sources/{id}/{action}; /apoio; /balcao-virtual; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /como-investir; /documentos; /documentos/{id},"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"MASTER-9f5719c8-0063: Organização do capítulo: todo o código React e Laravel, exemplos de payload JSON, migrations, controllers, services, componentes, testes e instruções de integração devem ficar concentrados neste Capítulo 9. Para evitar dispersão, os exemplos práticos devem ser separados da documentação técnica explicativa, mantendo primeiro a arquitectura e depois os blocos de implementação copiáveis.",P2,MASTER-9f5719c8-0063: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-9f5719c8-0063,1,"[{""id"":""MASTER-9f5719c8-0063"",""pedido"":""Organização do capítulo: todo o código React e Laravel, exemplos de payload JSON, migrations, controllers, services, componentes, testes e instruções de integração devem ficar concentrados neste Capítulo 9. Para evitar dispersão, os exemplos práticos devem ser separados da documentação técnica explicativa, mantendo primeiro a arquitectura e depois os blocos de implementação copiáveis."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 702""],""aceitacao"":""Organização do capítulo: todo o código React e Laravel, exemplos de payload JSON, migrations, controllers, services, componentes, testes e instruções de integração devem ficar concentrados neste Capítulo 9. Para evitar dispersão, os exemplos práticos devem ser separados da documentação técnica explicativa, mantendo primeiro a arquitectura e depois os blocos de implementação copiáveis."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""biblioteca""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.documents: 4 registos; public.portal_resources: 4 registos; public.portal_resource_links: 19 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas",Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: documentos e legado. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,documentos e legado,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Http/Controllers/PortalServicesController.php; app/Jobs/ScanDocumentForMalware.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"PortalServicesTest, DocumentLibrarySchemaCompatibilityTest, ImportDocumentBatchTest, ClamDScannerIntegrationTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-9f5719c8-0065,"Esta subsecção deve reunir a explicação conceptual da arquitectura, o papel dos módulos, a estrutura de pastas, o desenho dos endpoints, as regras de validação, os princípios de segurança, as responsabilidades dos componentes e o fluxo técnico-funcional entre React, Laravel e a base de dados.",portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 706,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-9f5719c8-0065: Esta subsecção deve reunir a explicação conceptual da arquitectura, o papel dos módulos, a estrutura de pastas, o desenho dos endpoints, as regras de validação, os princípios de segurança, as responsabilidades dos componentes e o fluxo técnico-funcional entre React, Laravel e a base de dados.",P2,MASTER-9f5719c8-0065: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-9f5719c8-0065,1,"[{""id"":""MASTER-9f5719c8-0065"",""pedido"":""Esta subsecção deve reunir a explicação conceptual da arquitectura, o papel dos módulos, a estrutura de pastas, o desenho dos endpoints, as regras de validação, os princípios de segurança, as responsabilidades dos componentes e o fluxo técnico-funcional entre React, Laravel e a base de dados."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 706""],""aceitacao"":""Esta subsecção deve reunir a explicação conceptual da arquitectura, o papel dos módulos, a estrutura de pastas, o desenho dos endpoints, as regras de validação, os princípios de segurança, as responsabilidades dos componentes e o fluxo técnico-funcional entre React, Laravel e a base de dados."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,Requisito transversal; consultar estado-ativo-after.json,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.,Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
-MASTER-9f5719c8-0077,"Esta subsecção deve concentrar os blocos práticos de implementação: HomePage.jsx, HeroSection.jsx, SectorGrid.jsx, SectorCard.jsx, PortalStats.jsx, FeaturedOpportunities.jsx, homeService.js, opportunityService.js, HomeController.php, SectorController.php, OpportunityController.php, InterestRequestController.php, Form Requests, migrations, seeders, factories, testes e exemplos JSON de resposta da API.",portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 906,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-9f5719c8-0077: Esta subsecção deve concentrar os blocos práticos de implementação: HomePage.jsx, HeroSection.jsx, SectorGrid.jsx, SectorCard.jsx, PortalStats.jsx, FeaturedOpportunities.jsx, homeService.js, opportunityService.js, HomeController.php, SectorController.php, OpportunityController.php, InterestRequestController.php, Form Requests, migrations, seeders, factories, testes e exemplos JSON de resposta da API.",P2,MASTER-9f5719c8-0077: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-9f5719c8-0077,1,"[{""id"":""MASTER-9f5719c8-0077"",""pedido"":""Esta subsecção deve concentrar os blocos práticos de implementação: HomePage.jsx, HeroSection.jsx, SectorGrid.jsx, SectorCard.jsx, PortalStats.jsx, FeaturedOpportunities.jsx, homeService.js, opportunityService.js, HomeController.php, SectorController.php, OpportunityController.php, InterestRequestController.php, Form Requests, migrations, seeders, factories, testes e exemplos JSON de resposta da API."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 906""],""aceitacao"":""Esta subsecção deve concentrar os blocos práticos de implementação: HomePage.jsx, HeroSection.jsx, SectorGrid.jsx, SectorCard.jsx, PortalStats.jsx, FeaturedOpportunities.jsx, homeService.js, opportunityService.js, HomeController.php, SectorController.php, OpportunityController.php, InterestRequestController.php, Form Requests, migrations, seeders, factories, testes e exemplos JSON de resposta da API."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,Requisito transversal; consultar estado-ativo-after.json,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.,Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
+MASTER-9f5719c8-0077,"Esta subsecção deve concentrar os blocos práticos de implementação: HomePage.jsx, HeroSection.jsx, SectorGrid.jsx, SectorCard.jsx, PortalStats.jsx, FeaturedOpportunities.jsx, homeService.js, opportunityService.js, HomeController.php, SectorController.php, OpportunityController.php, InterestRequestController.php, Form Requests, migrations, seeders, factories, testes e exemplos JSON de resposta da API.",portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 906,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-9f5719c8-0077: Esta subsecção deve concentrar os blocos práticos de implementação: HomePage.jsx, HeroSection.jsx, SectorGrid.jsx, SectorCard.jsx, PortalStats.jsx, FeaturedOpportunities.jsx, homeService.js, opportunityService.js, HomeController.php, SectorController.php, OpportunityController.php, InterestRequestController.php, Form Requests, migrations, seeders, factories, testes e exemplos JSON de resposta da API.",P2,MASTER-9f5719c8-0077: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-9f5719c8-0077,1,"[{""id"":""MASTER-9f5719c8-0077"",""pedido"":""Esta subsecção deve concentrar os blocos práticos de implementação: HomePage.jsx, HeroSection.jsx, SectorGrid.jsx, SectorCard.jsx, PortalStats.jsx, FeaturedOpportunities.jsx, homeService.js, opportunityService.js, HomeController.php, SectorController.php, OpportunityController.php, InterestRequestController.php, Form Requests, migrations, seeders, factories, testes e exemplos JSON de resposta da API."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 906""],""aceitacao"":""Esta subsecção deve concentrar os blocos práticos de implementação: HomePage.jsx, HeroSection.jsx, SectorGrid.jsx, SectorCard.jsx, PortalStats.jsx, FeaturedOpportunities.jsx, homeService.js, opportunityService.js, HomeController.php, SectorController.php, OpportunityController.php, InterestRequestController.php, Form Requests, migrations, seeders, factories, testes e exemplos JSON de resposta da API."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,Requisito transversal; consultar estado-ativo-after.json,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global. | 23/10/2026 — adaptação de sectores do tempo-dashboard e títulos vermelhos, pedido da Tempo. Aplicadas AGENTS.md de 12/10 e 22/10/2026: referência e estrutura expressamente indicadas pelo proprietário; componentes, WebP e estilos partilhados são escolhas técnicas. Dados, contagens, descrições, classificação, especializações, URLs, permissões, histórico e estados preservados; sem importar regras de negócio ou dados de outro projecto.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,"outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | 23/10/2026 — adaptação de sectores do tempo-dashboard e títulos vermelhos, pedido da Tempo: docs/investmoz/public-portal-sectors-validation.json; tools/portal-home-sectors-qa.mjs; outputs/home-sectors-20261023/qa-results.json e capturas. Nove cenários, seis larguras, cinco/dez sectores, dez fichas, Fintech, regresso, imagens alternativas, catálogo vazio e seis títulos uniformes; sem erros JavaScript. Vinte testes frontend existentes, TypeScript/lint/build aprovados. Dados sintéticos; critério amplo não encerrado.",governação e demais cláusulas,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.,Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-9f5719c8-0078,"Cada exemplo prático deve indicar o caminho do ficheiro, a finalidade do ficheiro e o código completo em formato copiável. Sempre que possível, separar frontend, backend, base de dados, testes e payloads JSON em subsecções próprias para facilitar a implementação pela equipa técnica.",portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 908,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-9f5719c8-0078: Cada exemplo prático deve indicar o caminho do ficheiro, a finalidade do ficheiro e o código completo em formato copiável. Sempre que possível, separar frontend, backend, base de dados, testes e payloads JSON em subsecções próprias para facilitar a implementação pela equipa técnica.",P2,MASTER-9f5719c8-0078: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-9f5719c8-0078,1,"[{""id"":""MASTER-9f5719c8-0078"",""pedido"":""Cada exemplo prático deve indicar o caminho do ficheiro, a finalidade do ficheiro e o código completo em formato copiável. Sempre que possível, separar frontend, backend, base de dados, testes e payloads JSON em subsecções próprias para facilitar a implementação pela equipa técnica."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 908""],""aceitacao"":""Cada exemplo prático deve indicar o caminho do ficheiro, a finalidade do ficheiro e o código completo em formato copiável. Sempre que possível, separar frontend, backend, base de dados, testes e payloads JSON em subsecções próprias para facilitar a implementação pela equipa técnica."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,Requisito transversal; consultar estado-ativo-after.json,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.,Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-9f5719c8-0079,"Os novos componentes React da área de oportunidades devem ser tratados como blocos reutilizáveis da página principal e de páginas internas do Portal do Investidor. A sua função é apresentar oportunidades de investimento de forma clara, acessível, responsiva e integrada com os dados fornecidos pela API Laravel.",portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 912,oportunidades,/api/v1/business-opportunities; /api/v1/business-opportunities/{slug}; /investidor/terra-duat; /investidor/terra-duat/novo; /investidor/terra-duat/{id}; /investidor/terra-duat/{id}/actualizacoes; /investidor/terra-duat/{id}/documentos; /investidor/terra-duat/{id}/documentos/{attachment}; /investidor/terra-duat/{id}/editar; /investidor/terra-duat/{id}/imprimir; /investidor/terra-duat/{id}/solicitar-apoio; /management/opportunities,"OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada.,"030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-9f5719c8-0079: Os novos componentes React da área de oportunidades devem ser tratados como blocos reutilizáveis da página principal e de páginas internas do Portal do Investidor. A sua função é apresentar oportunidades de investimento de forma clara, acessível, responsiva e integrada com os dados fornecidos pela API Laravel.",P2,MASTER-9f5719c8-0079: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-9f5719c8-0079,1,"[{""id"":""MASTER-9f5719c8-0079"",""pedido"":""Os novos componentes React da área de oportunidades devem ser tratados como blocos reutilizáveis da página principal e de páginas internas do Portal do Investidor. A sua função é apresentar oportunidades de investimento de forma clara, acessível, responsiva e integrada com os dados fornecidos pela API Laravel."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 912""],""aceitacao"":""Os novos componentes React da área de oportunidades devem ser tratados como blocos reutilizáveis da página principal e de páginas internas do Portal do Investidor. A sua função é apresentar oportunidades de investimento de forma clara, acessível, responsiva e integrada com os dados fornecidos pela API Laravel."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""oportunidades""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.opportunities: 6 registos; public.opportunity_images: tabela ausente; public.opportunity_documents: tabela ausente; public.opportunity_location_drafts: tabela ausente,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada.,"OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources","030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: oportunidades. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,oportunidades,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Services/OpportunityManagement.php; app/Services/OpportunityResources.php; resources/js/pages/management/opportunity-draft.tsx — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"OpportunityManagementTest, OpportunityResourcesTest, OpportunityOriginReviewTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-9f5719c8-0080,"O componente FeaturedOpportunities apresenta oportunidades prioritárias ou editorialmente destacadas. Deve receber uma lista de oportunidades, renderizar cada item através do OpportunityCard e incluir título, descrição, ligação para ver todas as oportunidades e estado vazio quando não existirem projectos destacados.",portal do investidor\backup\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 914,oportunidades,/api/v1/business-opportunities; /api/v1/business-opportunities/{slug}; /investidor/terra-duat; /investidor/terra-duat/novo; /investidor/terra-duat/{id}; /investidor/terra-duat/{id}/actualizacoes; /investidor/terra-duat/{id}/documentos; /investidor/terra-duat/{id}/documentos/{attachment}; /investidor/terra-duat/{id}/editar; /investidor/terra-duat/{id}/imprimir; /investidor/terra-duat/{id}/solicitar-apoio; /management/opportunities,"OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada.,"030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.","MASTER-9f5719c8-0080: O componente FeaturedOpportunities apresenta oportunidades prioritárias ou editorialmente destacadas. Deve receber uma lista de oportunidades, renderizar cada item através do OpportunityCard e incluir título, descrição, ligação para ver todas as oportunidades e estado vazio quando não existirem projectos destacados.",P2,MASTER-9f5719c8-0080: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-9f5719c8-0080,1,"[{""id"":""MASTER-9f5719c8-0080"",""pedido"":""O componente FeaturedOpportunities apresenta oportunidades prioritárias ou editorialmente destacadas. Deve receber uma lista de oportunidades, renderizar cada item através do OpportunityCard e incluir título, descrição, ligação para ver todas as oportunidades e estado vazio quando não existirem projectos destacados."",""fontes"":[""portal do investidor\\backup\\Reformulacao do portal do investidor v2.docx; SHA 9f5719c8b0cf78855f727d980b77a8f9409fc7f93e303e25d355d009a07d5734; w:p 914""],""aceitacao"":""O componente FeaturedOpportunities apresenta oportunidades prioritárias ou editorialmente destacadas. Deve receber uma lista de oportunidades, renderizar cada item através do OpportunityCard e incluir título, descrição, ligação para ver todas as oportunidades e estado vazio quando não existirem projectos destacados."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""oportunidades""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.opportunities: 6 registos; public.opportunity_images: tabela ausente; public.opportunity_documents: tabela ausente; public.opportunity_location_drafts: tabela ausente,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Reconciliar contrato/cláusula e provas por categoria; completar apenas falha/variante executável identificada. Response normativo não é completo. Critério individual original preservado; cobertura atual ainda não individualizada.,"OpportunityManagement, OpportunityCanonicalContract/Response, OpportunityReviewMateriality, PortalProfileAccess, OpportunityResources","030000→040000 já instalados; contratos/resources existentes, sessão/MFA, ClamD e worker para ficheiros; gates das seis categorias ON. Variantes modulares/offers continuam separadas.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: oportunidades. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,oportunidades,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Services/OpportunityManagement.php; app/Services/OpportunityResources.php; resources/js/pages/management/opportunity-draft.tsx — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"OpportunityManagementTest, OpportunityResourcesTest, OpportunityOriginReviewTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
@@ -3120,7 +3120,7 @@ MASTER-149673c0-0011, Permitir utilização em telemóvel e por teclado.,..\.
MASTER-149673c0-0012, Não publicar dados pessoais ou anexos confidenciais automaticamente.,..\..\..\..\..\..\Users\macbook\.codex\attachments\ddd6740c-486e-4ebf-a11e-c9687206178a\Pasted text.txt; SHA 149673c0e35573716086d72f65e1b8e6c805c4f890b44722b839d4ce7e6caf15; linha 140,biblioteca,//; /Simulador; /api/v1/ai/documents; /api/v1/documents/recommendations; /api/v2/investment/admin/legal-sources; /api/v2/investment/admin/legal-sources/{id}/{action}; /apoio; /balcao-virtual; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /como-investir; /documentos; /documentos/{id},"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,MASTER-149673c0-0012: Não publicar dados pessoais ou anexos confidenciais automaticamente.,P2,MASTER-149673c0-0012: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-149673c0-0012,1,"[{""id"":""MASTER-149673c0-0012"",""pedido"":"" Não publicar dados pessoais ou anexos confidenciais automaticamente."",""fontes"":[""..\\..\\..\\..\\..\\..\\Users\\macbook\\.codex\\attachments\\ddd6740c-486e-4ebf-a11e-c9687206178a\\Pasted text.txt; SHA 149673c0e35573716086d72f65e1b8e6c805c4f890b44722b839d4ce7e6caf15; linha 140""],""aceitacao"":"" Não publicar dados pessoais ou anexos confidenciais automaticamente."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""biblioteca""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.documents: 4 registos; public.portal_resources: 4 registos; public.portal_resource_links: 19 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas",Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: documentos e legado. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,documentos e legado,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Http/Controllers/PortalServicesController.php; app/Jobs/ScanDocumentForMalware.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"PortalServicesTest, DocumentLibrarySchemaCompatibilityTest, ImportDocumentBatchTest, ClamDScannerIntegrationTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-149673c0-0013, Permitir actualizar disponibilidade e solicitar suspensão ou encerramento.,..\..\..\..\..\..\Users\macbook\.codex\attachments\ddd6740c-486e-4ebf-a11e-c9687206178a\Pasted text.txt; SHA 149673c0e35573716086d72f65e1b8e6c805c4f890b44722b839d4ce7e6caf15; linha 141,CRM/solicitações,//; /Simulador; /api/v1/documents/recommendations; /api/v1/investment/submissions; /api/v1/investment/submissions/{id}; /api/v1/investment/submissions/{id}/attachments; /api/v1/investment/submissions/{id}/attachments/{attachment}; /api/v1/investment/submissions/{id}/submit; /apoio; /balcao-virtual; /como-investir; /documentos,"investors/contacts/leads/tasks, OpportunityContacts, acompanhamento interno existente. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"Converter sem duplicar, tarefa/responsável/próxima ação recuperáveis; corrigir apenas falha comprovada. Critério individual original preservado; cobertura atual ainda não individualizada.",Relações mestre/contexto e autorizações; não depende de CRM externo. C131 sóQA. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,MASTER-149673c0-0013: Permitir actualizar disponibilidade e solicitar suspensão ou encerramento.,P2,MASTER-149673c0-0013: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-149673c0-0013,1,"[{""id"":""MASTER-149673c0-0013"",""pedido"":"" Permitir actualizar disponibilidade e solicitar suspensão ou encerramento."",""fontes"":[""..\\..\\..\\..\\..\\..\\Users\\macbook\\.codex\\attachments\\ddd6740c-486e-4ebf-a11e-c9687206178a\\Pasted text.txt; SHA 149673c0e35573716086d72f65e1b8e6c805c4f890b44722b839d4ce7e6caf15; linha 141""],""aceitacao"":"" Permitir actualizar disponibilidade e solicitar suspensão ou encerramento."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""CRM/solicitações""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.interest_requests: 4 registos; public.leads: 0 registos; public.investors: 3 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.","Converter sem duplicar, tarefa/responsável/próxima ação recuperáveis; corrigir apenas falha comprovada. Critério individual original preservado; cobertura atual ainda não individualizada.","investors/contacts/leads/tasks, OpportunityContacts, acompanhamento interno existente",Relações mestre/contexto e autorizações; não depende de CRM externo. C131 sóQA.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: acompanhamento. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,acompanhamento,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Http/Controllers/CrmController.php; app/Services/DeclaredOriginStatistics.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"InterestSubmissionTest, InvestmentWorkspaceTest, PortalOriginCompatibilityTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-149673c0-0014, Registar alterações e exigir nova revisão quando forem modificados dados materiais.,..\..\..\..\..\..\Users\macbook\.codex\attachments\ddd6740c-486e-4ebf-a11e-c9687206178a\Pasted text.txt; SHA 149673c0e35573716086d72f65e1b8e6c805c4f890b44722b839d4ce7e6caf15; linha 142,governação/outros,/api/v1/investment/admin/interests/{interest}/status; /management/history; /management/interests; /management/interests/{interest}; /management/interests/{interest}/consent/contact; /management/interests/{interest}/consent/proponent; /management/opportunities; /management/opportunities/create; /management/opportunities/drafts; /management/opportunities/{id}/draft; /management/opportunities/{id}/edit; /management/opportunities/{id}/lifecycle,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.",MASTER-149673c0-0014: Registar alterações e exigir nova revisão quando forem modificados dados materiais.,P2,MASTER-149673c0-0014: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-149673c0-0014,1,"[{""id"":""MASTER-149673c0-0014"",""pedido"":"" Registar alterações e exigir nova revisão quando forem modificados dados materiais."",""fontes"":[""..\\..\\..\\..\\..\\..\\Users\\macbook\\.codex\\attachments\\ddd6740c-486e-4ebf-a11e-c9687206178a\\Pasted text.txt; SHA 149673c0e35573716086d72f65e1b8e6c805c4f890b44722b839d4ce7e6caf15; linha 142""],""aceitacao"":"" Registar alterações e exigir nova revisão quando forem modificados dados materiais."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""governação/outros""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,Requisito transversal; consultar estado-ativo-after.json,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Localizar obrigação verificável e consumidores/contrato atuais antes de estimar implementação ou declarar conclusão. Critério individual original preservado; cobertura atual ainda não individualizada.,"Entidades, schema/configuração e serviços existentes; correspondência individual por estabelecer","Ler secção/versão correspondente; distinguir requisito funcional, decisão e exemplo. Fontes oficiais já aceites.",Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: governação e demais cláusulas. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,governação e demais cláusulas,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",AGENTS.md — componentes do domínio encontrados; correspondência integral deste requisito não presumida,; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.,Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
-MASTER-55050f60-0001,"Implementar na página inicial do portal uma entrada visível “Documentos e Formulários”, ligada a uma biblioteca central de legislação, procedimentos, formulários, modelos e materiais de apoio.",..\..\..\..\..\..\Users\macbook\.codex\attachments\e1fa9a32-14ae-46f3-ac02-c7115c832175\Pasted text.txt; SHA 55050f60a15d18b119c83799231a0af34b00738f7ae8202a232a07df23f65fd1; linha 3,biblioteca,//; /Simulador; /api/v1/ai/documents; /api/v1/documents/recommendations; /api/v2/investment/admin/legal-sources; /api/v2/investment/admin/legal-sources/{id}/{action}; /apoio; /balcao-virtual; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /como-investir; /documentos; /documentos/{id},"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"MASTER-55050f60-0001: Implementar na página inicial do portal uma entrada visível “Documentos e Formulários”, ligada a uma biblioteca central de legislação, procedimentos, formulários, modelos e materiais de apoio.",P2,MASTER-55050f60-0001: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-55050f60-0001,1,"[{""id"":""MASTER-55050f60-0001"",""pedido"":""Implementar na página inicial do portal uma entrada visível “Documentos e Formulários”, ligada a uma biblioteca central de legislação, procedimentos, formulários, modelos e materiais de apoio."",""fontes"":[""..\\..\\..\\..\\..\\..\\Users\\macbook\\.codex\\attachments\\e1fa9a32-14ae-46f3-ac02-c7115c832175\\Pasted text.txt; SHA 55050f60a15d18b119c83799231a0af34b00738f7ae8202a232a07df23f65fd1; linha 3""],""aceitacao"":""Implementar na página inicial do portal uma entrada visível “Documentos e Formulários”, ligada a uma biblioteca central de legislação, procedimentos, formulários, modelos e materiais de apoio."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""biblioteca""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.documents: 4 registos; public.portal_resources: 4 registos; public.portal_resource_links: 19 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global. | 23/10/2026 — adequação do hero por pedido expresso da Tempo. Aplicadas as orientações permanentes AGENTS.md de 12/10 e 22/10/2026: regras da Tempo, escolhas técnicas identificadas e preservação de dados/histórico. Rotação, WebP e composição são escolhas de implementação. Pesquisa mantém o catálogo existente; não constitui pesquisa global de legislação/licenciamento nem nova restrição organizacional.",Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas",Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: documentos e legado. Esforço de código adicional só após lacuna reproduzida.,"outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | 23/10/2026 — adequação do hero por pedido expresso da Tempo: docs/investmoz/public-portal-hero-validation.json; tools/portal-hero-qa.mjs; outputs/portal-hero-20261023/qa-results.json e capturas. Componentes reais com API/navegação sintéticas, sem base activa. Prova limitada ao hero, pesquisa de oportunidades e preservação da entrada documental; critérios mais amplos não encerrados.",documentos e legado,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Http/Controllers/PortalServicesController.php; app/Jobs/ScanDocumentForMalware.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"PortalServicesTest, DocumentLibrarySchemaCompatibilityTest, ImportDocumentBatchTest, ClamDScannerIntegrationTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
+MASTER-55050f60-0001,"Implementar na página inicial do portal uma entrada visível “Documentos e Formulários”, ligada a uma biblioteca central de legislação, procedimentos, formulários, modelos e materiais de apoio.",..\..\..\..\..\..\Users\macbook\.codex\attachments\e1fa9a32-14ae-46f3-ac02-c7115c832175\Pasted text.txt; SHA 55050f60a15d18b119c83799231a0af34b00738f7ae8202a232a07df23f65fd1; linha 3,biblioteca,//; /Simulador; /api/v1/ai/documents; /api/v1/documents/recommendations; /api/v2/investment/admin/legal-sources; /api/v2/investment/admin/legal-sources/{id}/{action}; /apoio; /balcao-virtual; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /como-investir; /documentos; /documentos/{id},"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"MASTER-55050f60-0001: Implementar na página inicial do portal uma entrada visível “Documentos e Formulários”, ligada a uma biblioteca central de legislação, procedimentos, formulários, modelos e materiais de apoio.",P2,MASTER-55050f60-0001: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-55050f60-0001,1,"[{""id"":""MASTER-55050f60-0001"",""pedido"":""Implementar na página inicial do portal uma entrada visível “Documentos e Formulários”, ligada a uma biblioteca central de legislação, procedimentos, formulários, modelos e materiais de apoio."",""fontes"":[""..\\..\\..\\..\\..\\..\\Users\\macbook\\.codex\\attachments\\e1fa9a32-14ae-46f3-ac02-c7115c832175\\Pasted text.txt; SHA 55050f60a15d18b119c83799231a0af34b00738f7ae8202a232a07df23f65fd1; linha 3""],""aceitacao"":""Implementar na página inicial do portal uma entrada visível “Documentos e Formulários”, ligada a uma biblioteca central de legislação, procedimentos, formulários, modelos e materiais de apoio."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""biblioteca""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.documents: 4 registos; public.portal_resources: 4 registos; public.portal_resource_links: 19 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global. | 23/10/2026 — adequação do hero por pedido expresso da Tempo. Aplicadas as orientações permanentes AGENTS.md de 12/10 e 22/10/2026: regras da Tempo, escolhas técnicas identificadas e preservação de dados/histórico. Rotação, WebP e composição são escolhas de implementação. Pesquisa mantém o catálogo existente; não constitui pesquisa global de legislação/licenciamento nem nova restrição organizacional. | 23/10/2026 — imagens dos cinco cartões de contexto, pedido e anexo da Tempo. Aplicadas AGENTS.md de 12/10 e 22/10/2026. O anexo define as exigências visuais; componente React, WebP responsivo e alternativas por ficheiro são escolhas técnicas. Sem novas condições organizacionais, alteração de dados, rotas, permissões ou histórico.",Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas",Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: documentos e legado. Esforço de código adicional só após lacuna reproduzida.,"outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual. | 23/10/2026 — adequação do hero por pedido expresso da Tempo: docs/investmoz/public-portal-hero-validation.json; tools/portal-hero-qa.mjs; outputs/portal-hero-20261023/qa-results.json e capturas. Componentes reais com API/navegação sintéticas, sem base activa. Prova limitada ao hero, pesquisa de oportunidades e preservação da entrada documental; critérios mais amplos não encerrados. | 23/10/2026 — imagens dos cinco cartões de contexto, pedido e anexo da Tempo: docs/investmoz/public-portal-context-images.json; tools/portal-context-cards-qa.mjs; outputs/investment-context-20261023/qa-results.json (seis larguras e dois cenários de falha, sem erros JavaScript), capturas e build. Fotos ilustrativas geradas com prompts/hashes, sem atribuição geográfica. Destinos/títulos/descrições preservados; critério amplo não encerrado.",documentos e legado,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Http/Controllers/PortalServicesController.php; app/Jobs/ScanDocumentForMalware.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"PortalServicesTest, DocumentLibrarySchemaCompatibilityTest, ImportDocumentBatchTest, ClamDScannerIntegrationTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-55050f60-0002,"Inspeccionar os documentos, tabelas, armazenamento, fontes jurídicas, anexos e pesquisas existentes. Reutilizar essa infraestrutura, evitando bibliotecas paralelas.",..\..\..\..\..\..\Users\macbook\.codex\attachments\e1fa9a32-14ae-46f3-ac02-c7115c832175\Pasted text.txt; SHA 55050f60a15d18b119c83799231a0af34b00738f7ae8202a232a07df23f65fd1; linha 9,biblioteca,//; /Simulador; /api/v1/ai/documents; /api/v1/documents/recommendations; /api/v2/investment/admin/legal-sources; /api/v2/investment/admin/legal-sources/{id}/{action}; /apoio; /balcao-virtual; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /como-investir; /documentos; /documentos/{id},"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"MASTER-55050f60-0002: Inspeccionar os documentos, tabelas, armazenamento, fontes jurídicas, anexos e pesquisas existentes. Reutilizar essa infraestrutura, evitando bibliotecas paralelas.",P2,MASTER-55050f60-0002: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-55050f60-0002,1,"[{""id"":""MASTER-55050f60-0002"",""pedido"":""Inspeccionar os documentos, tabelas, armazenamento, fontes jurídicas, anexos e pesquisas existentes. Reutilizar essa infraestrutura, evitando bibliotecas paralelas."",""fontes"":[""..\\..\\..\\..\\..\\..\\Users\\macbook\\.codex\\attachments\\e1fa9a32-14ae-46f3-ac02-c7115c832175\\Pasted text.txt; SHA 55050f60a15d18b119c83799231a0af34b00738f7ae8202a232a07df23f65fd1; linha 9""],""aceitacao"":""Inspeccionar os documentos, tabelas, armazenamento, fontes jurídicas, anexos e pesquisas existentes. Reutilizar essa infraestrutura, evitando bibliotecas paralelas."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""biblioteca""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.documents: 4 registos; public.portal_resources: 4 registos; public.portal_resource_links: 19 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas",Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: documentos e legado. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,documentos e legado,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Http/Controllers/PortalServicesController.php; app/Jobs/ScanDocumentForMalware.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"PortalServicesTest, DocumentLibrarySchemaCompatibilityTest, ImportDocumentBatchTest, ClamDScannerIntegrationTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-55050f60-0003,"Inventariar a documentação já disponibilizada pelo responsável do portal e os ficheiros acessíveis nas pastas de referência. Registar conteúdos inacessíveis como pendentes, sem afirmar que foram analisados.",..\..\..\..\..\..\Users\macbook\.codex\attachments\e1fa9a32-14ae-46f3-ac02-c7115c832175\Pasted text.txt; SHA 55050f60a15d18b119c83799231a0af34b00738f7ae8202a232a07df23f65fd1; linha 11,CRM/solicitações,//; /Simulador; /api/v1/documents/recommendations; /api/v1/investment/submissions; /api/v1/investment/submissions/{id}; /api/v1/investment/submissions/{id}/attachments; /api/v1/investment/submissions/{id}/attachments/{attachment}; /api/v1/investment/submissions/{id}/submit; /apoio; /balcao-virtual; /como-investir; /documentos,"investors/contacts/leads/tasks, OpportunityContacts, acompanhamento interno existente. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,"Converter sem duplicar, tarefa/responsável/próxima ação recuperáveis; corrigir apenas falha comprovada. Critério individual original preservado; cobertura atual ainda não individualizada.",Relações mestre/contexto e autorizações; não depende de CRM externo. C131 sóQA. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"MASTER-55050f60-0003: Inventariar a documentação já disponibilizada pelo responsável do portal e os ficheiros acessíveis nas pastas de referência. Registar conteúdos inacessíveis como pendentes, sem afirmar que foram analisados.",P2,MASTER-55050f60-0003: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-55050f60-0003,1,"[{""id"":""MASTER-55050f60-0003"",""pedido"":""Inventariar a documentação já disponibilizada pelo responsável do portal e os ficheiros acessíveis nas pastas de referência. Registar conteúdos inacessíveis como pendentes, sem afirmar que foram analisados."",""fontes"":[""..\\..\\..\\..\\..\\..\\Users\\macbook\\.codex\\attachments\\e1fa9a32-14ae-46f3-ac02-c7115c832175\\Pasted text.txt; SHA 55050f60a15d18b119c83799231a0af34b00738f7ae8202a232a07df23f65fd1; linha 11""],""aceitacao"":""Inventariar a documentação já disponibilizada pelo responsável do portal e os ficheiros acessíveis nas pastas de referência. Registar conteúdos inacessíveis como pendentes, sem afirmar que foram analisados."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""CRM/solicitações""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.interest_requests: 4 registos; public.leads: 0 registos; public.investors: 3 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.","Converter sem duplicar, tarefa/responsável/próxima ação recuperáveis; corrigir apenas falha comprovada. Critério individual original preservado; cobertura atual ainda não individualizada.","investors/contacts/leads/tasks, OpportunityContacts, acompanhamento interno existente",Relações mestre/contexto e autorizações; não depende de CRM externo. C131 sóQA.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: acompanhamento. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,acompanhamento,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Http/Controllers/CrmController.php; app/Services/DeclaredOriginStatistics.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"InterestSubmissionTest, InvestmentWorkspaceTest, PortalOriginCompatibilityTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
MASTER-55050f60-0004,"Preservar os originais. Detectar duplicados por conteúdo e identidade documental; manter versões e traduções relacionadas, sem as tratar como documentos equivalentes ou diplomas diferentes.",..\..\..\..\..\..\Users\macbook\.codex\attachments\e1fa9a32-14ae-46f3-ac02-c7115c832175\Pasted text.txt; SHA 55050f60a15d18b119c83799231a0af34b00738f7ae8202a232a07df23f65fd1; linha 13,biblioteca,//; /Simulador; /api/v1/ai/documents; /api/v1/documents/recommendations; /api/v2/investment/admin/legal-sources; /api/v2/investment/admin/legal-sources/{id}/{action}; /apoio; /balcao-virtual; /balcao-virtual/dossiers/{id}/documentos/{document}/conferencia; /como-investir; /documentos; /documentos/{id},"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas. Capacidade existente associada ao domínio; correspondência integral desta cláusula só quando demonstrada na prova individual.","Ativo investemoz:5432, 295 tabelas, COUNTRY02/030000/040000 instalados; seis categorias e administração habilitadas. Leitura atual não demonstra esta cláusula individual. Legado, percurso integrado, modulares/ofertas e notificações desabilitados.",outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,Sem evidência suficiente,Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF. Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,"MASTER-55050f60-0004: Preservar os originais. Detectar duplicados por conteúdo e identidade documental; manter versões e traduções relacionadas, sem as tratar como documentos equivalentes ou diplomas diferentes.",P2,MASTER-55050f60-0004: Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas,MASTER-55050f60-0004,1,"[{""id"":""MASTER-55050f60-0004"",""pedido"":""Preservar os originais. Detectar duplicados por conteúdo e identidade documental; manter versões e traduções relacionadas, sem as tratar como documentos equivalentes ou diplomas diferentes."",""fontes"":[""..\\..\\..\\..\\..\\..\\Users\\macbook\\.codex\\attachments\\e1fa9a32-14ae-46f3-ac02-c7115c832175\\Pasted text.txt; SHA 55050f60a15d18b119c83799231a0af34b00738f7ae8202a232a07df23f65fd1; linha 13""],""aceitacao"":""Preservar os originais. Detectar duplicados por conteúdo e identidade documental; manter versões e traduções relacionadas, sem as tratar como documentos equivalentes ou diplomas diferentes."",""estado"":""parcial"",""variantes"":""Todas as ocorrências exatas preservadas nas fontes; variantes de texto têm linhas distintas"",""modulo"":""biblioteca""}]",Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Não demonstrado individualmente; localizar critério e executar em QA.,Texto exatamente equivalente no mesmo módulo; sem fusão semântica aproximada,parcial,public.documents: 4 registos; public.portal_resources: 4 registos; public.portal_resource_links: 19 registos,"A evidência existente é do domínio ou uma declaração histórica; não identifica a demonstração integral desta cláusula. Não afirmar implementado/parcial apenas por componente, menu ou teste global.",Cobrir consulta/importação/doc/derivada/hash/perfil e revogação; preservar original; divulgação separada. Não inferir relação territorial. Critério individual original preservado; cobertura atual ainda não individualizada.,"documents, biblioteca, importação autenticada, VerifiedDocumentBinary, jobs/derivadas",Scanner/worker/GD/WebP e originais privados; ACL por oportunidade/sala diferente de partilha individual não implementada. LegadoOFF.,Nenhuma nova decisão identificada para reconciliar/demonstrar esta cláusula. Decisões específicas só após localizar a regra correspondente.,Reconciliação e prova individual antes de estimar alteração,Estimativa partilhada no lote correspondente de visao-consolidada-modulos.md; não somar por linha/cláusula/campo. Grupo: documentos e legado. Esforço de código adicional só após lacuna reproduzida.,outputs/investmoz-audit-current-20261012/runtime-active.json; runtime-qa18445.json. Inventário/GET do domínio não demonstra esta cláusula individual.,documentos e legado,12/10/2026 — reconciliação e HTTP; nova inspeção visual bloqueada,,,Verificar individualmente este critério no contrato e percurso aplicável; a matriz inicial conserva texto/fonte sem o promover a aceitação.,"QA de UI quando browser disponível; reutilizar o domínio existente. Dados/decisões específicos no backlog, sem segunda validação de fonte oficial.",app/Http/Controllers/PortalServicesController.php; app/Jobs/ScanDocumentForMalware.php — componentes do domínio encontrados; correspondência integral deste requisito não presumida,"PortalServicesTest, DocumentLibrarySchemaCompatibilityTest, ImportDocumentBatchTest, ClamDScannerIntegrationTest; suite global QA e GET por perfil disponíveis. Evidência do domínio não demonstra integralmente esta cláusula; UI individual pendente.",Não demonstrado individualmente; localizar critério e executar em QA.,,,,"0,5–2 h de análise/prova por cláusula sem correspondência, agrupada por contrato/consumidor; não somar estas faixas como projetos independentes. Implementação indeterminada até localizar lacuna.",,,
diff --git a/public/images/investment-context/clusters-agroindustria-480.webp b/public/images/investment-context/clusters-agroindustria-480.webp
new file mode 100644
index 00000000..fee887c4
Binary files /dev/null and b/public/images/investment-context/clusters-agroindustria-480.webp differ
diff --git a/public/images/investment-context/clusters-agroindustria-fallback.webp b/public/images/investment-context/clusters-agroindustria-fallback.webp
new file mode 100644
index 00000000..10498f91
Binary files /dev/null and b/public/images/investment-context/clusters-agroindustria-fallback.webp differ
diff --git a/public/images/investment-context/clusters-agroindustria.webp b/public/images/investment-context/clusters-agroindustria.webp
new file mode 100644
index 00000000..5de230b0
Binary files /dev/null and b/public/images/investment-context/clusters-agroindustria.webp differ
diff --git a/public/images/investment-context/corredores-logisticos-v2-480.webp b/public/images/investment-context/corredores-logisticos-v2-480.webp
new file mode 100644
index 00000000..c3144000
Binary files /dev/null and b/public/images/investment-context/corredores-logisticos-v2-480.webp differ
diff --git a/public/images/investment-context/corredores-logisticos-v2-fallback.webp b/public/images/investment-context/corredores-logisticos-v2-fallback.webp
new file mode 100644
index 00000000..0e239753
Binary files /dev/null and b/public/images/investment-context/corredores-logisticos-v2-fallback.webp differ
diff --git a/public/images/investment-context/corredores-logisticos-v2.webp b/public/images/investment-context/corredores-logisticos-v2.webp
new file mode 100644
index 00000000..8e5b9c1c
Binary files /dev/null and b/public/images/investment-context/corredores-logisticos-v2.webp differ
diff --git a/public/images/investment-context/documentos-formularios-480.webp b/public/images/investment-context/documentos-formularios-480.webp
new file mode 100644
index 00000000..36606c17
Binary files /dev/null and b/public/images/investment-context/documentos-formularios-480.webp differ
diff --git a/public/images/investment-context/documentos-formularios-fallback.webp b/public/images/investment-context/documentos-formularios-fallback.webp
new file mode 100644
index 00000000..8c394317
Binary files /dev/null and b/public/images/investment-context/documentos-formularios-fallback.webp differ
diff --git a/public/images/investment-context/documentos-formularios.webp b/public/images/investment-context/documentos-formularios.webp
new file mode 100644
index 00000000..3fe93423
Binary files /dev/null and b/public/images/investment-context/documentos-formularios.webp differ
diff --git a/public/images/investment-context/educacao-formacao-480.webp b/public/images/investment-context/educacao-formacao-480.webp
new file mode 100644
index 00000000..4afd8cdb
Binary files /dev/null and b/public/images/investment-context/educacao-formacao-480.webp differ
diff --git a/public/images/investment-context/educacao-formacao-fallback.webp b/public/images/investment-context/educacao-formacao-fallback.webp
new file mode 100644
index 00000000..f1ff1e72
Binary files /dev/null and b/public/images/investment-context/educacao-formacao-fallback.webp differ
diff --git a/public/images/investment-context/educacao-formacao.webp b/public/images/investment-context/educacao-formacao.webp
new file mode 100644
index 00000000..3e4f2cfa
Binary files /dev/null and b/public/images/investment-context/educacao-formacao.webp differ
diff --git a/public/images/investment-context/projectos-ancora-480.webp b/public/images/investment-context/projectos-ancora-480.webp
new file mode 100644
index 00000000..caf4533a
Binary files /dev/null and b/public/images/investment-context/projectos-ancora-480.webp differ
diff --git a/public/images/investment-context/projectos-ancora-fallback.webp b/public/images/investment-context/projectos-ancora-fallback.webp
new file mode 100644
index 00000000..5cfb2dcf
Binary files /dev/null and b/public/images/investment-context/projectos-ancora-fallback.webp differ
diff --git a/public/images/investment-context/projectos-ancora.webp b/public/images/investment-context/projectos-ancora.webp
new file mode 100644
index 00000000..dca9ca2a
Binary files /dev/null and b/public/images/investment-context/projectos-ancora.webp differ
diff --git a/public/images/investment-steps/acompanhar-480.webp b/public/images/investment-steps/acompanhar-480.webp
new file mode 100644
index 00000000..b75e0fc5
Binary files /dev/null and b/public/images/investment-steps/acompanhar-480.webp differ
diff --git a/public/images/investment-steps/acompanhar-fallback.webp b/public/images/investment-steps/acompanhar-fallback.webp
new file mode 100644
index 00000000..736c7cb1
Binary files /dev/null and b/public/images/investment-steps/acompanhar-fallback.webp differ
diff --git a/public/images/investment-steps/acompanhar.webp b/public/images/investment-steps/acompanhar.webp
new file mode 100644
index 00000000..011203a7
Binary files /dev/null and b/public/images/investment-steps/acompanhar.webp differ
diff --git a/public/images/investment-steps/explorar-480.webp b/public/images/investment-steps/explorar-480.webp
new file mode 100644
index 00000000..d4b6eefe
Binary files /dev/null and b/public/images/investment-steps/explorar-480.webp differ
diff --git a/public/images/investment-steps/explorar-fallback.webp b/public/images/investment-steps/explorar-fallback.webp
new file mode 100644
index 00000000..9794ff27
Binary files /dev/null and b/public/images/investment-steps/explorar-fallback.webp differ
diff --git a/public/images/investment-steps/explorar.webp b/public/images/investment-steps/explorar.webp
new file mode 100644
index 00000000..452ae897
Binary files /dev/null and b/public/images/investment-steps/explorar.webp differ
diff --git a/public/images/investment-steps/preparar-480.webp b/public/images/investment-steps/preparar-480.webp
new file mode 100644
index 00000000..0d70db5b
Binary files /dev/null and b/public/images/investment-steps/preparar-480.webp differ
diff --git a/public/images/investment-steps/preparar-fallback.webp b/public/images/investment-steps/preparar-fallback.webp
new file mode 100644
index 00000000..f48cb7af
Binary files /dev/null and b/public/images/investment-steps/preparar-fallback.webp differ
diff --git a/public/images/investment-steps/preparar.webp b/public/images/investment-steps/preparar.webp
new file mode 100644
index 00000000..645ffbd3
Binary files /dev/null and b/public/images/investment-steps/preparar.webp differ
diff --git a/public/images/sectors/agronegocio-480.webp b/public/images/sectors/agronegocio-480.webp
new file mode 100644
index 00000000..1710c175
Binary files /dev/null and b/public/images/sectors/agronegocio-480.webp differ
diff --git a/public/images/sectors/agronegocio.webp b/public/images/sectors/agronegocio.webp
new file mode 100644
index 00000000..7b2a4dcb
Binary files /dev/null and b/public/images/sectors/agronegocio.webp differ
diff --git a/public/images/sectors/economia-azul-480.webp b/public/images/sectors/economia-azul-480.webp
new file mode 100644
index 00000000..db72715e
Binary files /dev/null and b/public/images/sectors/economia-azul-480.webp differ
diff --git a/public/images/sectors/economia-azul.webp b/public/images/sectors/economia-azul.webp
new file mode 100644
index 00000000..025c7fca
Binary files /dev/null and b/public/images/sectors/economia-azul.webp differ
diff --git a/public/images/sectors/energia-480.webp b/public/images/sectors/energia-480.webp
new file mode 100644
index 00000000..5854d77e
Binary files /dev/null and b/public/images/sectors/energia-480.webp differ
diff --git a/public/images/sectors/energia.webp b/public/images/sectors/energia.webp
new file mode 100644
index 00000000..95187292
Binary files /dev/null and b/public/images/sectors/energia.webp differ
diff --git a/public/images/sectors/industria-480.webp b/public/images/sectors/industria-480.webp
new file mode 100644
index 00000000..3498b395
Binary files /dev/null and b/public/images/sectors/industria-480.webp differ
diff --git a/public/images/sectors/industria.webp b/public/images/sectors/industria.webp
new file mode 100644
index 00000000..269cb28b
Binary files /dev/null and b/public/images/sectors/industria.webp differ
diff --git a/public/images/sectors/infraestruturas-480.webp b/public/images/sectors/infraestruturas-480.webp
new file mode 100644
index 00000000..5a260dfd
Binary files /dev/null and b/public/images/sectors/infraestruturas-480.webp differ
diff --git a/public/images/sectors/infraestruturas.webp b/public/images/sectors/infraestruturas.webp
new file mode 100644
index 00000000..dc4c864a
Binary files /dev/null and b/public/images/sectors/infraestruturas.webp differ
diff --git a/public/images/sectors/logistica-transportes-480.webp b/public/images/sectors/logistica-transportes-480.webp
new file mode 100644
index 00000000..db68408d
Binary files /dev/null and b/public/images/sectors/logistica-transportes-480.webp differ
diff --git a/public/images/sectors/logistica-transportes.webp b/public/images/sectors/logistica-transportes.webp
new file mode 100644
index 00000000..484def57
Binary files /dev/null and b/public/images/sectors/logistica-transportes.webp differ
diff --git a/public/images/sectors/mineracao-480.webp b/public/images/sectors/mineracao-480.webp
new file mode 100644
index 00000000..aef96a9a
Binary files /dev/null and b/public/images/sectors/mineracao-480.webp differ
diff --git a/public/images/sectors/mineracao.webp b/public/images/sectors/mineracao.webp
new file mode 100644
index 00000000..f2109c76
Binary files /dev/null and b/public/images/sectors/mineracao.webp differ
diff --git a/public/images/sectors/outros-sectores-480.webp b/public/images/sectors/outros-sectores-480.webp
new file mode 100644
index 00000000..57d5bc8c
Binary files /dev/null and b/public/images/sectors/outros-sectores-480.webp differ
diff --git a/public/images/sectors/outros-sectores.webp b/public/images/sectors/outros-sectores.webp
new file mode 100644
index 00000000..d046cfd4
Binary files /dev/null and b/public/images/sectors/outros-sectores.webp differ
diff --git a/public/images/sectors/servicos-financeiros-480.webp b/public/images/sectors/servicos-financeiros-480.webp
new file mode 100644
index 00000000..bfc297b0
Binary files /dev/null and b/public/images/sectors/servicos-financeiros-480.webp differ
diff --git a/public/images/sectors/servicos-financeiros.webp b/public/images/sectors/servicos-financeiros.webp
new file mode 100644
index 00000000..b9ff6c9b
Binary files /dev/null and b/public/images/sectors/servicos-financeiros.webp differ
diff --git a/public/images/sectors/tic-economia-digital-480.webp b/public/images/sectors/tic-economia-digital-480.webp
new file mode 100644
index 00000000..4eca3d69
Binary files /dev/null and b/public/images/sectors/tic-economia-digital-480.webp differ
diff --git a/public/images/sectors/tic-economia-digital.webp b/public/images/sectors/tic-economia-digital.webp
new file mode 100644
index 00000000..027bbdbf
Binary files /dev/null and b/public/images/sectors/tic-economia-digital.webp differ
diff --git a/public/images/sectors/turismo-480.webp b/public/images/sectors/turismo-480.webp
new file mode 100644
index 00000000..d11a86f0
Binary files /dev/null and b/public/images/sectors/turismo-480.webp differ
diff --git a/public/images/sectors/turismo.webp b/public/images/sectors/turismo.webp
new file mode 100644
index 00000000..e5f8fbd9
Binary files /dev/null and b/public/images/sectors/turismo.webp differ
diff --git a/resources/js/components/investment-context-cards.tsx b/resources/js/components/investment-context-cards.tsx
new file mode 100644
index 00000000..9e3cc69b
--- /dev/null
+++ b/resources/js/components/investment-context-cards.tsx
@@ -0,0 +1,175 @@
+import { useState } from 'react';
+import { ArrowRight } from 'lucide-react';
+import {
+ HOME_SECTION,
+ HOME_SECTION_HEADING,
+ PORTAL_MORE_LINK,
+} from '@/lib/portal-presentation';
+
+const contexts = [
+ {
+ key: 'clusters',
+ href: '/clusters',
+ title: 'Clusters',
+ description: 'Cadeias de valor e lacunas produtivas.',
+ image: 'clusters-agroindustria',
+ alt: 'Triagem de produtos agrícolas numa unidade de transformação com área de cultivo ao fundo.',
+ },
+ {
+ key: 'corredores',
+ href: '/corredores',
+ title: 'Corredores',
+ description: 'Territórios, logística e conexões.',
+ image: 'corredores-logisticos-v2',
+ alt: 'Terminal de mercadorias junto à água, com contentores, uma grua e vias de acesso.',
+ },
+ {
+ key: 'projectos',
+ href: '/projectos-ancora',
+ title: 'Projectos âncora',
+ description: 'Projectos estruturantes e relações.',
+ image: 'projectos-ancora',
+ alt: 'Equipa de engenharia acompanha o planeamento de uma instalação de energia solar.',
+ },
+ {
+ key: 'educacao',
+ href: '/educacao',
+ title: 'Educação',
+ description: 'Investimentos em competências e formação.',
+ image: 'educacao-formacao',
+ alt: 'Jovens desenvolvem competências de electrónica e informática numa aula de formação técnica.',
+ },
+ {
+ key: 'documentos',
+ href: '/documentos',
+ title: 'Documentos e Formulários',
+ description:
+ 'Legislação, procedimentos, formulários e materiais de apoio.',
+ image: 'documentos-formularios',
+ alt: 'Profissional analisa documentação empresarial organizada numa secretária de escritório.',
+ },
+];
+
+function ContextImage({
+ image,
+ alt,
+ preview,
+}: {
+ image: string;
+ alt: string;
+ preview: boolean;
+}) {
+ const [fallback, setFallback] = useState(0);
+ const base = `/images/investment-context/${image}`;
+
+ return (
+