fase 1: registro de comprobantes con código de seguimiento
Nueva tabla comprobantes (creada en init_db) y módulo seguimiento.py: cada comprobante recibe un código ABR-AAMMDD-NNNNN que conserva si reaparece en otro correo, más su resultado (aceptado/rechazado/error) y el estado de la notificación. El pipeline lo registra por factura sin bloquear el flujo si el seguimiento falla. Las pruebas usan una BD temporal para no tocar emails.db. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9d295d6485
commit
297cfde0e1
9 files changed
+563
-6
No files matched your search
+34
-1
@@ -9,7 +9,9 @@ DB_NAME = "emails.db"
|
||||
# ============================================================================
|
||||
def init_db() -> None:
|
||||
"""
|
||||
Inicializa la base de datos SQLite y crea la tabla de correos si no existe.
|
||||
Inicializa la base de datos SQLite y crea las tablas si no existen:
|
||||
``emails`` (correos ya procesados) y ``comprobantes`` (códigos de
|
||||
seguimiento y resultado de cada comprobante, ver ``seguimiento.py``).
|
||||
"""
|
||||
conn = sqlite3.connect(DB_NAME)
|
||||
try:
|
||||
@@ -27,6 +29,37 @@ def init_db() -> None:
|
||||
)
|
||||
''')
|
||||
|
||||
# Un comprobante se identifica por (ruc_emisor, tipo, serie, numero). Los
|
||||
# correos sin comprobante identificable llevan serie NULL y son únicos por correo.
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS comprobantes (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
codigo_seguimiento TEXT UNIQUE,
|
||||
email_id TEXT NOT NULL,
|
||||
ruc_emisor TEXT,
|
||||
tipo TEXT,
|
||||
serie TEXT,
|
||||
numero TEXT,
|
||||
estado TEXT NOT NULL DEFAULT 'pendiente',
|
||||
observaciones TEXT,
|
||||
doc_entry INTEGER,
|
||||
veces_recibido INTEGER NOT NULL DEFAULT 1,
|
||||
notificacion_estado TEXT NOT NULL DEFAULT 'pendiente',
|
||||
notificacion_error TEXT,
|
||||
notificacion_fecha TEXT,
|
||||
creado_en TEXT NOT NULL,
|
||||
actualizado_en TEXT NOT NULL
|
||||
)
|
||||
''')
|
||||
cursor.execute('''
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS ux_comprobantes_documento
|
||||
ON comprobantes (ruc_emisor, tipo, serie, numero) WHERE serie IS NOT NULL
|
||||
''')
|
||||
cursor.execute('''
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS ux_comprobantes_correo
|
||||
ON comprobantes (email_id) WHERE serie IS NULL
|
||||
''')
|
||||
|
||||
conn.commit()
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
Reference in new issue
Block a user