import { DossierPrefill } from '@/components/dossier-prefill'; import { createOperationKey } from '@/lib/operation-key'; import { Link, useForm } from '@inertiajs/react'; import { Frame, card, input, button } from '@/pages/investment/shared'; import CountrySelect, { type Country } from '@/components/country-select'; import { TerritoryFields, type TerritoryOption, } from '@/components/investment-territory'; import { DocumentReview, RequestOperations, type DeskDocument, type DeskPayment, } from '@/components/desk-internal-operations'; type Field = { label: string; type: string; required: boolean; options?: Record; when?: { field: string; equals: string }; }; export default function RequestPage({ request, case: dossier, definition, owner, manager, analyst, fieldsEditable, states, transitions, findings, messages, analysts, territoryPaths, events, documents, payments, caseVersion, countries, toolPrefill, boundContextRevision = 0, }: { boundContextRevision?: number; request: { id: string; version: number; status: string; payload: Record; protocol: string | null; editable_fields: string[]; analyst_id: number | null; due_at: string | null; }; case: { id: string; title: string }; definition: { title: string; fields: Record; result: string; }; owner: boolean; manager: boolean; analyst: boolean; fieldsEditable: boolean; states: Record; transitions: string[]; findings: { code: string; explanation: string; recommendation: string; severity: string; }[]; messages: { id: string; body: string; name: string; kind: string; created_at: string; }[]; analysts: { id: number; name: string }[]; territoryPaths: Record; documents: DeskDocument[]; payments: DeskPayment[]; caseVersion: number; countries: Country[]; toolPrefill: { description: string; draft_id: string; draft_version: number; snapshot_sha256: string; } | null; events: { id: string; action: string; name: string; created_at: string; payload: Record; }[]; }) { const form = useForm({ context_revision: 0, context_reviewed: false, version: request.version, payload: request.payload, consent: false, reason: '', submit: false, }); const decision = useForm({ version: request.version, status: transitions[0] ?? '', reason: '', editable_fields: [] as string[], }); const assignment = useForm({ version: request.version, analyst_id: String(request.analyst_id ?? ''), reason: '', due_at: '', }); const message = useForm({ body: '', client_key: createOperationKey() }); const canEdit = owner && fieldsEditable; return ( Voltar ao dossier {dossier.title}

{definition.result}

{owner && ( request.status !== 'returned' || request.editable_fields.includes(k), )} onReview={(revision, reviewed) => form.setData((d) => ({ ...d, context_revision: revision, context_reviewed: reviewed, })) } onApply={(patch, replace) => form.setData((d) => ({ ...d, payload: { ...d.payload, ...Object.fromEntries( Object.entries(patch) .filter( ([k]) => replace || !d.payload[k]?.trim(), ) .map(([k, v]) => [ k, typeof v === 'string' ? v : '', ]), ), }, })) } /> )}

{request.protocol ? 'Pedido submetido pelo investidor' : 'Rascunho — ainda não submetido'}

{states[request.status]} · Protocolo:{' '} {request.protocol ?? 'Ainda sem protocolo'}

Responsável real:{' '} {request.analyst_id ?? 'A aguardar atribuição'} · Prazo interno: {request.due_at ?? 'Não definido'}

{request.protocol && ( Consultar e imprimir recibo interno )}
{canEdit && toolPrefill && (

Reutilizar dados do projeto

A descrição está vazia neste pedido. Pode reutilizar o resumo já guardado na ferramenta deste dossier, versão{' '} {toolPrefill.draft_version}.

{toolPrefill.description}

Esta ação guarda o rascunho com os dados preenchidos nesta página. Reveja-os antes de submeter.

)}

Verificações automáticas de preparação

{findings.map((f) => (

{f.explanation} {f.recommendation} ( {f.severity === 'error' ? 'Contradição nos valores declarados' : 'Informação / evidência pendente'} )

))}

A análise automática não é uma resposta do responsável nem uma aprovação oficial.

{ e.preventDefault(); form.transform((d) => ({ ...d, version: request.version, submit: false, })); form.put(`/balcao-virtual/pedidos/${request.id}`); }} > form.setData('payload', { ...form.data.payload, country: value, }) } disabled={ !canEdit || (request.status === 'returned' && !request.editable_fields.includes('country')) } /> form.setData('payload', { ...form.data.payload, declared_origin_country_code: value, }) } />

A origem não é deduzida do IP nem do país de residência. Pedidos antigos sem declaração mantêm “não informado”.

{Object.entries(definition.fields) .filter( ([, f]) => !f.when || form.data.payload[f.when.field] === f.when.equals, ) .map(([key, f]) => f.type === 'territory' ? (
{f.label} {f.required ? ' *' : ''} form.setData('payload', { ...form.data.payload, [key]: path.at(-1)?.id ?? '', }) } /> {form.errors[`payload.${key}`] && (

{form.errors[`payload.${key}`]}

)}
) : (