> ## 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.

# Procedimientos almacenados: ejecuta lógica SQL en A3ERP

> Ejecuta procedimientos almacenados de SQL Server desde la A3ERP API, pasando parámetros de entrada y recibiendo valores de salida en JSON.

El endpoint de procedimientos almacenados te permite ejecutar cualquier procedimiento almacenado de SQL Server desde la API de A3ERP, con soporte completo para parámetros de entrada, salida y entrada/salida. Esto abre la puerta a integrar lógica de negocio compleja ya existente en la base de datos, como cálculos de riesgo, validaciones o actualizaciones masivas, sin necesidad de replicar esa lógica en el lado del cliente.

<Warning>
  Solo se pueden ejecutar procedimientos almacenados creados en diccionarios **distintos a JNCAPI**. El código del procedimiento se ejecuta sin restricciones, por lo que debes asegurarte de que los controles de acceso son adecuados antes de exponer este endpoint.
</Warning>

***

## POST — Ejecutar procedimiento almacenado

Ejecuta el procedimiento almacenado indicado en SQL Server, pasando los parámetros definidos en el cuerpo de la petición.

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

**Ejemplo de URL:**

```
https://servidor:5555/api/procalm/procedimientodeprueba
```

### Parámetros

<ParamField path="procedimiento" type="string" required>
  El nombre del procedimiento almacenado en SQL Server, tal como está definido en la base de datos.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Token de autenticación en formato `Bearer <JWT_token>`.
</ParamField>

<ParamField body="json" type="object" required>
  Objeto JSON que contiene la clave `parametros` con un array de objetos, uno por cada parámetro del procedimiento.

  <Expandable title="Propiedades de parametros[]">
    <ParamField body="nombre" type="string" required>
      El nombre del parámetro tal como está definido en el procedimiento almacenado de SQL Server (sin el prefijo `@`).
    </ParamField>

    <ParamField body="tipo" type="string" required>
      El tipo de dato del parámetro. Valores posibles: `string`, `integer`, `boolean`, `float`, `currency`, `word`, `date`, `time`.
    </ParamField>

    <ParamField body="direccion" type="string" required>
      La dirección del parámetro. Valores posibles: `entrada`, `salida`, `entradasalida`, `retorno`.
    </ParamField>

    <ParamField body="longitud" type="string" required>
      La longitud máxima del parámetro en caracteres. Se aplica únicamente a parámetros de tipo `string`. Para el resto de tipos usa `"0"`.
    </ParamField>

    <ParamField body="defecto" type="string" required>
      El valor por defecto del parámetro cuando no se proporciona un valor explícito.
    </ParamField>

    <ParamField body="valor" type="string" required>
      El valor que se pasará al procedimiento almacenado en la ejecución.
    </ParamField>
  </Expandable>
</ParamField>

### Cuerpo de ejemplo

El siguiente ejemplo ejecuta un procedimiento que recibe el código de un cliente (`codigo`) como parámetro de entrada y devuelve su riesgo crediticio (`riesgo`) como parámetro de salida:

```json theme={null}
{
  "json": {
    "parametros": [
      {
        "nombre": "codigo",
        "tipo": "string",
        "direccion": "entrada",
        "longitud": "8",
        "defecto": "",
        "valor": " 1"
      },
      {
        "nombre": "riesgo",
        "tipo": "float",
        "direccion": "salida",
        "longitud": "0",
        "defecto": "0",
        "valor": "0"
      }
    ]
  }
}
```

### Respuesta

<ResponseField name="200">
  Devuelve el resultado del procedimiento almacenado. Si el procedimiento tiene parámetros de salida o retorno, sus valores se incluyen en la respuesta.
</ResponseField>

***

## Tipos de dato disponibles

| Tipo       | Descripción                        |
| ---------- | ---------------------------------- |
| `string`   | Cadena de texto                    |
| `integer`  | Número entero                      |
| `boolean`  | Valor lógico (`true` / `false`)    |
| `float`    | Número decimal de coma flotante    |
| `currency` | Valor monetario                    |
| `word`     | Número entero sin signo de 16 bits |
| `date`     | Fecha                              |
| `time`     | Hora                               |

## Direcciones de parámetro disponibles

| Dirección       | Descripción                                              |
| --------------- | -------------------------------------------------------- |
| `entrada`       | El valor se envía al procedimiento                       |
| `salida`        | El valor es devuelto por el procedimiento                |
| `entradasalida` | El parámetro actúa como entrada y salida simultáneamente |
| `retorno`       | Captura el valor de retorno (`RETURN`) del procedimiento |
