{"version":3,"file":"src_hooks_useClientConfig_ts-packages_core-reports_src_index_ts.chunk.bundle","sources":["/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/apps/data-oil-app/otherReports/src/hooks/useClientConfig.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/plugin/utc.js","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/packages/core-reports/src/constants/moduleDailyReportsRoles.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/packages/core-reports/src/constants/moduleHistoryReportsRoles.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/packages/core-reports/src/constants/wellCategoryDropdown.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/packages/core-reports/src/index.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/packages/core-reports/src/mappers/dailyReportMappers.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/packages/core-reports/src/services/dailyReportApi.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/packages/core-reports/src/services/reports/findReportHistoryTables.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/packages/core-reports/src/services/reports/getReportsHistory.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/packages/core-reports/src/services/reports/index.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/packages/core-reports/src/services/reports/types.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/packages/core-reports/src/utils/fetchWithCache.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { configService, useConfig, useTheme } from '@data-oil-front/core-host';\n\ninterface ClientConfigSnapshot {\n  apiBaseUrl: string | null;\n  apiFileServer?: string;\n  primaryColor: string | null;\n  config: ReturnType<typeof useConfig>['config'];\n}\n\nexport function useClientConfig(): ClientConfigSnapshot {\n  const { config } = useConfig();\n  const defaultConfig = useMemo(() => configService.getDefaultConfig(), []);\n  const { primaryColor } = useTheme();\n\n  const apiBaseUrl = config.API_BASE_URL ?? null;\n  const apiFileServer =\n    (config as any)?.API_FILE_SERVER ??\n    (defaultConfig as any)?.API_FILE_SERVER ??\n    undefined;\n\n  return {\n    config,\n    apiBaseUrl,\n    apiFileServer,\n    primaryColor,\n  };\n}\n","!function(t, i) {\n    \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = i() : \"function\" == typeof define && define.amd ? define(i) : (t = \"undefined\" != typeof globalThis ? globalThis : t || self).dayjs_plugin_utc = i();\n}(this, function() {\n    \"use strict\";\n    var t = \"minute\", i = /[+-]\\d\\d(?::?\\d\\d)?/g, e = /([+-]|\\d\\d)/g;\n    return function(s, f, n) {\n        var u = f.prototype;\n        n.utc = function(t) {\n            var i = {\n                date: t,\n                utc: !0,\n                args: arguments\n            };\n            return new f(i);\n        }, u.utc = function(i) {\n            var e = n(this.toDate(), {\n                locale: this.$L,\n                utc: !0\n            });\n            return i ? e.add(this.utcOffset(), t) : e;\n        }, u.local = function() {\n            return n(this.toDate(), {\n                locale: this.$L,\n                utc: !1\n            });\n        };\n        var r = u.parse;\n        u.parse = function(t) {\n            t.utc && (this.$u = !0), this.$utils().u(t.$offset) || (this.$offset = t.$offset), r.call(this, t);\n        };\n        var o = u.init;\n        u.init = function() {\n            if (this.$u) {\n                var t = this.$d;\n                this.$y = t.getUTCFullYear(), this.$M = t.getUTCMonth(), this.$D = t.getUTCDate(), this.$W = t.getUTCDay(), this.$H = t.getUTCHours(), this.$m = t.getUTCMinutes(), this.$s = t.getUTCSeconds(), this.$ms = t.getUTCMilliseconds();\n            } else o.call(this);\n        };\n        var a = u.utcOffset;\n        u.utcOffset = function(s, f) {\n            var _$n = this.$utils().u;\n            if (_$n(s)) return this.$u ? 0 : _$n(this.$offset) ? a.call(this) : this.$offset;\n            if (\"string\" == typeof s && (s = function(t) {\n                void 0 === t && (t = \"\");\n                var _$s = t.match(i);\n                if (!_$s) return null;\n                var _$f = (\"\" + _$s[0]).match(e) || [\n                    \"-\",\n                    0,\n                    0\n                ], _$n = _$f[0], u = 60 * +_$f[1] + +_$f[2];\n                return 0 === u ? 0 : \"+\" === _$n ? u : -u;\n            }(s), null === s)) return this;\n            var u = Math.abs(s) <= 16 ? 60 * s : s;\n            if (0 === u) return this.utc(f);\n            var r = this.clone();\n            if (f) return r.$offset = u, r.$u = !1, r;\n            var o = this.$u ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset();\n            return (r = this.local().add(u + o, t)).$offset = u, r.$x.$localOffset = o, r;\n        };\n        var h = u.format;\n        u.format = function(t) {\n            var i = t || (this.$u ? \"YYYY-MM-DDTHH:mm:ss[Z]\" : \"\");\n            return h.call(this, i);\n        }, u.valueOf = function() {\n            var t = this.$utils().u(this.$offset) ? 0 : this.$offset + (this.$x.$localOffset || this.$d.getTimezoneOffset());\n            return this.$d.valueOf() - 6e4 * t;\n        }, u.isUTC = function() {\n            return !!this.$u;\n        }, u.toISOString = function() {\n            return this.toDate().toISOString();\n        }, u.toString = function() {\n            return this.toDate().toUTCString();\n        };\n        var l = u.toDate;\n        u.toDate = function(t) {\n            return \"s\" === t && this.$offset ? n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate() : l.call(this);\n        };\n        var c = u.diff;\n        u.diff = function(t, i, e) {\n            if (t && this.$u === t.$u) return c.call(this, t, i, e);\n            var s = this.local(), _$f = n(t).local();\n            return c.call(s, _$f, i, e);\n        };\n    };\n});\n","import { type UserRole, UserRoles } from \"@data-oil-front/core-utils\";\n\nexport const MODULE_DAILY_REPORT_ROLES: UserRole[] = [\n  UserRoles.ADMINISTRADOR,\n  UserRoles.ANALISTA_DE_PLANIFICACION,\n  UserRoles.SUPERVISOR_DE_PRODUCCION,\n  UserRoles.OPERADOR_DE_PRODUCCION,\n];\n","import { type UserRole, UserRoles } from \"@data-oil-front/core-utils\";\n\nexport const MODULE_HISTORY_REPORT_ROLES: UserRole[] = [\n  UserRoles.ADMINISTRADOR,\n  UserRoles.GERENTE_DE_PLANIFICACION,\n  UserRoles.ANALISTA_DE_PLANIFICACION,\n  UserRoles.SUPERVISOR_DE_PRODUCCION,\n  UserRoles.OPERADOR_DE_PRODUCCION,\n];\n","import { OptionDDL } from \"../services/dailyReportApi\";\n\n/**\n * Allowed \"Categoría de pozo\" options for the daily report well step (fixed order).\n * Keep in sync with aldylapp-front `app/constants/wellCategoryDropdown.ts`.\n */\nconst WELL_CATEGORY_DROPDOWN_ORDER = [\n  \"Activo\",\n  \"Pozo de producción de gas\",\n  \"Pozo Inyector\",\n  \"Pozo de Alivio\",\n] as const;\n\nfunction normalizeWellCategoryName(name: string): string {\n  return name.trim().toLowerCase().normalize(\"NFD\").replace(/\\p{M}/gu, \"\");\n}\n\n/** Long labels only: DB may append suffixes or use slightly different wording. Short labels stay exact-only (avoids \"Inactivo\" matching \"Activo\"). */\nconst MIN_CANONICAL_LEN_FOR_FLEX_MATCH = 14;\n\nfunction matchesWellCategoryCanonical(\n  categoryName: string,\n  canonicalLabel: string,\n): boolean {\n  const n = normalizeWellCategoryName(categoryName);\n  const c = normalizeWellCategoryName(canonicalLabel);\n  if (n === c) return true;\n  if (c.length < MIN_CANONICAL_LEN_FOR_FLEX_MATCH) return false;\n  return n.includes(c) || c.includes(n);\n}\n\nexport function filterWellCategoriesForDailyReportDropdown(\n  categories: OptionDDL[],\n): OptionDDL[] {\n  const used = new Set<number>();\n  const result: OptionDDL[] = [];\n\n  for (const canonical of WELL_CATEGORY_DROPDOWN_ORDER) {\n    const match = categories.find(\n      (cat) =>\n        !used.has(cat.id) && matchesWellCategoryCanonical(cat.name, canonical),\n    );\n    if (match) {\n      result.push(match);\n      used.add(match.id);\n    }\n  }\n\n  return result;\n}\n\n/** Resolve DB id for a canonical label (e.g. \"Activo\") from a filtered category list. */\nexport function findWellCategoryIdByCanonicalName<\n  T extends { id: number; name: string },\n>(categories: T[], canonicalLabel: string): string | null {\n  const found = categories.find((c) =>\n    matchesWellCategoryCanonical(c.name, canonicalLabel),\n  );\n  return found != null ? String(found.id) : null;\n}\n","// NEW API\nexport * from './services/reports'\n\n// OLD API\nexport * from './services/dailyReportApi';\nexport * from './utils/fetchWithCache';\nexport * from './mappers/dailyReportMappers';\nexport * from './constants/moduleDailyReportsRoles';\nexport * from './constants/moduleHistoryReportsRoles';\nexport * from './constants/wellCategoryDropdown';\nexport * from './types/dailyReport';","import { TABLE_NAMES, API_VERBS } from '@data-oil-front/core-utils';\n\nexport interface FlowStationTankPayloadParams {\n  isEditing?: boolean;\n  reportId?: number | null;\n  editionNumber?: number | null;\n  reportDateTime: string;\n  nowDate: string;\n  activityId: number;\n  userId: string | null;\n  tankId: number;\n  status: string;\n  sampleTaken: string;\n  netOperatedProduction: number | null;\n  tankLevel: number | null;\n  rawOperatedProduction: number | null;\n  comments: string | null;\n}\n\nexport function createFlowStationTankPayload({\n  isEditing = false,\n  reportId = null,\n  editionNumber = 0,\n  reportDateTime,\n  nowDate,\n  activityId,\n  userId,\n  tankId,\n  status,\n  sampleTaken,\n  netOperatedProduction,\n  tankLevel,\n  rawOperatedProduction,\n  comments,\n}: FlowStationTankPayloadParams) {\n  const resolvedEditionNumber = isEditing ? (editionNumber ?? 0) + 1 : 0;\n\n  const basePairs: [string, string | number | boolean | null][] = [\n    ['date_updated', nowDate],\n    ['edition_number', resolvedEditionNumber],\n    ['activity_id', activityId],\n    ['user_id', userId],\n    ['flow_station_tank_id', tankId],\n    ['status', status || 'active'],\n    ['current_stock', null],\n    ['sample_taken', sampleTaken === 'yes'],\n    [\n      'net_operated_production',\n      sampleTaken === 'yes' ? null : netOperatedProduction,\n    ],\n    ['tank_level', tankLevel],\n    ['filling_start_date', null],\n    ['filling_start_level', null],\n    ['filling_end_date', null],\n    ['filling_end_level', null],\n    ['raw_operated_production', rawOperatedProduction],\n    ['lab_analysis', false],\n    ['comments', comments || null],\n  ];\n\n  if (!isEditing) {\n    basePairs.push(['date_created', reportDateTime ?? nowDate]);\n  } else {\n    basePairs.push(['date_created', reportDateTime ?? nowDate]);\n  }\n\n  return {\n    verb: isEditing && reportId != null ? API_VERBS.UPDATE : API_VERBS.INSERT,\n    table: TABLE_NAMES.DAILY_REPORT_FLOW_STATION_TANK,\n    fields: basePairs.map(([key]) => key),\n    values: basePairs.map(([, value]) => value),\n    filter: isEditing && reportId != null ? [['id', '=', reportId]] : [],\n  } as const;\n}\n","import dayjs from \"dayjs\";\nimport utc from \"dayjs/plugin/utc\";\n\nimport { ApiFilter, ApiPostBody, purePost } from \"@data-oil-front/core-utils\";\nimport { DeviceEventEmitter } from \"react-native\";\nimport { fetchWithCache } from \"../utils/fetchWithCache\";\nimport NetInfo from \"@react-native-community/netinfo\";\nimport type { Field, Location } from \"../types/dailyReport\";\nimport { TABLE_NAMES, API_VERBS } from \"@data-oil-front/core-utils\";\n\nimport { post, configService, storageService, offlineMutationQueueService } from \"@data-oil-front/core-host\";\nimport { ALL_REPORT_HISTORY_TABLES, ReportHistoryTable } from \"./reports/types\";\n\ndeclare const __DEV__: boolean | undefined;\n\nconst NAMESPACE = \"dailyReport\";\n\nconst OTHER_REPORT_HISTORY_TABLES: ReportHistoryTable[] = [\n  TABLE_NAMES.LIFTING_COST,\n  TABLE_NAMES.SHIP_TO_SHIP,\n  TABLE_NAMES.BILLED_RECOVERY_AND_EXPENSES,\n  TABLE_NAMES.OWN_FISCALIZED_PRODUCTION,\n  TABLE_NAMES.THIRD_PARTY_FISCALIZED_PRODUCTION,\n  TABLE_NAMES.MARKET_REFERENCE_PRICE,\n  TABLE_NAMES.COMMENTS_FORM,\n];\n\n/**\n * @deprecated('DO NOT USE')\n */\ntype GetReportHistoryTablesOptions = {\n  includeOtherReports?: boolean;\n};\n\n/**\n * @deprecated('Use the new findReportHistoryTables service utility function instead (`utils/reports/findReportHistoryTables.ts`)')\n */\nexport function getReportHistoryTables(\n  options?: GetReportHistoryTablesOptions,\n): ReportHistoryTable[] {\n  const config = configService.getCurrentConfig();\n  const clientName = (config.clientName || \"\").toLowerCase();\n  const isAldyl = clientName === \"aldyl\";\n  const includeOtherReports = options?.includeOtherReports ?? true;\n\n  return ALL_REPORT_HISTORY_TABLES.filter((table) => {\n    if (!includeOtherReports && OTHER_REPORT_HISTORY_TABLES.includes(table)) {\n      return false;\n    }\n    if (table === TABLE_NAMES.DAILY_REPORT_MEASUREMENT_POINT && isAldyl) {\n      return false;\n    }\n    return true;\n  });\n}\n\ndayjs.extend(utc);\n\nexport async function deleteReportHistoryItem(\n  table: ReportHistoryTable,\n  id: string | number,\n): Promise<void> {\n  try {\n    if (table === TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD) {\n      await post<{ success?: boolean } | Array<unknown>>({\n        verb: API_VERBS.DELETE,\n        table: TABLE_NAMES.DAILY_REPORT_VACUUM_UNLOAD,\n        filter: [[\"vacuum_load_id\", \"=\", Number(id)]],\n      });\n\n      await storageService.removeByPrefix(\n        NAMESPACE,\n        `reportsHistory:${TABLE_NAMES.DAILY_REPORT_VACUUM_UNLOAD}:`,\n      );\n\n      DeviceEventEmitter.emit(\"reports:refresh\", {\n        table: TABLE_NAMES.DAILY_REPORT_VACUUM_UNLOAD,\n      });\n    }\n\n    if (table === TABLE_NAMES.DAILY_REPORT_VACUUM_UNLOAD) {\n      const unloadReportResponse = await post<any[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.DAILY_REPORT_VACUUM_UNLOAD,\n        filter: [[\"id\", \"=\", Number(id)]],\n      });\n\n      const unloadReport = Array.isArray(unloadReportResponse)\n        ? unloadReportResponse[0]\n        : null;\n      const vacuumLoadId = unloadReport?.vacuum_load_id;\n\n      if (vacuumLoadId) {\n        await post<any>({\n          verb: \"update\",\n          table: TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD,\n          fields: [\"unloaded\", \"date_updated\"],\n          values: [false, nowTimestamp()],\n          filter: [[\"id\", \"=\", Number(vacuumLoadId)]],\n        });\n\n        await storageService.remove(NAMESPACE, \"vacuumLoads\");\n\n        await storageService.removeByPrefix(\n          NAMESPACE,\n          `reportsHistory:${TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD}:`,\n        );\n        DeviceEventEmitter.emit(\"reports:refresh\", {\n          table: TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD,\n        });\n      }\n    }\n\n    await post<{ success?: boolean } | Array<unknown>>({\n      verb: API_VERBS.DELETE,\n      table,\n      filter: [[\"id\", \"=\", Number(id)]],\n    });\n\n    await storageService.removeByPrefix(NAMESPACE, `reportsHistory:${table}:`);\n    DeviceEventEmitter.emit(\"reports:refresh\", { table });\n\n    if (table === TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD) {\n      await storageService.remove(NAMESPACE, \"vacuumLoads\");\n    }\n  } catch (error) {\n    throw new Error(\n      error instanceof Error\n        ? error.message\n        : `No se pudo eliminar el reporte ${String(id)} de ${table}`,\n    );\n  }\n}\n\nexport interface OptionDDL {\n  id: number;\n  name: string;\n}\n\ntype WellFilterTuple = [string, string, number | string];\nconst WELLS_ALL_CACHE_KEY = \"wells:all\";\nconst WELLS_LEGACY_CACHE_KEY = \"wells\";\n\nconst buildWellsCacheKey = (filters?: WellFilterTuple[]): string => {\n  if (!filters || filters.length === 0) return WELLS_ALL_CACHE_KEY;\n  const normalized = filters\n    .map(([field, op, value]) => `${field}:${op}:${String(value)}`)\n    .join(\"|\");\n  return `wells:filters:${normalized}`;\n};\n\nconst filterWellsInMemory = (\n  rows: Well[],\n  filters?: WellFilterTuple[],\n): Well[] => {\n  if (!filters || filters.length === 0) return rows;\n  return rows.filter((row) =>\n    filters.every(([field, op, value]) => {\n      const rowValue = (row as any)?.[field];\n      const rowString =\n        rowValue === undefined || rowValue === null ? \"\" : String(rowValue);\n      const valueString = String(value);\n      switch (op.toLowerCase()) {\n        case \"=\":\n        case \"==\":\n        case \"eq\":\n          return rowString === valueString;\n        case \"!=\":\n        case \"<>\":\n        case \"neq\":\n          return rowString !== valueString;\n        default:\n          return rowString === valueString;\n      }\n    }),\n  );\n};\n\ninterface Well {\n  id: number;\n  name: string;\n  field_id: number;\n  well_category_id?: number;\n  pumping_method_id?: number;\n  associated_strategy_id?: number;\n  well_cluster_id?: number;\n  flow_station_id?: number;\n  potencial?: number | null;\n  rgp?: number | null;\n}\n\nexport interface DailyReportWell {\n  id: number;\n  well_id: number | null;\n  activity_id?: number | null;\n  status?: string | null;\n  date_created?: string | null;\n  date_updated?: string | null;\n  edition_number?: number | null;\n  heading_pressure?: number | null;\n  line_pressure?: number | null;\n  injection_pressure?: number | null;\n  casing_pressure?: number | null;\n  gas_injection_rate?: number | null;\n  diluent_injection_rate?: number | null;\n  hole_plate_diameter?: number | null;\n  reducer_diameter?: number | null;\n  pump_speed?: number | null;\n  rebars_torque?: number | null;\n  strokes_per_minute?: number | null;\n  stroke_length?: number | null;\n  electric_intensity?: number | null;\n  sample_taken?: boolean | null;\n  event_reported?: boolean | null;\n  event_title?: string | null;\n  event_comment?: string | null;\n  event_image?: string | null;\n  lab_analysis?: boolean | null;\n  associated_strategy_id?: number | null;\n  user_id?: number | string | null;\n  daily_report_id?: number | null;\n  [key: string]: any;\n}\n\nexport const getAllLocations = async (): Promise<Location[]> => {\n  const result = await fetchWithCache<Location[] >(\n    NAMESPACE,\n    \"locations\",\n    async () => {\n      return await post<Location[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.LOCATION,\n        fields: [],\n        values: [],\n        filter: [],\n      });\n    },\n  );\n\n  if ((result as any)?.error) {\n    console.error(result as any);\n    return [];\n  } else {\n    return result as Location[];\n  }\n};\n\nexport const getFieldsByLocationId = async (\n  locationId: number,\n): Promise<Field[]> => {\n  const result = await fetchWithCache<\n    Field[] \n  >(\n    NAMESPACE,\n    `fields:${locationId}`,\n    async () =>\n      await post<Field[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.FIELD,\n        fields: [],\n        values: [],\n        filter: [[\"location_id\", \"=\", Number(locationId)]],\n      }),\n  );\n\n  const maybeErrorMeasurement = result as any;\n  if (maybeErrorMeasurement?.error) {\n    console.error(maybeErrorMeasurement);\n    return [];\n  }\n\n  if ((result as any)?.isCached) {\n    const rows = (result as Field[]) || [];\n    return rows.filter(\n      (r) => String((r as any)?.location_id) === String(locationId),\n    );\n  }\n\n  return result as Field[];\n};\n\nexport const getAllWellCategories = async (\n  active = true,\n): Promise<OptionDDL[]> => {\n  const filter: ApiFilter[] = [];\n\n  if (active) {\n    filter.push([\"active\", \"=\", \"true\"]);\n  }\n\n  const payload: ApiPostBody = {\n    verb: API_VERBS.SELECT,\n    table: TABLE_NAMES.WELL_CATEGORY,\n    fields: [],\n    values: [],\n    filter,\n  };\n\n  const result = await fetchWithCache<OptionDDL[] >(\n    NAMESPACE,\n    \"wellCategories\",\n    async () => await post<OptionDDL[]>(payload),\n  );\n\n  if ((result as any)?.error) {\n    console.error(result as any);\n    return [];\n  } else {\n    return result as OptionDDL[];\n  }\n};\n\nexport const getAllPumpingMethods = async (): Promise<OptionDDL[]> => {\n  const result = await fetchWithCache<OptionDDL[] >(\n    NAMESPACE,\n    \"pumpingMethods\",\n    async () =>\n      await post<OptionDDL[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.PUMPING_METHOD,\n        fields: [],\n        values: [],\n        filter: [],\n      }),\n  );\n\n  if ((result as any)?.error) {\n    console.error(result as any);\n    return [];\n  } else {\n    return result as OptionDDL[];\n  }\n};\n\nexport const getAllAssociatedStrategies = async (): Promise<OptionDDL[]> => {\n  const result = await fetchWithCache<OptionDDL[] >(\n    NAMESPACE,\n    \"associatedStrategies\",\n    async () =>\n      await post<OptionDDL[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.ASSOCIATED_STRATEGY,\n        fields: [],\n        values: [],\n        filter: [],\n      }),\n  );\n\n  if ((result as any)?.error) {\n    console.error(result as any);\n    return [];\n  } else {\n    return result as OptionDDL[];\n  }\n};\n\nexport const getAllFlowStations = async (options?: {\n  forceRefresh?: boolean;\n}): Promise<OptionDDL[]> => {\n  try {\n    const result = await fetchWithCache<OptionDDL[]>(\n      NAMESPACE,\n      \"flowStations\",\n      async () =>\n        await post<OptionDDL[]>({\n          verb: API_VERBS.SELECT,\n          table: TABLE_NAMES.FLOW_STATION,\n          fields: [],\n          values: [],\n          filter: [],\n        }),\n      { shouldFetch: options?.forceRefresh, ttl: 24 * 60 },\n    );\n    return result as OptionDDL[];\n  } catch (error) {\n    console.error(\"Error fetching flowStations\", error);\n    return [] as any;\n  }\n};\n\nexport interface TreatmentPlantSystem {\n  id: number;\n  name: string;\n  active?: boolean | null;\n}\n\nexport const getTreatmentPlantSystems = async (\n  activeOnly = true,\n): Promise<OptionDDL[]> => {\n  const cacheKey = `treatmentPlantSystems:${activeOnly ? \"active\" : \"all\"}`;\n  const filter: Array<[string, string, string]> = [];\n  if (activeOnly) {\n    filter.push([\"active\", \"=\", \"true\"]);\n  }\n\n  const result = await fetchWithCache<OptionDDL[] >(\n    NAMESPACE,\n    cacheKey,\n    async () =>\n      await post<OptionDDL[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.TREATMENT_PLANT_SYSTEM,\n        fields: [],\n        values: [],\n        filter,\n      }),\n  );\n\n  if ((result as any)?.error) {\n    console.error(result as any);\n    return [];\n  }\n\n  return (result as OptionDDL[]) ?? [];\n};\n\nexport interface TreatmentPlantDynamicStorageTank {\n  id: number;\n  name: string;\n  treatment_plant_system_id?: number | null;\n  facility_type_view?: string | null;\n}\n\nexport const getTreatmentPlantDynamicStorageTanksFiltered = async (\n  filters: Array<[string, string, number | string]>,\n): Promise<TreatmentPlantDynamicStorageTank[]> => {\n  const result = await fetchWithCache<\n    | TreatmentPlantDynamicStorageTank[]\n    \n  >(\n    NAMESPACE,\n    \"treatmentPlantDynamicStorageTanks\",\n    async () =>\n      await post<TreatmentPlantDynamicStorageTank[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.TREATMENT_PLANT_DYNAMIC_STORAGE_TANK,\n        fields: [],\n        values: [],\n        filter: [],\n      }),\n  );\n\n  const maybeError = result as any;\n  if (maybeError?.error) {\n    console.error(maybeError);\n    return [];\n  }\n\n  const rows = (result as TreatmentPlantDynamicStorageTank[]) || [];\n  if (!filters?.length) return rows;\n  return rows.filter((row) =>\n    filters.every(\n      ([key, _op, value]) => String((row as any)[key]) === String(value),\n    ),\n  );\n};\n\nexport interface UptTank {\n  id: number;\n  name: string;\n  facility_type_view?: string | null;\n  facility_type?: string | null;\n  well_id?: number | [number, string] | null;\n  flow_station_tank_id?: number | [number, string] | null;\n}\n\nexport const getUptTanksFiltered = async (\n  filters: any[],\n  options?: { forceRefresh?: boolean },\n): Promise<UptTank[]> => {\n  try {\n    const result = await fetchWithCache<UptTank[]>(\n      NAMESPACE,\n      \"uptTanks\",\n      async () =>\n        await post<UptTank[]>({\n          verb: API_VERBS.SELECT,\n          table: TABLE_NAMES.UPT_TANK,\n          fields: [],\n          values: [],\n          filter: [],\n        }),\n      { shouldFetch: options?.forceRefresh, ttl: 24 * 60 },\n    );\n\n    const rows = (result as UptTank[]) || [];\n    if (!filters?.length) return rows as any;\n    return (rows as any[]).filter((row) =>\n      filters.every(\n        ([key, _op, value]) => String((row as any)[key]) === String(value),\n      ),\n    ) as any;\n  } catch (error) {\n    console.error(\"Error fetching uptTanks\", error);\n    return [] as any;\n  }\n};\n\nexport interface PitOption {\n  id: number;\n  name: string;\n  associated_strategy_id?: number | null;\n}\n\nexport const getPitsFiltered = async (\n  filters: any[],\n  options?: { forceRefresh?: boolean },\n): Promise<PitOption[]> => {\n  try {\n    const result = await fetchWithCache<PitOption[]>(\n      NAMESPACE,\n      \"pits\",\n      async () =>\n        await post<PitOption[]>({\n          verb: API_VERBS.SELECT,\n          table: TABLE_NAMES.PIT,\n          fields: [],\n          values: [],\n          filter: [],\n        }),\n      { shouldFetch: options?.forceRefresh, ttl: 24 * 60 },\n    );\n\n    const rows = (result as PitOption[]) || [];\n    if (!filters?.length) return rows as any;\n    return (rows as any[]).filter((row) =>\n      filters.every(\n        ([key, _op, value]) => String((row as any)[key]) === String(value),\n      ),\n    ) as any;\n  } catch (error) {\n    console.error(\"Error fetching pits\", error);\n    return [] as any;\n  }\n};\n\nexport interface VacuumLoad {\n  id: number;\n  vacuum_plate?: string | null;\n  chuto_plate?: string | null;\n  origin_facility_id?: string | null;\n  origin_facility_type?: string | null;\n  destination_facility_id?: string | null;\n  destination_facility_type?: string | null;\n  unloaded?: boolean | null;\n  date_created?: string | null;\n  date_updated?: string | null;\n  volume?: number | null;\n}\n\nexport interface VacuumLoadDetail extends VacuumLoad {\n  origin_facility_type_view?: string | null;\n  destination_facility_type_view?: string | null;\n  loading_start_time?: string | null;\n  loading_end_time?: string | null;\n  initial_content?: string | number | null;\n  final_content?: string | number | null;\n  fluid_type?: string | null;\n  comments?: string | null;\n  condition?: string | null;\n  driver_nationality?: string | null;\n  driver_id_card_number?: string | number | null;\n  driver_first_name?: string | null;\n  driver_last_name?: string | null;\n  activity_id?: number | null;\n  edition_number?: number | null;\n}\n\nexport const getAllVacuumLoads = async (): Promise<VacuumLoad[]> => {\n  const result = await fetchWithCache<VacuumLoad[] >(\n    NAMESPACE,\n    \"vacuumLoads\",\n    async () =>\n      await post<VacuumLoad[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD,\n        fields: [],\n        values: [],\n        filter: [],\n      }),\n  );\n\n  if ((result as any)?.error) {\n    console.error(result as any);\n    return [];\n  } else {\n    return result as VacuumLoad[];\n  }\n};\n\nexport const getPendingVacuumLoads = async (): Promise<VacuumLoad[]> => {\n  try {\n    const rows = await post<VacuumLoad[]>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD,\n      fields: [],\n      values: [],\n      filter: [[\"unloaded\", \"=\", false]],\n    });\n    return Array.isArray(rows) ? rows : [];\n  } catch (error) {\n    console.error(\"Error fetching pending vacuum loads\", error);\n    return [];\n  }\n};\n\nconst mergeVacuumLoadDetail = (\n  fallback?: Partial<VacuumLoadDetail>,\n  incoming?: Partial<VacuumLoadDetail>,\n): VacuumLoadDetail | null => {\n  const base = fallback ? { ...fallback } : {};\n  if (incoming) {\n    Object.assign(base, incoming);\n  }\n  return Object.keys(base).length > 0 ? (base as VacuumLoadDetail) : null;\n};\n\nexport const getVacuumLoadById = async (\n  id: number,\n  fallback?: Partial<VacuumLoadDetail>,\n): Promise<VacuumLoadDetail | null> => {\n  try {\n    const net = await NetInfo.fetch();\n    const isOnline = net.isConnected ?? true;\n\n    if (!isOnline) {\n      return mergeVacuumLoadDetail(fallback);\n    }\n\n    const result = await post<VacuumLoadDetail[]>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD,\n      fields: [],\n      values: [],\n      filter: [[\"id\", \"=\", id]],\n    });\n\n    const detail = Array.isArray(result) ? result[0] : (result as any);\n    if (detail) {\n      return mergeVacuumLoadDetail(fallback, detail);\n    }\n\n    return mergeVacuumLoadDetail(fallback);\n  } catch (error) {\n    console.error(\"Error fetching vacuum load detail\", error);\n    return mergeVacuumLoadDetail(fallback);\n  }\n};\n\nexport interface VacuumPlateInfo {\n  id: number;\n  plate_type: string;\n  vacuum_condition: string;\n  plate: string;\n}\n\nexport const getVacuumPlatesInfo = async (): Promise<VacuumPlateInfo[]> => {\n  const result = await fetchWithCache<VacuumPlateInfo[] >(\n    NAMESPACE,\n    \"vacuumPlates\",\n    async () =>\n      await post<VacuumPlateInfo[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.VACUUM_INFO,\n        fields: [],\n        values: [],\n        filter: [],\n      }),\n  );\n\n  if ((result as any)?.error) {\n    console.error(result as any);\n    return [];\n  } else {\n    return result as VacuumPlateInfo[];\n  }\n};\n\nexport interface FacilityListItem {\n  id: string; // ej: \"well_164\"\n  name: string;\n  facility_type: string; // ej: 'well', 'pit', etc.\n}\n\nexport interface GetFacilitiesListOptions {\n  forceRefresh?: boolean;\n  cacheTtlMs?: number;\n}\n\nconst FACILITIES_LIST_CACHE_KEY = \"facilitiesList\";\nconst FACILITIES_LIST_DEFAULT_TTL_MS = 5 * 60 * 1000;\nlet facilitiesListMemoryCache: FacilityListItem[] | null = null;\nlet facilitiesListFetchedAt = 0;\nlet facilitiesListInflight: Promise<FacilityListItem[]> | null = null;\n\nexport const getCachedFacilitiesList = () => facilitiesListMemoryCache || [];\n\nexport const invalidateFacilitiesListCache = (): void => {\n  facilitiesListMemoryCache = null;\n  facilitiesListFetchedAt = 0;\n};\n\nexport const getFacilitiesList = async (\n  options?: GetFacilitiesListOptions,\n): Promise<FacilityListItem[]> => {\n  const { forceRefresh = false, cacheTtlMs = FACILITIES_LIST_DEFAULT_TTL_MS } =\n    options ?? {};\n  const netState = await NetInfo.fetch();\n  const isOnline = netState.isConnected ?? true;\n  const now = Date.now();\n  const cacheIsFresh =\n    facilitiesListMemoryCache &&\n    facilitiesListFetchedAt > 0 &&\n    now - facilitiesListFetchedAt < cacheTtlMs;\n\n  if (!isOnline && cacheIsFresh) {\n    return facilitiesListMemoryCache!;\n  }\n\n  if (!isOnline) {\n    const cached = await storageService.get<FacilityListItem[]>(\n      NAMESPACE,\n      FACILITIES_LIST_CACHE_KEY,\n    );\n    if (Array.isArray(cached)) {\n      facilitiesListMemoryCache = cached;\n      facilitiesListFetchedAt = facilitiesListFetchedAt || Date.now();\n      return cached;\n    }\n    return [];\n  }\n\n  if (!forceRefresh) {\n    if (cacheIsFresh && facilitiesListMemoryCache) {\n      return facilitiesListMemoryCache;\n    }\n\n    if (facilitiesListInflight) {\n      return facilitiesListInflight;\n    }\n  }\n\n  const loadFacilities = async (): Promise<FacilityListItem[]> => {\n    const result = await fetchWithCache<FacilityListItem[] >(\n      NAMESPACE,\n      FACILITIES_LIST_CACHE_KEY,\n      async () =>\n        await post<FacilityListItem[]>({\n          verb: API_VERBS.SELECT,\n          table: TABLE_NAMES.GET_FACILITIES_LIST,\n          fields: [],\n          values: [],\n          filter: [],\n        }),\n    );\n\n    const rows = (result as FacilityListItem[]) ?? [];\n    facilitiesListMemoryCache = rows;\n    facilitiesListFetchedAt = Date.now();\n\n    await storageService.set(\n      NAMESPACE,\n      FACILITIES_LIST_CACHE_KEY,\n      rows,\n      24 * 60,\n    );\n    return rows;\n  };\n\n  facilitiesListInflight = loadFacilities();\n  try {\n    return await facilitiesListInflight;\n  } finally {\n    facilitiesListInflight = null;\n  }\n};\n\nexport interface DriverInfo {\n  id: number;\n  card_number: string;\n  first_name: string;\n  last_name: string;\n  nationality: string; // 'venezuelan' | 'foreigner' | string\n}\n\nexport const getDriversInfo = async (): Promise<DriverInfo[]> => {\n  const result = await fetchWithCache<DriverInfo[] >(\n    NAMESPACE,\n    \"driversInfo\",\n    async () =>\n      await post<DriverInfo[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.DRIVERS_INFO,\n        fields: [],\n        values: [],\n        filter: [],\n      }),\n  );\n\n  if ((result as any)?.error) {\n    console.error(result as any);\n    return [];\n  }\n  return result as DriverInfo[];\n};\n\nfunction pad2(n: number): string {\n  return String(n).padStart(2, \"0\");\n}\n\nfunction nowTimestamp(): string {\n  const d = new Date();\n  return `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())} ${pad2(d.getHours())}:${pad2(d.getMinutes())}:${pad2(d.getSeconds())}`;\n}\n\nfunction toInt(value: any): number | null {\n  if (value === null || value === undefined || value === \"\") return null;\n  const n = parseInt(String(value));\n  return Number.isNaN(n) ? null : n;\n}\n\nfunction toStr(value: any, def = \"\"): string {\n  return value === null || value === undefined ? def : String(value);\n}\n\nfunction toFacilityId(wellId: string) {\n  return wellId.trim().split(\"_\").pop() as string;\n}\n\nexport interface SubmitVacuumLoadStep3 {\n  origin_facility_id?: string | null;\n  origin_facility_type?: string | null;\n  origin_facility_type_view?: string | null;\n  destination_facility_id?: string | null;\n  destination_facility_type?: string | null;\n  destination_facility_type_view?: string | null;\n  startDate?: string | null; // YYYY-MM-DD\n  startTime?: string | null; // HH:mm\n  endDate?: string | null; // YYYY-MM-DD\n  endTime?: string | null; // HH:mm\n  initialMeasurement?: string | number | null;\n  finalMeasurement?: string | number | null;\n  volume?: string | number | null;\n  fluidType?: string | null;\n  comments?: string | null;\n}\n\nexport interface SubmitVacuumLoadStep4 {\n  vacuumCondition?: string | null;\n  chutoPlate?: string | null;\n  vacuumPlate?: string | null;\n}\n\nexport interface SubmitVacuumLoadStep5 {\n  nationality?: string | null;\n  driverId?: string | null;\n  driverName?: string | null;\n  driverLastName?: string | null;\n}\n\nexport interface SubmitVacuumLoadInput {\n  summary: { activity: string | null };\n  step3: SubmitVacuumLoadStep3;\n  step4: SubmitVacuumLoadStep4;\n  step5: SubmitVacuumLoadStep5;\n  userId: string | number | null;\n  edition?: { id: string | number; editionNumber?: number | null };\n}\n\nexport async function submitVacuumLoadReport(\n  input: SubmitVacuumLoadInput,\n): Promise<{ success: boolean; offline: boolean; message: string }> {\n  const ts = nowTimestamp();\n  const table = TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD;\n  const fieldsPairs: [string, string | number | boolean | null][] = [\n    [\"date_created\", ts],\n    [\"date_updated\", ts],\n    [\n      \"edition_number\",\n      input.edition ? (Number(input.edition.editionNumber) || 0) + 1 : 0,\n    ],\n    [\"activity_id\", input.summary.activity === \"Producción\" ? 1 : 2],\n    [\"user_id\", toStr(input.userId)],\n    [\"vacuum_plate\", toStr(input.step4.vacuumPlate)],\n    [\"chuto_plate\", toStr(input.step4.chutoPlate)],\n    [\"driver_nationality\", toStr(input.step5.nationality)],\n    [\"driver_id_card_number\", toStr(input.step5.driverId)],\n    [\"driver_first_name\", toStr(input.step5.driverName)],\n    [\"driver_last_name\", toStr(input.step5.driverLastName)],\n    [\"origin_facility_id\", toFacilityId(input.step3.origin_facility_id!)],\n    [\"origin_facility_type\", toStr(input.step3.origin_facility_type)],\n    [\n      \"origin_facility_type_view\",\n      toStr(\n        input.step3.origin_facility_type_view ?? input.step3.origin_facility_id,\n      ),\n    ],\n    [\n      \"loading_start_time\",\n      `${toStr(input.step3.startDate)} ${toStr(input.step3.startTime)}:00`,\n    ],\n    [\"initial_content\", toInt(input.step3.initialMeasurement)],\n    [\n      \"loading_end_time\",\n      `${toStr(input.step3.endDate)} ${toStr(input.step3.endTime)}:00`,\n    ],\n    [\"final_content\", toInt(input.step3.finalMeasurement)],\n    [\"volume\", toInt(input.step3.volume)],\n    [\"fluid_type\", toStr(input.step3.fluidType)],\n    [\n      \"destination_facility_id\",\n      toFacilityId(input.step3.destination_facility_id!),\n    ],\n    [\"destination_facility_type\", toStr(input.step3.destination_facility_type)],\n    [\n      \"destination_facility_type_view\",\n      toStr(\n        input.step3.destination_facility_type_view ??\n          input.step3.destination_facility_id,\n      ),\n    ],\n    [\"condition\", toStr(input.step4.vacuumCondition)],\n    [\"company\", \"\"],\n    [\"company_id\", 1],\n    [\"unloaded\", false],\n  ];\n\n  const excludeOnEdit = new Set([\"date_created\", \"user_id\"]);\n  const pairs = input.edition\n    ? fieldsPairs.filter(([k]) => !excludeOnEdit.has(k))\n    : fieldsPairs;\n\n  const payload = {\n    verb: input.edition ? \"update\" : \"insert\",\n    table,\n    fields: pairs.map(([k]) => k),\n    values: pairs.map(([, v]) => v),\n    filter: input.edition ? [[\"id\", \"=\", input.edition.id]] : [],\n  } as const;\n\n  const result = await submitReportWithOfflineFallback(table, payload as any);\n\n  if (result.success && !input.edition) {\n    try {\n      await storageService.remove(NAMESPACE, \"vacuumLoads\");\n    } catch (error) {\n      console.error(\"Error invalidating vacuum loads cache\", error);\n    }\n  }\n\n  return result;\n}\n\nexport interface SubmitVacuumUnloadStep4 {\n  startDate?: string | null;\n  startTime?: string | null;\n  endDate?: string | null;\n  endTime?: string | null;\n  finalMeasurement?: string | number | null;\n  volume?: string | number | null;\n  fluidType?: string | null;\n  finalDestinationId?: string | null;\n  comments?: string | null;\n}\n\nexport interface SubmitVacuumUnloadStep5 {\n  receiverName?: string | null;\n  receiverId?: string | null;\n  observations?: string | null;\n}\n\nexport interface SubmitVacuumUnloadInput {\n  summary: { activity: string | null };\n  vacuumLoadId: number;\n  step3LoadData: {\n    vacuumPlate?: string | null;\n    chutoPlate?: string | null;\n    originFacilityId?: string | null;\n    originFacilityType?: string | null;\n  };\n  step4: SubmitVacuumUnloadStep4;\n  step5: SubmitVacuumLoadStep5;\n  userId: string | number | null;\n  vacuumCondition?: string | null;\n  edition?: { id: string | number; editionNumber?: number | null };\n}\n\nexport async function submitVacuumUnloadReport(\n  input: SubmitVacuumUnloadInput,\n): Promise<{ success: boolean; offline: boolean; message: string }> {\n  const ts = nowTimestamp();\n  const unloadTable = TABLE_NAMES.DAILY_REPORT_VACUUM_UNLOAD;\n\n  const unloadPairs: [string, string | number | boolean | null][] = [\n    [\"date_created\", ts],\n    [\"date_updated\", ts],\n    [\n      \"edition_number\",\n      input.edition ? (Number(input.edition.editionNumber) || 0) + 1 : 0,\n    ],\n    [\"activity_id\", input.summary.activity === \"Producción\" ? 1 : 2],\n    [\"user_id\", toStr(input.userId)],\n    [\"vacuum_plate\", toStr(input.step3LoadData.vacuumPlate)],\n    [\"chuto_plate\", toStr(input.step3LoadData.chutoPlate)],\n    [\"driver_nationality\", toStr(input.step5.nationality)],\n    [\"driver_id_card_number\", toStr(input.step5.driverId)],\n    [\"driver_first_name\", toStr(input.step5.driverName)],\n    [\"driver_last_name\", toStr(input.step5.driverLastName)],\n    [\n      \"destination_facility_id\",\n      input.step4.finalDestinationId\n        ? toFacilityId(input.step4.finalDestinationId)\n        : 0,\n    ],\n    [\"destination_facility_type\", \"\"],\n    [\"destination_facility_type_view\", toStr(input.step4.finalDestinationId)],\n    [\n      \"unloading_start_time\",\n      `${toStr(input.step4.startDate)} ${toStr(input.step4.startTime)}:00`,\n    ],\n    [\"initial_content\", null],\n    [\n      \"unloading_end_time\",\n      `${toStr(input.step4.endDate)} ${toStr(input.step4.endTime)}:00`,\n    ],\n    [\"final_content\", toInt(input.step4.finalMeasurement)],\n    [\"volume\", toInt(input.step4.volume)],\n    [\"fluid_type\", toStr(input.step4.fluidType)],\n    [\"condition\", toStr(input.vacuumCondition)],\n    [\"company\", \"\"],\n    [\"company_id\", 1],\n    [\"comment\", toStr(input.step4.comments)],\n    [\"vacuum_load_id\", input.vacuumLoadId],\n  ];\n\n  const excludeOnEdit = new Set([\"date_created\", \"user_id\"]);\n  const pairs = input.edition\n    ? unloadPairs.filter(([k]) => !excludeOnEdit.has(k))\n    : unloadPairs;\n\n  const unloadPayload = {\n    verb: input.edition ? \"update\" : \"insert\",\n    table: unloadTable,\n    fields: pairs.map(([k]) => k),\n    values: pairs.map(([, v]) => v),\n    filter: input.edition ? [[\"id\", \"=\", input.edition.id]] : [],\n  } as const;\n\n  const unloadResult = await submitReportWithOfflineFallback(unloadTable, unloadPayload as any);\n\n  if (unloadResult.success && !input.edition) {\n    try {\n      await post<any>({\n        verb: \"update\",\n        table: TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD,\n        fields: [\"unloaded\", \"date_updated\"],\n        values: [true, ts],\n        filter: [[\"id\", \"=\", input.vacuumLoadId]],\n      });\n\n      await storageService.remove(NAMESPACE, \"vacuumLoads\");\n      await storageService.removeByPrefix(\n        NAMESPACE,\n        `reportsHistory:${TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD}:`,\n      );\n      DeviceEventEmitter.emit(\"reports:refresh\", {\n        table: TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD,\n      });\n    } catch (error) {\n      console.error(\"Error marking vacuum load as unloaded\", error);\n    }\n  }\n\n  return unloadResult;\n}\n\nexport const getWellsFiltered = async (\n  filters: Array<[string, string, number | string]>,\n): Promise<Well[]> => {\n  const normalizedFilters: WellFilterTuple[] = Array.isArray(filters)\n    ? filters\n    : [];\n\n  if (normalizedFilters.length > 0) {\n    const allWellsCache = await storageService.get<Well[]>(\n      NAMESPACE,\n      WELLS_ALL_CACHE_KEY,\n      true,\n    );\n    if (Array.isArray(allWellsCache) && allWellsCache.length > 0) {\n      return filterWellsInMemory(allWellsCache, normalizedFilters);\n    }\n  }\n\n  const cacheKey = buildWellsCacheKey(normalizedFilters);\n  const result = await fetchWithCache<Well[] >(\n    NAMESPACE,\n    cacheKey,\n    async () =>\n      await post<Well[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.WELL,\n        fields: [],\n        values: [],\n        filter: normalizedFilters,\n      }),\n  );\n\n  const maybeError = result as any;\n  if (maybeError?.error) {\n    console.error(maybeError);\n    return [];\n  }\n\n  if (maybeError?.isCached) {\n    const rows = (maybeError as Well[]) || [];\n    return filterWellsInMemory(rows, normalizedFilters);\n  }\n\n  const rows = (result as Well[]) ?? [];\n  if (normalizedFilters.length === 0) {\n    await storageService.set(NAMESPACE, WELLS_ALL_CACHE_KEY, rows, 24 * 60);\n    await storageService.set(NAMESPACE, WELLS_LEGACY_CACHE_KEY, rows, 24 * 60);\n  }\n  return rows;\n};\n\nexport const getWellCategoryType = async (\n  wellCategoryId: string,\n): Promise<OptionDDL[]> => {\n  const cacheKey = `wellCategoryType:${wellCategoryId}`;\n  const result = await fetchWithCache<OptionDDL[] >(\n    NAMESPACE,\n    cacheKey,\n    async () =>\n      await post<OptionDDL[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.WELL_CATEGORY,\n        fields: [\"name\"],\n        values: [],\n        filter: [[\"id\", \"=\", wellCategoryId]],\n      }),\n  );\n\n  if ((result as any)?.error) {\n    const cachedCategories =\n      (await storageService.get<OptionDDL[]>(NAMESPACE, \"wellCategories\")) ??\n      [];\n    const match = cachedCategories.find(\n      (opt: OptionDDL) => String(opt.id) === String(wellCategoryId),\n    );\n    return match ? [match] : [];\n  }\n\n  return (result as OptionDDL[]) ?? [];\n};\n\nexport const getAllWellClusters = async (): Promise<OptionDDL[]> => {\n  const result = await fetchWithCache<OptionDDL[] >(\n    NAMESPACE,\n    \"wellClusters\",\n    async () =>\n      await post<OptionDDL[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.WELL_CLUSTER,\n        fields: [],\n        values: [],\n        filter: [],\n      }),\n  );\n\n  if ((result as any)?.error) {\n    console.warn(\"wellClusters fallback:\", result);\n    return [];\n  }\n  return result as OptionDDL[];\n};\n\nexport const getDailyReportWellById = async (\n  id: number,\n): Promise<DailyReportWell | null> => {\n  try {\n    const result = await post<DailyReportWell[] | DailyReportWell>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.DAILY_REPORT_WELL,\n      fields: [],\n      values: [],\n      filter: [[\"id\", \"=\", Number(id)]],\n    });\n\n    if (Array.isArray(result)) {\n      return result[0] ?? null;\n    }\n\n    if (result && typeof result === \"object\") {\n      return result as DailyReportWell;\n    }\n\n    return null;\n  } catch (error) {\n    console.error(\"Error fetching getDailyReportWellById\", error);\n    throw error;\n  }\n};\n\nexport const getWellByIdCached = async (\n  wellId: number,\n): Promise<Well | null> => {\n  const rows = await getWellsFiltered([[\"id\", \"=\", Number(wellId)]]);\n  return rows?.[0] ?? null;\n};\n\nexport const getWellPotentialAndRgp = async (\n  wellId: number,\n): Promise<{ potencial: number | null; rgp: number | null }> => {\n  const well = await getWellByIdCached(Number(wellId));\n  return {\n    potencial: (well as Well | null)?.potencial ?? null,\n    rgp: (well as Well | null)?.rgp ?? null,\n  };\n};\n\nexport interface MeasurementPoint {\n  id: number;\n  name: string;\n  field_id?: number | null;\n  flow_station_id?: number | null;\n  location_id?: number | null;\n  [key: string]: any;\n}\n\nexport interface FlowStationTank {\n  id: number;\n  name: string;\n  flow_station_id: number;\n  active: boolean;\n  location: any;\n  conversion_factor: string;\n}\n\nexport interface DailyReportMeasurementPoint {\n  id: number;\n  measurement_point_id: number | null;\n  activity_id?: number | null;\n  status?: string | null;\n  sample_taken?: boolean | null;\n  raw_operated_production?: number | null;\n  net_operated_production?: number | null;\n  lab_analysis?: boolean | null;\n  date_created?: string | null;\n  date_updated?: string | null;\n  edition_number?: number | null;\n  [key: string]: any;\n}\n\nexport const getMeasurementPointsFiltered = async (\n  filters: any[],\n  options?: { forceRefresh?: boolean },\n): Promise<MeasurementPoint[]> => {\n  try {\n    const result = await fetchWithCache<MeasurementPoint[]>(\n      NAMESPACE,\n      \"measurementPoints\",\n      async () =>\n        await post<MeasurementPoint[]>({\n          verb: API_VERBS.SELECT,\n          table: TABLE_NAMES.MEASUREMENT_POINT,\n          fields: [],\n          values: [],\n          filter: [],\n        }),\n      { shouldFetch: options?.forceRefresh, ttl: 24 * 60 },\n    );\n\n    const rows = (result as MeasurementPoint[]) || [];\n    if (!filters?.length) return rows as any;\n    return (rows as any[]).filter((row) =>\n      filters.every(\n        ([key, _op, value]) => String((row as any)[key]) === String(value),\n      ),\n    ) as any;\n  } catch (error) {\n    console.error(\"Error fetching measurementPoints\", error);\n    return [] as any;\n  }\n};\n\nexport const getMeasurementPointByIdCached = async (\n  id: number,\n): Promise<MeasurementPoint | null> => {\n  const rows = await getMeasurementPointsFiltered([[\"id\", \"=\", Number(id)]]);\n  return rows?.[0] ?? null;\n};\n\nexport const getFlowStationTanksFiltered = async (\n  filters: any[],\n  options?: { forceRefresh?: boolean },\n): Promise<FlowStationTank[]> => {\n  const ttl = process.env.NODE_ENV === \"development\" ? 5 : 24 * 60;\n  const config = await configService.getEffectiveConfig();\n  const url = config?.API_BASE_URL;\n  if (!url) {\n    throw Error(\n      \"🚨 [getFlowStationTanksFiltered] ERROR! API_BASE_URL is missing in config.\",\n    );\n  }\n\n  try {\n    const result = await fetchWithCache<FlowStationTank[]>(\n      NAMESPACE,\n      \"flowStationTanks\",\n      async () =>\n        await purePost<FlowStationTank[]>(url, {\n          verb: API_VERBS.SELECT,\n          table: TABLE_NAMES.FLOW_STATION_TANK,\n          fields: [],\n          values: [],\n          filter: [],\n        }),\n      { shouldFetch: options?.forceRefresh, ttl },\n    );\n\n    const rows = (result as FlowStationTank[]) || [];\n    if (!filters?.length) return rows as any;\n    return (rows as any[]).filter((row) =>\n      filters.every(\n        ([key, _op, value]) => String((row as any)[key]) === String(value),\n      ),\n    ) as any;\n  } catch (error) {\n    console.error(\"Error fetching flowStationTanks\", error);\n    return [] as any;\n  }\n};\n\nexport const getFlowStationTankByIdCached = async (\n  id: number,\n): Promise<FlowStationTank | null> => {\n  const rows = await getFlowStationTanksFiltered([[\"id\", \"=\", Number(id)]]);\n  return rows?.[0] ?? null;\n};\n\nexport interface FlowStationTankReport {\n  id: number;\n  date_created: string;\n  date_updated: string;\n  edition_number: number;\n  activity_id: number;\n  user_id: string;\n  flow_station_tank_id: number;\n  status: string;\n  current_stock: string | null;\n  sample_taken: boolean;\n  net_operated_production: string | null;\n  tank_level: string | null;\n  filling_start_date: string | null;\n  filling_start_level: string | null;\n  filling_end_date: string | null;\n  filling_end_level: string | null;\n  raw_operated_production: string | null;\n  lab_analysis: boolean;\n  comments: string | null;\n}\n\nexport const getDailyReportFlowStationTankById = async (\n  id: number,\n): Promise<FlowStationTankReport | null> => {\n  try {\n    const result = await post<FlowStationTankReport[] | FlowStationTankReport>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.DAILY_REPORT_FLOW_STATION_TANK,\n      fields: [],\n      values: [],\n      filter: [[\"id\", \"=\", Number(id)]],\n    });\n\n    if (Array.isArray(result)) {\n      return result[0] ?? null;\n    }\n\n    if (result && typeof result === \"object\") {\n      return result as FlowStationTankReport;\n    }\n\n    return null;\n  } catch (error) {\n    console.error(\"Error fetching dailyReportFlowStationTank\", error);\n    throw error; // Let react-query catch the error to handle offline state\n  }\n};\n\nexport const getDailyReportDynamicSettlementTankById = async (\n  id: number,\n): Promise<TreatmentPlantDynamicStorageTank | null> => {\n  try {\n    const result = await post<TreatmentPlantDynamicStorageTank[] | TreatmentPlantDynamicStorageTank>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.DAILY_REPORT_DYNAMIC_SETTLEMENT_TANK,\n      fields: [],\n      values: [],\n      filter: [[\"id\", \"=\", Number(id)]],\n    });\n\n    if (Array.isArray(result)) {\n      return result[0] ?? null;\n    }\n\n    if (result && typeof result === \"object\") {\n      return result as TreatmentPlantDynamicStorageTank;\n    }\n\n    return null;\n  } catch (error) {\n    console.error(\"Error fetching getDailyReportDynamicSettlementTankById\", error);\n    throw error;\n  }\n};\n\nexport const getDailyReportStorageTankById = async (\n  id: number,\n): Promise<TreatmentPlantDynamicStorageTank | null> => {\n  try {\n    const result = await post<TreatmentPlantDynamicStorageTank[] | TreatmentPlantDynamicStorageTank>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.DAILY_REPORT_STORAGE_TANK,\n      fields: [],\n      values: [],\n      filter: [[\"id\", \"=\", Number(id)]],\n    });\n\n    if (Array.isArray(result)) {\n      return result[0] ?? null;\n    }\n\n    if (result && typeof result === \"object\") {\n      return result as TreatmentPlantDynamicStorageTank;\n    }\n\n    return null;\n  } catch (error) {\n    console.error(\"Error fetching getDailyReportStorageTankById\", error);\n    throw error;\n  }\n};\n\nexport const getTreatmentPlantDynamicStorageTankById = async (\n  id: number,\n): Promise<TreatmentPlantDynamicStorageTank | null> => {\n  try {\n    const result = await post<TreatmentPlantDynamicStorageTank[] | TreatmentPlantDynamicStorageTank>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.TREATMENT_PLANT_DYNAMIC_STORAGE_TANK,\n      fields: [],\n      values: [],\n      filter: [[\"id\", \"=\", Number(id)]],\n    });\n\n    if (Array.isArray(result)) {\n      return result[0] ?? null;\n    }\n\n    if (result && typeof result === \"object\") {\n      return result as TreatmentPlantDynamicStorageTank;\n    }\n\n    return null;\n  } catch (error) {\n    console.error(\"Error fetching getTreatmentPlantDynamicStorageTankById\", error);\n    throw error;\n  }\n};\n\nexport const getDailyReportUptTankById = async (\n  id: number,\n): Promise<UptTank | null> => {\n  const result = await fetchWithCache<\n    UptTank[] | UptTank \n  >(\n    NAMESPACE,\n    `dailyReportUptTank:${id}`,\n    async () =>\n      await post<UptTank[] | UptTank>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.DAILY_REPORT_UPT_TANK,\n        fields: [],\n        values: [],\n        filter: [[\"id\", \"=\", Number(id)]],\n      }),\n  );\n\n  const maybeError = result as any;\n  if (maybeError?.error) {\n    console.error(maybeError);\n    return null;\n  }\n\n  if (Array.isArray(result)) {\n    return result[0] ?? null;\n  }\n\n  if (result && typeof result === \"object\") {\n    return result as UptTank;\n  }\n\n  return null;\n};\n\nexport const getUptTankById = async (id: number): Promise<UptTank | null> => {\n  const result = await fetchWithCache<\n    UptTank[] | UptTank \n  >(\n    NAMESPACE,\n    `uptTank:${id}`,\n    async () =>\n      await post<UptTank[] | UptTank>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.UPT_TANK,\n        fields: [],\n        values: [],\n        filter: [[\"id\", \"=\", Number(id)]],\n      }),\n  );\n\n  const maybeError = result as any;\n  if (maybeError?.error) {\n    console.error(maybeError);\n    return null;\n  }\n\n  if (Array.isArray(result)) {\n    return result[0] ?? null;\n  }\n\n  if (result && typeof result === \"object\") {\n    return result as UptTank;\n  }\n\n  return null;\n};\n\nconst usersInfoMemoryCache = new Map<string | number, string>();\n\nexport const getCachedUsersInfo = () => new Map(usersInfoMemoryCache);\n\nexport async function getUsersInfoByIds(\n  userIds: Array<string | number>,\n): Promise<Map<string | number, string>> {\n  const namesMap = new Map<string | number, string>();\n\n  if (userIds.length === 0) {\n    return namesMap;\n  }\n\n  const missingUserIds: Array<string | number> = [];\n\n  userIds.forEach((id) => {\n    if (usersInfoMemoryCache.has(id)) {\n      namesMap.set(id, usersInfoMemoryCache.get(id)!);\n    } else {\n      missingUserIds.push(id);\n    }\n  });\n\n  if (missingUserIds.length === 0) {\n    return namesMap;\n  }\n\n  try {\n    const result = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.USER_INFO,\n      fields: [\"entra_id\", \"display_name\"],\n      values: [],\n      filter: [[\"entra_id\", \"in\", missingUserIds]],\n    } as ApiPostBody);\n\n    if (Array.isArray(result)) {\n      result.forEach((user) => {\n        if (user?.entra_id && user?.display_name) {\n          const name = String(user.display_name);\n          usersInfoMemoryCache.set(user.entra_id, name);\n          namesMap.set(user.entra_id, name);\n        }\n      });\n    }\n  } catch (error) {\n    console.error(\"Error fetching user names:\", error);\n  }\n\n  return namesMap;\n}\n\nconst tanksMemoryCache = new Map<string | number, string>();\n\nexport const getCachedTanksInfo = () => new Map(tanksMemoryCache);\n\nexport async function getTreatmentPlantDynamicStorageTanksByIds(\n  tankIds: Array<string | number>,\n): Promise<Map<string | number, string>> {\n  const namesMap = new Map<string | number, string>();\n\n  if (tankIds.length === 0) {\n    return namesMap;\n  }\n\n  const missingIds: Array<string | number> = [];\n\n  tankIds.forEach((id) => {\n    if (tanksMemoryCache.has(id)) {\n      namesMap.set(id, tanksMemoryCache.get(id)!);\n    } else {\n      missingIds.push(id);\n    }\n  });\n\n  if (missingIds.length === 0) {\n    return namesMap;\n  }\n\n  try {\n    const result = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.TREATMENT_PLANT_DYNAMIC_STORAGE_TANK,\n      fields: [\"id\", \"name\"],\n      values: [],\n      filter: [[\"id\", \"in\", missingIds]],\n    } as ApiPostBody);\n\n    if (Array.isArray(result)) {\n      result.forEach((tank) => {\n        if (tank?.id && tank?.name) {\n          const name = String(tank.name);\n          tanksMemoryCache.set(tank.id, name);\n          namesMap.set(tank.id, name);\n        }\n      });\n    }\n  } catch (error) {\n    console.error(\"Error fetching tank names:\", error);\n  }\n\n  return namesMap;\n}\n\nconst wellsMemoryCache = new Map<string | number, string>();\n\nexport const getCachedWellsInfo = () => new Map(wellsMemoryCache);\n\nexport async function getWellsByIds(\n  wellIds: Array<string | number>,\n): Promise<Map<string | number, string>> {\n  const namesMap = new Map<string | number, string>();\n\n  if (wellIds.length === 0) {\n    return namesMap;\n  }\n\n  const missingIds: Array<string | number> = [];\n\n  wellIds.forEach((id) => {\n    if (wellsMemoryCache.has(id)) {\n      namesMap.set(id, wellsMemoryCache.get(id)!);\n    } else {\n      missingIds.push(id);\n    }\n  });\n\n  if (missingIds.length === 0) {\n    return namesMap;\n  }\n\n  try {\n    const result = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.WELL,\n      fields: [\"id\", \"name\"],\n      values: [],\n      filter: [[\"id\", \"in\", missingIds]],\n    } as ApiPostBody);\n\n    if (Array.isArray(result)) {\n      result.forEach((well) => {\n        if (well?.id && well?.name) {\n          const name = String(well.name);\n          wellsMemoryCache.set(well.id, name);\n          namesMap.set(well.id, name);\n        }\n      });\n    }\n  } catch (error) {\n    console.error(\"Error fetching well names:\", error);\n  }\n\n  return namesMap;\n}\n\nconst measurementPointsMemoryCache = new Map<string | number, string>();\n\nexport const getCachedMeasurementPointsInfo = () =>\n  new Map(measurementPointsMemoryCache);\n\nexport async function getMeasurementPointsByIds(\n  measurementPointIds: Array<string | number>,\n): Promise<Map<string | number, string>> {\n  const namesMap = new Map<string | number, string>();\n\n  if (measurementPointIds.length === 0) {\n    return namesMap;\n  }\n\n  const missingIds: Array<string | number> = [];\n\n  measurementPointIds.forEach((id) => {\n    if (measurementPointsMemoryCache.has(id)) {\n      namesMap.set(id, measurementPointsMemoryCache.get(id)!);\n    } else {\n      missingIds.push(id);\n    }\n  });\n\n  if (missingIds.length === 0) {\n    return namesMap;\n  }\n\n  try {\n    const result = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.MEASUREMENT_POINT,\n      fields: [\"id\", \"name\"],\n      values: [],\n      filter: [[\"id\", \"in\", missingIds]],\n    } as ApiPostBody);\n\n    if (Array.isArray(result)) {\n      result.forEach((mp) => {\n        if (mp?.id && mp?.name) {\n          const name = String(mp.name);\n          measurementPointsMemoryCache.set(mp.id, name);\n          namesMap.set(mp.id, name);\n        }\n      });\n    }\n  } catch (error) {\n    console.error(\"Error fetching measurement point names:\", error);\n  }\n\n  return namesMap;\n}\n\nconst pitsMemoryCache = new Map<string | number, string>();\n\nexport const getCachedPitsInfo = () => new Map(pitsMemoryCache);\n\nexport async function getPitsByIds(\n  pitIds: Array<string | number>,\n): Promise<Map<string | number, string>> {\n  const namesMap = new Map<string | number, string>();\n\n  if (pitIds.length === 0) {\n    return namesMap;\n  }\n\n  const missingIds: Array<string | number> = [];\n\n  pitIds.forEach((id) => {\n    if (pitsMemoryCache.has(id)) {\n      namesMap.set(id, pitsMemoryCache.get(id)!);\n    } else {\n      missingIds.push(id);\n    }\n  });\n\n  if (missingIds.length === 0) {\n    return namesMap;\n  }\n\n  try {\n    const result = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.PIT,\n      fields: [\"id\", \"name\"],\n      values: [],\n      filter: [[\"id\", \"in\", missingIds]],\n    } as ApiPostBody);\n\n    if (Array.isArray(result)) {\n      result.forEach((pit) => {\n        if (pit?.id && pit?.name) {\n          const name = String(pit.name);\n          pitsMemoryCache.set(pit.id, name);\n          namesMap.set(pit.id, name);\n        }\n      });\n    }\n  } catch (error) {\n    console.error(\"Error fetching pit names:\", error);\n  }\n\n  return namesMap;\n}\n\nconst uptTanksMemoryCache = new Map<string | number, string>();\nconst uptTanksFacilityTypeViewsMemoryCache = new Map<\n  string | number,\n  string | null\n>();\n\nexport const getCachedUptTanksInfo = () => ({\n  names: new Map(uptTanksMemoryCache),\n  facilityTypeViews: new Map(uptTanksFacilityTypeViewsMemoryCache),\n});\n\nexport async function getUptTanksByIds(\n  uptTankIds: Array<string | number>,\n): Promise<{\n  names: Map<string | number, string>;\n  facilityTypeViews: Map<string | number, string | null>;\n}> {\n  const namesMap = new Map<string | number, string>();\n  const facilityTypeViewMap = new Map<string | number, string | null>();\n\n  if (uptTankIds.length === 0) {\n    return { names: namesMap, facilityTypeViews: facilityTypeViewMap };\n  }\n\n  const missingIds: Array<string | number> = [];\n\n  uptTankIds.forEach((id) => {\n    if (uptTanksMemoryCache.has(id)) {\n      namesMap.set(id, uptTanksMemoryCache.get(id)!);\n      facilityTypeViewMap.set(\n        id,\n        uptTanksFacilityTypeViewsMemoryCache.get(id) ?? null,\n      );\n    } else {\n      missingIds.push(id);\n    }\n  });\n\n  if (missingIds.length === 0) {\n    return { names: namesMap, facilityTypeViews: facilityTypeViewMap };\n  }\n\n  try {\n    const result = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.UPT_TANK,\n      fields: [\"id\", \"name\", \"facility_type_view\"],\n      values: [],\n      filter: [[\"id\", \"in\", missingIds]],\n    } as ApiPostBody);\n\n    if (Array.isArray(result)) {\n      result.forEach((tank) => {\n        if (tank?.id) {\n          if (tank?.name) {\n            const name = String(tank.name);\n            uptTanksMemoryCache.set(tank.id, name);\n            namesMap.set(tank.id, name);\n          }\n          if (tank?.facility_type_view !== undefined) {\n            const view = tank.facility_type_view\n              ? String(tank.facility_type_view)\n              : null;\n            uptTanksFacilityTypeViewsMemoryCache.set(tank.id, view);\n            facilityTypeViewMap.set(tank.id, view);\n          }\n        }\n      });\n    }\n  } catch (error) {\n    console.error(\"Error fetching UPT tank names:\", error);\n  }\n\n  return { names: namesMap, facilityTypeViews: facilityTypeViewMap };\n}\n\nconst flowStationNamesByTankIdMemoryCache = new Map<string | number, string>();\n\nexport const getCachedFlowStationNames = () =>\n  new Map(flowStationNamesByTankIdMemoryCache);\n\nexport async function getFlowStationNamesByTankIds(\n  flowStationTankIds: Array<string | number>,\n): Promise<Map<string | number, string>> {\n  const namesMap = new Map<string | number, string>();\n\n  if (flowStationTankIds.length === 0) {\n    return namesMap;\n  }\n\n  const missingIds: Array<string | number> = [];\n\n  flowStationTankIds.forEach((id) => {\n    if (flowStationNamesByTankIdMemoryCache.has(id)) {\n      namesMap.set(id, flowStationNamesByTankIdMemoryCache.get(id)!);\n    } else {\n      missingIds.push(id);\n    }\n  });\n\n  if (missingIds.length === 0) {\n    return namesMap;\n  }\n\n  try {\n    const tankResult = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.FLOW_STATION_TANK,\n      fields: [\"id\", \"flow_station_id\"],\n      values: [],\n      filter: [[\"id\", \"in\", missingIds]],\n    } as ApiPostBody);\n\n    if (!Array.isArray(tankResult)) {\n      return namesMap;\n    }\n\n    const flowStationIds = new Set<string | number>();\n    const tankToFlowStationMap = new Map<string | number, string | number>();\n\n    tankResult.forEach((tank) => {\n      if (tank?.id && tank?.flow_station_id) {\n        flowStationIds.add(tank.flow_station_id);\n        tankToFlowStationMap.set(tank.id, tank.flow_station_id);\n      }\n    });\n\n    if (flowStationIds.size === 0) {\n      return namesMap;\n    }\n\n    const flowStationResult = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.FLOW_STATION,\n      fields: [\"id\", \"name\"],\n      values: [],\n      filter: [[\"id\", \"in\", Array.from(flowStationIds)]],\n    } as ApiPostBody);\n\n    if (Array.isArray(flowStationResult)) {\n      const flowStationNames = new Map<string | number, string>();\n      flowStationResult.forEach((fs) => {\n        if (fs?.id && fs?.name) {\n          flowStationNames.set(fs.id, String(fs.name));\n        }\n      });\n\n      tankToFlowStationMap.forEach((flowStationId, tankId) => {\n        const flowStationName = flowStationNames.get(flowStationId);\n        if (flowStationName) {\n          flowStationNamesByTankIdMemoryCache.set(tankId, flowStationName);\n          namesMap.set(tankId, flowStationName);\n        }\n      });\n    }\n  } catch (error) {\n    console.error(\"Error fetching flow station names:\", error);\n  }\n\n  return namesMap;\n}\n\nexport async function getReportById(\n  table: ReportHistoryTable,\n  id: string | number,\n): Promise<Record<string, any> | null> {\n  try {\n    const result = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table,\n      fields: [],\n      values: [],\n      filter: [[\"id\", \"=\", Number(id)]],\n    });\n    return Array.isArray(result) && result.length > 0\n      ? (result[0] ?? null)\n      : null;\n  } catch (error) {\n    console.error(\n      `Error fetching report from table ${table} with id ${id}:`,\n      error,\n    );\n    return null;\n  }\n}\n\nexport async function getActivityById(\n  id: string | number,\n): Promise<Record<string, any> | null> {\n  try {\n    const result = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.ACTIVITY,\n      fields: [\"name\"],\n      values: [],\n      filter: [[\"id\", \"=\", Number(id)]],\n    });\n    return Array.isArray(result) && result.length > 0\n      ? (result[0] ?? null)\n      : null;\n  } catch (error) {\n    console.error(`Error fetching activity with id ${id}:`, error);\n    return null;\n  }\n}\n\nexport async function getAssociatedStrategyById(\n  id: string | number,\n): Promise<Record<string, any> | null> {\n  try {\n    const result = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.ASSOCIATED_STRATEGY,\n      fields: [\"name\"],\n      values: [],\n      filter: [[\"id\", \"=\", Number(id)]],\n    });\n    return Array.isArray(result) && result.length > 0\n      ? (result[0] ?? null)\n      : null;\n  } catch (error) {\n    console.error(`Error fetching associated strategy with id ${id}:`, error);\n    return null;\n  }\n}\n\nexport async function getUserInfoById(\n  id: string | number,\n): Promise<Record<string, any> | null> {\n  try {\n    const result = await post<Array<Record<string, any>>>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.USER_INFO,\n      fields: [\"display_name\"],\n      values: [],\n      filter: [[\"entra_id\", \"=\", String(id)]],\n    });\n    return Array.isArray(result) && result.length > 0\n      ? (result[0] ?? null)\n      : null;\n  } catch (error) {\n    console.error(`Error fetching user info with id ${id}:`, error);\n    return null;\n  }\n}\n\nexport const getPitByIdCached = async (\n  id: number,\n): Promise<PitOption | null> => {\n  const rows = await getPitsFiltered([[\"id\", \"=\", Number(id)]]);\n  return rows?.[0] ?? null;\n};\n\nexport const getFlowStationByIdCached = async (\n  id: number,\n): Promise<OptionDDL | null> => {\n  const allFlowStations = await getAllFlowStations();\n  return allFlowStations.find((fs) => String(fs.id) === String(id)) ?? null;\n};\n\nexport const getDailyReportMeasurementPointById = async (\n  id: number,\n): Promise<DailyReportMeasurementPoint | null> => {\n  try {\n    const result = await post<DailyReportMeasurementPoint[] | DailyReportMeasurementPoint>({\n      verb: API_VERBS.SELECT,\n      table: TABLE_NAMES.DAILY_REPORT_MEASUREMENT_POINT,\n      fields: [],\n      values: [],\n      filter: [[\"id\", \"=\", Number(id)]],\n    });\n\n    if (Array.isArray(result)) {\n      return result[0] ?? null;\n    }\n\n    if (result && typeof result === \"object\") {\n      return result as DailyReportMeasurementPoint;\n    }\n\n    return null;\n  } catch (error) {\n    console.error(\"Error fetching getDailyReportMeasurementPointById\", error);\n    throw error;\n  }\n};\n\nexport const getFieldByIdCached = async (id: number): Promise<Field | null> => {\n  const result = await fetchWithCache<\n    Field[] \n  >(\n    NAMESPACE,\n    \"fieldsAll\",\n    async () =>\n      await post<Field[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.FIELD,\n        fields: [],\n        values: [],\n        filter: [],\n      }),\n  );\n\n  const maybeErrorDetail = result as any;\n  if (maybeErrorDetail?.error) {\n    console.error(maybeErrorDetail);\n    return null;\n  }\n\n  const rows = (result as Field[]) || [];\n  const fromCache = (result as any)?.isCached;\n  if (!fromCache) {\n    const match = rows.find((row) => String(row.id) === String(id));\n    if (match) return match;\n  }\n\n  return rows.find((row) => String(row.id) === String(id)) ?? null;\n};\n\nexport const getLocationByIdCached = async (\n  id: number,\n): Promise<Location | null> => {\n  const result = await fetchWithCache<\n    Location[] \n  >(\n    NAMESPACE,\n    \"locationsAll\",\n    async () =>\n      await post<Location[]>({\n        verb: API_VERBS.SELECT,\n        table: TABLE_NAMES.LOCATION,\n        fields: [],\n        values: [],\n        filter: [],\n      }),\n  );\n\n  const cachedDetailWrapper = result as any;\n\n  if (cachedDetailWrapper?.error) {\n    console.error(cachedDetailWrapper);\n    return null;\n  }\n\n  const rows = (result as Location[]) || [];\n  return rows.find((row) => String(row.id) === String(id)) ?? null;\n};\n\nfunction inferModuleFromTable(table: string): string {\n  if (table.includes('daily_report')) return 'dailyReport';\n  if (table.includes('ods')) return 'ods';\n  if (table.includes('machinery')) return 'machinery';\n  if (table.includes('lab')) return 'labReports';\n  return 'otherReports';\n}\n\nasync function isOnline(): Promise<boolean> {\n  try {\n    const net = await NetInfo.fetch();\n    return net.isConnected ?? true;\n  } catch {\n    return true;\n  }\n}\n\nasync function sendReportOnline(payload: ApiPostBody): Promise<void> {\n  await post<any>(payload);\n}\n\nexport async function submitReport(payload: ApiPostBody): Promise<void> {\n  console.log(\"📤 ONLINE: Sending report directly...\");\n  await sendReportOnline(payload);\n  console.log(\"✅ ONLINE: Report sent successfully\");\n}\n\nexport async function submitReportWithOfflineFallback(\n  table: string,\n  payload: ApiPostBody,\n  onSuccess?: () => void,\n  onError?: (error: string) => void,\n): Promise<{ success: boolean; offline: boolean; message: string }> {\n  const online = await isOnline();\n  const moduleName = inferModuleFromTable(table);\n\n  if (!online) {\n    try {\n      const reportId = await offlineMutationQueueService.saveMutationForLater(\n        moduleName,\n        payload as unknown as Record<string, unknown>\n      );\n\n      console.log(\"💾 OFFLINE: Report saved for later sync:\", reportId);\n\n      await storageService.removeByPrefix(\n        NAMESPACE,\n        `reportsHistory:${table}:`,\n      );\n      DeviceEventEmitter.emit(\"reports:refresh\", { table });\n\n      onSuccess?.();\n      return {\n        success: true,\n        offline: true,\n        message: \"Reporte guardado. Se enviará cuando tengas conexión.\",\n      };\n    } catch (error: any) {\n      console.error(\"❌ Error saving report for later:\", error);\n      onError?.(error?.message ?? String(error));\n      return {\n        success: false,\n        offline: true,\n        message: \"Error al guardar el reporte offline.\",\n      };\n    }\n  }\n\n  try {\n    await submitReport(payload);\n\n    await storageService.removeByPrefix(NAMESPACE, `reportsHistory:${table}:`);\n    DeviceEventEmitter.emit(\"reports:refresh\", { table });\n\n    onSuccess?.();\n    return {\n      success: true,\n      offline: false,\n      message: \"Reporte enviado exitosamente.\",\n    };\n  } catch (error: any) {\n    try {\n      await offlineMutationQueueService.saveMutationForLater(\n        moduleName,\n        payload as unknown as Record<string, unknown>\n      );\n\n      await storageService.removeByPrefix(\n        NAMESPACE,\n        `reportsHistory:${table}:`,\n      );\n      DeviceEventEmitter.emit(\"reports:refresh\", { table });\n\n      onSuccess?.();\n      return {\n        success: true,\n        offline: true,\n        message: \"Error de conexión. Reporte guardado para enviar después.\",\n      };\n    } catch (offlineError: any) {\n      onError?.(`Error de red: ${error?.message ?? String(error)}`);\n      return {\n        success: false,\n        offline: false,\n        message: \"Error de conexión y no se pudo guardar offline.\",\n      };\n    }\n  }\n}\n\n","import { configService } from \"@data-oil-front/core-host\";\nimport { ALL_REPORT_HISTORY_TABLES, ReportHistoryTable } from \"./types\";\nimport { TABLE_NAMES } from \"@data-oil-front/core-utils\";\n\ntype GetReportHistoryTablesOptions = {\n  includeOtherReports?: boolean;\n};\n\nexport function findReportHistoryTables(\n  options?: GetReportHistoryTablesOptions,\n): ReportHistoryTable[] {\n  const config = configService.getCurrentConfig();\n  const clientName = (config.clientName || \"\").toLowerCase();\n  // TODO: Find the way to get tables list configured for the client from the DOM.\n  const isAldyl = clientName === \"aldyl\";\n  const includeOtherReports = options?.includeOtherReports ?? true;\n\n  return ALL_REPORT_HISTORY_TABLES.filter((table) => {\n    if (!includeOtherReports && ALL_REPORT_HISTORY_TABLES.includes(table)) {\n      return false;\n    }\n    // TODO: Find the way to get tables list configured for the client from the DOM.\n    if (table === TABLE_NAMES.DAILY_REPORT_MEASUREMENT_POINT && isAldyl) {\n      return false;\n    }\n    return true;\n  });\n}\n","import { configService } from \"@data-oil-front/core-host\";\nimport {\n  DAILY_REPORT_NAMESPACE,\n  GetReportsHistoryOptions,\n  ReportHistoryItem,\n} from \"./types\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport { findReportHistoryTables } from \"./findReportHistoryTables\";\nimport { fetchWithCache } from \"../../utils/fetchWithCache\";\n\nimport {\n  API_VERBS,\n  ApiPostBody,\n  purePost,\n  ApiFilter,\n} from \"@data-oil-front/core-utils\";\n\nfunction ensureDate(value?: string | number | Date | Dayjs | null) {\n  if (!value) return dayjs();\n  return dayjs(value);\n}\n\nexport async function getReportsHistory(\n  options: GetReportsHistoryOptions,\n): Promise<ReportHistoryItem[]> {\n  const config = await configService.getEffectiveConfig(); // 1er dependencia\n  const url = config?.API_BASE_URL;\n\n  if (!url) {\n    throw Error(\n      \"[getReportsHistory] 🚨 ERROR! API_BASE_URL is missing in config.\",\n    );\n  }\n\n  const start = options.startDate\n    ? ensureDate(options.startDate)\n        .utc()\n        .startOf(\"day\")\n        .format(\"YYYY-MM-DD HH:mm:ss\")\n    : null;\n\n  const end = options.endDate\n    ? ensureDate(options.endDate)\n        .utc()\n        .endOf(\"day\")\n        .format(\"YYYY-MM-DD HH:mm:ss\")\n    : null;\n\n  let tables = findReportHistoryTables({\n    includeOtherReports: options.includeOtherReports ?? true,\n  });\n  if (options.installationType) {\n    tables = tables.filter((t) => t === options.installationType);\n  }\n\n  const promises = tables.map(async (table) => {\n    const cacheKey = `reportsHistory:${table}:${start || \"all\"}:${end || \"all\"}`;\n\n    // Construir los filtros dinámicamente: solo se envían si existen fechas\n    const filter: ApiFilter[] = [];\n    if (start) filter.push([\"date_created\", \">=\", start]);\n    if (end) filter.push([\"date_created\", \"<=\", end]);\n\n    let result: any[] = [];\n    try {\n      result = await fetchWithCache<any[]>(\n        DAILY_REPORT_NAMESPACE,\n        cacheKey,\n        async () =>\n          await purePost<any[]>(\n            url,\n            new ApiPostBody({\n              verb: API_VERBS.SELECT,\n              table,\n              filter,\n            }),\n            { signal: options.signal },\n          ),\n        { shouldFetch: options.forceRefresh }\n      );\n    } catch (error) {\n      if (__DEV__) {\n        console.info(\n          `Historial vacío/no cache para ${table} entre ${start} y ${end}. Se devuelve [].`,\n        );\n      }\n      return [] as ReportHistoryItem[];\n    }\n\n    const rows = result ?? [];\n\n    return rows.map((row) => {\n      const parsed = dayjs.utc(\n        row?.date_created ?? row?.dateCreated ?? undefined,\n      );\n      const creator = row?.created_by ?? row?.creator ?? \"Desconocido\";\n      const dateKey = parsed.isValid() ? parsed.format(\"YYYY-MM-DD\") : \"\";\n\n      return {\n        id: row?.id ?? `${table}-${Math.random().toString(36).slice(2, 10)}`,\n        table,\n        dateCreated: row?.date_created ?? row?.dateCreated ?? \"\",\n        dateDisplay: parsed.isValid() ? parsed.format(\"DD-MM-YYYY\") : \"\",\n        dayKey: dateKey,\n        time: parsed.isValid() ? parsed.format(\"HH:mm\") : \"\",\n        creator,\n        userId: row?.user_id ?? row?.userId ?? null,\n        facilityId: row?.facility_id ?? null,\n        dailyReportId: row?.daily_report_id ?? null,\n        wellId: row?.well_id ?? null,\n        measurementPointId: row?.measurement_point_id ?? null,\n        pitId: row?.pit_id ?? null,\n        originFacilityType: row?.origin_facility_type ?? null,\n        editionNumber: row?.edition_number ?? null,\n        uptTankId: row?.upt_tank_id ?? null,\n        treatmentPlantDynamicStorageTankId:\n          row?.treatment_plant_dynamic_storage_tank_id ?? null,\n        flowStationTankId: row?.flow_station_tank_id ?? null,\n        raw: row ?? {},\n      } as ReportHistoryItem;\n    });\n  });\n\n  const results = await Promise.all(promises);\n  const flattenedReports = results.flat();\n\n  return flattenedReports.sort((a, b) => {\n    const parse = (value?: string, fallback?: string) => {\n      if (value) return dayjs.utc(value).valueOf();\n      if (fallback) return dayjs.utc(`${fallback} 00:00:00`).valueOf();\n      return 0;\n    };\n    const dateB = parse(b.dateCreated, b.dayKey);\n    const dateA = parse(a.dateCreated, a.dayKey);\n    if (dateB === dateA) {\n      return (b.time || \"\").localeCompare(a.time || \"\");\n    }\n    return dateB - dateA;\n  });\n}\n","export * from \"./getReportsHistory\";\nexport * from \"./findReportHistoryTables\";\nexport * from \"./types\";\n","import { TABLE_NAMES } from \"@data-oil-front/core-utils\";\nimport { Dayjs } from \"dayjs\";\n\n// Namespaces for AsyncStorage\nexport const DAILY_REPORT_NAMESPACE = \"dailyReport\";\n\nexport const ALL_REPORT_HISTORY_TABLES = [\n  TABLE_NAMES.DAILY_REPORT_WELL,\n  TABLE_NAMES.DAILY_REPORT_MEASUREMENT_POINT,\n  TABLE_NAMES.DAILY_REPORT_PIT,\n  TABLE_NAMES.DAILY_REPORT_VACUUM_LOAD,\n  TABLE_NAMES.DAILY_REPORT_VACUUM_UNLOAD,\n  TABLE_NAMES.DAILY_REPORT_STORAGE_TANK,\n  TABLE_NAMES.DAILY_REPORT_DYNAMIC_SETTLEMENT_TANK,\n  TABLE_NAMES.DAILY_REPORT_UPT_TANK,\n  TABLE_NAMES.DAILY_REPORT_FLOW_STATION_TANK,\n  TABLE_NAMES.LIFTING_COST,\n  TABLE_NAMES.SHIP_TO_SHIP,\n  TABLE_NAMES.BILLED_RECOVERY_AND_EXPENSES,\n  TABLE_NAMES.OWN_FISCALIZED_PRODUCTION,\n  TABLE_NAMES.THIRD_PARTY_FISCALIZED_PRODUCTION,\n  TABLE_NAMES.MARKET_REFERENCE_PRICE,\n  TABLE_NAMES.COMMENTS_FORM,\n] as const;\n\nexport type ReportHistoryTable = (typeof ALL_REPORT_HISTORY_TABLES)[number];\n\nexport interface GetReportsHistoryOptions {\n  startDate: string | number | Date | Dayjs | null;\n  endDate: string | number | Date | Dayjs | null;\n  installationType?: ReportHistoryTable | null;\n  includeOtherReports?: boolean;\n  signal?: AbortSignal;\n  forceRefresh?: boolean;\n}\n\nexport interface ReportHistoryItem {\n  id: string | number;\n  table: ReportHistoryTable;\n  dateCreated: string;\n  dateDisplay: string;\n  dayKey: string;\n  time: string;\n  creator: string;\n  userId: string | number | null;\n  facilityId?: string | number | null;\n  dailyReportId?: string | number | null;\n  wellId?: string | number | null;\n  measurementPointId?: string | number | null;\n  pitId?: string | number | null;\n  originFacilityType?: string | null;\n  editionNumber?: number | null;\n  uptTankId?: string | number | null;\n  treatmentPlantDynamicStorageTankId?: string | number | null;\n  flowStationTankId?: string | number | null;\n  raw: Record<string, any>;\n}\n","import NetInfo from \"@react-native-community/netinfo\";\nimport { storageService } from \"@data-oil-front/core-host\";\nimport { PurePostResponse } from \"@data-oil-front/core-utils\";\n\nexport type Namespace = \"dailyReport\" | \"ods\";\n\nexport interface FetchWithCacheOptions {\n  ttl?: number; // Time-to-Live in minutes\n  shouldFetch?: boolean; // Force refresh ignoring cache\n  ignoreExpiration?: boolean; // Ignore expiration if offline\n}\n\n/**\n * Standardizes API responses to extract data and throw on errors.\n */\nasync function executeFetch<T>(\n  fetcher: () => Promise<T> | PurePostResponse<T>,\n): Promise<T> {\n  const response = await fetcher();\n\n  if (response && typeof response === \"object\" && \"success\" in response) {\n    if (!(response as any).success) {\n      throw new Error((response as any).message || \"Failed to fetch data\");\n    }\n    return \"data\" in response ? (response as any).data : (response as T);\n  }\n\n  return response as T;\n}\n\n/**\n * Normalizes cache reading for legacy format { success, data }.\n */\nfunction parseCacheValue<T>(value: any): T {\n  if (value && typeof value === \"object\" && \"success\" in value && \"data\" in value) {\n    return value.data as T;\n  }\n  return value as T;\n}\n\n/**\n * Fetch data with robust Cache-Aside and Stale-While-Revalidate (SWR) support.\n *\n * @param namespace - The namespace for storage.\n * @param key - The key for storage.\n * @param fetcher - The function to fetch data.\n * @param options - Cache options (ttl, shouldFetch, ignoreExpiration).\n * @returns The cached data or the fetched data.\n * @throws Error if the device is offline and no cached data is found.\n */\nexport async function fetchWithCache<T>(\n  namespace: Namespace,\n  key: string,\n  fetcher: () => Promise<T> | PurePostResponse<T>,\n  options: FetchWithCacheOptions = {},\n): Promise<T> {\n  const {\n    ttl = process.env.NODE_ENV === \"development\" ? 5 : 30, // default 30 mins\n    shouldFetch = false,\n    ignoreExpiration = true,\n  } = options;\n\n  let isConnected = true;\n  try {\n    const netState = await NetInfo.fetch();\n    isConnected = netState.isConnected ?? true;\n  } catch (error) {\n    if (process.env.NODE_ENV === \"development\") {\n      console.warn(`⚠️ [fetchWithCache] NetInfo check failed for ${namespace}:${key}, assuming online.`, error);\n    }\n  }\n\n  // 1. Force Fetch (e.g. Pull-to-Refresh)\n  if (shouldFetch && isConnected) {\n    if (process.env.NODE_ENV === \"development\") {\n      console.log(`ℹ️ [fetchWithCache] Force fetch requested for ${namespace}:${key}`);\n    }\n    const data = await executeFetch(fetcher);\n    await storageService.set(namespace, key, data, ttl);\n    return data;\n  }\n\n  // 2. Read from Cache\n  const rawCache = await storageService.getRaw<T>(namespace, key);\n  const hasCache = rawCache && rawCache.value !== undefined;\n  \n  // Calculate expiration\n  const isExpired = !rawCache || (rawCache.expiresAt && Date.now() > rawCache.expiresAt);\n\n  // 3. Valid Cache\n  if (hasCache && (!isExpired || (!isConnected && ignoreExpiration))) {\n    if (process.env.NODE_ENV === \"development\") {\n      console.log(`[fetchWithCache] Serving valid cache for ${namespace}:${key}`);\n    }\n    return parseCacheValue<T>(rawCache.value);\n  }\n\n  // 4. Stale Cache -> SWR (Stale-While-Revalidate)\n  if (hasCache && isExpired) {\n    if (isConnected) {\n      if (process.env.NODE_ENV === \"development\") {\n        console.log(`[fetchWithCache] Cache expired for ${namespace}:${key}, stale-while-revalidate triggered`);\n      }\n      executeFetch(fetcher)\n        .then(async (data) => {\n          await storageService.set(namespace, key, data, ttl);\n        })\n        .catch((err) => {\n          if (err.name === \"AbortError\" || err.message?.includes(\"aborted\")) return;\n          if (process.env.NODE_ENV === \"development\") {\n            console.error(`[fetchWithCache] Background fetch failed for ${namespace}:${key}`, err);\n          }\n        });\n    }\n    return parseCacheValue<T>(rawCache.value);\n  }\n\n  // 5. No Cache -> Fetch Online\n  if (isConnected) {\n    if (process.env.NODE_ENV === \"development\") {\n      console.log(`[fetchWithCache] No cache, fetching online for ${namespace}:${key}`);\n    }\n    const data = await executeFetch(fetcher);\n    await storageService.set(namespace, key, data, ttl);\n    return data;\n  }\n\n  // 6. No Cache & Offline -> Throw\n  if (process.env.NODE_ENV === \"development\") {\n    console.error(`[fetchWithCache] Offline and no cache found for ${namespace}:${key}`);\n  }\n  throw new Error(`No cached data found for ${key} and device is offline.`);\n}\n"],"names":["useClientConfig","useConfig","config","defaultConfig","useMemo","configService","getDefaultConfig","useTheme","primaryColor","API_BASE_URL","API_FILE_SERVER","undefined","module","exports","t","i","e","s","f","n","u","prototype","utc","date","args","arguments","this","toDate","locale","$L","add","utcOffset","local","r","parse","$u","$utils","$offset","call","o","init","$d","$y","getUTCFullYear","$M","getUTCMonth","$D","getUTCDate","$W","getUTCDay","$H","getUTCHours","$m","getUTCMinutes","$s","getUTCSeconds","$ms","getUTCMilliseconds","a","_$n","_$s","match","_$f","Math","abs","clone","getTimezoneOffset","$x","$localOffset","h","format","valueOf","isUTC","toISOString","toString","toUTCString","l","c","diff","MODULE_DAILY_REPORT_ROLES","UserRoles","ADMINISTRADOR","ANALISTA_DE_PLANIFICACION","SUPERVISOR_DE_PRODUCCION","OPERADOR_DE_PRODUCCION","MODULE_HISTORY_REPORT_ROLES","GERENTE_DE_PLANIFICACION","filterWellCategoriesForDailyReportDropdown","WELL_CATEGORY_DROPDOWN_ORDER","normalizeWellCategoryName","name","trim","toLowerCase","normalize","replace","MIN_CANONICAL_LEN_FOR_FLEX_MATCH","matchesWellCategoryCanonical","categoryName","canonicalLabel","length","includes","categories","find","cat","used","has","id","canonical","result","push","Set","findWellCategoryIdByCanonicalName","found","String","createFlowStationTankPayload","isEditing","reportId","editionNumber","reportDateTime","nowDate","activityId","userId","tankId","status","sampleTaken","netOperatedProduction","basePairs","tankLevel","rawOperatedProduction","comments","verb","API_VERBS","UPDATE","INSERT","table","TABLE_NAMES","DAILY_REPORT_FLOW_STATION_TANK","fields","map","values","filter","deleteReportHistoryItem","getActivityById","getAllAssociatedStrategies","getAllFlowStations","getAllLocations","getAllPumpingMethods","getAllVacuumLoads","getAllWellCategories","getAllWellClusters","getCachedFlowStationNames","getCachedMeasurementPointsInfo","getCachedPitsInfo","getCachedUptTanksInfo","getDailyReportDynamicSettlementTankById","getDailyReportStorageTankById","getDailyReportUptTankById","getDailyReportWellById","getDriversInfo","getFacilitiesList","getFieldByIdCached","getFieldsByLocationId","getFlowStationByIdCached","getFlowStationNamesByTankIds","getFlowStationTankByIdCached","getFlowStationTanksFiltered","getLocationByIdCached","getMeasurementPointByIdCached","getMeasurementPointsFiltered","getPendingVacuumLoads","getPitByIdCached","getPitsByIds","getPitsFiltered","getReportById","getReportHistoryTables","getTreatmentPlantDynamicStorageTanksFiltered","getTreatmentPlantSystems","getUptTankById","getUptTanksByIds","getUptTanksFiltered","getUserInfoById","getUsersInfoByIds","getVacuumLoadById","getVacuumPlatesInfo","getWellCategoryType","getWellPotentialAndRgp","getWellsFiltered","invalidateFacilitiesListCache","submitReport","submitVacuumLoadReport","NAMESPACE","OTHER_REPORT_HISTORY_TABLES","LIFTING_COST","SHIP_TO_SHIP","BILLED_RECOVERY_AND_EXPENSES","OWN_FISCALIZED_PRODUCTION","THIRD_PARTY_FISCALIZED_PRODUCTION","MARKET_REFERENCE_PRICE","COMMENTS_FORM","options","isAldyl","getCurrentConfig","clientName","includeOtherReports","ALL_REPORT_HISTORY_TABLES","DAILY_REPORT_MEASUREMENT_POINT","DAILY_REPORT_VACUUM_LOAD","post","DELETE","DAILY_REPORT_VACUUM_UNLOAD","Number","storageService","removeByPrefix","DeviceEventEmitter","emit","unloadReportResponse","SELECT","unloadReport","Array","isArray","vacuumLoadId","vacuum_load_id","nowTimestamp","remove","error","Error","message","dayjs","extend","WELLS_ALL_CACHE_KEY","filterWellsInMemory","rows","filters","row","every","field","op","value","rowValue","rowString","valueString","fetchWithCache","LOCATION","console","locationId","FIELD","maybeErrorMeasurement","isCached","location_id","active","payload","WELL_CATEGORY","PUMPING_METHOD","ASSOCIATED_STRATEGY","FLOW_STATION","shouldFetch","forceRefresh","ttl","activeOnly","cacheKey","TREATMENT_PLANT_SYSTEM","TREATMENT_PLANT_DYNAMIC_STORAGE_TANK","maybeError","key","UPT_TANK","PIT","mergeVacuumLoadDetail","fallback","Partial","base","incoming","Object","assign","keys","NetInfo","fetch","isConnected","net","detail","VACUUM_INFO","FACILITIES_LIST_CACHE_KEY","facilitiesListMemoryCache","facilitiesListFetchedAt","facilitiesListInflight","getCachedFacilitiesList","netState","cacheTtlMs","FACILITIES_LIST_DEFAULT_TTL_MS","isOnline","now","Date","cacheIsFresh","cached","get","FacilityListItem","GET_FACILITIES_LIST","set","DRIVERS_INFO","pad2","padStart","d","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","toInt","parseInt","isNaN","toStr","def","toFacilityId","wellId","split","pop","input","ts","fieldsPairs","edition","summary","activity","step4","vacuumPlate","chutoPlate","step5","nationality","driverId","driverName","driverLastName","step3","origin_facility_id","origin_facility_type","origin_facility_type_view","startDate","startTime","initialMeasurement","endDate","endTime","finalMeasurement","volume","fluidType","destination_facility_id","destination_facility_type","destination_facility_type_view","vacuumCondition","excludeOnEdit","pairs","k","submitReportWithOfflineFallback","success","submitVacuumUnloadReport","unloadTable","unloadPairs","step3LoadData","finalDestinationId","unloadPayload","unloadResult","normalizedFilters","allWellsCache","buildWellsCacheKey","join","WELL","wellCategoryId","opt","WELL_CLUSTER","warn","DAILY_REPORT_WELL","getWellByIdCached","well","potencial","rgp","MEASUREMENT_POINT","getEffectiveConfig","url","purePost","FLOW_STATION_TANK","FlowStationTank","getDailyReportFlowStationTankById","DAILY_REPORT_DYNAMIC_SETTLEMENT_TANK","DAILY_REPORT_STORAGE_TANK","getTreatmentPlantDynamicStorageTankById","UptTank","DAILY_REPORT_UPT_TANK","usersInfoMemoryCache","Map","getCachedUsersInfo","userIds","namesMap","missingUserIds","forEach","USER_INFO","user","entra_id","display_name","tanksMemoryCache","getCachedTanksInfo","getTreatmentPlantDynamicStorageTanksByIds","tankIds","missingIds","tank","wellsMemoryCache","getCachedWellsInfo","getWellsByIds","wellIds","measurementPointsMemoryCache","getMeasurementPointsByIds","measurementPointIds","mp","pitsMemoryCache","pitIds","pit","uptTanksMemoryCache","uptTanksFacilityTypeViewsMemoryCache","names","facilityTypeViews","uptTankIds","facilityTypeViewMap","facility_type_view","view","flowStationNamesByTankIdMemoryCache","flowStationTankIds","tankResult","flowStationIds","tankToFlowStationMap","flow_station_id","size","flowStationResult","from","flowStationNames","fs","flowStationId","flowStationName","ACTIVITY","getAssociatedStrategyById","allFlowStations","getDailyReportMeasurementPointById","maybeErrorDetail","cachedDetailWrapper","log","sendReportOnline","ApiPostBody","online","moduleName","inferModuleFromTable","offlineMutationQueueService","saveMutationForLater","onSuccess","offline","onError","offlineError","findReportHistoryTables","ensureDate","start","startOf","end","endOf","tables","installationType","promises","DAILY_REPORT_NAMESPACE","signal","parsed","date_created","dateCreated","creator","created_by","dateKey","isValid","random","slice","dateDisplay","dayKey","time","user_id","facilityId","facility_id","dailyReportId","daily_report_id","well_id","measurementPointId","measurement_point_id","pitId","pit_id","originFacilityType","edition_number","uptTankId","upt_tank_id","treatmentPlantDynamicStorageTankId","treatment_plant_dynamic_storage_tank_id","flowStationTankId","flow_station_tank_id","raw","Promise","all","flat","sort","b","dateB","dateA","localeCompare","DAILY_REPORT_PIT","executeFetch","fetcher","response","data","parseCacheValue","namespace","Namespace","FetchWithCacheOptions","ignoreExpiration","process","rawCache","getRaw","hasCache","isExpired","expiresAt","T","then","catch","err"],"mappings":"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"}