110 lines
4.6 KiB
TypeScript
110 lines
4.6 KiB
TypeScript
import { Icon } from './Icon';
|
|
|
|
type ProjectionKind = 'act' | 'report';
|
|
|
|
interface ProjectionSection {
|
|
title: string;
|
|
description: string;
|
|
}
|
|
|
|
const actSections: ProjectionSection[] = [
|
|
{
|
|
title: 'Identificación y contexto',
|
|
description: 'Número y año de Acta, Inspección vinculada, fecha y hora, Departamento, Área, Yacimiento, Operadora y ubicación de la actuación.',
|
|
},
|
|
{
|
|
title: 'Intervinientes',
|
|
description: 'Inspectores actuantes y responsable de la empresa: nombre, DNI, cargo, correo y demás datos de identificación que exija el modelo oficial.',
|
|
},
|
|
{
|
|
title: 'Alcance y constatación',
|
|
description: 'Objeto de la actuación, descripción de lo actuado, observaciones e Inventarios inspeccionados con su ruta Instalación / Subinstalación.',
|
|
},
|
|
{
|
|
title: 'Hallazgos',
|
|
description: 'Código, Inventario afectado, descripción, base legal, reincidencia, gravedad y plazos aplicables, conservando la instantánea emitida en campo.',
|
|
},
|
|
{
|
|
title: 'Firmas y manifestaciones',
|
|
description: 'Firmas de inspectores y responsable de empresa, conformidad o disidencia, manifestación textual, negativa/ausencia si correspondiera y marcas de tiempo.',
|
|
},
|
|
{
|
|
title: 'Integridad y verificación',
|
|
description: 'Versión sellada, hash SHA-256, sello de tiempo y espacio reservado para token o QR de verificación documental.',
|
|
},
|
|
{
|
|
title: 'Anexos',
|
|
description: 'Registro fotográfico y evidencias sólo si el formulario oficial exige incorporarlos al Acta; el modelo queda preparado para hacerlo sin alterar el dato fuente.',
|
|
},
|
|
];
|
|
|
|
const reportSections: ProjectionSection[] = [
|
|
{
|
|
title: 'Identificación y contexto',
|
|
description: 'Número y año del INF, Acta fuente, Inspección, Empresa, Departamento, Área, Yacimiento, fechas y autores/intervinientes.',
|
|
},
|
|
{
|
|
title: 'Objetivos y antecedentes',
|
|
description: 'Motivo de la inspección, antecedentes relevantes y alcance técnico del Informe.',
|
|
},
|
|
{
|
|
title: 'Marco legal',
|
|
description: 'Normativa y bases legales aplicables, incluyendo las referencias congeladas de los Hallazgos del Acta fuente.',
|
|
},
|
|
{
|
|
title: 'Resumen ejecutivo y desarrollo técnico',
|
|
description: 'Resumen ejecutivo, descripción de la inspección, análisis técnico y consideraciones editables durante la preparación del INF.',
|
|
},
|
|
{
|
|
title: 'Inventarios y Hallazgos',
|
|
description: 'Inventarios inspeccionados y detalle de Hallazgos con descripción, reincidencia, gravedad, plazos y trazabilidad con el Acta.',
|
|
},
|
|
{
|
|
title: 'Registro fotográfico',
|
|
description: 'Fotografías y evidencias seleccionadas, con referencia al Inventario/Hallazgo, fecha y metadatos disponibles.',
|
|
},
|
|
{
|
|
title: 'Conclusiones',
|
|
description: 'Conclusión técnica, recomendaciones y texto final sujeto a revisión antes de la oficialización.',
|
|
},
|
|
{
|
|
title: 'GEDO e integridad',
|
|
description: 'Identificador IF, fecha de oficialización, hash del PDF oficial y hash de la instantánea congelada que originó el Informe.',
|
|
},
|
|
{
|
|
title: 'Anexo final',
|
|
description: 'Acta fuente completa e inmutable como anexo del Informe, manteniendo la relación exacta INF → Acta.',
|
|
},
|
|
];
|
|
|
|
export function DocumentPdfProjection({ kind }: { kind: ProjectionKind }) {
|
|
const isAct = kind === 'act';
|
|
const sections = isAct ? actSections : reportSections;
|
|
|
|
return <section className="panel document-pdf-projection">
|
|
<div className="panel-heading">
|
|
<div>
|
|
<span className="eyebrow">PDF PRELIMINAR · ESTRUCTURA PROYECTADA</span>
|
|
<h2>{isAct ? 'Contenido previsto del Acta' : 'Contenido previsto del Informe'}</h2>
|
|
<p className="section-copy">El diseño institucional definitivo todavía no fue recibido. Esta vista fija qué información debe poder alimentar el documento, sin comprometer encabezados, tipografías, logos ni distribución final.</p>
|
|
</div>
|
|
<span className="status-badge pending">Plantilla oficial pendiente</span>
|
|
</div>
|
|
|
|
<div className="temporal-notice">
|
|
<Icon name="clipboard" />
|
|
<p><strong>Contrato de datos estable, renderer reemplazable.</strong> Cuando llegue el PDF/Word oficial se adapta la composición visual sobre estos mismos datos, sin rehacer el circuito de Inspecciones, Actas, Hallazgos ni trazabilidad.</p>
|
|
</div>
|
|
|
|
<div className="dossier-link-list">
|
|
{sections.map((section, index) => <div key={section.title}>
|
|
<div>
|
|
<strong>{index + 1}. {section.title}</strong>
|
|
<small>{section.description}</small>
|
|
</div>
|
|
<span>Previsto</span>
|
|
</div>)}
|
|
</div>
|
|
</section>;
|
|
}
|