Appearance
M06 Costeo -- Modelo de Datos
| Campo | Valor |
|---|---|
| Estado | Borrador |
| Prioridad | Fase 1 -- Transversal |
| Última actualización | 2026-03-25 |
| Módulo | M06 Costeo |
1. Diagrama entidad-relación
2. Detalle de entidades
2.1 MATERIA_PRIMA
Catálogo de materias primas utilizadas en las preparaciones magistrales.
| Campo | Tipo | Nulo | Descripción |
|---|---|---|---|
| id | UUID | No | Identificador único |
| id_recetario | UUID | No | Recetario propietario del registro |
| codigo | VARCHAR(50) | No | Código interno de la materia prima |
| nombre | VARCHAR(255) | No | Nombre de la materia prima |
| unidad_compra | VARCHAR(50) | No | Unidad en que se compra: kg, g, litro, ml, unidad |
| proveedor_principal | VARCHAR(255) | Sí | Proveedor principal habitual |
| activo | BOOLEAN | No | Indica si la materia prima está vigente en el catálogo |
| created_at | TIMESTAMP | No | Fecha de creación |
| updated_at | TIMESTAMP | No | Fecha de última modificación |
| created_by | VARCHAR(255) | No | Usuario que creó el registro |
Índices sugeridos: id_recetario, codigo, nombre.
Restricción: codigo debe ser único dentro de un mismo id_recetario.
2.2 COSTO_MATERIA_PRIMA
Registro de costos por materia prima, con soporte para múltiples proveedores y vigencias.
| Campo | Tipo | Nulo | Descripción |
|---|---|---|---|
| id | UUID | No | Identificador único |
| id_materia_prima | UUID | No | Materia prima a la que pertenece este costo |
| proveedor | VARCHAR(255) | No | Nombre del proveedor que ofrece este precio |
| costo_unitario | DECIMAL(12,4) | No | Costo por unidad de compra |
| moneda | VARCHAR(10) | No | Moneda del costo: CLP, USD |
| fecha_vigencia_desde | DATE | No | Fecha desde la cual aplica este costo |
| fecha_vigencia_hasta | DATE | Sí | Fecha hasta la cual aplica (NULL = vigente indefinidamente) |
| vigente | BOOLEAN | No | Indica si este es el costo vigente actualmente |
| created_at | TIMESTAMP | No | Fecha de creación del registro |
| created_by | VARCHAR(255) | No | Usuario que registró el costo |
Índices sugeridos: id_materia_prima, vigente, fecha_vigencia_desde.
Regla: Solo puede haber un registro vigente por materia prima y proveedor en un momento dado.
2.3 PRODUCTO
Catálogo de productos (preparaciones magistrales) del recetario con su clasificación y unidad de costeo.
| Campo | Tipo | Nulo | Descripción |
|---|---|---|---|
| id | UUID | No | Identificador único |
| id_recetario | UUID | No | Recetario propietario |
| codigo | VARCHAR(50) | No | Código interno del producto (ej: asignado desde ERP o Mastersoft) |
| nombre | VARCHAR(255) | No | Nombre completo del producto |
| activo_principal | VARCHAR(255) | Sí | Principio activo principal (ej: ciclosporina, clobetasol) |
| concentracion | VARCHAR(100) | Sí | Concentración (ej: 1%, 0.5%, 250 mg) |
| forma_farmaceutica | VARCHAR(100) | No | Forma farmacéutica: cápsula, crema, colirio, jarabe, ungüento, solución |
| presentacion | VARCHAR(100) | No | Presentación: 10 ml, 30 g, 1 unidad, etc. |
| linea | VARCHAR(100) | Sí | Línea del producto: oftalmología, dermatología, veterinaria, etc. |
| unidad_costeo | VARCHAR(50) | No | Unidad base de costeo: unidad, gramo, ml, frasco |
| tipo_producto | VARCHAR(50) | No | Tipo: estándar, variable |
| estandarizado | BOOLEAN | No | Indica si el producto tiene fórmula fija (true) o es variable por receta (false) |
| activo | BOOLEAN | No | Indica si el producto está vigente en el catálogo |
| created_at | TIMESTAMP | No | Fecha de creación |
| updated_at | TIMESTAMP | No | Fecha de última modificación |
| created_by | VARCHAR(255) | No | Usuario que creó el registro |
Índices sugeridos: id_recetario, codigo, activo_principal, forma_farmaceutica, linea, activo.
Restricción: codigo debe ser único dentro de un mismo id_recetario.
Nota: La estructura de campos (activo_principal, concentracion, forma_farmaceutica, presentacion, linea) refleja la organización que Reccius maneja en sus hojas de cálculo actuales, según lo discutido en la reunión 2026-03-24 (Inger: "el activo, la concentración, la unidad, la línea, las presentaciones y la forma farmacéutica").
2.4 FORMULA_PRODUCTO
Composición de un producto: lista de materias primas con cantidades por unidad de costeo.
| Campo | Tipo | Nulo | Descripción |
|---|---|---|---|
| id | UUID | No | Identificador único |
| id_producto | UUID | No | Producto al que pertenece esta línea de fórmula |
| id_materia_prima | UUID | No | Materia prima utilizada |
| cantidad_por_unidad | DECIMAL(10,4) | No | Cantidad de esta materia prima por unidad de costeo del producto |
| unidad_medida | VARCHAR(20) | No | Unidad: g, mg, ml, unidad |
| observaciones | TEXT | Sí | Observaciones técnicas |
| created_at | TIMESTAMP | No | Fecha de creación |
Índices sugeridos: id_producto, id_materia_prima.
Nota: Solo aplica para productos estandarizados (estandarizado = true). Para productos variables, el costo se carga directamente en COSTO_PRODUCTO con metodo_calculo = 'manual'.
2.5 COSTO_PRODUCTO
Costo calculado y precio base de un producto, con soporte para vigencias.
| Campo | Tipo | Nulo | Descripción |
|---|---|---|---|
| id | UUID | No | Identificador único |
| id_producto | UUID | No | Producto al que pertenece este costo |
| costo_materias_primas | DECIMAL(12,2) | No | Suma del costo de materias primas por unidad de costeo |
| factor_mano_obra | DECIMAL(12,2) | Sí | Costo de mano de obra por unidad (configurable) |
| factor_overhead | DECIMAL(12,2) | Sí | Costos indirectos por unidad (configurable) |
| costo_total | DECIMAL(12,2) | No | Costo total = MP + mano de obra + overhead |
| margen_porcentaje | DECIMAL(5,2) | No | Porcentaje de margen aplicado (ej: 20.00, 50.00, 60.00) |
| precio_base | DECIMAL(12,2) | No | Precio base = costo_total x (1 + margen/100) |
| fecha_vigencia_desde | DATE | No | Fecha desde la cual aplica este precio |
| fecha_vigencia_hasta | DATE | Sí | Fecha hasta la cual aplica (NULL = vigente indefinidamente) |
| vigente | BOOLEAN | No | Indica si este es el costo/precio vigente actualmente |
| metodo_calculo | VARCHAR(20) | No | Método: automático (desde fórmula), manual (ingresado a mano) |
| created_at | TIMESTAMP | No | Fecha de creación |
| created_by | VARCHAR(255) | No | Usuario que generó el registro |
Índices sugeridos: id_producto, vigente, fecha_vigencia_desde.
Regla: Solo puede haber un registro vigente por producto en un momento dado.
2.6 HISTORIAL_COSTO
Registro de todos los cambios de costo y precio, tanto de materias primas como de productos.
| Campo | Tipo | Nulo | Descripción |
|---|---|---|---|
| id | UUID | No | Identificador único del registro |
| entidad_tipo | VARCHAR(30) | No | Tipo de entidad modificada: materia_prima, producto |
| entidad_id | UUID | No | ID de la materia prima o producto modificado |
| campo_modificado | VARCHAR(50) | No | Campo que cambió: costo_unitario, precio_base, margen_porcentaje, etc. |
| valor_anterior | DECIMAL(12,4) | Sí | Valor antes del cambio (NULL para primer registro) |
| valor_nuevo | DECIMAL(12,4) | No | Valor después del cambio |
| motivo | TEXT | Sí | Motivo del cambio (revisión anual, cambio de proveedor, ajuste comercial, etc.) |
| usuario | VARCHAR(255) | No | Usuario que realizó el cambio |
| fecha_cambio | TIMESTAMP | No | Fecha y hora del cambio |
Índices sugeridos: entidad_tipo + entidad_id, fecha_cambio.
3. Relaciones entre entidades
| Entidad origen | Entidad destino | Cardinalidad | Descripción |
|---|---|---|---|
| MateriaPrima | CostoMateriaPrima | 1:N | Una materia prima puede tener múltiples registros de costo (por proveedor y por período) |
| MateriaPrima | FormulaProducto | 1:N | Una materia prima puede estar en la fórmula de múltiples productos |
| Producto | FormulaProducto | 1:N | Un producto puede tener múltiples materias primas en su fórmula |
| Producto | CostoProducto | 1:N | Un producto puede tener múltiples registros de costo (por período) |
| MateriaPrima, Producto | HistorialCosto | 1:N | Cada cambio de costo queda registrado (relación polimórfica vía entidad_tipo + entidad_id) |
4. Relaciones con otros módulos
| Entidad M06 | Módulo externo | Relación | Detalle |
|---|---|---|---|
| CostoProducto (precio_base) | M02 Cotización | Consulta | M02 consulta el precio base vigente para generar cotizaciones |
| CostoProducto (precio_base) | M03 B2B (Convenio) | Consulta | M03 consulta el precio base y aplica descuento de convenio para calcular el precio de convenio |
| Producto (codigo) | M03 B2B (LineaSolicitud) | Referencia | Las líneas de solicitud B2B referencian el código de producto definido en M06 |
5. Notas de implementación
- El campo codigo en Producto corresponde al código interno del recetario (el mismo que usa en Mastersoft o en su ERP). Esto permite cruzar información contable, como se discutió en la reunión 2026-03-24.
- La tabla FORMULA_PRODUCTO solo se usa para productos estandarizados. Los productos variables (recetas nuevas) tienen su costo registrado directamente en COSTO_PRODUCTO con metodo_calculo = 'manual'.
- El campo moneda en COSTO_MATERIA_PRIMA permite soportar materias primas cotizadas en USD (importaciones), aunque el precio_base en COSTO_PRODUCTO siempre se expresa en CLP.
- El HISTORIAL_COSTO usa un patrón polimórfico (entidad_tipo + entidad_id) para registrar cambios tanto de materias primas como de productos en una sola tabla, facilitando consultas transversales de trazabilidad.
- La exportación e importación masiva (HU-M06-006, HU-M06-007) opera sobre las tablas PRODUCTO y COSTO_PRODUCTO, generando registros en HISTORIAL_COSTO por cada cambio aplicado.
Volver al Requerimientos M06 | Ver Historias de usuario M06 | Ver Índice general