> ## Documentation Index
> Fetch the complete documentation index at: https://muveya.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Operaciones en la app Android

> Escanea una caja o un código de proveedor, registra un uso, traslada una caja y recibe una entrega desde la app Android de muveya, con cada etiqueta, regla y mensaje.

Esta página describe cada tarea de la app Android de muveya, paso a paso, con las etiquetas tal como la app las muestra en español. Para instalar la app, iniciar sesión y elegir tu clínica dental, consulta [App Android](/docs/es/android/overview).

La app actúa con la misma sesión, los mismos permisos y el mismo acceso a bodegas que la consola, y muveya vuelve a revisar cada acción en el servidor. Los movimientos que registra son los mismos que registra la consola y aparecen en el historial de la caja en la consola.

## Permisos de un vistazo

| Tarea | Permiso | Etiqueta en la consola |
| - | - | - |
| Escanear la etiqueta de una caja y ver la caja | `inventory.read` | **Ver inventario** |
| Registrar un uso | `inventory.consume` o `inventory.adjust`, más `inventory.read` | **Registrar consumo** o **Ajustar y contar stock**, más **Ver inventario** |
| Trasladar una caja | `inventory.transfer` o `inventory.adjust`, más `inventory.read` | **Trasladar cajas entre bodegas** o **Ajustar y contar stock**, más **Ver inventario** |
| Recibir una entrega con GS1 DataMatrix o por nombre | `inventory.receive` o `inventory.adjust` | **Recibir entregas** o **Ajustar y contar stock** |
| Recibir escaneando cualquier otro código de barras del proveedor | `inventory.receive` o `inventory.adjust`, más `inventory.read` | Lo mismo, más **Ver inventario** |

Cada tarea también necesita acceso a las bodegas involucradas. Una caja de una bodega fuera de tu acceso se trata como si no existiera. Consulta [Roles y permisos](/docs/es/account/roles-and-permissions).

## Cómo se comportan las pantallas

* **Volver**, arriba a la izquierda, o el gesto de retroceso del teléfono regresan un paso: de **Registrar uso** o **Trasladar caja** a la caja, y de cualquier otra pantalla a **Inicio**. **Menú** y luego **Inicio** llevan directo a **Inicio**.
* Mientras la app espera a muveya, muestra **Procesando…** e ignora un segundo toque del mismo botón.
* Un problema aparece en un recuadro arriba de la pantalla, con **Cerrar**. Cuando muveya rechaza una acción, la app muestra la explicación de muveya en el idioma de la app (consulta **Mensajes de muveya** al final de esta página).
* Cada acción necesita conexión. Sin conexión, la app muestra **Sin conexión. Revisa la red e intenta de nuevo.**

## Escanear o escribir un código

**Quién puede hacerlo:** cualquier persona con al menos un permiso de inventario (`inventory.read`, `inventory.receive`, `inventory.consume`, `inventory.transfer` o `inventory.adjust`). Sin ninguno, **Inicio** muestra **Tu acceso en esta organización no incluye inventario. Pídelo a un administrador.**

**Dónde:** **Inicio**.

<Steps>
  <Step title="Escanea">
    Presiona **Escanear código** (**La etiqueta de una caja o el código de barras del proveedor.**). El escáner de códigos de Google se abre en pantalla completa. Apunta a la etiqueta de una caja, a un código de barras de producto o a un GS1 DataMatrix; hace zoom por sí solo. Cerrar el escáner sin leer nada no cambia nada.
  </Step>

  <Step title="O escríbelo">
    Escribe el código en **O escribe el código** (hasta 64 caracteres) y presiona **Buscar** o la tecla de búsqueda del teclado.
  </Step>

  <Step title="Mira adónde te lleva el código">
    La app abre la caja, el formulario de recepción, una elección entre insumos o **Código no reconocido**, como se explica abajo.
  </Step>
</Steps>

El mismo escáner se abre desde **Escanear otro código** en la pantalla de la caja y en **Código no reconocido**, y desde **Recibir otro** después de una recepción.

