Files
utilerias-recon-2-exe/README.md
Ernesto Herrera a0081f54d2 chore: initial commit del deploy de utilerias-recon-2
Incluye:
- app.ipynb con las 10 pestanas (Conexion, Descargas, Analisis, NLP, KGS,
  CTM, Saldos Vencidos, DataStage, Estructuras SCAII, Valores).
- launcher.py + run_dev.bat para lanzar Voila localmente.
- docker-compose.yml para levantar Postgres 16 con healthcheck.
- schema_registro.sql con las 27 tablas (Registro501..Registro701,
  RegistroInci/Resumen/Sel, base_numpartes).
- requirements.txt con pandas, pyodbc, psycopg2-binary, sqlalchemy,
  scikit-learn, openpyxl, voila, ipywidgets, python-docx.
- 6 manuales de usuario (CTM, SaldosVencidos, DataStage, EstructurasSCAII,
  Valores, GENPACT_V2 general) en .docx.
- 6 generadores de manuales para regenerar los .docx tras editar.
- .gitignore que excluye .env, .venv, outputs generados y caches.
- README.md con instrucciones de setup en server.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 08:18:13 -06:00

163 lines
4.5 KiB
Markdown

# 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:
```bash
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: `.env` NO se sube al repo (esta en `.gitignore`).
### 2. Levantar Postgres en Docker
```powershell
cd app
docker compose --env-file ..\.env up -d postgres-datastage
```
Espera unos segundos. Verifica con:
```powershell
docker ps
```
Debes ver `postgres-datastage` con estatus `Up X seconds (healthy)`.
### 3. Aplicar el schema de las tablas Registro*
```powershell
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:
```powershell
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
```powershell
.\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
```powershell
# 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:
```powershell
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`.