La documentación siguiente describe la
production.invoices, una pieza clave de la Plataforma de Datos de la Gestión de Consultas Veterinarias. Esta tabla proporciona acceso directo a datos de facturación estandarizados, verificados y enriquecidos, lo que le ayuda a acelerar los análisis y los informes financieros.
Referencia detallada de columnas
Identificadores principales
Columna | Tipo | Descripción | Ejemplos | Lógica de negocio |
provet_id | STRING | Su identificador único de consulta | "pcus_1" | Clave de aislamiento del tenant: utilícela siempre para el rendimiento |
invoice_id | BIGINT | Identificador único de la factura dentro de la consulta | 12345, 67890 | Generado por el sistema: inmutable una vez creado |
invoice_number | STRING | Número de factura comercial que se muestra a los clientes | "1001-2024-00123", "DEPT2-240915-456" | Formato: {department_id}-{date}-{sequence}. NULL hasta que la factura esté finalizada (status=3) |
Clasificación de facturas
Columna | Tipo | Descripción | Ejemplos | Lógica de negocio |
invoice_type | STRING | Categoría de factura derivada | "consultation", "countersale", "credit_note" | Lógica:CASE WHEN countersale=1 THEN 'Countersale' WHEN credit_note=0 THEN 'Consultation' WHEN credit_note=1 THEN 'Credit Note' ELSE 'Unknown' END |
consultation_id | BIGINT | Referencia de consulta relacionada | 98765, NULL | Enlaces al registro de consulta. NULL para Venta de mostrador y Factura Rectificativa |
invoice_status | STRING | Estado actual de la factura | "pending", "paid", "cancelled" | Mapeo: 0=Borrador, 1=Enviado, 2=Abierto, 3=Finalizado, 4=Facturación, 99=Anulado. Nota: "pending"/"paid"/"cancelled" son términos simplificados de negocio |
Información financiera
Columna | Tipo | Descripción | Ejemplos | Lógica de negocio |
total_incl_vat | DECIMAL | Importe total con IVA/impuesto | 125.50, 89.99 | Importe total facturable que incluye todos los impuestos |
total_excl_vat | DECIMAL | Importe total sin IVA/impuesto | 100.40, 74.99 | Importe base antes de los cálculos de impuestos |
amount_due | DECIMAL | Saldo pendiente restante | 125.50, 0.00, 25.00 | Se reduce a medida que se aplican los pagos. 0.00 = totalmente pagado |
currency_code | STRING | Código de Moneda ISO 4217 | "EUR", "USD", "GBP", "CAD" | Mapeo automático a partir del país del departamento |
currency_name | STRING | Nombre completo de la moneda | "Euro", "US Dollar", "British Pound Sterling" | Descripción de moneda legible para humanos |
Información de Cliente y Veterinario
Columna | Tipo | Descripción | Ejemplos | Lógica de negocio |
client_name | STRING | Nombre de Cliente/pagador | "John Smith", "Pet Insurance Co", "Sarah Johnson" | Desde el campo payer_name en los datos de origen |
supervising_veterinarian_name | STRING | Nombre completo del veterinario supervisor | "Dra. Emily Watson", "Michael Chen DVM", NULL | Lógica: `first_name |
Detalles del método de pago
Columna | Tipo | Descripción | Ejemplos | Lógica de negocio |
payment_method_type | STRING | Categoría de pago estandarizada | "Card", "Cash or Check", "Digital Wallet", "Financing" | Lógica de categorización automática: indicador Card → "Card", palabras clave Cash/Check → "Cash or Check", CareCredit/Scratchpay → "Financing", etc. |
payment_method_name | STRING | Nombre original del método de pago | "Visa Credit Card", "Cash", "CareCredit" | Nombre sin procesar del sistema de gestión de consultas |
payment_method_name_standardized | STRING | Nombre estandarizado del método de pago | "Visa", "Cash", "CareCredit" | Lógica de estandarización: coincidencia de patrones (p. ej., '%visa%' → 'Visa', '%mastercard%' → 'Mastercard') |
Información de departamento y ubicación
Columna | Tipo | Descripción | Ejemplos | Lógica de negocio |
department_id | BIGINT | Identificador de departamento/consulta | 1001, 2005 | Enlaces a una ubicación concreta de la clínica |
department_name | STRING | Nombre de departamento/clínica | "Main Street Veterinary", "Emergency Clinic Downtown" | Nombre comercial para la ubicación |
department_timezone | STRING | Identificador de zona horaria IANA | "America/New_York", "Europe/London", "Australia/Sydney" | Se usa para conversiones de hora locales |
Campos de fecha (fechas de negocio)
Columna | Tipo | Descripción | Ejemplos | Lógica de negocio |
created_date | DATE | Fecha de creación de la factura | 2024-09-15, 2024-08-22 | Parte de fecha del timestamp de creación |
invoice_date | DATE | Fecha oficial de la factura | 2024-09-15, 2024-08-22 | Fecha de negocio mostrada en la factura |
invoice_due_date | DATE | Fecha de vencimiento del pago | 2024-10-15, 2024-09-22 | Cuando se espera el pago |
invoice_paid_date | DATE | Fecha en la que se recibió el pago | 2024-09-20, NULL | NULL para facturas impagadas |
Timestamps UTC (horas del sistema)
Columna | Tipo | Descripción | Ejemplos | Lógica de negocio |
created_ts_utc | TIMESTAMP | Timestamp de creación (UTC) | 2024-09-15 14:30:25.123 | Hora de creación del sistema en UTC |
invoice_date_ts_utc | TIMESTAMP | Timestamp de la factura (UTC) | 2024-09-15 12:00:00.000 | Fecha de la factura convertida a UTC |
invoice_due_date_ts_utc | TIMESTAMP | Timestamp de vencimiento (UTC) | 2024-10-15 23:59:59.000 | Fecha de vencimiento convertida a UTC |
invoice_paid_date_ts_utc | TIMESTAMP | Timestamp de pago (UTC) | 2024-09-20 16:45:30.456, NULL | Hora de recepción del pago en UTC |
Timestamps locales (zona horaria del departamento)
Columna | Tipo | Descripción | Ejemplos | Lógica de negocio |
created_ts_local | TIMESTAMP | Timestamp de creación (local) | 2024-09-15 10:30:25.123 | |
invoice_date_ts_local | TIMESTAMP | Timestamp de la factura (local) | 2024-09-15 08:00:00.000 | |
invoice_due_date_ts_local | TIMESTAMP | Timestamp de vencimiento (local) | 2024-10-15 19:59:59.000 | |
invoice_paid_date_ts_local | TIMESTAMP | Timestamp de pago (local) | 2024-09-20 12:45:30.456, NULL |
Patrones de consulta habituales
Análisis de ingresos
-- Ingresos mensuales por método de pagoSELECT DATE_TRUNC('month', invoice_date) as month, payment_method_type, COUNT(*) as invoice_count, SUM(total_incl_vat) as revenue, currency_codeFROM production.invoices WHERE provet_id = 'your_practice_id' AND invoice_status IN ('paid', 'finalized') AND invoice_date >= '2024-01-01'GROUP BY 1, 2, 5ORDER BY 1 DESC, 4 DESC;Cobros pendientes
-- Análisis de antigüedad de facturas impagadasSELECT CASE WHEN DATEDIFF(CURRENT_DATE(), invoice_due_date) <= 0 THEN 'Current' WHEN DATEDIFF(CURRENT_DATE(), invoice_due_date) <= 30 THEN '1-30 days' WHEN DATEDIFF(CURRENT_DATE(), invoice_due_date) <= 60 THEN '31-60 days' ELSE 'Over 60 days' END as aging_bucket, COUNT(*) as invoice_count, SUM(amount_due) as total_outstanding, currency_codeFROM production.invoicesWHERE provet_id = 'your_practice_id' AND amount_due > 0GROUP BY 1, 4ORDER BY 1;
Rendimiento del veterinario
-- Veterinarios con mejores resultados por ingresos de consultaSELECT supervising_veterinarian_name, COUNT(DISTINCT invoice_id) as consultations, SUM(total_incl_vat) as total_revenue, AVG(total_incl_vat) as avg_consultation_value, currency_codeFROM production.invoicesWHERE provet_id = 'your_practice_id' AND invoice_type = 'consultation' AND supervising_veterinarian_name IS NOT NULL AND invoice_date >= DATE_SUB(CURRENT_DATE(), 30)GROUP BY 1, 5ORDER BY 3 DESC;
Notas importantes de uso
Gestión de varias monedas
Incluya siempre currency_code al agregar datos financieros entre departamentos:
-- CORRECTO: Agrupar por monedaSELECT currency_code, SUM(total_incl_vat) as revenueFROM production.invoices GROUP BY currency_code;-- INCORRECTO: Mezclar monedasSELECT SUM(total_incl_vat) as revenue -- Puede mezclar EUR + USD + GBPFROM production.invoices;
Buenas prácticas de zona horaria
Use campos *_ts_local para informes de negocio y para interfaces de usuario
Use campos *_ts_utc para integración del sistema y procesamiento de datos
Considere siempre la zona horaria del departamento al interpretar timestamps locales