### Qué hace la app con un código

```mermaid theme={null}
flowchart TD
  A[Código escaneado o escrito] --> B{¿GS1 DataMatrix?}
  B -- No --> C{¿Una caja de tus bodegas tiene este código?}
  C -- Sí --> D[Pantalla de la caja]
  C -- No --> E{¿Puedes recibir?}
  B -- Sí --> E
  E -- No --> U[Código no reconocido]
  E -- Sí --> F{¿Código de proveedor registrado en el catálogo?}
  F -- Una presentación activa --> R[Pantalla Recibir]
  F -- Varias presentaciones --> H[¿Qué insumo es?]
  H --> R
  F -- Ninguna o retirada --> U
```

1. La app quita los espacios al inicio y al final del código. Un código vacío, de más de 64 caracteres o con caracteres de control muestra **Ese código no se puede leer. Escanéalo de nuevo o escríbelo.**
2. Si el código no es un GS1 DataMatrix, la app busca una caja con exactamente ese código en las bodegas a las que tienes acceso. El código de una caja debe coincidir exactamente con la etiqueta. Si la encuentra, se abre la pantalla de la caja.
3. Si no, y si puedes recibir, la app busca el código entre los códigos de proveedor registrados en las presentaciones del catálogo. Esa búsqueda ignora espacios, guiones y mayúsculas o minúsculas, y solo cuentan los códigos activos.
4. Una presentación activa abre el formulario de recepción con esa presentación elegida. Varias presentaciones abren **¿Qué insumo es?**: **El código 7501234567893 corresponde a más de una presentación.**, con una fila por presentación activa (nombre del insumo y luego nombre de la presentación). Presiona la que llegó.
5. Cualquier otro caso, o un código cuya presentación está retirada, abre **Código no reconocido**.

<Warning>
  Buscar una caja necesita `inventory.read`. Sin ese permiso, escanear la etiqueta de una caja o un código de barras del proveedor que no es GS1 DataMatrix muestra **La operación no está permitida.** Pide **Ver inventario**, o recibe el insumo por nombre.
</Warning>

### Código no reconocido

La pantalla dice **Ninguna caja ni insumo a tu alcance tiene el código** seguido del código. Si puedes recibir, agrega **Pide a un administrador que registre este código en la web, o recibe el insumo por nombre.** y el botón **Recibir un insumo sin código**. **Escanear otro código** vuelve a abrir el escáner.

Un código no se reconoce cuando ninguna caja de tus bodegas lo tiene y, para quienes pueden recibir, ninguna presentación activa lo lleva. Para que un código de proveedor se pueda escanear, una persona que gestiona el catálogo lo registra en la presentación desde la consola; consulta [Presentaciones y códigos](/docs/es/catalog/presentations-and-codes).

### Códigos GS1 DataMatrix

Muchos insumos dentales llevan un GS1 DataMatrix, un código cuadrado pequeño que contiene el GTIN del producto y, a menudo, su lote y su vencimiento. La app lo reconoce cuando el código empieza con `01` seguido de 14 dígitos y tiene más datos después.

| Parte del código | Qué hace la app |
| - | - |
| `01` y 14 dígitos (GTIN) | Busca el insumo con esos 14 dígitos. No busca una caja. |
| `17` y una fecha AAMMDD (vencimiento) | Completa **Fecha de vencimiento (AAAA-MM-DD)**. Un día `00` significa el último día de ese mes. |
| `10` y hasta 20 caracteres (lote) | Completa **Lote**. |
| `11`, `13`, `15`, `16` (otras fechas) y `21` (número de serie) | Se omiten. El número de serie no se completa. |
| Cualquier otra cosa | La app deja de leer en ese punto. |

Cuando se leyó el lote o el vencimiento, el formulario de recepción dice **El lote y el vencimiento se leyeron de la etiqueta. Revísalos antes de recibir.** Son sugerencias: compáralos con el empaque antes de presionar **Recibir**.

