#!/usr/bin/env bash set -Eeuo pipefail ROOT="${ROOT:-/var/www/dhv2.korexlabs.com}" cd "$ROOT" API_URL="${API_URL:-http://127.0.0.1:3101/api/v3}" echo "========== D5.3.6 · VERSIONES ==========" [[ "$(node -p "require('./api-v3/package.json').version")" == "0.19.3-6" ]] [[ "$(node -p "require('./web-v2/package.json').version")" == "0.19.3-6" ]] echo "API: 0.19.3-6" echo "WEB: 0.19.3-6" echo echo "========== D5.3.6 · MIGRACIONES ==========" MIGRATION_OUTPUT="$(docker compose --profile tools run --rm migrate npm run migration:show 2>&1)" echo "$MIGRATION_OUTPUT" grep -Fq 'Pending migrations: no' <<<"$MIGRATION_OUTPUT" echo echo "========== D5.3.6 · HEALTH ==========" HEALTH="$(curl -fsS "$API_URL/health")" echo "$HEALTH" grep -Fq '"version":"0.19.3-6"' <<<"$HEALTH" grep -Fq '"phase":"D5.3.6"' <<<"$HEALTH" echo echo "========== D5.3.6 · RUTAS PROTEGIDAS ==========" CODE="$(curl -sS -o /tmp/dhv2-d536-reconcile.txt -w '%{http_code}' -X POST "$API_URL/asset-imports/00000000-0000-4000-8000-000000000000/reconcile")" [[ "$CODE" == "401" ]] echo "/asset-imports/:id/reconcile sin sesión: 401 OK" echo echo "========== D5.3.6 · NORMALIZACIÓN ==========" grep -Fq 'technicalNormalizationSuggestion' api-v3/src/asset-imports/asset-import-profiles.ts grep -Fq 'normalizedFamily' api-v3/src/asset-imports/asset-import-profiles.ts grep -Fq 'normalizedSubtype' api-v3/src/asset-imports/asset-import-profiles.ts grep -Fq 'conditionStatusSuggestion' api-v3/src/asset-imports/asset-import-profiles.ts echo "Familia/subtipo y estados separados: OK" echo echo "========== D5.3.6 · MATCHING CONSERVADOR ==========" grep -Fq 'INVENTORY_ID_OR_CODE_EXACT' api-v3/src/asset-imports/asset-imports.service.ts grep -Fq 'AREA_FIELD_EXACT' api-v3/src/asset-imports/asset-imports.service.ts grep -Fq 'ORGANIZATION_NAME_EXACT' api-v3/src/asset-imports/asset-imports.service.ts grep -Fq 'MATCH_MULTIPLE_ASSETS' api-v3/src/asset-imports/asset-imports.service.ts grep -Fq 'masterModified: false' api-v3/src/asset-imports/asset-imports.service.ts if grep -Eq 'INSERT INTO assets[[:space:]]*\(' api-v3/src/asset-imports/asset-imports.service.ts; then echo "ERROR: D5.3.6 no debe insertar activos"; exit 1 fi if grep -Eq 'UPDATE assets[[:space:]]+SET' api-v3/src/asset-imports/asset-imports.service.ts; then echo "ERROR: D5.3.6 no debe actualizar activos"; exit 1 fi echo "Conciliación sin escrituras al Maestro: OK" echo echo "========== D5.3.6 · DASHBOARD ==========" grep -Fq 'Conciliar con Maestro' web-v2/src/pages/AssetImportsPage.tsx grep -Fq 'Analizables' web-v2/src/pages/AssetImportsPage.tsx grep -Fq "detail.profileCode === 'MENDOZA_YACIMIENTOS_V1'" web-v2/src/pages/AssetImportsPage.tsx grep -Fq '1 · Análisis' web-v2/src/pages/AssetImportsPage.tsx grep -Fq '4 · Importación' web-v2/src/pages/AssetImportsPage.tsx echo "Preview por perfil y flujo por etapas: OK" echo echo "========== D5.3.6 · CONTENEDORES ==========" docker compose ps -a echo echo "ACEPTACIÓN DE FASE D5.3.6: OK"