All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m12s
- Cambiar a 2 formularios por hoja para más espacio vertical - Corregir distribución de familias de notas (Floral, Afrutado, Verde/Vegetal, Otra, Tostado, etc.) - Aumentar margen vertical entre checkboxes - Corregir "beberse" → "haberse" en sección de defectos - Alinear checkboxes de defectos bajo el header - Quitar recuadro de Notas y mostrar solo "Notas: valor"
223 lines
5.3 KiB
TypeScript
223 lines
5.3 KiB
TypeScript
/**
|
|
* Constantes y configuración del layout para el formulario PDF EVC-IH01
|
|
* Tamaño: Carta (Letter) - 8.5" x 11" (215.9mm x 279.4mm)
|
|
* Máximo 3 formularios por página
|
|
*/
|
|
|
|
export const PDF_CONFIG = {
|
|
// Página Carta (Letter)
|
|
pageWidth: 215.9, // mm (8.5")
|
|
pageHeight: 279.4, // mm (11")
|
|
|
|
// Márgenes
|
|
marginTop: 8,
|
|
marginBottom: 8,
|
|
marginLeft: 8,
|
|
marginRight: 8,
|
|
|
|
// Formulario individual (2 por página para más espacio)
|
|
formHeight: 130, // ~130mm cada formulario (más alto)
|
|
formWidth: 199.9, // pageWidth - marginLeft - marginRight
|
|
formSpacing: 3, // Espacio entre formularios
|
|
|
|
// Tipografía
|
|
fontSize: {
|
|
title: 10,
|
|
header: 8,
|
|
body: 7,
|
|
small: 6,
|
|
tiny: 5.5,
|
|
},
|
|
|
|
// Colores
|
|
colors: {
|
|
black: '#000000',
|
|
gray: '#666666',
|
|
lightGray: '#CCCCCC',
|
|
},
|
|
|
|
// Grosor de líneas
|
|
lineWidth: {
|
|
thin: 0.1,
|
|
normal: 0.2,
|
|
thick: 0.4,
|
|
},
|
|
|
|
// Tamaño de checkbox
|
|
checkboxSize: 3.5,
|
|
checkboxSpacing: 1.5,
|
|
} as const
|
|
|
|
/**
|
|
* Calcula la posición Y inicial para un formulario según su posición en la página
|
|
* @param posicion - Posición del formulario (0, 1, o 2)
|
|
* @returns Coordenada Y inicial en mm
|
|
*/
|
|
export function calcularYInicio(posicion: 0 | 1 | 2): number {
|
|
const { marginTop, formHeight, formSpacing } = PDF_CONFIG
|
|
return marginTop + posicion * (formHeight + formSpacing)
|
|
}
|
|
|
|
/**
|
|
* Secciones del formulario con sus posiciones relativas
|
|
*/
|
|
export const FORM_SECTIONS = {
|
|
// Encabezado
|
|
header: {
|
|
y: 0,
|
|
height: 10,
|
|
},
|
|
// Tabla de intensidades (lado izquierdo)
|
|
intensidades: {
|
|
x: 0,
|
|
y: 10,
|
|
width: 48,
|
|
height: 32,
|
|
},
|
|
// Fragancia-Aroma (centro-derecha superior)
|
|
fraganciaAroma: {
|
|
x: 48,
|
|
y: 10,
|
|
width: 76,
|
|
height: 18,
|
|
},
|
|
// Notas Fragancia-Aroma (derecha superior)
|
|
notasFragancia: {
|
|
x: 124,
|
|
y: 10,
|
|
width: 75.9,
|
|
height: 18,
|
|
},
|
|
// Sabores (centro-derecha medio)
|
|
sabores: {
|
|
x: 48,
|
|
y: 28,
|
|
width: 76,
|
|
height: 14,
|
|
},
|
|
// Notas Sabores (derecha medio)
|
|
notasSabor: {
|
|
x: 124,
|
|
y: 28,
|
|
width: 75.9,
|
|
height: 14,
|
|
},
|
|
// Sensación en boca y gustos
|
|
sensacionGustos: {
|
|
x: 48,
|
|
y: 42,
|
|
width: 151.9,
|
|
height: 12,
|
|
},
|
|
// Tazas y defectos
|
|
tazasDefectos: {
|
|
x: 0,
|
|
y: 54,
|
|
width: 199.9,
|
|
height: 12,
|
|
},
|
|
// Otras notas
|
|
otrasNotas: {
|
|
x: 0,
|
|
y: 66,
|
|
width: 199.9,
|
|
height: 8,
|
|
},
|
|
// Sub total
|
|
subTotal: {
|
|
x: 0,
|
|
y: 74,
|
|
width: 199.9,
|
|
height: 10,
|
|
},
|
|
} as const
|
|
|
|
/**
|
|
* Nombres de los parámetros de intensidad para la tabla
|
|
*/
|
|
export const PARAMETROS_INTENSIDAD = [
|
|
{ key: 'fragancia', label: 'Fragancia' },
|
|
{ key: 'aroma', label: 'Aroma' },
|
|
{ key: 'sabor', label: 'Sabor' },
|
|
{ key: 'saborResidual', label: 'Sabor Residual' },
|
|
{ key: 'acidez', label: 'Acidez' },
|
|
{ key: 'dulzor', label: 'Dulzor' },
|
|
{ key: 'sensacionBoca', label: 'Sensación Boca' },
|
|
{ key: 'impresionGlobal', label: 'Impresión Global' },
|
|
] as const
|
|
|
|
/**
|
|
* Tipo para categoría de nota en PDF
|
|
*/
|
|
export interface CategoriaPdf {
|
|
key: string
|
|
label: string
|
|
indent?: boolean
|
|
}
|
|
|
|
/**
|
|
* Categorías de notas para el formulario PDF
|
|
* Distribución correcta según formulario físico EVC-IH01
|
|
*/
|
|
export const CATEGORIAS_PDF: {
|
|
columnaIzquierda: CategoriaPdf[]
|
|
columnaDerecha: CategoriaPdf[]
|
|
} = {
|
|
columnaIzquierda: [
|
|
{ key: 'Floral', label: 'Floral' },
|
|
{ key: 'Afrutado', label: 'Afrutado' },
|
|
{ key: 'Bayas', label: 'Bayas', indent: true },
|
|
{ key: 'Frutas Deshidratadas', label: 'Frutas Deshidratadas', indent: true },
|
|
{ key: 'Cítricos', label: 'Cítricos', indent: true },
|
|
{ key: 'Verde Vegetal', label: 'Verde/Vegetal' },
|
|
{ key: 'Otro', label: 'Otra' },
|
|
{ key: 'Químico', label: 'Químico', indent: true },
|
|
{ key: 'Humedad/Tierra', label: 'Humedad/Tierra', indent: true },
|
|
{ key: 'Madera', label: 'Madera', indent: true },
|
|
],
|
|
columnaDerecha: [
|
|
{ key: 'Tostado', label: 'Tostado' },
|
|
{ key: 'Cereal', label: 'Cereal', indent: true },
|
|
{ key: 'Quemado', label: 'Quemado', indent: true },
|
|
{ key: 'Tabaco', label: 'Tabaco', indent: true },
|
|
{ key: 'Nueces/Cacao', label: 'Nueces/Cacao' },
|
|
{ key: 'Nueces', label: 'Nueces', indent: true },
|
|
{ key: 'Cacao', label: 'Cacao', indent: true },
|
|
{ key: 'Especias', label: 'Especias' },
|
|
{ key: 'Dulce', label: 'Dulce' },
|
|
{ key: 'Vainilla', label: 'Vainilla', indent: true },
|
|
{ key: 'Azúcar Morena', label: 'Azúcar Morena', indent: true },
|
|
],
|
|
}
|
|
|
|
/**
|
|
* Sensaciones en boca para el formulario PDF
|
|
*/
|
|
export const SENSACIONES_PDF = [
|
|
{ key: 'Áspero', label: 'Áspero (Arenoso, Rugoso, Rasposo)' },
|
|
{ key: 'Aceitoso', label: 'Aceitoso' },
|
|
{ key: 'Metálico', label: 'Metálico' },
|
|
{ key: 'Suave', label: 'Suave (Aterciopelado, Sedoso)' },
|
|
{ key: 'Deja seca la boca', label: 'Deja seca la boca (Astringente)' },
|
|
] as const
|
|
|
|
/**
|
|
* Gustos predominantes para el formulario PDF
|
|
*/
|
|
export const GUSTOS_PDF = [
|
|
{ key: 'Salado', label: 'Salado' },
|
|
{ key: 'Amargo', label: 'Amargo' },
|
|
{ key: 'Ácido', label: 'Ácido' },
|
|
{ key: 'Dulce', label: 'Dulce' },
|
|
{ key: 'Umami', label: 'Umami' },
|
|
] as const
|
|
|
|
/**
|
|
* Defectos para el formulario PDF
|
|
*/
|
|
export const DEFECTOS_PDF = [
|
|
{ key: 'Mohoso', label: 'Mohoso' },
|
|
{ key: 'Fenólico', label: 'Fenólico' },
|
|
{ key: 'Papa', label: 'Papa' },
|
|
] as const
|