{"version":3,"file":"__federation_expose_LabActiveForm.chunk.bundle","sources":["/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/labReports/src/screens/LabActiveForm.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/labReports/src/screens/LabActiveFormScreen.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/mfe-permissions/src/adapter/parseAccessControl.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/mfe-permissions/src/components/AccessRestricted.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/mfe-permissions/src/components/Can.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/mfe-permissions/src/hooks/useCan.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/mfe-permissions/src/hooks/useCanResolver.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/mfe-permissions/src/index.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/mfe-permissions/src/resolver/canAccess.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/mfe-permissions/src/resolver/resolvePermission.ts"],"sourcesContent":["import React, {\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react';\nimport {\n  View,\n  StyleSheet,\n  ScrollView,\n  Text,\n  TextInput,\n  TouchableOpacity,\n  KeyboardAvoidingView,\n  Platform,\n} from 'react-native';\nimport LinearGradient from 'react-native-linear-gradient';\nimport { useRoute, useNavigation } from '@react-navigation/native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport dayjs from 'dayjs';\nimport { submitReportWithOfflineFallback } from '@data-oil-front/core-reports';\nimport { API_VERBS, TABLE_NAMES } from '@data-oil-front/core-utils';\nimport {\n  DatePicker,\n  TimePicker,\n  NumericField,\n  LoadingSpinner,\n} from '@data-oil-front/ui-mobile';\nimport Toast from 'react-native-toast-message';\nimport { useForm, Controller, useWatch } from 'react-hook-form';\nimport { configService } from '@data-oil-front/core-host';\nimport { useCanResolver } from '@data-oil-front/mfe-permissions';\nimport type { FacilityListItem, LabReport } from '../types/labReports';\nimport {\n  getFacilityName,\n  getInstallationType,\n  getFacilityIdFromActiveReport,\n  resolveFacilityTypeFromTable,\n} from '../utils/labReports.mappers';\nimport {\n  fetchPendingReportById,\n  fetchLabReportById,\n  fetchFacilitiesList,\n  insertLabReportRecord,\n  markReportAsAnalyzed,\n} from '../services/labReports.api';\n\ntype RouteParams = {\n  id?: number | string;\n  table?: string;\n  mode?: 'create' | 'edit';\n  labReportId?: number | string;\n};\n\ninterface LabActiveFormInputs {\n  resultDate: Date | null;\n  resultTime: string;\n  api: string;\n  ays: string;\n  saltAmount: string;\n  comments: string;\n}\n\nconst parseNumberParam = (value: unknown): number | null => {\n  if (value === null || value === undefined) return null;\n  const parsed = Number(value);\n  return Number.isFinite(parsed) ? parsed : null;\n};\n\nexport default function LabActiveForm() {\n  const routeFromHook = useRoute<any>();\n  const navigationFromHook = useNavigation<any>();\n  const params: RouteParams = ((routeFromHook as any)?.params ??\n    (routeFromHook as any)?.route?.params ??\n    {}) as RouteParams;\n  const navigation = navigationFromHook;\n  const can = useCanResolver();\n  const isEditMode = params.mode === 'edit';\n  const reportIdParam = parseNumberParam(params.id);\n  const labReportIdParam = parseNumberParam(params.labReportId);\n  const tableParam = params.table;\n  const [loading, setLoading] = useState(true);\n  const [item, setItem] = useState<LabReport | null>(null);\n  const [facilities, setFacilities] = useState<FacilityListItem[]>([]);\n  const [submitting, setSubmitting] = useState(false);\n  const [permissionDenied, setPermissionDenied] = useState(false);\n  const insets = useSafeAreaInsets();\n  const clientConfig = configService.getCurrentConfig();\n  const accentColor = clientConfig.primaryColor ?? '#2563EB';\n  const initialNowRef = useRef(new Date());\n  const formatTwoDigits = (value: number) => value.toString().padStart(2, '0');\n  const initialTimeRef = useRef(\n    `${formatTwoDigits(initialNowRef.current.getHours())}:${formatTwoDigits(\n      initialNowRef.current.getMinutes(),\n    )}`,\n  );\n\n  const {\n    control,\n    handleSubmit,\n    formState: { isValid },\n    reset,\n  } = useForm<LabActiveFormInputs>({\n    mode: 'onChange',\n    defaultValues: {\n      resultDate: initialNowRef.current,\n      resultTime: initialTimeRef.current,\n      api: '',\n      ays: '',\n      saltAmount: '',\n      comments: '',\n    },\n  });\n  const watchAys = useWatch({ control, name: 'ays' });\n\n  const showToast = useCallback(\n    (\n      message: string,\n      type: 'notification' | 'success' | 'error' = 'notification',\n    ) => {\n      Toast.show({\n        type: type === 'notification' ? 'info' : type,\n        text1: 'Información',\n        text2: message,\n      });\n    },\n    [],\n  );\n\n  const loadData = useCallback(async () => {\n    if (isEditMode && (labReportIdParam === null || labReportIdParam === undefined)) {\n      showToast('Parámetros inválidos para cargar el reporte', 'error');\n      setLoading(false);\n      return;\n    }\n    if (!isEditMode && (reportIdParam === null || reportIdParam === undefined || !tableParam)) {\n      showToast('Parámetros inválidos para cargar el reporte', 'error');\n      setLoading(false);\n      return;\n    }\n    setLoading(true);\n    setPermissionDenied(false);\n    try {\n      const [facilitiesList, report] = await Promise.all([\n        fetchFacilitiesList(),\n        isEditMode\n          ? fetchLabReportById(Number(labReportIdParam))\n          : fetchPendingReportById(tableParam as string, Number(reportIdParam)),\n      ]);\n      setFacilities(facilitiesList);\n      if (!report) {\n        showToast('No se encontró el reporte solicitado.', 'error');\n        setItem(null);\n        return;\n      }\n      if (!can('labReport', 'edit', { user_id: report.user_id })) {\n        setPermissionDenied(true);\n        setItem(null);\n        showToast(\n          'No tenés permisos para cargar el análisis de este reporte.',\n          'error',\n        );\n        return;\n      }\n      setItem(report);\n      const resultDate = report.result_date ? dayjs(report.result_date) : null;\n      const parsedDate = resultDate?.isValid() ? resultDate.toDate() : initialNowRef.current;\n      const parsedTime = resultDate?.isValid()\n        ? `${formatTwoDigits(resultDate.hour())}:${formatTwoDigits(resultDate.minute())}`\n        : initialTimeRef.current;\n      reset({\n        resultDate: parsedDate,\n        resultTime: parsedTime,\n        api: report.api != null ? String(report.api) : '',\n        ays: report.ays != null ? String(report.ays) : '',\n        saltAmount: report.salt_amount != null ? String(report.salt_amount) : '',\n        comments: report.comments ?? '',\n      });\n    } catch (error) {\n      showToast('Error al cargar los datos del reporte.', 'error');\n      setItem(null);\n    } finally {\n      setLoading(false);\n    }\n  }, [isEditMode, labReportIdParam, reportIdParam, reset, showToast, tableParam, can]);\n\n  useEffect(() => {\n    loadData();\n  }, [loadData]);\n\n  const facilityTypeView = useMemo(() => {\n    if (!item) return null;\n    const resolved = getFacilityIdFromActiveReport(item, facilities);\n    if (resolved) return resolved;\n    const fallbackType = resolveFacilityTypeFromTable(tableParam ?? 'facility');\n    return `${fallbackType || 'facility'}_0`;\n  }, [item, facilities, tableParam]);\n\n  const facilityName = useMemo(() => {\n    if (!facilityTypeView) return 'N/A';\n    return getFacilityName(facilityTypeView, facilities);\n  }, [facilityTypeView, facilities]);\n\n  const installationType = useMemo(() => {\n    if (!item) return 'N/A';\n    return getInstallationType(item);\n  }, [item]);\n\n  const handleSave = useCallback(\n    async (values: LabActiveFormInputs) => {\n      if (!item || !tableParam) {\n        if (isEditMode && item) {\n          // Edit mode does not need table from daily report.\n        } else {\n        showToast('No se pudo determinar el reporte a actualizar.', 'error');\n        return;\n        }\n      }\n      if (!can('labReport', 'edit', { user_id: item.user_id })) {\n        setPermissionDenied(true);\n        showToast(\n          'No tenés permisos para cargar el análisis de este reporte.',\n          'error',\n        );\n        return;\n      }\n      setSubmitting(true);\n      try {\n        const selectedDate = values.resultDate ?? new Date();\n        const [hours = '00', minutes = '00'] = (values.resultTime || '').split(\n          ':',\n        );\n        const pad = (val: string) =>\n          formatTwoDigits(Math.max(0, Math.min(59, Number(val) || 0)));\n        const hh = pad(hours);\n        const mm = pad(minutes);\n        const resultDateTime = `${selectedDate.getFullYear()}-${formatTwoDigits(\n          selectedDate.getMonth() + 1,\n        )}-${formatTwoDigits(selectedDate.getDate())} ${hh}:${mm}:00`;\n        const now = dayjs().format('YYYY-MM-DD HH:mm:ss');\n\n        if (isEditMode) {\n          const updateLabResponse = await submitReportWithOfflineFallback(\n            TABLE_NAMES.LAB_REPORT,\n            {\n              verb: API_VERBS.UPDATE,\n              table: TABLE_NAMES.LAB_REPORT,\n              fields: [\n                'date_updated',\n                'edition_number',\n                'result_date',\n                'api',\n                'ays',\n                'salt_amount',\n                'comments',\n              ],\n              values: [\n                now,\n                typeof item.edition_number === 'number'\n                  ? item.edition_number + 1\n                  : 1,\n                resultDateTime,\n                values.api ? Number(values.api) : null,\n                values.ays ? Number(values.ays) : null,\n                values.saltAmount ? Number(values.saltAmount) : null,\n                values.comments?.trim() ? values.comments.trim() : null,\n              ],\n              filter: [['id', '=', Number(item.id)]],\n            } as any,\n          );\n          if (!updateLabResponse.success) {\n            throw new Error(\n              updateLabResponse.message || 'Error al actualizar el reporte',\n            );\n          }\n          showToast('Reporte actualizado correctamente.', 'success');\n        } else {\n          const facilityType = resolveFacilityTypeFromTable(tableParam as string);\n          const insertResponse = await insertLabReportRecord({\n            date_created: now,\n            date_updated: now,\n            edition_number: 1,\n            activity_id: item.activity_id,\n            user_id: item.user_id,\n            facility_id: 0,\n            facility_type: facilityType,\n            facility_type_view: facilityTypeView ?? `${facilityType}_0`,\n            daily_report_id: item.id,\n            result_date: resultDateTime,\n            api: values.api ? Number(values.api) : null,\n            ays: values.ays ? Number(values.ays) : null,\n            salt_amount: values.saltAmount ? Number(values.saltAmount) : null,\n            comments: values.comments?.trim() ? values.comments.trim() : null,\n          });\n          if (!insertResponse.success) {\n            throw new Error(\n              insertResponse.message || 'Error al guardar el resultado',\n            );\n          }\n          const updateResponse = await markReportAsAnalyzed(tableParam as string, item.id);\n          if (!updateResponse.success) {\n            throw new Error(\n              updateResponse.message || 'Error al actualizar el estado',\n            );\n          }\n          showToast('Resultado guardado correctamente.', 'success');\n        }\n        setTimeout(() => {\n          navigation.navigate?.('LabReportsHome');\n        }, 1500);\n      } catch (error) {\n        console.error('Error al guardar el resultado:', error);\n        showToast('Ocurrió un error al guardar el resultado.', 'error');\n      } finally {\n        setSubmitting(false);\n      }\n    },\n    [facilityTypeView, isEditMode, item, navigation, showToast, tableParam, can],\n  );\n\n  if (loading) {\n    return (\n      <View style={styles.center}>\n        <LoadingSpinner size=\"large\" color={accentColor} />\n        <Text style={styles.loadingText}>Cargando reporte...</Text>\n      </View>\n    );\n  }\n\n  if (permissionDenied) {\n    return (\n      <View style={styles.center}>\n        <Text style={styles.emptyIcon}>🔒</Text>\n        <Text style={styles.emptyTitle}>Acceso restringido</Text>\n        <Text style={styles.emptyText}>\n          Solo la persona que creó el reporte puede cargar el análisis.\n        </Text>\n        <TouchableOpacity\n          style={[styles.backButtonBase, styles.secondaryButton, styles.backButton]}\n          onPress={() => navigation.goBack?.()}\n        >\n          <Text style={styles.secondaryButtonText}>Volver</Text>\n        </TouchableOpacity>\n      </View>\n    );\n  }\n\n  if (!item) {\n    return (\n      <View style={styles.center}>\n        <Text style={styles.emptyIcon}>🧪</Text>\n        <Text style={styles.emptyTitle}>No se encontró el reporte</Text>\n        <Text style={styles.emptyText}>Intenta nuevamente desde la lista.</Text>\n      </View>\n    );\n  }\n\n  return (\n    <KeyboardAvoidingView\n      style={styles.screen}\n      behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n      keyboardVerticalOffset={70}\n    >\n      <ScrollView\n        style={styles.container}\n        contentContainerStyle={{ paddingBottom: insets.bottom }}\n      >\n        <LinearGradient\n          colors={['#2563EB', '#9333EA']}\n          start={{ x: 0, y: 0 }}\n          end={{ x: 1, y: 1 }}\n          style={styles.hero}\n        >\n          <Text style={styles.heroTitle}>\n            {isEditMode ? 'Editar resultados' : 'Cargar resultados'}\n          </Text>\n          <Text style={styles.heroSubtitle}>\n            Reporte #{item.id} • {installationType}\n          </Text>\n          <Text style={styles.heroLine}>{facilityName}</Text>\n          <Text style={styles.heroLine}>\n            Reporte generado el:{' '}\n            {item?.date_created\n              ? dayjs(item.date_created).format('DD/MM/YYYY HH:mm')\n              : 'N/A'}\n          </Text>\n        </LinearGradient>\n\n        <View style={styles.block}>\n          <Text style={styles.blockTitle}>Fecha y hora del resultado</Text>\n          <View style={styles.row}>\n            <View style={styles.flex1}>\n              <Controller\n                control={control}\n                name=\"resultDate\"\n                rules={{ required: true }}\n                render={({ field: { value, onChange } }) => (\n                  <DatePicker\n                    label=\"Fecha\"\n                    value={value}\n                    onChange={onChange}\n                    required\n                  />\n                )}\n              />\n            </View>\n            <View style={styles.spacer} />\n            <View style={styles.flex1}>\n              <Controller\n                control={control}\n                name=\"resultTime\"\n                render={({ field: { value, onChange } }) => (\n                  <TimePicker\n                    label=\"Hora\"\n                    value={value}\n                    onChange={onChange}\n                    required\n                  />\n                )}\n              />\n            </View>\n          </View>\n        </View>\n\n        <View style={styles.block}>\n          <Text style={styles.blockTitle}>Resultados</Text>\n          <Controller\n            control={control}\n            name=\"api\"\n            render={({ field: { value, onChange } }) => (\n              <NumericField label=\"°API\" value={value} onChange={onChange} />\n            )}\n          />\n          <View style={styles.fieldSpacer} />\n          <Controller\n            control={control}\n            name=\"ays\"\n            rules={{ required: true }}\n            render={({ field: { value, onChange } }) => (\n              <NumericField\n                label=\"% AyS\"\n                value={value}\n                onChange={onChange}\n                required\n              />\n            )}\n          />\n          {!watchAys ? (\n            <Text style={styles.errorText}>Este campo es obligatorio</Text>\n          ) : null}\n          <View style={styles.fieldSpacer} />\n          <Controller\n            control={control}\n            name=\"saltAmount\"\n            render={({ field: { value, onChange } }) => (\n              <NumericField\n                label=\"Cantidad de Sal (PTB)\"\n                value={value}\n                onChange={onChange}\n              />\n            )}\n          />\n          <View style={styles.fieldSpacer} />\n          <Controller\n            control={control}\n            name=\"comments\"\n            render={({ field: { value, onChange } }) => (\n              <View>\n                <Text style={styles.label}>Comentarios</Text>\n                <TextInput\n                  style={styles.textArea}\n                  value={value}\n                  onChangeText={onChange}\n                  placeholder=\"Escribe comentarios adicionales\"\n                  multiline\n                  numberOfLines={4}\n                />\n              </View>\n            )}\n          />\n        </View>\n      </ScrollView>\n\n      <View style={[styles.footer]}>\n        <TouchableOpacity\n          style={[styles.button, styles.secondaryButton]}\n          onPress={() => navigation.goBack?.()}\n          disabled={submitting}\n        >\n          <Text style={styles.secondaryButtonText}>Cancelar</Text>\n        </TouchableOpacity>\n        <TouchableOpacity\n          style={[\n            styles.button,\n            styles.primaryButton,\n            {\n              backgroundColor: accentColor,\n              opacity: submitting || !isValid ? 0.7 : 1,\n            },\n          ]}\n          onPress={handleSubmit(handleSave)}\n          disabled={submitting || !isValid}\n        >\n          <Text style={styles.primaryButtonText}>\n            {submitting ? 'Guardando...' : 'Guardar'}\n          </Text>\n        </TouchableOpacity>\n      </View>\n    </KeyboardAvoidingView>\n  );\n}\n\nconst styles = StyleSheet.create({\n  screen: { flex: 1, backgroundColor: '#F3F4F6' },\n  container: { flex: 1, padding: 16, paddingBottom: 0 },\n  center: {\n    flex: 1,\n    alignItems: 'center',\n    justifyContent: 'center',\n    backgroundColor: '#FFFFFF',\n    gap: 12,\n  },\n  loadingText: { color: '#6B7280' },\n  emptyIcon: { fontSize: 48 },\n  emptyTitle: { fontSize: 16, color: '#374151', fontWeight: '600' },\n  emptyText: {\n    fontSize: 14,\n    color: '#6B7280',\n    textAlign: 'center',\n    paddingHorizontal: 24,\n  },\n  hero: {\n    borderRadius: 20,\n    padding: 20,\n    marginBottom: 16,\n  },\n  heroTitle: { color: '#fff', fontSize: 24, fontWeight: '800' },\n  heroSubtitle: { color: '#DBEAFE', fontSize: 16, marginTop: 6 },\n  heroLine: { color: '#BFDBFE', fontSize: 14, marginTop: 4 },\n  block: {\n    backgroundColor: '#fff',\n    borderRadius: 14,\n    padding: 16,\n    marginBottom: 16,\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n  },\n  blockTitle: {\n    fontSize: 14,\n    fontWeight: '700',\n    color: '#111827',\n    marginBottom: 12,\n  },\n  row: { flexDirection: 'row', alignItems: 'center' },\n  flex1: { flex: 1 },\n  spacer: { width: 12 },\n  fieldSpacer: { height: 16 },\n  errorText: { color: '#DC2626', fontSize: 12, marginTop: 4 },\n  label: { fontSize: 14, color: '#6B7280', marginBottom: 6 },\n  textArea: {\n    borderWidth: 1,\n    borderColor: '#D1D5DB',\n    borderRadius: 10,\n    minHeight: 96,\n    padding: 12,\n    backgroundColor: '#FFFFFF',\n    textAlignVertical: 'top',\n  },\n  footer: {\n    flexDirection: 'row',\n    paddingHorizontal: 16,\n    paddingVertical: 12,\n    gap: 12,\n    backgroundColor: '#FFFFFF',\n    borderTopWidth: 1,\n    borderTopColor: '#E5E7EB',\n  },\n  button: {\n    flex: 1,\n    borderRadius: 12,\n    paddingVertical: 14,\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  backButtonBase: {\n    borderRadius: 12,\n    paddingVertical: 14,\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  primaryButton: {\n    shadowColor: '#0F172A',\n    shadowOpacity: 0.15,\n    shadowRadius: 6,\n    shadowOffset: { width: 0, height: 3 },\n  },\n  primaryButtonText: { color: '#FFFFFF', fontSize: 16, fontWeight: '700' },\n  secondaryButton: {\n    borderWidth: 1,\n    borderColor: '#9CA3AF',\n    backgroundColor: '#FFFFFF',\n  },\n  secondaryButtonText: {\n    color: '#111827',\n    fontSize: 16,\n    fontWeight: '600',\n  },\n  backButton: {\n    marginTop: 12,\n    minWidth: 140,\n    paddingHorizontal: 24,\n    alignSelf: 'center',\n    flexGrow: 0,\n    flexShrink: 1,\n  },\n});\n","import LabActiveFormComponent from './LabActiveForm';\n\nexport default function LabActiveFormScreen(props: any) {\n  return <LabActiveFormComponent {...props} />;\n}\n","import type { Action, Scope } from \"../types/raw\";\nimport type {\n  InternalAccessControl,\n  NormalizedRole,\n  NormalizedResource,\n} from \"../types/internal\";\n\nconst ACTIONS: readonly Action[] = [\"view\", \"create\", \"edit\", \"delete\"];\n\nconst denyAll = (): NormalizedResource => ({\n  view: \"none\",\n  create: \"none\",\n  edit: \"none\",\n  delete: \"none\",\n});\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isScope = (value: unknown): value is Scope =>\n  value === \"all\" || value === \"own\" || value === \"none\";\n\nconst parseResource = (raw: unknown): NormalizedResource => {\n  const result = denyAll();\n  if (!isPlainObject(raw)) return result;\n  for (const action of ACTIONS) {\n    const candidate = raw[action];\n    if (isScope(candidate)) {\n      result[action] = candidate;\n    }\n  }\n  return result;\n};\n\nconst parseRole = (rawRole: Record<string, unknown>): NormalizedRole => {\n  const resources = new Map<string, NormalizedResource>();\n  let wildcard: NormalizedResource | null = null;\n  let isAdmin = false;\n\n  for (const [key, value] of Object.entries(rawRole)) {\n    if (key === \"*\") {\n      if (value === \"all\") {\n        isAdmin = true;\n        continue;\n      }\n      wildcard = parseResource(value);\n      continue;\n    }\n    resources.set(key, parseResource(value));\n  }\n\n  return {\n    isAdmin,\n    resources,\n    wildcard: wildcard ?? denyAll(),\n  };\n};\n\n/**\n * Normalizes raw `CORE_CONFIG.accessControl` JSON into a typed internal model.\n *\n * Returns `null` if the basic shape is invalid (`ownerField` missing or not a string,\n * `roles` missing or not an object). The resolver treats `null` as deny-all (fail-closed).\n *\n * Individual roles with invalid shape are silently discarded (skipping one does not\n * compromise the others). Resources with missing actions are filled with `\"none\"`.\n *\n * The only package entry point aware of the external JSON shape. If a second shape\n * appears in the future for another flavor, this is the only file that changes.\n *\n * @param raw The raw JSON to normalize, typically `CORE_CONFIG.accessControl`.\n * @returns The normalized internal model, or `null` if the basic shape is invalid.\n */\nexport const parseAccessControl = (\n  raw: unknown,\n): InternalAccessControl | null => {\n  if (!isPlainObject(raw)) return null;\n\n  const { ownerField, roles } = raw;\n  if (typeof ownerField !== \"string\" || ownerField.length === 0) return null;\n  if (!isPlainObject(roles)) return null;\n\n  const normalizedRoles = new Map<string, NormalizedRole>();\n  for (const [roleName, rawRole] of Object.entries(roles)) {\n    if (!isPlainObject(rawRole)) continue;\n    normalizedRoles.set(roleName, parseRole(rawRole));\n  }\n\n  return {\n    ownerField,\n    roles: normalizedRoles,\n  };\n};\n","import React from \"react\";\nimport { StyleSheet, Text, View } from \"react-native\";\n\nexport interface AccessRestrictedProps {\n  /** Mensaje custom; si se omite, se muestra uno genérico. */\n  message?: string;\n  /** Título principal; default: \"Acceso restringido\". */\n  title?: string;\n}\n\n/**\n * Pantalla genérica para deep links a MFEs sin permiso.\n *\n * Pensada para usarse como fallback de `<Can>` o como early return de un navigator\n * cuando un `useCan` o `useCanResolver` devuelve `false` a nivel screen.\n */\nexport function AccessRestricted({\n  title = \"Acceso restringido\",\n  message = \"No tenés permisos para acceder a esta sección.\",\n}: AccessRestrictedProps): React.ReactElement {\n  return (\n    <View style={styles.container}>\n      <Text style={styles.icon}>🔒</Text>\n      <Text style={styles.title}>{title}</Text>\n      <Text style={styles.message}>{message}</Text>\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    flex: 1,\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    padding: 24,\n    backgroundColor: \"#f9fafb\",\n  },\n  icon: { fontSize: 56, marginBottom: 16 },\n  title: { fontSize: 20, fontWeight: \"700\", color: \"#111827\", marginBottom: 8 },\n  message: { fontSize: 15, color: \"#6B7280\", textAlign: \"center\" },\n});\n","import React from \"react\";\nimport { useCan } from \"../hooks/useCan\";\nimport type { Action } from \"../types/raw\";\n\nexport interface CanProps {\n  resource: string;\n  action: Action;\n  record?: Record<string, unknown>;\n  /** Contenido a renderizar si el usuario PUEDE realizar la acción. */\n  children: React.ReactNode;\n  /** Opcional. Contenido a renderizar si el usuario NO puede. Por defecto, no se renderiza nada. */\n  fallback?: React.ReactNode;\n}\n\n/**\n * Wrapper declarativo de `useCan`. Renderiza `children` solo si el usuario puede\n * realizar la acción; sino, renderiza `fallback` (o nada).\n *\n * Útil para visibilidad condicional de botones, secciones y rutas:\n *\n * ```tsx\n * <Can resource=\"report\" action=\"delete\" record={report}>\n *   <DeleteButton onPress={...} />\n * </Can>\n * ```\n */\nexport function Can({\n  resource,\n  action,\n  record,\n  children,\n  fallback = null,\n}: CanProps): React.ReactElement | null {\n  const allowed = useCan(resource, action, record);\n  return <>{allowed ? children : fallback}</>;\n}\n","import { useAuth, useConfig } from \"@data-oil-front/core-host\";\nimport { resolvePermission } from \"../resolver/resolvePermission\";\nimport type { Action } from \"../types/raw\";\n\n/**\n * Hook React para chequear si el usuario actual puede realizar `action` sobre `resource`.\n *\n * Re-evalúa automáticamente cuando cambia el config (vía `useSyncExternalStore`\n * dentro de `useConfig`) o el usuario (vía `AuthContext`). Cero infraestructura\n * adicional necesaria — solo importarlo desde un MFE.\n *\n * @param resource Nombre del recurso tal como aparece en `accessControl.roles[role][resource]`.\n * @param action  `\"view\" | \"create\" | \"edit\" | \"delete\"`.\n * @param record  Opcional. Objeto que contiene el campo de ownership configurado\n *                en `accessControl.ownerField`. Necesario solo cuando el scope es `\"own\"`.\n * @returns `true` si el usuario puede; `false` si no, o si todavía estamos hidratando.\n */\nexport function useCan(\n  resource: string,\n  action: Action,\n  record?: Record<string, unknown>,\n): boolean {\n  const { config, hydrated, status } = useConfig();\n  const { user } = useAuth();\n\n  const rawAccessControl = (\n    config as { CORE_CONFIG?: { accessControl?: unknown } }\n  ).CORE_CONFIG?.accessControl;\n\n  return resolvePermission({\n    rawAccessControl,\n    user,\n    hydrated,\n    status,\n    resource,\n    action,\n    record,\n  });\n}\n","import { useAuth, useConfig } from \"@data-oil-front/core-host\";\nimport { useCallback, useMemo } from \"react\";\nimport { parseAccessControl } from \"../adapter/parseAccessControl\";\nimport { canAccess } from \"../resolver/canAccess\";\nimport type { Action } from \"../types/raw\";\n\nexport type CanCheck = (\n  resource: string,\n  action: Action,\n  record?: Record<string, unknown>,\n) => boolean;\n\n/**\n * Variante de `useCan` que devuelve una función reutilizable.\n *\n * Útil cuando hay que chequear permisos sobre múltiples records en iteración\n * (por ejemplo, dentro de un `.map()` o un helper que arma acciones por fila).\n * Las reglas de hooks de React prohíben llamar a `useCan` adentro de un loop —\n * en esos casos, llamá a `useCanResolver` UNA vez a top-level y reusá la función\n * devuelta por cada item.\n *\n * El parseo del `accessControl` se memoiza por referencia del config, así que\n * iterar sobre cientos de records solo paga el cost del lookup en los Maps internos.\n *\n * Fail-closed bajo los mismos guards que `useCan` (config no hidratado, status no\n * success, usuario null, o accessControl no parseable).\n */\nexport function useCanResolver(): CanCheck {\n  const { config, hydrated, status } = useConfig();\n  const { user } = useAuth();\n\n  const accessControl = useMemo(() => {\n    const raw = (config as { CORE_CONFIG?: { accessControl?: unknown } })\n      .CORE_CONFIG?.accessControl;\n    return parseAccessControl(raw);\n  }, [config]);\n\n  return useCallback(\n    (resource, action, record) => {\n      if (!hydrated || status !== \"success\" || !user || !accessControl) {\n        return false;\n      }\n      return canAccess({\n        accessControl,\n        userRoles: user.roles.flatMap((r) => r.tags.map((t) => t.tag_name)),\n        userId: user.id,\n        resource,\n        action,\n        record,\n      });\n    },\n    [accessControl, hydrated, status, user],\n  );\n}\n","// @data-oil-front/mfe-permissions — public barrel.\n// IMPORTANTE: este paquete NO se importa desde el host ni desde core-host.\n// Ver README.md para el detalle de la regla y los guardrails.\n\nexport type {\n  Action,\n  Scope,\n  RawAccessControl,\n  RawRole,\n  RawResource,\n  RawRoleValue,\n} from \"./types/raw\";\n\nexport { useCan } from \"./hooks/useCan\";\nexport { useCanResolver, type CanCheck } from \"./hooks/useCanResolver\";\nexport { Can, type CanProps } from \"./components/Can\";\nexport {\n  AccessRestricted,\n  type AccessRestrictedProps,\n} from \"./components/AccessRestricted\";\n","import type { Action } from \"../types/raw\";\nimport type { InternalAccessControl } from \"../types/internal\";\n\nexport interface CanAccessArgs {\n  accessControl: InternalAccessControl;\n  userRoles: string[];\n  userId: string;\n  resource: string;\n  action: Action;\n  record?: Record<string, unknown>;\n}\n\n/**\n * Resolver puro de permisos. Determina si un usuario con uno o más roles puede\n * realizar `action` sobre `resource`, opcionalmente teniendo en cuenta la ownership\n * de un `record`.\n *\n * Reglas:\n * - Multi-rol: el resolver itera todos los roles del usuario. Si cualquiera habilita\n *   la acción, devuelve `true` (más permisivo gana). El orden no importa.\n * - Rol con `isAdmin: true` (atajo `\"*\": \"all\"`) → fast-path: retorna `true` inmediatamente.\n * - Resource no listado en el rol → cae al `wildcard` del rol.\n * - Scope `\"all\"` → permite.\n * - Scope `\"own\"` → permite solo si `record[ownerField] === userId`. Sin `record`, deniega\n *   (no se puede determinar ownership).\n * - Scope `\"none\"` → deniega para ese rol, pero otro rol del usuario podría habilitar.\n * - Rol no listado en `accessControl.roles` → se ignora (no contribuye al OR).\n *\n * Función pura, sin efectos. No depende de React ni del runtime — testeable en aislamiento.\n */\nexport const canAccess = ({\n  accessControl,\n  userRoles,\n  userId,\n  resource,\n  action,\n  record,\n}: CanAccessArgs): boolean => {\n  for (const roleName of userRoles) {\n    const role = accessControl.roles.get(roleName);\n    if (!role) continue;\n\n    if (role.isAdmin) return true;\n\n    const resourceConfig = role.resources.get(resource) ?? role.wildcard;\n    const scope = resourceConfig[action];\n\n    if (scope === \"all\") return true;\n    if (scope === \"own\") {\n      if (!record) continue;\n      if (record[accessControl.ownerField] === userId) return true;\n    }\n  }\n  return false;\n};\n","import type { useAuth } from \"@data-oil-front/core-host\";\nimport { parseAccessControl } from \"../adapter/parseAccessControl\";\nimport { canAccess } from \"./canAccess\";\nimport type { Action } from \"../types/raw\";\n\nexport type ConfigStatus = \"idle\" | \"loading\" | \"success\" | \"error\";\n\n// El barrel de `core-host` hoy no re-exporta `User` directamente.\n// Derivamos el tipo via inferencia del retorno público de `useAuth` para no depender\n// de paths internos del package.\nexport type AuthUser = NonNullable<ReturnType<typeof useAuth>[\"user\"]>;\n\nexport interface ResolvePermissionArgs {\n  rawAccessControl: unknown;\n  user: AuthUser | null;\n  hydrated: boolean;\n  status: ConfigStatus;\n  resource: string;\n  action: Action;\n  record?: Record<string, unknown>;\n}\n\n/**\n * Lógica pura del hook `useCan`, extraída para poder testearse sin React.\n *\n * Aplica los siguientes guards en orden, fail-closed:\n * 1. Config no hidratado → false (estamos arrancando, no sabemos qué permisos hay).\n * 2. Config con status distinto a \"success\" → false (fetch fallido o en curso).\n * 3. Usuario null → false (logueado fuera, no hay quién pueda hacer nada).\n * 4. accessControl no parseable → false (JSON inválido del backend).\n *\n * Si todos los guards pasan, delega en `canAccess`.\n */\nexport function resolvePermission({\n  rawAccessControl,\n  user,\n  hydrated,\n  status,\n  resource,\n  action,\n  record,\n}: ResolvePermissionArgs): boolean {\n  if (!hydrated) return false;\n  if (status !== \"success\") return false;\n  if (!user) return false;\n\n  const accessControl = parseAccessControl(rawAccessControl);\n  if (!accessControl) return false;\n\n  return canAccess({\n    accessControl,\n    userRoles: user.roles.flatMap((r) => r.tags.map((t) => t.tag_name)),\n    userId: user.id,\n    resource,\n    action,\n    record,\n  });\n}\n"],"names":["React","useCallback","useEffect","useMemo","useRef","useState","View","StyleSheet","ScrollView","Text","TextInput","TouchableOpacity","KeyboardAvoidingView","Platform","LinearGradient","useRoute","useNavigation","useSafeAreaInsets","dayjs","submitReportWithOfflineFallback","API_VERBS","TABLE_NAMES","DatePicker","TimePicker","NumericField","LoadingSpinner","Toast","useForm","Controller","useWatch","configService","useCanResolver","getFacilityName","getInstallationType","getFacilityIdFromActiveReport","resolveFacilityTypeFromTable","fetchPendingReportById","fetchLabReportById","fetchFacilitiesList","insertLabReportRecord","markReportAsAnalyzed","RouteParams","id","table","mode","labReportId","LabActiveFormInputs","resultDate","Date","resultTime","api","ays","saltAmount","comments","parseNumberParam","value","undefined","parsed","Number","isFinite","LabActiveForm","routeFromHook","navigationFromHook","params","route","navigation","can","isEditMode","reportIdParam","labReportIdParam","tableParam","loading","setLoading","item","setItem","LabReport","facilities","setFacilities","FacilityListItem","submitting","setSubmitting","permissionDenied","setPermissionDenied","insets","clientConfig","getCurrentConfig","accentColor","primaryColor","initialNowRef","formatTwoDigits","toString","padStart","initialTimeRef","current","getHours","getMinutes","control","handleSubmit","formState","isValid","reset","defaultValues","watchAys","name","showToast","message","type","show","text1","text2","loadData","facilitiesList","report","Promise","all","user_id","result_date","parsedDate","toDate","parsedTime","hour","minute","String","salt_amount","error","facilityTypeView","resolved","fallbackType","facilityName","installationType","handleSave","values","selectedDate","hours","minutes","split","pad","val","Math","max","min","hh","mm","resultDateTime","getFullYear","getMonth","getDate","now","format","updateLabResponse","LAB_REPORT","verb","UPDATE","fields","edition_number","trim","filter","success","Error","facilityType","insertResponse","date_created","date_updated","activity_id","facility_id","facility_type","facility_type_view","daily_report_id","updateResponse","setTimeout","navigate","console","styles","center","loadingText","emptyIcon","emptyTitle","emptyText","backButtonBase","secondaryButton","backButton","goBack","secondaryButtonText","screen","OS","container","paddingBottom","bottom","x","y","hero","heroTitle","heroSubtitle","heroLine","block","blockTitle","row","flex1","required","field","onChange","spacer","fieldSpacer","errorText","label","textArea","footer","button","primaryButton","backgroundColor","opacity","primaryButtonText","create","flex","padding","alignItems","justifyContent","gap","color","fontSize","fontWeight","textAlign","paddingHorizontal","borderRadius","marginBottom","marginTop","borderWidth","borderColor","flexDirection","width","height","minHeight","textAlignVertical","paddingVertical","borderTopWidth","borderTopColor","shadowColor","shadowOpacity","shadowRadius","shadowOffset","minWidth","alignSelf","flexGrow","flexShrink","LabActiveFormComponent","LabActiveFormScreen","props","ACTIONS","Action","denyAll","NormalizedResource","view","edit","delete","isPlainObject","Record","Array","isArray","isScope","Scope","parseResource","raw","result","action","candidate","parseRole","rawRole","NormalizedRole","resources","Map","wildcard","isAdmin","key","Object","entries","set","parseAccessControl","InternalAccessControl","ownerField","roles","length","normalizedRoles","roleName","AccessRestricted","title","AccessRestrictedProps","ReactElement","icon","useCan","Can","resource","record","children","fallback","CanProps","allowed","useAuth","useConfig","resolvePermission","config","hydrated","status","user","rawAccessControl","CORE_CONFIG","accessControl","canAccess","CanCheck","userRoles","flatMap","r","tags","map","t","tag_name","userId","CanAccessArgs","role","get","resourceConfig","scope","ResolvePermissionArgs"],"mappings":"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"}