<Warning>
  El GTIN se busca con los 14 dígitos que trae el DataMatrix, incluido el cero inicial (por ejemplo `07501234567893`). Si el GTIN de la presentación está registrado en el catálogo en su forma de 13 dígitos (`7501234567893`), el DataMatrix no se reconoce: registra también la forma de 14 dígitos en la misma presentación.
</Warning>

## Ver una caja

**Quién puede hacerlo:** `inventory.read`, con acceso a la bodega de la caja.

La pantalla de la caja se titula **Caja** seguido del código, por ejemplo **Caja BX-000123**, con el nombre del insumo debajo.

| Campo | Contenido |
| - | - |
| **Disponible** | Lo que todavía se puede usar: las existencias menos las unidades reservadas para pedidos, con la unidad, por ejemplo `40 Unidad`. |
| **Ubicación** | El nombre de la bodega de la caja. |
| **Estado** | **Activa**, **En cuarentena**, **Vencida**, **Agotada**, **Desechada** o **En tránsito**. |
| **Lote** | Solo aparece si la caja tiene lote. |
| **Vence** | La fecha de vencimiento como AAAA-MM-DD, si la caja tiene una. Cuando la fecha ya pasó según el calendario del teléfono, la pantalla muestra en su lugar **Venció el 2026-08-31**. |

Las unidades se muestran como **Unidad**, **Caja**, **Paquete**, **Botella**, **Ampolla**, **Mililitro**, **Litro**, **Gramo**, **Kilogramo**, **Par** o **Kit**. Cuando un nombre no se puede leer, la pantalla muestra **Nombre no disponible**. Si la unidad de la caja espera una revisión, la pantalla dice **La unidad de esta caja debe revisarse en la web antes de usarla.**

Las acciones bajo los datos dependen de la caja y de tus permisos:

| Botón | Aparece cuando |
| - | - |
| **Registrar uso** | Puedes consumir, la caja está **Activa**, su unidad no necesita revisión y **Disponible** es mayor que cero. |
| **Trasladar a otra bodega** | Puedes trasladar cajas y la caja está **Activa**. |
| **Escanear otro código** | Siempre. |

La app no muestra los movimientos de la caja, sus contenedores separados ni su etiqueta. Para eso, abre la caja en la consola; consulta [Cajas y etiquetas](/docs/es/inventory/boxes).

## Registrar un uso

**Quién puede hacerlo:** `inventory.consume` (**Registrar consumo**) o `inventory.adjust`, más `inventory.read`, con acceso a la bodega de la caja.

**Dónde:** la pantalla de la caja, **Registrar uso**.

<Steps>
  <Step title="Abre la caja">
    Escanea su etiqueta o escribe su código en **Inicio**.
  </Step>

  <Step title="Presiona Registrar uso">
    La pantalla **Registrar uso** muestra el insumo y **Caja** con su código.
  </Step>

  <Step title="Cantidad">
    Escribe cuántas unidades salieron en **Cantidad**. Empieza en 1 y solo acepta dígitos. La ayuda muestra el límite, por ejemplo **Hasta 40 disponibles**.
  </Step>

  <Step title="Box o área">
    Elige uno en **Box o área**. Cuando la sede tiene un solo box o área activo, ya aparece elegido.
  </Step>

  <Step title="Qué pasó">
    Para un box sin conteo, elige **Entrega al box o área** (elegida por defecto) o **Uso directo** en **Qué pasó**.
  </Step>

  <Step title="Propósito">
    Elige el **Propósito**: **Sin especificar** (por defecto), **Procedimiento**, **Limpieza**, **Administrativo** u **Otro**.
  </Step>

  <Step title="Responsable">
    En **Responsable** aparece elegido **Tú**. Puedes elegir por su nombre a otra persona activa del equipo.
  </Step>

  <Step title="Registrar uso">
    Presiona **Registrar uso**. La app vuelve a la caja y confirma, por ejemplo, **Se registraron 5. Quedan 35 en esta caja.**
  </Step>
</Steps>

