Merge de upstream/main (commit c80f6c7):
- Funciones BOM: UNIMED_BOM, VALORIVAMN en queries
- generar_plantilla_reintegro + widgets UI reintegro (WIP)
- Diagnostico Paso 12 (% KGS)
- Manual_Reintegro.docx
- tab_bom nuevo
Fix conflictos de nombres:
- btn_frac_um / bar_frac_um para evitar colision con analytics frac
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Utilerias RECON 2
Sistema de utilerias 2.0 para automatizacion de procesos aduaneros SCAII + DataStage. Construido sobre Voila (Jupyter widgets) con backend dual: SQL Server (SCAII) + PostgreSQL (DataStage en Docker).
Pestanas
- Conexion — selecciona la base SCAII a conectar.
- Descargas — procesa facturas de exportacion contra saldos IMPO (paso 9/10).
- Analisis Saldos — graficas y pivotes de SSaldoTem.
- Sustitutos NLP — propone sustitutos en SPartesSustitutos via TF-IDF.
- Descarga % KGS — analiza cobertura de descargas en KGS.
- CTM — reasigna descargas de Cambio de Regimen a CTM.
- Saldos Vencidos — prorratea saldos IMPO vencidos en descargas EXPO.
- DataStage — carga archivos .asc del SAAI a tablas Registro* en Postgres.
- Estructuras SCAII — reportes CAT/Pedimentos/Facturas/Partidas a Excel.
- Valores — ajusta VALORTOTALME/MN de SPartidasExpo por prorrateo.
Stack
| Capa | Tecnologia |
|---|---|
| UI | Voila + ipywidgets |
| Backend | Python 3.11+ (pandas, scikit-learn, pyodbc, psycopg2, sqlalchemy) |
| BD aduanera | SQL Server (SCAII) |
| BD DataStage | PostgreSQL 16 (en Docker) |
| Reportes | openpyxl, python-docx |
Requisitos del servidor
- Windows 10 / 11 / Server con PowerShell.
- Python 3.11+ con "Add to PATH" durante instalacion.
- Docker Desktop (para el contenedor de Postgres).
- ODBC Driver 18 for SQL Server (para conectar a SCAII).
- Acceso de red al servidor SQL Server donde vive SCAII.
Configuracion inicial
1. Variables de entorno
Copia .env.example a .env y completa los valores reales:
cp .env.example .env
Edita .env con tu editor favorito y completa:
DB_*— credenciales del Postgres local (las que va a usar el contenedor).SCAII_*— credenciales del SQL Server donde vive SCAII.
Importante:
.envNO se sube al repo (esta en.gitignore).
2. Levantar Postgres en Docker
cd app
docker compose --env-file ..\.env up -d postgres-datastage
Espera unos segundos. Verifica con:
docker ps
Debes ver postgres-datastage con estatus Up X seconds (healthy).
3. Aplicar el schema de las tablas Registro*
docker cp schema_registro.sql postgres-datastage:/tmp/schema.sql
docker exec -it postgres-datastage psql -U servicemanager -d dbSat -f /tmp/schema.sql
(Ajusta servicemanager y dbSat segun tu .env.)
Verifica:
docker exec -it postgres-datastage psql -U servicemanager -d dbSat -c "\dt"
Debes ver 27 tablas: Registro501, Registro551, Registro701, ..., base_numpartes.
4. Arrancar la app
.\run_dev.bat
La primera vez tarda 2-3 minutos (crea .venv, instala dependencias).
Cuando termine, abre el navegador en:
http://127.0.0.1:8866/
Comandos utiles
# Estado del contenedor
docker compose ps
# Logs en vivo
docker compose logs -f postgres-datastage
# Detener Postgres
docker compose stop
# Volver a iniciar
docker compose start
# Eliminar contenedor (mantiene los datos)
docker compose down
# Eliminar contenedor + DATOS (CUIDADO)
docker compose down -v
Estructura del proyecto
.
├── .env.example
├── .gitignore
├── README.md
└── app/
├── app.ipynb # notebook principal
├── launcher.py # lanzador Voila
├── run_dev.bat # script de arranque
├── requirements.txt # deps Python
├── docker-compose.yml # contenedor Postgres
├── schema_registro.sql # DDL tablas Registro*
├── Manual_*.docx # manuales de usuario
└── generar_manual_*.py # generadores de manuales
Manuales
Los .docx en app/ son los manuales de usuario por modulo:
Manual_GENPACT_V2.docx— manual general (Conexion, Descargas, Analisis, NLP, KGS).Manual_CTM.docx— modulo CTM.Manual_SaldosVencidos.docx— modulo Saldos Vencidos.Manual_DataStage.docx— modulo DataStage.Manual_EstructurasSCAII.docx— modulo Estructuras SCAII.Manual_Valores.docx— modulo Valores.
Para regenerarlos despues de editar el script correspondiente:
python app\generar_manual_valores.py
# (y los demas generar_manual_*.py segun el caso)
Soporte
Para problemas o cambios, abre un PR en este repositorio.
No hagas push directo a main.