Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cfb6e5ce52 | ||
|
|
fb54dbb281 |
No files matched your search
+2
-5
@@ -1,12 +1,9 @@
|
|||||||
__pycache__/
|
__pycache__/
|
||||||
.venv/
|
validar-venv/
|
||||||
venv/
|
|
||||||
env/
|
|
||||||
logs/
|
logs/
|
||||||
.env.dev
|
.env
|
||||||
.DS
|
.DS
|
||||||
.env
|
.env
|
||||||
.env.*
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
+1
-1
@@ -14,7 +14,7 @@ from constants import TABLAS, ESTADOS_COMPROBANTE, ESTADOS_CONTRIBUYENTE, CONDIC
|
|||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
||||||
# Cargar variables de entorno desde .env
|
# Cargar variables de entorno desde .env
|
||||||
load_dotenv(dotenv_path=".env.dev")
|
load_dotenv(dotenv_path=".env")
|
||||||
|
|
||||||
# Configuración de la API
|
# Configuración de la API
|
||||||
HANA_HOST = os.getenv("HANA_HOST", "")
|
HANA_HOST = os.getenv("HANA_HOST", "")
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ HORARIOS = [
|
|||||||
(17, 30, 21, 30, 1800, "full"), # 17:30 - 21:30 -> cada 30 minutos
|
(17, 30, 21, 30, 1800, "full"), # 17:30 - 21:30 -> cada 30 minutos
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# 0=lun, 1=mar, 2=mié, 3=jue, 4=vie, 5=sáb, 6=dom
|
||||||
|
DIAS_ACTIVOS = [0, 1, 2, 3, 4] # lun, mar, mie, jue, vie
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
def obtener_intervalo(dt: datetime) -> tuple[int, str] | None:
|
def obtener_intervalo(dt: datetime) -> tuple[int, str] | None:
|
||||||
minutos = dt.hour * 60 + dt.minute
|
minutos = dt.hour * 60 + dt.minute
|
||||||
@@ -41,6 +44,15 @@ def segundos_hasta_proximo_inicio(dt: datetime) -> int:
|
|||||||
|
|
||||||
return int((inicio - dt).total_seconds())
|
return int((inicio - dt).total_seconds())
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
def segundos_hasta_proximo_dia_activo(dt: datetime) -> int:
|
||||||
|
for dias in range(1, 8):
|
||||||
|
prox = dt + timedelta(days=dias)
|
||||||
|
if prox.weekday() in DIAS_ACTIVOS:
|
||||||
|
target = prox.replace(hour=6, minute=30, second=0, microsecond=0)
|
||||||
|
return int((target - dt).total_seconds())
|
||||||
|
return 86400
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
def cargar_empresas():
|
def cargar_empresas():
|
||||||
with open("empresas.json", "r", encoding="utf-8") as f:
|
with open("empresas.json", "r", encoding="utf-8") as f:
|
||||||
@@ -253,7 +265,7 @@ def main():
|
|||||||
log_path = logger_utilities.setup_logger()
|
log_path = logger_utilities.setup_logger()
|
||||||
logger_utilities.limpiar_logs_antiguos(dias=7)
|
logger_utilities.limpiar_logs_antiguos(dias=7)
|
||||||
|
|
||||||
load_dotenv(dotenv_path=".env.dev")
|
load_dotenv(dotenv_path=".env")
|
||||||
|
|
||||||
print("=" * 60)
|
print("=" * 60)
|
||||||
print("🚀 Demonio iniciado")
|
print("🚀 Demonio iniciado")
|
||||||
@@ -265,6 +277,19 @@ def main():
|
|||||||
|
|
||||||
inicio_ciclo = datetime.now()
|
inicio_ciclo = datetime.now()
|
||||||
|
|
||||||
|
logger_utilities.rotar_log()
|
||||||
|
|
||||||
|
if inicio_ciclo.weekday() not in DIAS_ACTIVOS:
|
||||||
|
dormir = segundos_hasta_proximo_dia_activo(inicio_ciclo)
|
||||||
|
print(
|
||||||
|
f"\n[{inicio_ciclo:%Y-%m-%d %H:%M:%S}] "
|
||||||
|
f"Día no activo (weekday={inicio_ciclo.weekday()}).\n"
|
||||||
|
f"Próxima ejecución: "
|
||||||
|
f"{(inicio_ciclo + timedelta(seconds=dormir)):%Y-%m-%d %H:%M:%S}"
|
||||||
|
)
|
||||||
|
time.sleep(dormir)
|
||||||
|
continue
|
||||||
|
|
||||||
resultado = obtener_intervalo(inicio_ciclo)
|
resultado = obtener_intervalo(inicio_ciclo)
|
||||||
|
|
||||||
if resultado is not None:
|
if resultado is not None:
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
[project]
|
||||||
|
name = "validador_documentos"
|
||||||
|
version = "1.1.0"
|
||||||
|
description = "Validador de comprobantes electrónicos contra SUNAT"
|
||||||
|
requires-python = ">=3.10"
|
||||||
|
dependencies = [
|
||||||
|
"certifi==2026.6.17",
|
||||||
|
"charset-normalizer==3.4.9",
|
||||||
|
"hdbcli==2.29.23",
|
||||||
|
"idna==3.18",
|
||||||
|
"python-dotenv==1.2.2",
|
||||||
|
"requests==2.34.2",
|
||||||
|
"urllib3==2.7.0",
|
||||||
|
]
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
certifi==2026.6.17
|
certifi==2026.6.17
|
||||||
charset-normalizer==3.4.9
|
charset-normalizer==3.4.9
|
||||||
dotenv==0.9.9
|
|
||||||
hdbcli==2.29.23
|
hdbcli==2.29.23
|
||||||
idna==3.18
|
idna==3.18
|
||||||
python-dotenv==1.2.2
|
python-dotenv==1.2.2
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ from dotenv import load_dotenv
|
|||||||
|
|
||||||
urllib3.disable_warnings()
|
urllib3.disable_warnings()
|
||||||
|
|
||||||
load_dotenv(dotenv_path=".env.dev")
|
load_dotenv(dotenv_path=".env")
|
||||||
|
|
||||||
SAPB1_URL = os.getenv("SAP_B1_URL", "")
|
SAPB1_URL = os.getenv("SAP_B1_URL", "")
|
||||||
SAPB1_TIMEOUT = float(os.getenv("SAP_B1_TIMEOUT", 15.0))
|
SAPB1_TIMEOUT = float(os.getenv("SAP_B1_TIMEOUT", 15.0))
|
||||||
|
|||||||
Reference in new issue
Block a user