diff --git a/front/next-env.d.ts b/front/next-env.d.ts
index c4b7818..9edff1c 100644
--- a/front/next-env.d.ts
+++ b/front/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/dev/types/routes.d.ts";
+import "./.next/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/functions/src/functions/scraping-functions.ts b/functions/src/functions/scraping-functions.ts
index a60f8b6..f0eebd0 100644
--- a/functions/src/functions/scraping-functions.ts
+++ b/functions/src/functions/scraping-functions.ts
@@ -23,6 +23,8 @@ export async function scrapingsFunction(
const responseCuencaMediterranea =
await embalsesRepository.actualizarCuencaMediterranea();
+ const responseCuencaCantabrico = await embalsesRepository.actualizarCuencaCantabrico();
+
if (responseCuencaMediterranea) {
context.log(
"scrapings-function: Se han actualizado los embalses de la cuenca Mediterránea",
@@ -32,6 +34,14 @@ export async function scrapingsFunction(
"scrapings-function: No se han podido actualizar los embalses de la cuenca Mediterránea",
);
}
+
+ if (responseCuencaCantabrico) {
+ context.log(`Se han actualizado los embalses de la cuenca Cantábrica`);
+ } else {
+ context.log(
+ "No se han podido actualizar los embalses de la cuenca Cantábrica"
+ );
+ }
} catch (error) {
context.error("scrapings-function: ERROR", error);
throw error;
@@ -40,6 +50,10 @@ export async function scrapingsFunction(
await dbServer.disconnect();
context.log("scrapings-function: END");
}
+
+
+
+ await dbServer.disconnect();
}
app.timer("scrapings-function", {
diff --git a/integrations/arcgis/src/embalse-provincias.ts b/integrations/arcgis/src/embalse-provincias.ts
index 43ed5d9..d431d4a 100644
--- a/integrations/arcgis/src/embalse-provincias.ts
+++ b/integrations/arcgis/src/embalse-provincias.ts
@@ -312,7 +312,7 @@ export const embalseProvincias = new Map([
["salime", "Asturias"],
["sallente", "Lleida"],
["salor", "Cáceres"],
- ["san-anton", "Almería"],
+ ["san-anton", "Navarra"],
["san-bartolome", "Huelva"],
["san-clemente", "Huelva"],
["san-jose", "Almería"],
diff --git a/integrations/scraping-cuenca-cantabrico/package.json b/integrations/scraping-cuenca-cantabrico/package.json
index fc4ad41..12467cf 100644
--- a/integrations/scraping-cuenca-cantabrico/package.json
+++ b/integrations/scraping-cuenca-cantabrico/package.json
@@ -4,12 +4,18 @@
"private": true,
"type": "module",
"exports": {
- ".": "./src/index.ts"
+ ".": "./dist/index.js"
},
+ "main": "./dist/index.js",
+ "types": "./dist/index.d.ts",
"scripts": {
- "start": "tsx --watch src/console-runner.ts"
+ "start": "tsx --watch src/console-runner.ts",
+ "build": "run-p clean type-check build:scraping-cuenca-cantabrico",
+ "build:scraping-cuenca-cantabrico": "tsc",
+ "clean": "rimraf dist",
+ "type-check": "tsc --noEmit --preserveWatchOutput"
},
"dependencies": {
"db-model": "^1.0.0"
}
-}
\ No newline at end of file
+}
diff --git a/integrations/scraping-cuenca-cantabrico/src/index.ts b/integrations/scraping-cuenca-cantabrico/src/index.ts
new file mode 100644
index 0000000..ba7a4ee
--- /dev/null
+++ b/integrations/scraping-cuenca-cantabrico/src/index.ts
@@ -0,0 +1 @@
+export * from "./integration.js";
diff --git a/integrations/scraping-cuenca-cantabrico/src/integration.ts b/integrations/scraping-cuenca-cantabrico/src/integration.ts
index 2463fdb..bbcc4e0 100644
--- a/integrations/scraping-cuenca-cantabrico/src/integration.ts
+++ b/integrations/scraping-cuenca-cantabrico/src/integration.ts
@@ -1,6 +1,6 @@
-import { getCantabricoPayload } from "@/api";
-import { toRawRows } from "@/scraper/business";
-import { mapToEmbalseUpdateSAIH } from "@/scraper/mapper";
+import { getCantabricoPayload } from "./api/index.js";
+import { toRawRows } from "./scraper/business.js";
+import { mapToEmbalseUpdateSAIH } from "./scraper/mapper.js";
import type { EmbalseUpdateSAIHEntity } from "db-model";
/** Orquesta: API → normaliza → mapea a tu entidad final */
diff --git a/integrations/scraping-cuenca-cantabrico/src/scraper/business.ts b/integrations/scraping-cuenca-cantabrico/src/scraper/business.ts
index d7c867a..d56eb4f 100644
--- a/integrations/scraping-cuenca-cantabrico/src/scraper/business.ts
+++ b/integrations/scraping-cuenca-cantabrico/src/scraper/business.ts
@@ -1,4 +1,4 @@
-import type { SaichFeature } from "@/api";
+import type { SaichFeature } from "../api/index.js";
export interface RawRow {
id: number; // codigo_general
diff --git a/integrations/scraping-cuenca-cantabrico/src/scraper/helpers.ts b/integrations/scraping-cuenca-cantabrico/src/scraper/helpers.ts
new file mode 100644
index 0000000..d92bf32
--- /dev/null
+++ b/integrations/scraping-cuenca-cantabrico/src/scraper/helpers.ts
@@ -0,0 +1,5 @@
+export const mapStringToApiDate = (strDate: string) => {
+ const [year, month, day] = strDate.split(" ")[0].split('-');
+
+ return `${day}/${month}/${year}`;
+}
diff --git a/integrations/scraping-cuenca-cantabrico/src/scraper/mapper.ts b/integrations/scraping-cuenca-cantabrico/src/scraper/mapper.ts
index 861bbab..b6689ef 100644
--- a/integrations/scraping-cuenca-cantabrico/src/scraper/mapper.ts
+++ b/integrations/scraping-cuenca-cantabrico/src/scraper/mapper.ts
@@ -1,5 +1,6 @@
import type { EmbalseUpdateSAIHEntity } from "db-model";
-import type { RawRow } from "./business";
+import type { RawRow } from "./business.js";
+import { mapStringToApiDate } from './helpers.js'
/** Mapea a EmbalseUpdateSAIHEntity*/
export function mapToEmbalseUpdateSAIH(
@@ -9,6 +10,6 @@ export function mapToEmbalseUpdateSAIH(
id: r.id,
nombre: r.nombre,
aguaActualSAIH: r.volumenActualHm3,
- fechaMedidaSAIH: r.fecha,
+ fechaMedidaSAIH: mapStringToApiDate(r.fecha),
}));
}
diff --git a/integrations/scraping-cuenca-cantabrico/tsconfig.json b/integrations/scraping-cuenca-cantabrico/tsconfig.json
index 87d8cea..ce7b1d4 100644
--- a/integrations/scraping-cuenca-cantabrico/tsconfig.json
+++ b/integrations/scraping-cuenca-cantabrico/tsconfig.json
@@ -1,25 +1,16 @@
{
- "compilerOptions": {
- "target": "ESNext",
- "module": "ESNext",
- "moduleResolution": "bundler",
- "skipLibCheck": true,
- "isolatedModules": true,
- "esModuleInterop": true,
- "baseUrl": "./",
- "paths": {
- "@/*": [
- "src/*"
- ],
- "@/api/*": [
- "src/api/*"
- ],
- "@/scraper/*": [
- "src/scraper/*"
- ]
- }
- },
- "include": [
- "src"
- ]
-}
\ No newline at end of file
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "nodenext",
+ "moduleResolution": "nodenext",
+ "outDir": "dist",
+ "skipLibCheck": true,
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "verbatimModuleSyntax": false,
+ "declaration": true,
+ "baseUrl": "./"
+ },
+ "include": ["src/**/*"],
+ "exclude": ["dist", "node_modules"]
+}
diff --git a/integrations/scraping-cuenca-mediterranea/package.json b/integrations/scraping-cuenca-mediterranea/package.json
index 1c5a151..420b4ef 100644
--- a/integrations/scraping-cuenca-mediterranea/package.json
+++ b/integrations/scraping-cuenca-mediterranea/package.json
@@ -12,7 +12,7 @@
"start": "tsx --watch src/console-runner.ts",
"build": "run-p clean type-check build:scraping-cuenca-mediterranea",
"build:scraping-cuenca-mediterranea": "tsc",
- "clean": "rimraf dist",
+ "clean": "rimraf dist",
"type-check": "tsc --noEmit --preserveWatchOutput"
},
"dependencies": {
diff --git a/package-lock.json b/package-lock.json
index a54e818..077367b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2129,6 +2129,7 @@
"version": "24.3.0",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"undici-types": "~7.10.0"
}
@@ -2153,6 +2154,7 @@
"version": "19.1.10",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"csstype": "^3.0.2"
}
@@ -2952,6 +2954,7 @@
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
"license": "ISC",
+ "peer": true,
"engines": {
"node": ">=12"
}
@@ -4524,6 +4527,7 @@
"integrity": "sha512-QgODejq9K3OzoBbuyobZlUhznP5SKwPqp+6Q6xw6o8gnhr4O85L2U915iM2IDcfF2NPXVaM9zlo9tdwipnYwzg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
@@ -4682,6 +4686,7 @@
"node_modules/react": {
"version": "19.1.1",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -4689,6 +4694,7 @@
"node_modules/react-dom": {
"version": "19.1.1",
"license": "MIT",
+ "peer": true,
"dependencies": {
"scheduler": "^0.26.0"
},
@@ -5461,6 +5467,7 @@
"version": "5.9.2",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -5492,6 +5499,7 @@
"version": "7.1.3",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.5.0",
@@ -5845,6 +5853,7 @@
"@types/prompts": "^2.4.9",
"arcgis": "*",
"prompts": "^2.4.2",
+ "scraping-cuenca-cantabrico": "*",
"scraping-cuenca-mediterranea": "*"
}
},
diff --git a/packages/db/package.json b/packages/db/package.json
index a66e4cf..a7bc2bf 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -29,6 +29,7 @@
},
"devDependencies": {
"@types/prompts": "^2.4.9",
- "prompts": "^2.4.2"
+ "prompts": "^2.4.2",
+ "scraping-cuenca-cantabrico": "*"
}
}
diff --git a/packages/db/src/dals/embalses/embalses.mappers.ts b/packages/db/src/dals/embalses/embalses.mappers.ts
index 1b0cd5a..ab2e128 100644
--- a/packages/db/src/dals/embalses/embalses.mappers.ts
+++ b/packages/db/src/dals/embalses/embalses.mappers.ts
@@ -34,3 +34,26 @@ export const mapperFromCuencasMediterraneaToArcgis = new Map<
[379, { nombre: "Jarrama", idArcgis: 358 }],
[380, { nombre: "Andévalo", idArcgis: 355 }],
]);
+
+// Ojo Embalse de La Florida-Pilotuerto, Valdemurio, El Furacón, Priañes, Cordiñanes, La Lastra, Palombera, Arriarán, Leurtza Inferior, Leurtza Superior
+
+// id => 272 Está en la cuenca cantábrico oriental, pero está en la provincia de Almería. He investigado y está en Navarra.
+
+export const mapperFromCuencasCantabricoToArcgis = new Map<
+ number,
+ InfoDestinoArcgis
+>([
+ [1406, { nombre: "Salime", idArcgis: 270 }],
+ [1408, { nombre: "Doiras", idArcgis: 121 }],
+ [1409, { nombre: "Arbón", idArcgis: 26 }],
+ [1356, { nombre: "La Barca", idArcgis: 40 }],
+ [1333, { nombre: "Tanes", idArcgis: 305 }],
+ [1334, { nombre: "Rioseco", idArcgis: 385 }],
+ [1345, { nombre: "Alfilorios", idArcgis: 17 }],
+ [1253, { nombre: "La Cohilla", idArcgis: 103 }],
+ [1231, { nombre: "Alsa - Mediajo", idArcgis: 310 }],
+ [1177, { nombre: "Ordunte", idArcgis: 217 }],
+ [1078, { nombre: "Ibiur", idArcgis: 377 }],
+ [1108, { nombre: "Añarbe", idArcgis: 34 }],
+ [1847, { nombre: "San Antón", idArcgis: 272 }],
+]);
diff --git a/packages/db/src/dals/embalses/embalses.repository.ts b/packages/db/src/dals/embalses/embalses.repository.ts
index fef899f..93c1b49 100644
--- a/packages/db/src/dals/embalses/embalses.repository.ts
+++ b/packages/db/src/dals/embalses/embalses.repository.ts
@@ -1,7 +1,8 @@
import { scrapeSeedEmbalses } from "arcgis";
import { getEmbalsesContext } from "./embalses.context.js";
-import { mapperFromCuencasMediterraneaToArcgis } from "./embalses.mappers.js";
+import { mapperFromCuencasMediterraneaToArcgis, mapperFromCuencasCantabricoToArcgis } from "./embalses.mappers.js";
import { scrapeCuencaMediterranea } from "scraping-cuenca-mediterranea";
+import { scrapeCuencaCantabrica } from 'scraping-cuenca-cantabrico';
import { parseDate } from "./embalses.helpers.js";
export const embalsesRepository = {
@@ -72,4 +73,57 @@ export const embalsesRepository = {
return actualizados > 0;
},
+ actualizarCuencaCantabrico: async (): Promise => {
+ const embalsesCantabrico = await scrapeCuencaCantabrica();
+
+ console.log(
+ `Se han scrapeado ${embalsesCantabrico.length} embalses de la Cuenca Cantábrica`
+ );
+
+ let actualizados = 0;
+ let noEncontrados = 0;
+ let sinMapper = 0;
+
+ for (const embalse of embalsesCantabrico) {
+ const infoDestino = mapperFromCuencasCantabricoToArcgis.get(embalse.id);
+
+ if (!infoDestino) {
+ sinMapper++;
+ console.warn(`Sin mapper para ID ${embalse.id} - ${embalse.nombre}`);
+ continue;
+ }
+
+ console.log(
+ `🔍 Mapeando: ID scraping ${embalse.id} -> _id BD ${infoDestino.idArcgis} (${infoDestino.nombre})`
+ );
+
+ const { matchedCount } = await getEmbalsesContext().updateOne(
+ { _id: infoDestino.idArcgis.toString() },
+ {
+ $set: {
+ aguaActualSAIH: embalse.aguaActualSAIH,
+ fechaMedidaAguaActualSAIH: parseDate(embalse.fechaMedidaSAIH),
+ },
+ }
+ );
+
+ if (matchedCount > 0) {
+ actualizados++;
+ console.log(
+ `Actualizado: ${infoDestino.nombre} (_id: ${infoDestino.idArcgis}) -> ${embalse.aguaActualSAIH} hm³`
+ );
+ } else {
+ noEncontrados++;
+ console.warn(
+ `No encontrado en BD: _id ${infoDestino.idArcgis} - ${infoDestino.nombre}`
+ );
+ }
+ }
+
+ console.log(
+ `Resumen Cuenca Cantábrico: ${actualizados} actualizados, ${noEncontrados} no encontrados, ${sinMapper} sin mapper`
+ );
+
+ return actualizados > 0;
+ }
};