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

# Maestros: CRUD completo sobre cualquier entidad de A3ERP

> Accede a cualquier maestro de A3ERP (clientes, proveedores, artículos, almacenes) con operaciones CRUD completas vía la API REST.

Los endpoints `/api/maestro/{maestro}` te proporcionan acceso CRUD completo a cualquier tabla maestra de A3ERP. Con una única familia de rutas puedes leer, crear, modificar y eliminar registros de entidades como clientes, proveedores, artículos, almacenes, representantes, formas de pago y muchas más, sin necesidad de endpoints específicos para cada una.

<Note>
  **Cadenas con relleno de espacios.** Muchos campos de código en A3ERP se almacenan como cadenas de longitud fija rellenadas con espacios a la derecha (por ejemplo, `"codalm": "       1"`). Cuando uses estos valores como parámetros de ruta o en filtros, asegúrate de tratar el valor exactamente como lo devuelve la API o bien usa el valor sin espacios: ambas formas son aceptadas en la ruta `{codigo}`.
</Note>

***

## Maestros disponibles

Los siguientes identificadores de maestro son válidos como parámetro `{maestro}`:

| Maestro            | Descripción                         |
| ------------------ | ----------------------------------- |
| `alarmas`          | Alarmas                             |
| `articulos`        | Artículos                           |
| `articulosalterna` | Artículos alternos                  |
| `almacenes`        | Almacenes                           |
| `bancos`           | Bancos                              |
| `cambios`          | Cambios de moneda                   |
| `centroscoste`     | Centros de coste                    |
| `clientes`         | Clientes                            |
| `comisiones`       | Comisiones                          |
| `contactos`        | Contactos                           |
| `cuentas`          | Cuentas contables                   |
| `descuentos`       | Descuentos                          |
| `datosemp`         | Datos de empresa                    |
| `datoscon`         | Datos contables                     |
| `datosconf`        | Datos de configuración              |
| `dirent`           | Direcciones de entrega              |
| `direntpro`        | Direcciones de entrega de proveedor |
| `documentospago`   | Documentos de pago                  |
| `dombanca`         | Domiciliaciones bancarias           |
| `escandallo`       | Escandallo                          |
| `formaspago`       | Formas de pago                      |
| `logins`           | Usuarios / logins                   |
| `representantes`   | Representantes                      |
| `refcli`           | Referencias de cliente              |
| `refpro`           | Referencias de proveedor            |
| `tarifas`          | Tarifas                             |
| `tarifaco`         | Tarifas de compra                   |
| `tarifave`         | Tarifas de venta                    |
| `transportistas`   | Transportistas                      |
| `objetivos`        | Objetivos                           |
| `perfilesp`        | Perfiles de precio                  |
| `perfilesm`        | Perfiles de margen                  |
| `persona`          | Personas                            |
| `prcesp`           | Precios especiales                  |
| `proveedores`      | Proveedores                         |

***

## GET — Obtener todos los registros

<ParamField path="maestro" type="string" required>
  Nombre del maestro a consultar (p. ej. `almacenes`, `clientes`, `articulos`).
</ParamField>

<ParamField header="Authorization" type="string" required>
  Token JWT con prefijo `Bearer`. Ejemplo: `Bearer eyJhbGci...`
</ParamField>

```http theme={null}
GET https://servidor:<puerto>/api/maestro/{maestro}
```

**Ejemplo:**

```http theme={null}
GET https://servidor:5555/api/maestro/almacenes
Authorization: Bearer {token}
```

**Respuesta 200 — Lista de registros del maestro:**

```json theme={null}
[
  {
    "codalm": "       1",
    "descalm": "Almacén Principal",
    "email": "almacen@ejemplo.com",
    "encargado": "Juan Pérez",
    "faxalm": "123456789",
    "telalm": "987654321",
    "tel2alm": "456789123",
    "diralm": "C/Trovero Marín, 5",
    "dtoalm": "Departamento 456",
    "pobalm": "San Javier",
    "codpais": "ES",
    "nompais": "ESPAÑA",
    "codprovi": "   1",
    "nomprovi": "Murcia"
  }
]
```

| Código | Descripción                                            |
| ------ | ------------------------------------------------------ |
| `200`  | Lista de objetos del maestro                           |
| `401`  | Unauthorized — Token ausente o inválido                |
| `406`  | Not Acceptable — Opción no contemplada en los permisos |

***

## GET — Obtener un registro por código

<ParamField path="maestro" type="string" required>
  Nombre del maestro a consultar.
</ParamField>

<ParamField path="codigo" type="string" required>
  Código del registro a recuperar.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Token JWT con prefijo `Bearer`.
</ParamField>

```http theme={null}
GET https://servidor:<puerto>/api/maestro/{maestro}/{codigo}
```