El botón **Registrar uso** sigue desactivado hasta que la cantidad está entre 1 y lo disponible y, si la sede tiene boxes o áreas, hay uno elegido.

### Cuando el box cuenta sus propias existencias

Un box o área con stock contado solo acepta usos directos, y solo desde una caja que ya está en su punto de stock. Si eliges uno así y la caja está en otro lugar, la pantalla dice, por ejemplo, **Box 2 cuenta sus propias existencias. Primero lleva la caja completa allí.** y **Registrar uso** sigue desactivado.

* Si puedes trasladar cajas, presiona **Llevar esta caja a Box 2**. La caja completa se traslada al punto de stock del box y sigues en **Registrar uso**, ya con la posibilidad de registrar el uso.
* Si no puedes, la pantalla dice **Pide a alguien que pueda trasladar cajas que lleve esta caja a Box 2.**

Cuando la caja ya está en el punto de stock del box, la pantalla dice **Se usa desde las existencias contadas de este box.** y el uso se registra como uso directo. Consulta [Boxes y áreas](/docs/es/locations/destinations).

### Cuando no se ofrece ningún box o área

La pantalla dice **Esta sede todavía no tiene boxes ni áreas, así que este uso no dirá adónde fue.** No aparecen **Qué pasó**, **Propósito** ni **Responsable**, y el uso se registra sin box, sin propósito y sin responsable. Esos usos no aparecen en **Uso por box o área** en la consola.

También ves este mensaje con una caja de una bodega **Central**: la app solo ofrece boxes para cajas de una bodega express, los de la sede de esa bodega. Para registrar adónde fue un uso desde una bodega central, usa la consola, que ofrece los boxes de todas las sedes. Consulta [Registrar consumo y trasladar cajas](/docs/es/inventory/use-and-moves).

### Reglas

| Regla | Detalle |
| - | - |
| Cantidad | Número entero desde 1 hasta lo **Disponible** de la caja (máximo 1.000.000). La app no te deja usar unidades reservadas para un pedido. |
| Caja | **Activa**, sin pasar su fecha de vencimiento y con la unidad confirmada. |
| Box o área | Activo y de la sede de la caja. Un box con stock contado solo acepta uso directo desde su punto de stock. |
| Responsable | Una persona activa de la clínica dental. |
| Referencia de atención | No está disponible en la app. Para registrarla, usa la consola. |

### Qué registra el sistema

Un movimiento `consume` que resta la cantidad de la caja, contigo como la persona que lo registró y, si elegiste un box, el box o área, qué pasó (`issue` o `use`), el propósito y el responsable. Cuando las existencias llegan a cero, la caja pasa a **Agotada**. El movimiento aparece en el historial de la caja y en el [reporte de consumo](/docs/es/reports/consumption).

### Qué puede salir mal

| Mensaje | Causa | Qué hacer |
| - | - | - |
| **Ese uso ya estaba registrado; no cambió nada. Quedan 35 en esta caja.** | Ese mismo uso ya se había enviado, por ejemplo después de una respuesta perdida. | Nada. Se registró una sola vez. |
| **Este box tiene existencias propias que se cuentan. Lleva primero la caja a su punto de stock y registra el uso allí.** | El box cuenta sus propias existencias y la caja no está en su punto de stock. | Lleva primero la caja al box. |
| **Esta caja pertenece a una sede distinta del box o área elegido, o se movió mientras registrabas. Revisa dónde está la caja e inténtalo de nuevo.** | La caja se trasladó mientras el formulario estaba abierto. | Vuelve, abre la caja otra vez y repite. |
| **El box o área elegido no existe en este espacio de trabajo o ya no está activo.** | El box se desactivó. | Vuelve y elige otro box. |
| **La persona responsable debe ser un miembro activo de este espacio de trabajo.** | El responsable ya no está en el equipo. | Elige a otra persona. |
| **La caja no tiene suficiente cantidad disponible para esta operación.** | Alguien usó unidades de la caja mientras tanto. | Abre la caja de nuevo y revisa **Disponible**. |
| **Esta caja está vencida. Elige otra caja para continuar.** | La caja pasó su fecha de vencimiento. | Usa otra caja. Para sacarla de uso, consulta [Cajas y etiquetas](/docs/es/inventory/boxes). |
| **La caja está en un estado que no permite este movimiento.** | La caja ya no está **Activa**. | Abre la caja de nuevo para ver su estado. |
| **Este stock no tiene una identidad de unidad verificada. Revísala antes de registrar otro movimiento.** | La unidad de la caja necesita revisión. | Pide a quien gestiona el catálogo que la revise en la consola. |

## Trasladar una caja

**Quién puede hacerlo:** `inventory.transfer` (**Trasladar cajas entre bodegas**) o `inventory.adjust`, más `inventory.read`, con acceso a las dos bodegas.

**Dónde:** la pantalla de la caja, **Trasladar a otra bodega**.

<Steps>
  <Step title="Abre la caja">
    Escanea su etiqueta o escribe su código, y presiona **Trasladar a otra bodega**.
  </Step>

  <Step title="Elige el destino">
    La pantalla **Trasladar caja** muestra el insumo y el código de la caja. En **Hacia dónde**, elige una de las bodegas activas a las que tienes acceso. La bodega actual de la caja no aparece. Si solo hay una posible, ya aparece elegida.
  </Step>

  <Step title="Traslada">
    Presiona **Trasladar caja**. No hay paso de confirmación. La app vuelve a la caja y dice, por ejemplo, **La caja ya está en Express Norte.**
  </Step>
</Steps>

Si no hay otra bodega disponible, la pantalla dice **No hay otra bodega a la que puedas trasladar esta caja.**

**Reglas:** un traslado lleva la caja completa, con su código, lote, vencimiento y cantidades; las unidades reservadas para un pedido siguen reservadas. La caja debe estar **Activa** y sin pasar su vencimiento, y el destino debe estar activo. Para trasladar solo una parte, sepárala primero en la consola. Trasladar una caja está marcado como acción sensible; en la versión actual el segundo factor es opcional y no la bloquea (consulta [Seguridad de la cuenta](/docs/es/account/security)).

**Qué registra el sistema:** dos movimientos con cambio `0` y una identidad de traslado compartida, `transfer_out` desde el origen y `transfer_in` hacia el destino, y la nueva bodega de la caja. Lo mismo ocurre cuando presionas **Llevar esta caja a** un box en **Registrar uso**.

| Mensaje | Causa | Qué hacer |
| - | - | - |
| **Esta bodega está desactivada: ya no se puede recibir ni mover stock hacia ella.** | El destino se desactivó. | Elige otra bodega. |
| **Una transferencia debe destinar a una bodega distinta de la actual de la caja.** | La caja ya está allí, por ejemplo después de otro traslado. | Abre la caja de nuevo. |
| **La caja está en un estado que no permite este movimiento.** | La caja ya no está **Activa**. | Abre la caja de nuevo para ver su estado. |
| **Esta caja está vencida. Elige otra caja para continuar.** | La caja pasó su fecha de vencimiento. | Sácala de uso en la consola. |

## Recibir una entrega

**Quién puede hacerlo:** `inventory.receive` (**Recibir entregas**) o `inventory.adjust`, con acceso a la bodega donde recibes. Escanear un código de barras del proveedor que no es GS1 DataMatrix también necesita `inventory.read` (consulta **Qué hace la app con un código** más arriba).

Cada recepción crea **una caja nueva** en una bodega. Si una entrega trae varios envases que quieres seguir por separado, recibe cada uno como su propia caja.

**Antes de empezar:** el insumo debe estar activo en el catálogo y, para recibir escaneando, el código del proveedor debe estar registrado en una de sus presentaciones. Consulta [Presentaciones y códigos](/docs/es/catalog/presentations-and-codes).

### Abre el formulario de recepción

<Tabs>
  <Tab title="Escanea el código del proveedor">
    En **Inicio**, presiona **Escanear código** y escanea el código de barras o el GS1 DataMatrix del empaque, o escribe el código en **O escribe el código**. Una coincidencia abre el formulario **Recibir** con esa presentación elegida. Si el código corresponde a varias presentaciones, elige una en **¿Qué insumo es?**.
  </Tab>

  <Tab title="Elige el insumo por nombre">
    En **Inicio**, presiona **Recibir un insumo sin código** (también aparece en **Código no reconocido**). La pantalla **Recibir un insumo** muestra los insumos activos en orden alfabético, cada uno con su unidad. Escribe en **Nombre del insumo** para acotar la lista: la búsqueda solo mira los nombres, ignora mayúsculas y tildes, y muestra hasta 50 resultados. Si no hay coincidencias, dice **Ningún insumo activo coincide.** Presiona un insumo para abrir el formulario **Recibir**.
  </Tab>
</Tabs>

### Completa el formulario

<Steps>
  <Step title="Recibido como">
    En **Recibido como**, elige una de las presentaciones activas del insumo, que aparecen con nombre y contenido, por ejemplo `Caja x 100 (100 Unidad)`, o **Unidades sueltas** seguido de la unidad, por ejemplo **Unidades sueltas (Unidad)**. Una presentación escaneada ya aparece elegida. Cuando eliges el insumo por nombre, queda elegida la única presentación si hay solo una; si no, queda elegida **Unidades sueltas**, así que revisa esto primero.
  </Step>

  <Step title="Cuántos">
    Escribe la cantidad en **Cuántos**. Empieza en 1. La ayuda muestra el resultado en unidades base, por ejemplo **Total: 300 Unidad** para tres cajas de 100. Ese total es lo que entra al registro.
  </Step>

  <Step title="Bodega">
    En **Bodega**, elige dónde va la caja entre las bodegas activas a las que tienes acceso. Si hay una sola, la pantalla dice **Se recibe en** seguido de su nombre. Si no hay ninguna, dice **No puedes recibir en ninguna bodega. Pídelo a un administrador.**
  </Step>

  <Step title="Datos de seguimiento">
    Completa **Lote**, **Fecha de vencimiento (AAAA-MM-DD)** y **Números de serie, uno por línea** cuando aparezcan. Solo aparecen para los insumos que los siguen. Revisa las reglas más abajo.
  </Step>

  <Step title="Etiqueta de la caja (opcional)">
    Escribe el código anotado en el envase en **Etiqueta de la caja (opcional)**, o presiona **Escanear etiqueta** para leerlo. Si la dejas vacía, muveya crea un código: **Déjala vacía y Muveya crea una que puedes imprimir desde la web.**
  </Step>

  <Step title="Recibir">
    Presiona **Recibir**. El botón sigue desactivado hasta que la cantidad es mayor que cero y hay una bodega elegida.
  </Step>

  <Step title="Revisa el resultado">
    La pantalla **Recibido** dice, por ejemplo, **Guantes de nitrilo M quedó en la caja BX-7K3QM9.** Presiona **Ver caja** para abrirla, **Recibir otro** para escanear el siguiente código, o **Inicio**.
  </Step>
</Steps>

Etiqueta la caja nueva: imprime su etiqueta desde la pantalla de la caja en la consola, o escribe el código en el envase. Consulta [Cajas y etiquetas](/docs/es/inventory/boxes).

### Datos de seguimiento y etiqueta de la caja

| Campo | Aparece cuando | Reglas |
| - | - | - |
| **Lote** | El insumo sigue lotes. | Obligatorio, no vacío, hasta 120 caracteres. |
| **Fecha de vencimiento (AAAA-MM-DD)** | El insumo sigue vencimiento. | Obligatoria, una fecha real escrita como AAAA-MM-DD, igual o posterior a hoy (UTC). |
| **Números de serie, uno por línea** | El insumo sigue números de serie. | Uno por unidad base recibida; la ayuda dice cuántos se necesitan, por ejemplo **Se necesitan 3**. Sepáralos con saltos de línea o comas. Sin vacíos, sin repetidos, hasta 120 caracteres cada uno, y nunca un número de serie ya recibido para este insumo. |
| **Etiqueta de la caja (opcional)** | Siempre. | Hasta 64 caracteres, sin espacios al inicio ni al final, única en tu clínica dental. |

La app revisa algunos de estos datos antes de enviar y muestra:

| Mensaje | Significado |
| - | - |
| **Ingresa una cantidad entera mayor que cero.** | La cantidad no está entre 1 y 1.000.000. |
| **Elige cómo se recibió.** | La presentación elegida ya no está disponible. |
| **Elige una bodega.** | No hay una bodega válida elegida. |
| **Ingresa el lote.** | El insumo sigue lotes y **Lote** está vacío. |
| **Ingresa el vencimiento como AAAA-MM-DD.** | El insumo sigue vencimiento y la fecha falta o no es una fecha real. |
| **Ingresa un número de serie por cada unidad recibida.** | La cantidad de números de serie no es la cantidad multiplicada por el contenido de la presentación. |

### Qué registra el sistema

Una caja nueva **Activa** con su código, insumo, bodega, cantidad en unidades base, hora de recepción y unidad y, cuando corresponden, la presentación (con su versión y cantidad), el lote, los números de serie y el vencimiento. Un movimiento `receive` suma la cantidad a las existencias, contigo como la persona que lo registró. Es la misma recepción que registra la consola; consulta [Recibir existencias](/docs/es/inventory/receive).

### Qué puede salir mal

| Mensaje | Causa | Qué hacer |
| - | - | - |
| **Esta recepción ya estaba registrada; no cambió nada.** | Esa misma recepción ya se había enviado, por ejemplo después de una respuesta perdida. La pantalla **Recibido** muestra la caja que ya existe. | Nada. Se creó una sola caja. |
| **Ingresa una fecha válida de vencimiento igual o posterior a hoy en UTC.** | La fecha ya pasó, por ejemplo una leída de una etiqueta antigua. | Revisa el empaque y corrige la fecha. |
| **Ingresa un número de lote que no esté vacío ni contenga solo espacios.** | El lote tiene solo espacios. | Escribe el lote. |
| **Estos números de serie ya se recibieron para este insumo: SN-0042. Un número de serie identifica una sola unidad: revisa el empaque o corrige la caja original con un ajuste.** | Un número de serie pertenece a una caja existente del insumo. No se recibió nada. | Revisa los números de serie. Si la caja anterior está mal, consulta [Correcciones](/docs/es/inventory/corrections). |
| **Usa una cantidad entera y un número de serie distinto y no vacío por cada unidad.** | Hay números de serie repetidos o vacíos. | Corrige la lista. |
| **Otra caja de stock de este espacio de trabajo ya usa este código.** | La etiqueta de la caja ya está en uso. | Escribe otra etiqueta o déjala vacía. |
| **Esta presentación se corrigió después de que la revisaste. No se recibió nada: revisa su contenido vigente y confirma de nuevo.** | El contenido de la presentación cambió mientras el formulario estaba abierto. | Vuelve, abre el formulario otra vez y revisa la cantidad. |
| **Esta presentación ya no acepta nuevas entradas. Sus movimientos anteriores no cambian.** | La presentación se retiró. | Elige otra presentación o **Unidades sueltas**. |
| **La unidad cambió o ya quedó fijada para su uso. Recarga el insumo y revisa su unidad antes de continuar.** | La unidad del insumo cambió mientras el formulario estaba abierto. | Vuelve y abre el formulario otra vez. |
| **Este insumo no tiene una configuración de unidad verificada. Revisa su configuración en el catálogo antes de continuar.** | La unidad del insumo no está confirmada en el catálogo. | Pide a quien gestiona el catálogo que la confirme en la consola. |
| **Esta bodega está desactivada: ya no se puede recibir ni mover stock hacia ella.** | La bodega se desactivó. | Elige otra bodega. |

## Envíos repetidos y conexiones perdidas

Cada uso, traslado y recepción lleva una clave interna de operación, así que muveya nunca lo registra dos veces.

* Si se corta la conexión o muveya no responde a tiempo, la app muestra **Sin conexión. Revisa la red e intenta de nuevo.** y conserva la clave. Presiona el mismo botón otra vez **sin cambiar nada**. O la acción se registra ahora, o la app te indica que ya estaba registrada.
* Si cambias los datos antes de volver a presionar y el primer intento sí se había registrado, la app muestra **Esta acción cambió mientras se enviaba. Revísala y envíala de nuevo.** Revisa primero la caja: ábrela de nuevo o mírala en la consola. Después de este mensaje, el siguiente toque cuenta como una acción nueva.
* Después de una acción exitosa, el siguiente toque es una acción nueva. Dos entregas iguales recibidas una tras otra son dos cajas, como corresponde.

## Mensajes de muveya

Cuando muveya rechaza una acción, la app muestra la explicación que envía muveya, en el idioma de la app. Los más comunes, además de los que aparecen en cada tarea:

| Mensaje | Significado | Qué hacer |
| - | - | - |
| **La operación no está permitida.** | Te falta el permiso para esta acción, por ejemplo `inventory.read` para buscar una caja. | Pídelo a un administrador en **Equipo** y luego actualiza tu acceso (**Menú**, **Cambiar organización**, **Actualizar acceso**). |
| **La caja de stock solicitada no existe en este espacio de trabajo.** | La caja ya no existe o está fuera de tus bodegas. | Revisa el código, o pide acceso a su bodega. |
| **La bodega donde recibir no existe en este espacio de trabajo.** | La bodega está fuera de tu acceso o ya no existe. | Elige otra bodega. |
| **La solicitud no puede ser procesada.** | Un valor está fuera de rango. | Revisa lo que ingresaste. |
| **Demasiadas solicitudes. Inténtalo de nuevo más tarde.** | Demasiadas solicitudes en poco tiempo. | Espera un momento e intenta de nuevo. |
| **El servicio no está disponible temporalmente.** | muveya no está disponible por un momento. | Intenta de nuevo en unos minutos. |
| **No se pudo completar. Intenta de nuevo.** | muveya no dio una explicación. | Intenta de nuevo. Si continúa, escribe a [team@muveya.com](mailto:team@muveya.com). |
| **Tu acceso no lo permite. Pídelo a un administrador.** | Un rechazo por permisos sin explicación. | Pídelo a un administrador. |
| **El escáner no está disponible en este teléfono. Escribe el código.** | El escáner de códigos de Google no pudo iniciar, por ejemplo sin los servicios de Google Play. | Escribe el código en **O escribe el código**. |
| **No pudimos abrir un navegador. Verifica que haya uno disponible e intenta de nuevo.** | Una fila de **Pendientes** no pudo abrir la consola. | Instala o activa un navegador. |

Si muveya informa que tu sesión terminó, la app vuelve a la pantalla de inicio de sesión; consulta **Sesiones y cierre de sesión** en [App Android](/docs/es/android/overview). Para otros casos, consulta [Solución de problemas](/docs/es/help/troubleshooting).

## Páginas relacionadas

<CardGroup cols={2}>
  <Card title="App Android" icon="android" href="/docs/es/android/overview">
    Disponibilidad, requisitos, inicio de sesión, idioma y privacidad.
  </Card>

  <Card title="Recibir existencias" icon="truck-ramp-box" href="/docs/es/inventory/receive">
    La recepción en la consola, con todas sus opciones.
  </Card>

  <Card title="Registrar consumo y trasladar cajas" icon="arrow-right-arrow-left" href="/docs/es/inventory/use-and-moves">
    Boxes, referencias de atención, uso por box o área y atribución posterior.
  </Card>

  <Card title="Cajas y etiquetas" icon="box-open" href="/docs/es/inventory/boxes">
    Historial de la caja, etiquetas y cómo sacar una caja de uso.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.