6. Automatización y tareas asíncronas¶
6.1. Servicios Celery + Beat¶
/etc/systemd/system/tienda-celery.service:
[Unit]
Description=Tienda ERP Celery Worker
After=network.target redis-server.service
[Service]
User=tienda
Group=tienda
WorkingDirectory=/opt/tienda
EnvironmentFile=/opt/tienda/.env
ExecStart=/opt/tienda/.venv/bin/celery -A tienda worker \
--loglevel=info --concurrency=4 --max-tasks-per-child=200
Restart=on-failure
[Install]
WantedBy=multi-user.target
/etc/systemd/system/tienda-celerybeat.service:
[Unit]
Description=Tienda ERP Celery Beat
After=network.target redis-server.service
[Service]
User=tienda
Group=tienda
WorkingDirectory=/opt/tienda
EnvironmentFile=/opt/tienda/.env
ExecStart=/opt/tienda/.venv/bin/celery -A tienda beat \
--loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler
Restart=on-failure
[Install]
WantedBy=multi-user.target
6.2. Tareas periódicas críticas¶
Configurar desde admin Django (/admin/django_celery_beat/periodictask/) o en código:
| Tarea | Frecuencia | Propósito |
|---|---|---|
accounting.tasks.ecf_check_pending |
cada 5 min | Reenvía e-CF en estado EN_COLA |
accounting.tasks.ecf_retry_failed |
cada 15 min | Reintenta los ERROR/RECHAZADO con backoff |
accounting.tasks.ecf_poll_trackids |
cada 10 min | Consulta estado de los ENVIADO/EN_PROCESO |
accounting.tasks.acr_check_deadline |
diario 08:00 | Detecta facturas próximas al límite de ACR (24 h) |
accounting.tasks.cert_expiry_alert |
diario 09:00 | Alerta si certificado vence en <60 días |
accounting.tasks.padron_refresh |
semanal domingo 03:00 | Actualiza tabla PadronDGII |
accounting.tasks.exportar_reportes_dgii_mensual |
día 1 09:00 | Genera 606/607/608/IT-1 mensuales |
inventory.tasks.expirar_reservas_stock |
cada 5 min | Libera StockReservation expiradas (TTL 30min) |
6.3. Contingencia¶
accounting/contingencia.py:
health_check_dgii()→ ping cada N minutosmarcar_factura_contingencia(invoice)→ asigna estadoREGISTRADO_EN_CONTINGENCIAregularizar_factura(invoice)→ reintento cuando DGII se recupera- Comando:
python manage.py ecf_contingencia_status
Buena práctica: integrar alertas a Slack/Telegram/email cuando >5 facturas queden en contingencia.