Files
Investidor-V2/resources/views/desk/receipt.blade.php
T

70 lines
6.4 KiB
PHP

<!doctype html>
<html lang="pt-MZ">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Recibo {{ $record->protocol }} — InvesteMoz</title>
<style>
@page { size:A4; margin:18mm; } * { box-sizing:border-box; }
body { margin:0; background:#f3f6f5; color:#172e29; font:16px/1.5 Arial,sans-serif; }
main { max-width:960px; margin:24px auto; padding:36px; background:white; }
header { border-bottom:3px solid #176858; padding-bottom:16px; } h1 { font-size:28px; margin:8px 0; }
h2 { font-size:21px; margin:28px 0 12px; break-after:avoid; } .brand { color:#176858; font-weight:bold; font-size:22px; }
.notice { padding:14px; border-left:4px solid #b57918; background:#fff7e6; }
table { width:100%; border-collapse:collapse; table-layout:fixed; } th,td { border:1px solid #cbd8d3; padding:10px; text-align:left; vertical-align:top; overflow-wrap:anywhere; white-space:pre-wrap; }
th { width:32%; background:#edf4f1; } tr { break-inside:avoid; } thead { display:table-header-group; }
nav { display:flex; flex-wrap:wrap; gap:20px; margin-bottom:24px; } button,a { font:inherit; color:#125a4b; } button { padding:8px 16px; cursor:pointer; }
p { overflow-wrap:anywhere; }
footer { margin-top:28px; border-top:1px solid #cbd8d3; padding-top:12px; }
@media(max-width:600px) { main { margin:0; padding:18px; } th { width:40%; } }
@media print { body { background:white; font-size:10.5pt; } main { margin:0; padding:0; max-width:none; } nav { display:none; } a { color:inherit; } }
</style></head>
<body><main>
@if(app()->environment('testing') && str_starts_with((string)($snapshot['payload']['title'] ?? ''), 'SINTÉTICO'))
<p class="notice"><strong>SINTÉTICO — QA · Exemplo fictício, sem validade oficial.</strong></p>
@endif
<nav aria-label="Acções do recibo"><button type="button" onclick="window.print()">Imprimir / guardar como PDF</button><a href="{{ url('/balcao-virtual/pedidos/'.$record->id) }}">Voltar ao pedido</a><a href="{{ url('/balcao-virtual/pedidos/'.$record->id.'/recibo') }}">Descarregar original técnico (TXT)</a></nav>
<header><div class="brand">InvesteMoz</div><h1>Recibo de submissão interna</h1><p><strong>Protocolo: {{ $record->protocol }}</strong></p><p>Submetido em {{ \Illuminate\Support\Carbon::parse($record->submitted_at, 'UTC')->setTimezone('Africa/Maputo')->format('d/m/Y H:i') }} (CAT, UTC+2) · Versão {{ $record->version }}</p></header>
<h2>Resumo</h2><p>{{ $definition['title'] ?? 'Pedido no Balcão Virtual' }}</p><p class="notice">Este recibo comprova a submissão interna no portal. Não confirma aprovação, financiamento, licença ou recepção por uma entidade externa. Os dados abaixo são os declarados no momento da submissão.</p>
<h2>Dados submetidos</h2><table><caption>Informação declarada pelo requerente</caption><tbody>
@php
$opportunityScope = json_decode($snapshot['payload']['context_opportunity_snapshot'] ?? '{}', true);
$applicableFields = $applicableFields ?? app(\App\Services\VirtualDesk::class)->applicableFields($snapshot['payload'] ?? [], $definition);
$answers = array_diff_key($snapshot['payload'] ?? [], array_flip(['context_opportunity_snapshot', 'context_opportunity', 'context_reuse']));
$inactiveAnswers = array_intersect_key($answers, array_diff_key($definition['fields'], $applicableFields));
@endphp
@if(data_get($opportunityScope, 'choice.opportunity.key'))
<tr><th>Oportunidade associada</th><td>{{ data_get($opportunityScope, 'choice.opportunity.title') }} · {{ data_get($opportunityScope, 'choice.opportunity.key') }}</td></tr>
<tr><th>Contexto territorial guardado</th><td>{{ data_get($opportunityScope, 'choice.territory.title') ?: 'Por definir' }} · {{ data_get($opportunityScope, 'choice.corridor_name') ?: 'Corredor por definir' }} · {{ data_get($opportunityScope, 'choice.park.title') ?: 'Sem zona/parque seleccionado' }} · Revisão {{ $opportunityScope['revision'] }}</td></tr>
@endif
@include('desk.receipt-answers', ['answers' => array_diff_key($answers, $inactiveAnswers)])
</tbody></table>
@if($inactiveAnswers)
<h2>Respostas conservadas de perguntas não aplicáveis</h2>
<p>Estas respostas foram conservadas na submissão, mas as condições do formulário não as tornam aplicáveis. Não entram nas verificações de preparação deste pedido.</p>
<table><caption>Histórico conservado na submissão</caption><tbody>
@include('desk.receipt-answers', ['answers' => $inactiveAnswers])
</tbody></table>
@endif
@if(!empty($snapshot['field_declarations']))
<h2>Declarações registadas nesta submissão</h2>
<p>Estas escolhas correspondem ao texto da versão do formulário utilizada. Não substituem os controlos de acesso, outras autorizações ou decisões oficiais.</p>
<table><caption>Texto e escolha efectivamente submetidos</caption><tbody>
@foreach($snapshot['field_declarations'] as $declaration)
<tr><th scope="row">{{ $declaration['label'] }}</th><td>{{ $declaration['statement'] }}<br><strong>{{ $declaration['answer'] === 'accepted' ? 'Aceite' : 'Recusado' }}</strong><br>Registado em {{ $declaration['declared_at'] }} · SHA-256 {{ $declaration['statement_sha256'] }}</td></tr>
@endforeach
</tbody></table>
@endif
<h2>Suportes documentais</h2>
@foreach(($snapshot['field_attachments'] ?? []) as $attachment)
<h3>{{ $attachment['label'] }}</h3>
<p>{{ $attachment['applicable'] ? 'Pergunta aplicável à submissão.' : 'Resposta conservada de pergunta não aplicável; não é evidência aplicável.' }} Limites desta versão: {{ $attachment['limits']['max_size_kb'] }} KB por ficheiro · {{ $attachment['limits']['max_files'] }} ficheiro(s).</p>
@foreach($attachment['files'] as $file)
<p>{{ $file['file_name'] }} · Versão {{ $file['version_no'] ?? 'não informada' }} · {{ $file['size_bytes'] }} bytes · {{ $file['source_reference'] }}<br>SHA-256 {{ $file['sha256'] }} · {{ $file['usable_at_submission'] ? 'Disponibilidade, integridade e segurança verificadas para esta submissão interna.' : 'Disponibilidade não validada como evidência aplicável nesta submissão.' }}</p>
@endforeach
@endforeach
@forelse(($snapshot['documents'] ?? []) as $document)
<p>{{ data_get($document, 'source_reference') ?: 'Referência não informada' }} · Versão {{ data_get($document, 'version_no') ?? 'Não informada' }}</p>
@empty
<p>Sem documentos associados nesta submissão.</p>
@endforelse
<footer>Fonte: submissão guardada no Balcão Virtual · Conteúdo privado, sujeito às permissões do pedido.</footer>
</main></body></html>