Base de datos
Tablas involucradas en la query de lotes
erDiagram
HAC_CERTIFICADO {
int id_certificado PK
int remate_id FK
int cert_estado_id FK
int regcuenta_id FK
int consignatario_regcuenta_id FK
int establecimiento_id FK
int formulario_id FK
int orden_final
int orden_venta
decimal precio_base
}
HAC_REMATES {
int id_remate PK
varchar nombre_remate
tinyint oculta_localidad
tinyint oculta_provincia
tinyint oculta_vendedor
}
HAC_CERT_DETALLE {
int certificado_id FK
int hac_categ_id FK
}
HAC_CATEGORIA {
int id_hac_categ PK
varchar nombre_categoria
}
HAC_PRE_ORDEN {
int certficado_id FK
int remate_id FK
int formulario_id FK
int orden
}
REG_CUENTA_ESTABLECIMIENTO {
int id_establecimiento PK
varchar nombre_establecimiento
varchar latlong
int localidad_id FK
int provincia_id FK
timestamp updated_at
}
ATRIBUTOS_VALORES {
int atributo_id FK
varchar tablename
int record_id
varchar valor_atributo
}
ATRIBUTOS {
int id_atributo PK
varchar nombre_atributo
varchar tag
varchar tipo_atributo
tinyint deshabilitado_atributo
timestamp updated_at
}
HAC_OFERTAS {
int id_oferta PK
int certificado_id FK
decimal importe_oferta
int estado_oferta
tinyint rechazada
}
HAC_CERTIFICADO_MOV {
int certificado_id FK
int venta_estado_id FK
}
meilisearch_sync_queue {
int certificado_id PK
tinyint is_delete
timestamp created_at
}
HAC_CERTIFICADO ||--o{ HAC_CERT_DETALLE : "tiene"
HAC_CERT_DETALLE }o--|| HAC_CATEGORIA : "categoría"
HAC_CERTIFICADO ||--o{ HAC_PRE_ORDEN : "pre-orden"
HAC_CERTIFICADO ||--o{ ATRIBUTOS_VALORES : "atributos EAV"
ATRIBUTOS_VALORES }o--|| ATRIBUTOS : "definición"
HAC_CERTIFICADO ||--o{ HAC_OFERTAS : "ofertas"
HAC_CERTIFICADO ||--o{ HAC_CERTIFICADO_MOV : "movimientos"
HAC_CERTIFICADO }o--|| REG_CUENTA_ESTABLECIMIENTO : "establecimiento"
HAC_CERTIFICADO }o--|| HAC_REMATES : "remate"
Tabla de cola
La tabla meilisearch_sync_queue es el único punto de comunicación entre los triggers de MySQL y el worker Python. Es intencionalmente simple:
- PK =
certificado_id→ deduplicación automática, sin lógica extra INSERT IGNOREen todos los triggers excepto el DELETE deHAC_CERTIFICADOON DUPLICATE KEY UPDATE is_delete = 1solo en el trigger de DELETE para que un lote eliminado siempre se borre del índice aunque estuviera encolado para upsert
Atributos EAV
Los atributos del lote están en un modelo EAV (Entity-Attribute-Value):
ATRIBUTOS_VALORES
tablename = 'HAC_CERTIFICADOS'
record_id = id_certificado
atributo_id → ATRIBUTOS.id_atributo
valor_atributo
La query usa GROUP_CONCAT para aplanar todos los atributos en un string JSON (replace_lote) que Python parsea y expande como campos attr_* en el documento de Meilisearch. Por ejemplo:
Se convierte en: