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

# Importar usuarios

> Crea y actualiza de forma masiva usuarios de Iru Identity a partir de un archivo CSV, con columnas obligatorias, reglas de validación, comportamiento al volver a subir y cuándo usar en su lugar la sincronización con RR. HH.

Importa usuarios de forma masiva desde un archivo **CSV** cuando necesites añadir o actualizar más de
unos pocos a la vez. Cada usuario importado lleva la etiqueta de origen **`csv`**, y
volver a subir un archivo actualizado los mantiene sincronizados. La importación CSV funciona bien para cargas
iniciales y actualizaciones puntuales. Si tu sistema de RR. HH. es la fuente de verdad continua,
usa en su lugar la [sincronización con RR. HH.](#when-to-use-hr-sync-instead).

También puedes incluir como columnas del archivo los [atributos personalizados](/es/identity/directory/schema#custom-attributes)
que hayas definido. En **Directory → Users**, selecciona la flecha
junto a **+ User** y, después, elige **Import via CSV**.

<Note>
  Vuelve a subir el archivo siempre que tu lista cambie. Puedes combinar la importación CSV con la sincronización con RR. HH.:
  muchos equipos rellenan inicialmente el directorio con un CSV y después conectan su sistema de RR. HH. para mantenerlo
  actualizado. Consulta [cuándo usar la sincronización con RR. HH.](#when-to-use-hr-sync-instead).
</Note>

## Requisitos del archivo

| Requisito | Detalle |
| - | - |
| **Formato** | Valores separados por comas (`.csv`). |
| **Codificación** | UTF-8. Se acepta e ignora una marca de orden de bytes inicial (como la que añade Excel). |
| **Primera fila** | Una **fila de encabezado** con los nombres de las columnas. |
| **Nombres de encabezado (columnas principales)** | **Distinguen entre mayúsculas y minúsculas** y deben coincidir exactamente (`externalId`, no `ExternalID`). |
| **Nombres de encabezado (atributos personalizados)** | Usa `categorySlug.attributeSlug`. Se ignoran las mayúsculas y los espacios del encabezado. |
| **Número máximo de filas** | 50.000 filas de datos por subida. |
| **Tamaño máximo del archivo** | 16 MB. |

<Warning>
  Las importaciones son de **todo o nada**. Si el archivo tiene un problema estructural, o alguna
  fila no supera la validación, **no se importa nada**. Iru devuelve un informe con todos los
  problemas para que puedas corregir el archivo y volver a subirlo.
</Warning>

## Columnas

El cuadro de diálogo de importación muestra todas las columnas que puede incluir tu archivo: columnas principales obligatorias,
columnas principales opcionales y cualquier columna de atributo personalizado de tu
[esquema](/es/identity/directory/schema). Usa el ejemplo de **Download sample.csv**
como plantilla de encabezado. Cuando los nombres de tus columnas coinciden con el ejemplo, los valores de cada fila
rellenan los campos de perfil correspondientes del usuario identificado por `externalId`.

### Obligatorias

Cada fila debe incluir un valor no vacío para cada una de estas columnas.

| Columna | Descripción | Reglas | Ejemplo |
| - | - | - | - |
| `externalId` | Tu identificador estable del usuario; se usa para hacer coincidir las filas al volver a subir. | No vacío; **único dentro del archivo**. | `EMP-10482` |
| `username` | El nombre de usuario de inicio de sesión. | No vacío. | `jane.doe` |
| `email` | La dirección de correo electrónico principal del usuario. | Una dirección válida y **simple** (sin nombre visible; `Jane <jane@example.com>` se rechaza). | `jane.doe@example.com` |
| `firstName` | Nombre de pila. | No vacío. | `Jane` |
| `lastName` | Apellido. | No vacío. | `Doe` |

### Opcionales

Deja una celda vacía, u omite la columna por completo, cuando no se necesite un valor. Si
`domain` está vacío, Iru lo obtiene de la dirección de correo electrónico.

| Columna | Descripción | Reglas | Ejemplo |
| - | - | - | - |
| `domain` | El dominio del usuario. | Si está vacío, se obtiene de la parte de `email` que va después de `@`. Establécelo solo cuando deba ser diferente. | `example.com` |
| `streetAddress` | Línea de la calle de la dirección. | Texto libre. | `123 Main St` |
| `locality` | Ciudad o localidad. | Texto libre. | `San Francisco` |
| `region` | Estado, provincia o región. | Texto libre. | `CA` |
| `postalCode` | Código postal. | Texto libre. | `94105` |
| `country` | País. | Texto libre (por ejemplo, un código de país ISO). | `US` |
| `phone` | Número de teléfono. | Normalizado a E.164; consulta [Números de teléfono](#phone-numbers). | `+14155550101` |

### Atributos personalizados

Después de definir atributos personalizados en tu esquema, el cuadro de diálogo de importación los muestra
en **Custom attribute columns**, con el nombre `categorySlug.attributeSlug` formado a partir del
slug de la categoría y el slug del atributo. Por ejemplo, `department` y `title` en una
categoría cuyo slug es `extrainfo` aparecen como `extrainfo.department` y
`extrainfo.title`.

Añade una columna por atributo al encabezado de tu CSV. Los nombres de las columnas principales deben coincidir
exactamente; los nombres de las columnas de atributos personalizados ignoran las mayúsculas y los espacios.

### Archivo de ejemplo

En el cuadro de diálogo de importación, selecciona **Download sample.csv** para obtener un archivo inicial con todas
las columnas principales y un usuario de ejemplo. Si tu esquema incluye atributos personalizados,
selecciona la flecha junto a **Download sample.csv** y, después, elige **With custom
attributes**. Ese ejemplo añade una columna por cada atributo personalizado de tu esquema
y deja esas celdas vacías en la fila de ejemplo para que puedas rellenarlas. Las columnas
principales y el usuario de ejemplo no cambian.

Sustituye el usuario de ejemplo por tus propias filas y mantén los nombres de encabezado sin cambios.

<Expandable title="Variaciones de columnas opcionales">
  No necesitas todas las columnas opcionales en cada fila. Una fila puede incluir solo las
  columnas obligatorias, una dirección parcial o un número de teléfono con o sin código
  de país. Deja `domain` vacío cuando deba coincidir con la dirección de correo electrónico, y deja
  vacías las celdas de atributos personalizados cuando no tengas un valor para un usuario.
</Expandable>

## Comportamiento de los campos

### Obtención del dominio

* Si `domain` está **vacío**, Iru lo toma de la dirección de correo electrónico (`jane.doe@example.com`
  se convierte en `example.com`).
* Si se **proporciona** `domain`, ese valor se usa tal cual.
* Un dominio que todavía no existe se crea automáticamente.

### Números de teléfono

Los valores de teléfono se normalizan a **E.164** (un `+` inicial, el código de país y, después, los dígitos,
sin espacios ni signos de puntuación), de la misma forma en que se almacenan los números de teléfono en el resto
de Iru Identity.

| Introduces | Se almacena como | Por qué |
| - | - | - |
| `4155550101` | `+14155550101` | Sin código de país; se añade el **`+1`** predeterminado (Norteamérica). |
| `(415) 555-0101` | `+14155550101` | Se eliminan los separadores y se añade `+1`. |
| `14155550101` | `+14155550101` | Se reconoce como un número norteamericano que ya incluye el `1`. |
| `+14155550101` | `+14155550101` | Ya está en E.164; se mantiene tal cual. |
| `+44 7911 123456` | `+447911123456` | Internacional (`+` presente); se mantiene el código de país y se eliminan los separadores. |
| `1-800-FLOWERS` | *rechazado* | Contiene letras. |
| `555-0101` | *rechazado* | Demasiado pocos dígitos para ser un número válido. |

<Tip>
  Los números de fuera de Norteamérica deben incluir un `+` y su código de país (por
  ejemplo, `+44…`). Sin un `+` inicial, se supone que un número es un número norteamericano
  de 10 dígitos y se le añade `+1`.
</Tip>

### Direcciones

Iru almacena una dirección siempre que **cualquier** columna de dirección tenga un valor. Una dirección
parcial (solo `locality` y `country`, por ejemplo) es válida; las partes que faltan quedan
vacías. Si todas las columnas de dirección están vacías, no se almacena ninguna dirección.

## Ejecutar la importación

El cuadro de diálogo **Import users via CSV** muestra las columnas principales obligatorias y opcionales,
cualquier columna de atributo personalizado de tu esquema y **Download sample.csv** con una
flecha para **With custom attributes**. Arrastra un archivo al área de subida o examina
para seleccionar uno.

<Steps>
  <Step title="Inicia la importación">
    En **Directory → Users**, selecciona la flecha junto a **+ User** y, después, elige
    **Import via CSV**. Compara la lista de columnas del cuadro de diálogo con las tablas
    anteriores.
  </Step>

  <Step title="Prepara tu archivo">
    Selecciona **Download sample.csv** para obtener un archivo con las columnas principales y un usuario
    de ejemplo. Si tu archivo incluye columnas de atributos personalizados, selecciona la flecha junto a
    **Download sample.csv** y, después, elige **With custom attributes**. Sustituye el
    usuario de ejemplo por tus propias filas y mantén los nombres de encabezado del ejemplo para que cada fila
    se corresponda con el usuario y los campos de perfil correctos.
  </Step>

  <Step title="Elige tu archivo">
    Selecciona tu CSV o arrástralo al área de subida.
  </Step>

  <Step title="Sube y valida">
    Iru valida primero el archivo completo. Si la validación es correcta, se aceptan las filas y
    los usuarios se crean o actualizan en segundo plano. Si la validación falla, el
    cuadro de diálogo muestra un informe y no se importa nada.
  </Step>

  <Step title="Revisa el resultado">
    Una subida correcta indica cuántos usuarios se prepararon y añade la importación a
    tu historial, donde puedes revisar el resultado de cada fila.
  </Step>

  <Step title="Invita a los usuarios">
    Los usuarios creados por la importación quedan en estado **pending** hasta que completan la configuración. Invítalos
    de forma
    [masiva](/es/identity/directory/users#resend-invites-in-bulk) desde la lista de
    usuarios, o
    [de uno en uno](/es/identity/directory/users#resend-an-invite-for-one-user)
    desde el registro de un usuario. Consulta
    [Invitar a usuarios](/es/identity/directory/users#inviting-users) para ver cómo
    funcionan las invitaciones, incluido a qué correo electrónico se envían.
  </Step>
</Steps>

Después de subirlo, Iru valida el archivo completo. Si la validación falla, no se
importa nada. Corrige los problemas indicados y vuelve a subirlo. Cuando la validación es correcta, las filas
se aceptan y se preparan, y los usuarios se crean o actualizan en segundo plano. Comprueba
la importación en tu historial para confirmar cada fila. Una fila todavía puede fallar en el momento de aplicarse
después de que se acepte el archivo; corrige esas filas y vuelve a importarlas. Consulta
[Validación y errores](#validation-and-errors) para conocer las dos etapas de comprobación.

## Crear frente a actualizar: volver a subir

Los usuarios se hacen coincidir por `externalId` dentro del origen `csv`:

* Un **`externalId` nuevo** crea un usuario nuevo con el rol **`end-user`**.
* Un **`externalId` existente** actualiza el perfil de ese usuario a partir de la fila. El rol y
  la pertenencia a grupos no cambian.

Vuelve a subir un CSV corregido o ampliado en cualquier momento para mantener sincronizados los usuarios importados.
Cada `externalId` de un archivo debe ser único.

<Note>
  Vuelve a subir el archivo actual **completo** cada vez, no solo las filas que
  cambiaste. Cada importación se hace coincidir por `externalId`.
</Note>

## Validación y errores

La validación se realiza en dos etapas. Hasta que el archivo se acepta por completo, **no se
importa nada**.

<AccordionGroup>
  <Accordion title="Problemas del archivo (se rechaza el archivo completo)">
    El archivo no se puede procesar. Entre las causas habituales se incluyen una columna duplicada, una
    columna obligatoria que falta, un archivo vacío, un encabezado sin filas de datos o más
    filas que el límite. Corrige el archivo y vuelve a subirlo.
  </Accordion>

  <Accordion title="Problemas de filas (sigue sin importarse nada)">
    El archivo tiene un formato correcto, pero una o más filas no son válidas. Iru devuelve cada
    problema con la **línea** (el encabezado es la línea 1, por lo que la primera fila de datos es la
    línea 2), la **columna** con el error (vacía para problemas de toda la fila) y un
    **mensaje**. Por ejemplo:

    | Línea | Columna | Mensaje |
    | - | - | - |
    | 3 | `email` | is not a valid email address |
    | 5 | `username` | is required |
    | 8 | `phone` | is not a valid phone number |
    | 9 | `externalId` | is duplicated in this file |

    Corrige las filas indicadas y vuelve a subir el archivo.
  </Accordion>

  <Accordion title="Errores de aplicación (después de aceptar un archivo correcto)">
    Después de aceptar un archivo, las filas se aplican en segundo plano. Una fila todavía puede
    fallar en esta etapa si, por ejemplo, otro usuario ya usa el correo electrónico
    o un valor entra en conflicto con un
    [atributo único](/es/identity/directory/schema). Estos **errores de aplicación** se
    registran en el lote de importación con el `externalId`, el `username` y los detalles del error
    de la fila. Corrige esas filas y vuelve a importarlas.
  </Accordion>
</AccordionGroup>

## Cuándo usar en su lugar la sincronización con RR. HH.

Vuelve a subir un CSV siempre que tu lista cambie e Iru volverá a comprobar cada fila. Para un
aprovisionamiento continuo y sin intervención, conecta en su lugar tu sistema de RR. HH. como registro
de referencia.

| | Importación CSV | Sincronización con el sistema de RR. HH. |
| - | - | - |
| **Desencadenante** | Subes un archivo | Se ejecuta automáticamente de forma programada |
| **¿Se mantiene actualizado?** | Cuando vuelves a subir el archivo | Sí (se vuelve a sincronizar automáticamente) |
| **Crear / actualizar** | Ambos, por coincidencia de `externalId` | Ambos, automáticamente |
| **Eliminación** | Manual | Puede eliminar usuarios a medida que causan baja |
| **Ideal para** | Cargas iniciales, incorporaciones puntuales | Automatización continua del ciclo de vida |

<Note>
  Puedes usar ambos. La configuración de la sincronización con RR. HH. se explica en
  [Directory Sync](/es/identity/directory/directory-sync).
</Note>

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Conecta tu sistema de RR. HH." icon="building-user" href="/es/identity/directory/directory-sync">
    Automatiza las creaciones, actualizaciones y eliminaciones de forma programada.
  </Card>

  <Card title="Diseña primero tu esquema" icon="table-list" href="/es/identity/directory/schema">
    Define los atributos obligatorios y únicos antes de importar.
  </Card>

  <Card title="Gestiona usuarios individuales" icon="user" href="/es/identity/directory/users">
    Edita, suspende e invita a los usuarios que has importado.
  </Card>

  <Card title="Organiza en grupos" icon="users" href="/es/identity/directory/groups">
    Convierte a tus usuarios importados en grupos asignables.
  </Card>
</CardGroup>
