# Bot Descarga API (infraestructura IPSExtractor) Microservicio FastAPI de control remoto de bots. Corre en Docker; las PCs de bot **no** exponen puertos — solo el agent en [`bots/bot_descarga`](../../bots/bot_descarga). Persistencia: **PostgreSQL compartido** (`DATABASE_URL`), tablas `download_workers`, `download_jobs`, `download_job_events` + `tasks` (`type=downloads`). ## Layout MinIO (`pys-cuentas-medicas`) ``` uploads/{download_job_id}/input.xlsx downloads/{download_job_id}/{nit}/{radicado}.pdf ``` ## Arranque (compose) Servicio `bot-descarga` en el `docker-compose.yml` raíz. Gateway: `/bot-descarga/*` → este servicio `:8200`. ## Variables ``` BOT_API_TOKEN=dev-token-change-me DATABASE_URL=postgresql+psycopg://ipsextractor:ipsextractor@database:5432/ipsextractor MINIO_ENDPOINT=https://s3.builker.xyz MINIO_BUCKET=pys-cuentas-medicas MINIO_ANONYMOUS=1 ``` ## Worker en PCs (`bots/bot_descarga`) ```bash cd bots/bot_descarga python -m bot_descarga.worker.run \ --api-url http://GATEWAY:8189/bot-descarga \ --worker-id PC-01 \ --token $BOT_API_TOKEN ``` O con GUI: `python run_gui.py`. Ver [README del agent](../../bots/bot_descarga/README.md). El agent queda idle hasta que el usuario cree un job desde el desktop (enviando `job_id` del Job IPSExtractor). ## Tests (API) ```bash cd services/bot_descarga pytest -q ```