chore(ti/licenciamiento): retira los jobs one-shot de qa y traslada el mecanismo a produccion
chore(ti/licenciamiento): retira los jobs one-shot ya ejecutados en qa y traslada el mismo mecanismo a produccion
QA QUEDO CARGADO — ESTE COMMIT LEVANTA EL ANDAMIO Y LO REPONE DEL OTRO LADO
licencias_import_qa_apply corrio sobre el pipeline de qa y materializo en
ti_licencias las 1,252 filas de la pestaña "Licencias". El dry-run previo
reporto, y el apply confirmo:
filas en la tabla antes 0
altas 1252
actualizaciones 0
saltadas por origen='portal' 0
saltadas por baja logica 0
empresa cruza al catalogo 1213 de 1252
Los 39 renglones que no cruzaron (18 valores distintos: BRIOCHE, GAABRISK,
HOST MX, HERGIAM CENTROS COMERCIALES, JARDIN SANTA FE, TORRE ALHENA, etc.)
entraron con empresa_texto poblado y empresa_id nulo, y la vista los agrupa
bajo "Sin cruce al catalogo", que es seleccionable a proposito: son curacion
pendiente en /admin, no filas ocultas. La pantalla en qa.mcp.caabsa.com ya
pinta datos — verificado por el usuario.
NOTA SOBRE EL CRUCE, PORQUE JUSTIFICA LA DECISION DE DISEÑO
En local el mismo script cruzo 1,128 de 1,252; en QA cruzo 1,213. La diferencia
de 85 filas no es un defecto: el catalogo empresas_grupo_caabsa de QA esta
mas completo que el de la maquina de desarrollo, y el script resuelve el cruce
EN EL ENTORNO DONDE CORRE, via services/empresas_catalogo_lookup. Esto valida
haber descartado la alternativa de generar un INSERT masivo con los
empresa_id de local: 85 licencias habrian quedado apuntando a la empresa
equivocada, o a ninguna, sin que nada lo delatara.
QUE SE QUITA
- licencias_import_qa_dryrun
- licencias_import_qa_apply Su trabajo esta hecho y dejarlos vivos solo abre la puerta a que alguien re-dispare una lectura de Google contra un entorno que ya abandono la hoja.
QUE SE AGREGA, Y EN QUE DIFIERE
- licencias_import_prod_dryrun
- licencias_import_prod_apply
Mismo patron, cuatro diferencias sustantivas:
· tags
mcp-proden vez demcp-qa— otro runner, otro host. · composedocker-compose.ymlen vez dedocker-compose.qa.yml. · contenedorcaabsa_postgresen vez decaabsa_qa_postgres. Es el default quebackend/migrations/run.shya asume en produccion:deploy_prodno le pasaPOSTGRES_CONTAINER, a diferencia dedeploy_qa, que si lo override. · acotados a$CI_COMMIT_BRANCH == "main", asi que no aparecen en pipelines deqani de merge request. Siguen sin la llaveenvironment:, por lo mismo que en QA: no despliegan nada, no deben ensuciar el historial de deployments del entornoproduction, y omitirla los saca del gate de Protected Environments — relevante aqui, donde solo Diego mergea amain.
PASO EXTRA QUE LOS JOBS DE QA NO NECESITABAN
El dry-run de produccion verifica primero si existe /app/service_account.json
dentro del contenedor y lo dice explicitamente. Motivo: deploy_prod preserva
ese archivo con git clean -e, pero preservar no es tener — el comentario del
propio job dice "copiar UNA VEZ al server tras este merge", o sea que el
service account pudo nunca haberse copiado al host de PRD. En QA si estaba y la
lectura de la hoja funciono a la primera. El dry-run lleva
allow_failure: true para que, si falta, truene solo y no arrastre el deploy:
ese job es el canario, no un paso critico.
POR QUE EL SCRIPT NO SE BORRA EN ESTE COMMIT
El plan original contemplaba retirar backend/scripts/import_licencias_sheet.py
junto con los jobs de QA. No procede: main sigue en c85a6b6a (20 de agosto)
y produccion todavia lee la hoja en vivo. En cuanto qa llegue a main, PRD se
va a topar con ti_licencias vacia exactamente igual que QA, y va a necesitar
este script. Borrarlo ahora dejaria a produccion sin con que llenar la tabla.
Se elimina en el commit siguiente a la carga de PRD, junto con estos dos jobs y
la etapa oneshot.
ALCANCE
Un solo archivo tocado, .gitlab-ci.yml. Cero DDL, cero migraciones, cero
cambios de modelo, router, servicio o frontend. La etapa oneshot se conserva
porque los jobs nuevos la usan.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com