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

# Calculadora

> Calcula TIR, TNA, TEM, TNA_30_360, VT, VR, Precio Dirty, Intereses Corridos, de un bono en función de un precio  dirty objetivo, una fecha de concertación y un plazo de liquidación (CI, 24hs, 48hs)

<Note>
  Este endpoint calcula métricas de pricing y análisis de un bono específico basado en parámetros de precio objetivo.
</Note>

## Cuerpo de la Solicitud

<ParamField body="ticker" type="string" required>
  El símbolo del bono (ej., "AL30", "GD30").
</ParamField>

<ParamField body="target" type="string" required>
  El objetivo del cálculo. Debe ser `"price"` para calcular métricas basadas en un precio objetivo.
</ParamField>

<ParamField body="value" type="number" required>
  El precio objetivo del bono.
</ParamField>

<ParamField body="settlement_entry" type="string" required>
  El tipo de liquidación. Puede ser `"24hs"` para liquidación en 24 horas, `"48hs"` para liquidación en 48 horas o `"C.I"` para contado inmediato.
</ParamField>

<ParamField body="operation_date" type="string" required>
  La fecha de operación en formato YYYY-MM-DD (ej., "2025-11-16").
</ParamField>

## Ejemplo de Solicitud

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.doctacapital.com.ar/api/v1/analytics/bonds/pricer" \
    -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "ticker": "AL30D",
      "target": "price",
      "value": 65,
      "settlement_entry": "24hs",
      "operation_date": "2025-11-19"
    }'
  ```
</RequestExample>

## Respuesta Exitosa

<ResponseField name="clean_price" type="number">
  Precio limpio del bono (sin intereses devengados).
</ResponseField>

<ResponseField name="dirty_price" type="number">
  Precio sucio del bono (incluyendo intereses devengados).
</ResponseField>

<ResponseField name="residual_value" type="number">
  Valor residual del bono.
</ResponseField>

<ResponseField name="tv" type="number">
  Valor técnico del bono.
</ResponseField>

<ResponseField name="accured_interest" type="number">
  Interés devengado.
</ResponseField>

<ResponseField name="days_to_maturity" type="integer">
  Días hasta el vencimiento del bono.
</ResponseField>

<ResponseField name="settlment_date" type="string">
  Fecha de liquidación en formato YYYY-MM-DD.
</ResponseField>

<ResponseField name="parity_price" type="number">
  Paridad del bono.
</ResponseField>

<ResponseField name="tir" type="number">
  Tasa Interna de Retorno (TIR) del bono.
</ResponseField>

<ResponseField name="tea" type="number">
  Tasa Efectiva Anual (TEA) del bono.
</ResponseField>

<ResponseField name="tem" type="number">
  Tasa Efectiva Mensual (TEM) del bono.
</ResponseField>

<ResponseField name="tna" type="number">
  Tasa Nominal Anual (TNA) del bono.
</ResponseField>

<ResponseField name="tna_30_360" type="number">
  Tasa Nominal Anual calculada con base 30/360.
</ResponseField>

<ResponseField name="margen" type="number">
  Margen del bono.
</ResponseField>

<ResponseField name="duration" type="number">
  Duración del bono.
</ResponseField>

<ResponseField name="badlar_last5" type="number">
  Promedio de la tasa BADLAR de los últimos 5 días.
</ResponseField>

## Ejemplo de Respuesta Exitosa

<ResponseExample>
  ```json Success theme={null}
  {
    "clean_price": 80.98082191780821,
    "dirty_price": 65,
    "residual_value": 80,
    "tv": 80.21534246575342,
    "accured_interest": 0.2153424657534247,
    "days_to_maturity": 1692,
    "settlment_date": "2025-11-20",
    "parity_price": 0.810318799396146,
    "tir": 0.11069396742091445,
    "tea": 0.11069396742091445,
    "tem": 0.00878713349566751,
    "tna": 0.13523337986308834,
    "tna_30_360": 0.10544560194801011,
    "duration": 2.1655192047684135,
    "cer_settlment_date": null,
    "cer_issue_date": null,
    "tc_oficial": null,
    "dolar_mep": null,
    "margen": null,
    "badlar_last5": null
  }
  ```
</ResponseExample>

## Respuestas de Error

### 400 Solicitud Incorrecta

Parámetros inválidos o faltantes en el cuerpo de la solicitud.

```json theme={null}
{
  "type": "/errors/bad-request",
  "title": "Bad request",
  "status": 400,
  "detail": "Invalid request parameters",
  "correlation_id": "6cd1fd05-63e9-4863-832f-d873e58e9d67"
}
```

### 401 No Autorizado

Token de acceso inválido o faltante.

```json theme={null}
{
  "type": "/errors/authentication-required",
  "title": "Authorization header missing",
  "status": 401,
  "detail": "Authorization header missing",
  "correlation_id": "d6e20e07-0580-4e2d-9480-00a68c1ae493"
}
```

### 404 No Encontrado

Ticker no encontrado.

```json theme={null}
{
  "type": "/errors/not-found",
  "title": "Resource not found",
  "status": 404,
  "detail": "Ticker not found"
}
```

### 500 Error Interno del Servidor

Error interno del servidor.

```json theme={null}
{
  "type": "/errors/internal-server-error",
  "title": "Internal server error",
  "status": 500,
  "detail": "Internal server error",
  "correlation_id": "6cd1fd05-63e9-4863-832f-d873e58e9d67"
}
```

## Notas

* El campo `target` debe ser `"price"` para calcular métricas basadas en un precio objetivo
* El campo `value` representa el precio objetivo del bono
* La fecha de liquidación se calcula automáticamente basándose en `settlement_entry` y `operation_date`
* Todas las tasas están expresadas en formato decimal (ej., 0.573 = 57.3%)


## OpenAPI

````yaml POST /api/v1/analytics/bonds/pricer
openapi: 3.1.0
info:
  title: API de Bonos de Docta
  description: >-
    API centrada en bonos de Argentina: instrumentos, detalle, cashflows y
    curvas/yields.
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://api.doctacapital.com.ar
security: []
paths:
  /api/v1/analytics/bonds/pricer:
    post:
      tags:
        - Bonds
      description: >-
        Calcula TIR, TNA, TEM, TNA_30_360, VT, VR, Precio Dirty, Intereses
        Corridos, de un bono en función de un precio  dirty objetivo, una fecha
        de concertación y un plazo de liquidación (CI, 24hs, 48hs)
      requestBody:
        description: Parámetros para el cálculo de pricing del bono
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BondPricerRequest'
        required: true
      responses:
        '200':
          description: Métricas de pricing calculadas exitosamente
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BondPricerResponse'
        '400':
          description: Solicitud incorrecta - parámetros inválidos o faltantes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: /errors/bad-request
                title: Bad request
                status: 400
                detail: Invalid request parameters
                correlation_id: 6cd1fd05-63e9-4863-832f-d873e58e9d67
        '401':
          description: No autorizado - token de acceso inválido o faltante
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: /errors/authentication-required
                title: Authorization header missing
                status: 401
                detail: Authorization header missing
                correlation_id: d6e20e07-0580-4e2d-9480-00a68c1ae493
        '404':
          description: Ticker no encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: /errors/not-found
                title: Resource not found
                status: 404
                detail: Ticker not found
        '500':
          description: Error interno del servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                type: /errors/internal-server-error
                title: Internal server error
                status: 500
                detail: Internal server error
                correlation_id: 6cd1fd05-63e9-4863-832f-d873e58e9d67
      security:
        - bearerAuth: []
components:
  schemas:
    BondPricerRequest:
      type: object
      required:
        - ticker
        - target
        - value
        - settlement_entry
        - operation_date
      properties:
        ticker:
          type: string
          description: El símbolo del bono (ej., "AL30", "GD30")
          example: AL30D
        target:
          type: string
          description: >-
            El objetivo del cálculo. Debe ser "price" para calcular métricas
            basadas en un precio objetivo
          enum:
            - price
          example: price
        value:
          type: number
          description: El precio objetivo del bono
          example: 65
        settlement_entry:
          type: string
          description: >-
            El tipo de liquidación. Puede ser "24hs" para liquidación en 24
            horas, "48hs" para liquidación en 48 horas o "C.I" para contado
            inmediato
          enum:
            - C.I
            - 24hs
            - 48hs
          example: 24hs
        operation_date:
          type: string
          format: date
          description: La fecha de operación en formato YYYY-MM-DD
          example: '2025-11-19'
    BondPricerResponse:
      type: object
      properties:
        clean_price:
          type: number
          description: Precio limpio del bono (sin intereses devengados)
        dirty_price:
          type: number
          description: Precio sucio del bono (incluyendo intereses devengados)
        residual_value:
          type: number
          description: Valor residual del bono
        tv:
          type: number
          description: Valor técnico del bono
        accured_interest:
          type: number
          description: Interés devengado acumulado
        days_to_maturity:
          type: integer
          description: Días hasta el vencimiento del bono
        settlment_date:
          type: string
          format: date
          description: Fecha de liquidación en formato YYYY-MM-DD
        parity_price:
          type: number
          description: Precio de paridad del bono
        tir:
          type: number
          description: Tasa Interna de Retorno (TIR) del bono
        tea:
          type: number
          description: Tasa Efectiva Anual (TEA) del bono
        tem:
          type: number
          description: Tasa Efectiva Mensual (TEM) del bono
        tna:
          type: number
          description: Tasa Nominal Anual (TNA) del bono
        tna_30_360:
          type: number
          description: Tasa Nominal Anual calculada con base 30/360
        margen:
          type: number
          description: Margen del bono
        duration:
          type: number
          description: >-
            Duración del bono (medida de sensibilidad del precio a cambios en la
            tasa de interés)
        badlar_last5:
          type: number
          description: Promedio de la tasa BADLAR de los últimos 5 días
      required:
        - clean_price
        - dirty_price
        - residual_value
        - tv
        - accured_interest
        - days_to_maturity
        - settlment_date
        - parity_price
        - tir
        - tea
        - tem
        - tna
        - tna_30_360
        - margen
        - duration
        - badlar_last5
    Error:
      required:
        - type
        - title
        - status
        - detail
        - correlation_id
      type: object
      properties:
        type:
          description: El identificador del tipo de error
          type: string
          example: /errors/authentication-required
        title:
          description: Una breve descripción del error
          type: string
          example: Invalid client credentials
        status:
          description: El código de estado HTTP
          type: integer
          example: 401
        detail:
          description: Una descripción detallada del error
          type: string
          example: Invalid client credentials
        correlation_id:
          description: Un identificador único para rastrear esta solicitud de error
          type: string
          format: uuid
          example: 2eb07802-94de-468a-b70f-75a49f3e9516
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````