**Ejemplo:**

```http theme={null}
GET https://servidor:5555/api/maestro/almacenes/1
Authorization: Bearer {token}
```

**Respuesta 200 — Registro individual:**

```json theme={null}
{
  "codalm": "       1",
  "descalm": "Almacén Principal",
  "email": "almacen@ejemplo.com",
  "encargado": "Juan Pérez",
  "faxalm": "123456789",
  "telalm": "987654321",
  "tel2alm": "456789123",
  "diralm": "C/Trovero Marín, 5",
  "dtoalm": "Departamento 456",
  "pobalm": "San Javier",
  "codpais": "ES",
  "nompais": "ESPAÑA",
  "codprovi": "   1",
  "nomprovi": "Murcia"
}
```

| Código | Descripción                             |
| ------ | --------------------------------------- |
| `200`  | Registro recuperado correctamente       |
| `401`  | Unauthorized — Token ausente o inválido |

***

## POST — Crear un registro

Usa este endpoint para dar de alta nuevos registros en el maestro indicado. Incluye en el cuerpo de la petición únicamente los campos que necesites; los campos obligatorios dependen del maestro.

<ParamField path="maestro" type="string" required>
  Nombre del maestro en el que crear el registro.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Token JWT con prefijo `Bearer`.
</ParamField>

```http theme={null}
POST https://servidor:<puerto>/api/maestro/{maestro}
```

**Ejemplo — Dar de alta un artículo:**

```http theme={null}
POST https://servidor:5555/api/maestro/articulos
Authorization: Bearer {token}
Content-Type: application/json
```

```json theme={null}
{
  "codart": "8403",
  "descart": "PORTATIL LENOVO THINKPAD T480",
  "prccompra": "1100",
  "prcventa": "1500"
}
```

**Respuesta 200:**

```json theme={null}
{
  "Codigo": "{numero de maestro}"
}
```

La respuesta incluye el código asignado al nuevo registro, que puedes usar directamente en peticiones posteriores.

| Código | Descripción                                 |
| ------ | ------------------------------------------- |
| `200`  | Registro creado correctamente               |
| `401`  | Unauthorized — Token ausente o inválido     |
| `406`  | Not Acceptable — Error al crear el registro |

***

## PUT — Actualizar un registro

Actualiza uno o varios campos de un registro existente. Solo es necesario incluir en el cuerpo los campos que deseas modificar; el resto permanecen sin cambios.

<ParamField path="maestro" type="string" required>
  Nombre del maestro que contiene el registro a actualizar.
</ParamField>

<ParamField path="codigo" type="string" required>
  Código del registro a actualizar. En maestros con **clave múltiple** (clave compuesta por más de un campo), deja este parámetro en blanco e incluye los valores de clave dentro del cuerpo JSON.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Token JWT con prefijo `Bearer`.
</ParamField>

```http theme={null}
PUT https://servidor:<puerto>/api/maestro/{maestro}/{codigo}
```

**Ejemplo — Modificar precios de un artículo:**

```http theme={null}
PUT https://servidor:5555/api/maestro/articulos/8403
Authorization: Bearer {token}
Content-Type: application/json
```

```json theme={null}
{
  "prccompra": "1100",
  "prcventa": "1500"
}
```

**Respuesta 200:** El servidor confirma la modificación sin cuerpo de respuesta.

<Note>
  **Maestros con clave múltiple.** Cuando el maestro utiliza una clave primaria compuesta (p. ej. `tarifas`, `descuentos`), deja el segmento `{codigo}` vacío en la URL y añade los campos de clave en el JSON del cuerpo.
</Note>

| Código | Descripción                             |
| ------ | --------------------------------------- |
| `200`  | Registro modificado correctamente       |
| `401`  | Unauthorized — Token ausente o inválido |

***

## DELETE — Eliminar un registro

Elimina de forma permanente el registro indicado del maestro.

<ParamField path="maestro" type="string" required>
  Nombre del maestro que contiene el registro a eliminar.
</ParamField>

<ParamField path="codigo" type="string" required>
  Código del registro a eliminar.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Token JWT con prefijo `Bearer`.
</ParamField>

```http theme={null}
DELETE https://servidor:<puerto>/api/maestro/{maestro}/{codigo}
```

**Ejemplo:**

```http theme={null}
DELETE https://servidor:5555/api/maestro/almacenes/50
Authorization: Bearer {token}
```

**Respuesta 200:** `Eliminado correctamente`

<Warning>
  La eliminación de registros maestros es irreversible. Asegúrate de que el registro no tenga dependencias activas en documentos u otras entidades antes de proceder.
</Warning>

| Código | Descripción                             |
| ------ | --------------------------------------- |
| `200`  | Registro eliminado correctamente        |
| `401`  | Unauthorized — Token ausente o inválido |
