# Viáticos y gastos

> Las comprobaciones de viáticos y gastos de quien viaja o gasta por el emisor: sus facturas revisadas contra la ley y la política, la aprobación, y los anticipos, reembolsos y devoluciones.

Cuando alguien viaja o gasta por el emisor, cada viaje (o cada mes de gastos de oficina) es una **comprobación**: la persona junta sus facturas, la envía, alguien la aprueba y el saldo se liquida con un reembolso o una devolución. Son las mismas de **Gastos › Viáticos y gastos** en la app: lo que haga con la API aparece ahí, y lo que hagan ahí aparece aquí.

Cada gasto se revisa contra la ley (los topes de LISR art. 28 fr. V para alimentos, hospedaje y renta de auto, los pagos de más de $2,000 y la gasolina, que no van en efectivo, la regla del 20% sin factura de RLISR art. 152) y contra la política del emisor. La comprobación dice cuánto se deduce, cuánto no y por qué, en `issues`.

Al aprobarla, sus facturas recibidas se deducen en los impuestos del emisor y la comprobación entra en las pólizas contra la cuenta 107.01 **Funcionarios y empleados** (`employee_expenses` en [Contabilidad](https://fiscalisto.com/docs/api/contabilidad)). Para un empleado de [Nómina](https://fiscalisto.com/docs/api/nomina), lo que se liquida «en la nómina» va en su siguiente recibo: los viáticos comprobados como percepción 050 exenta y lo que ya se le dio como deducción 081.

## Las personas

Agregue a quien viaja o gasta: un empleado de Nómina (`employee`) o alguien por honorarios (`name` y `tax_id`).

```bash tab="cURL"
curl https://api.fiscalisto.com/v1/expense_people \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "empleado",
    "employee": "emp_OufpKqnrvx9p1",
    "email": "ana@example.com",
    "base_city": "Monterrey"
  }'
```

```ts tab="TypeScript"
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const expensePerson = await fiscalisto.expensePeople.create({
  kind: "empleado",
  employee: "emp_OufpKqnrvx9p1",
  email: "ana@example.com",
  base_city: "Monterrey",
});
```

```python tab="Python"
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

expense_person = fiscalisto.expense_people.create({
    "kind": "empleado",
    "employee": "emp_OufpKqnrvx9p1",
    "email": "ana@example.com",
    "base_city": "Monterrey",
})
```

```php tab="PHP"
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$expensePerson = $fiscalisto->expensePeople->create([
    'kind' => 'empleado',
    'employee' => 'emp_OufpKqnrvx9p1',
    'email' => 'ana@example.com',
    'base_city' => 'Monterrey',
]);
```

```go tab="Go"
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	expensePerson, err := client.ExpensePeople.Create(ctx, &fiscalisto.CreateExpensePersonParams{
		Kind:     "empleado",
		Employee: fiscalisto.String("emp_OufpKqnrvx9p1"),
		Email:    fiscalisto.String("ana@example.com"),
		BaseCity: fiscalisto.String("Monterrey"),
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(expensePerson.ID)
}
```

```java tab="Java"
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.model.CreateExpensePersonParams;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expensePerson = fiscalisto.expensePeople().create(new CreateExpensePersonParams()
        .setKind("empleado")
        .setEmployee("emp_OufpKqnrvx9p1")
        .setEmail("ana@example.com")
        .setBaseCity("Monterrey"));
System.out.println(expensePerson.getId());
```

```csharp tab="C#"
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expensePerson = await fiscalisto.ExpensePeople.CreateAsync(new CreateExpensePersonParams
{
    Kind = "empleado",
    Employee = "emp_OufpKqnrvx9p1",
    Email = "ana@example.com",
    BaseCity = "Monterrey",
});
```

Contesta la persona (`exp_…`). `base_city` es donde trabaja: un viaje a más de 50 km de ahí es de viáticos (`far` en la comprobación). Para que suba sus facturas desde el teléfono, sin cuenta, dele su enlace:

```bash tab="cURL"
curl https://api.fiscalisto.com/v1/expense_people/exp_OufpKqnrvx9p3/link \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

```ts tab="TypeScript"
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const expensePersonLink = await fiscalisto.expensePeople.createLink("exp_OufpKqnrvx9p3");
```

```python tab="Python"
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

expense_person_link = fiscalisto.expense_people.create_link("exp_OufpKqnrvx9p3")
```

```php tab="PHP"
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$expensePersonLink = $fiscalisto->expensePeople->createLink('exp_OufpKqnrvx9p3');
```

```go tab="Go"
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	expensePersonLink, err := client.ExpensePeople.CreateLink(ctx, "exp_OufpKqnrvx9p3", nil)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", *expensePersonLink)
}
```

```java tab="Java"
import com.fiscalisto.FiscalistoClient;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expensePersonLink = fiscalisto.expensePeople().createLink("exp_OufpKqnrvx9p3");
System.out.println(expensePersonLink);
```

```csharp tab="C#"
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expensePersonLink = await fiscalisto.ExpensePeople.CreateLinkAsync("exp_OufpKqnrvx9p3");
```

`url` es su enlace: ahí ve solo sus comprobaciones. Con `"renew": true` le da uno nuevo y el anterior deja de funcionar; `DELETE /v1/expense_people/{id}/link` lo apaga.

## Abrir una comprobación

Una por viaje (`kind` `viaje`, por omisión) o una por periodo de gastos de oficina que la empresa reembolsa (`gastos`):

```bash tab="cURL"
curl https://api.fiscalisto.com/v1/expense_reports \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "person": "exp_OufpKqnrvx9p3",
    "destination": "Guadalajara",
    "purpose": "Visita a clientes",
    "start_date": "2026-11-03",
    "end_date": "2026-11-05"
  }'
```

```ts tab="TypeScript"
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const expenseReport = await fiscalisto.expenseReports.create({
  person: "exp_OufpKqnrvx9p3",
  destination: "Guadalajara",
  purpose: "Visita a clientes",
  start_date: "2026-11-03",
  end_date: "2026-11-05",
});
```

```python tab="Python"
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

expense_report = fiscalisto.expense_reports.create({
    "person": "exp_OufpKqnrvx9p3",
    "destination": "Guadalajara",
    "purpose": "Visita a clientes",
    "start_date": "2026-11-03",
    "end_date": "2026-11-05",
})
```

```php tab="PHP"
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$expenseReport = $fiscalisto->expenseReports->create([
    'person' => 'exp_OufpKqnrvx9p3',
    'destination' => 'Guadalajara',
    'purpose' => 'Visita a clientes',
    'start_date' => '2026-11-03',
    'end_date' => '2026-11-05',
]);
```

```go tab="Go"
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	expenseReport, err := client.ExpenseReports.Create(ctx, &fiscalisto.CreateExpenseReportParams{
		Person:      "exp_OufpKqnrvx9p3",
		Destination: fiscalisto.String("Guadalajara"),
		Purpose:     fiscalisto.String("Visita a clientes"),
		StartDate:   fiscalisto.String("2026-11-03"),
		EndDate:     fiscalisto.String("2026-11-05"),
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(expenseReport.ID)
}
```

```java tab="Java"
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.model.CreateExpenseReportParams;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expenseReport = fiscalisto.expenseReports().create(new CreateExpenseReportParams()
        .setPerson("exp_OufpKqnrvx9p3")
        .setDestination("Guadalajara")
        .setPurpose("Visita a clientes")
        .setStartDate("2026-11-03")
        .setEndDate("2026-11-05"));
System.out.println(expenseReport.getId());
```

```csharp tab="C#"
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expenseReport = await fiscalisto.ExpenseReports.CreateAsync(new CreateExpenseReportParams
{
    Person = "exp_OufpKqnrvx9p3",
    Destination = "Guadalajara",
    Purpose = "Visita a clientes",
    StartDate = "2026-11-03",
    EndDate = "2026-11-05",
});
```

Queda `draft` (abierta). Si se le da dinero antes del viaje, regístrelo como anticipo:

```bash tab="cURL"
curl https://api.fiscalisto.com/v1/expense_reports/exr_OufpKqnrvx9p4/movements \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "kind": "anticipo", "amount": 3000, "date": "2026-11-02" }'
```

```ts tab="TypeScript"
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const expenseReport = await fiscalisto.expenseReports.createMovement("exr_OufpKqnrvx9p4", {
  kind: "anticipo",
  amount: 3000,
  date: "2026-11-02",
});
```

```python tab="Python"
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

expense_report = fiscalisto.expense_reports.create_movement("exr_OufpKqnrvx9p4", {
    "kind": "anticipo",
    "amount": 3000,
    "date": "2026-11-02",
})
```

```php tab="PHP"
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$expenseReport = $fiscalisto->expenseReports->createMovement('exr_OufpKqnrvx9p4', [
    'kind' => 'anticipo',
    'amount' => 3000,
    'date' => '2026-11-02',
]);
```

```go tab="Go"
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	expenseReport, err := client.ExpenseReports.CreateMovement(ctx, "exr_OufpKqnrvx9p4", &fiscalisto.CreateExpenseMovementParams{
		Kind:   "anticipo",
		Amount: 3000,
		Date:   "2026-11-02",
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(expenseReport.ID)
}
```

```java tab="Java"
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.model.CreateExpenseMovementParams;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expenseReport = fiscalisto.expenseReports().createMovement("exr_OufpKqnrvx9p4", new CreateExpenseMovementParams()
        .setKind("anticipo")
        .setAmount(3000)
        .setDate("2026-11-02"));
System.out.println(expenseReport.getId());
```

```csharp tab="C#"
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expenseReport = await fiscalisto.ExpenseReports.CreateMovementAsync("exr_OufpKqnrvx9p4", new CreateExpenseMovementParams
{
    Kind = "anticipo",
    Amount = 3000,
    Date = "2026-11-02",
});
```

`method` es `transferencia` (por omisión), `efectivo`, `tarjeta` o `nomina`: con `nomina`, el dinero va en el siguiente recibo de nómina del empleado.

## Agregar los gastos

Con el UUID de una factura que el emisor recibió ([Descargas del SAT](https://fiscalisto.com/docs/api/descargas-del-sat)), la fecha, el monto, el proveedor y la forma de pago salen de ella:

```bash tab="cURL"
curl https://api.fiscalisto.com/v1/expense_reports/exr_OufpKqnrvx9p4/items \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "uuid": "6F1C2D3E-4A5B-4C6D-8E9F-0A1B2C3D4E5F", "category": "hospedaje" }'
```

```ts tab="TypeScript"
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const expenseReport = await fiscalisto.expenseReports.createItem("exr_OufpKqnrvx9p4", {
  uuid: "6F1C2D3E-4A5B-4C6D-8E9F-0A1B2C3D4E5F",
  category: "hospedaje",
});
```

```python tab="Python"
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

expense_report = fiscalisto.expense_reports.create_item("exr_OufpKqnrvx9p4", {
    "uuid": "6F1C2D3E-4A5B-4C6D-8E9F-0A1B2C3D4E5F",
    "category": "hospedaje",
})
```

```php tab="PHP"
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$expenseReport = $fiscalisto->expenseReports->createItem('exr_OufpKqnrvx9p4', [
    'uuid' => '6F1C2D3E-4A5B-4C6D-8E9F-0A1B2C3D4E5F',
    'category' => 'hospedaje',
]);
```

```go tab="Go"
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	expenseReport, err := client.ExpenseReports.CreateItem(ctx, "exr_OufpKqnrvx9p4", &fiscalisto.CreateExpenseItemParams{
		UUID:     fiscalisto.String("6F1C2D3E-4A5B-4C6D-8E9F-0A1B2C3D4E5F"),
		Category: "hospedaje",
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(expenseReport.ID)
}
```

```java tab="Java"
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.model.CreateExpenseItemParams;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expenseReport = fiscalisto.expenseReports().createItem("exr_OufpKqnrvx9p4", new CreateExpenseItemParams()
        .setUuid("6F1C2D3E-4A5B-4C6D-8E9F-0A1B2C3D4E5F")
        .setCategory("hospedaje"));
System.out.println(expenseReport.getId());
```

```csharp tab="C#"
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expenseReport = await fiscalisto.ExpenseReports.CreateItemAsync("exr_OufpKqnrvx9p4", new CreateExpenseItemParams
{
    Uuid = "6F1C2D3E-4A5B-4C6D-8E9F-0A1B2C3D4E5F",
    Category = "hospedaje",
});
```

Sin factura (un ticket, un comprobante del extranjero), mande `category`, `date`, `amount` y `receipt` (`ticket`, `extranjero` o `ninguno`). En `payment` diga cómo se pagó: lo que se pagó con `tarjeta_empresa` no se le reembolsa a la persona. Cada respuesta es la comprobación revisada: `items[].deductible`, `items[].issues` y el `balance`.

`balance` positivo es lo que la persona debe devolver; negativo, lo que la empresa le debe reembolsar.

## Enviar, aprobar y liquidar

- `POST /v1/expense_reports/{id}/submit` la envía a aprobar (`submitted`). Contesta `expense_report_invalid` si un gasto tiene un error (`issues` con `level` `error`).
- `POST /v1/expense_reports/{id}/items/{item}` con `"rejected": true` y `reject_reason` rechaza un gasto al revisarla: no se paga ni se deduce. `false` lo vuelve a incluir.
- `POST /v1/expense_reports/{id}/return` con `note` la devuelve a la persona para corregir (`rejected`).
- `POST /v1/expense_reports/{id}/approve` la aprueba (`approved`). La API puede aprobar lo que envió un miembro del equipo; en la app nadie aprueba lo que envió.

Con el saldo en cero se cierra sola (`closed`). Si no, registre el reembolso o la devolución:

```bash tab="cURL"
curl https://api.fiscalisto.com/v1/expense_reports/exr_OufpKqnrvx9p4/movements \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "kind": "reembolso", "amount": 1350, "date": "2026-11-07" }'
```

```ts tab="TypeScript"
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const expenseReport = await fiscalisto.expenseReports.createMovement("exr_OufpKqnrvx9p4", {
  kind: "reembolso",
  amount: 1350,
  date: "2026-11-07",
});
```

```python tab="Python"
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

expense_report = fiscalisto.expense_reports.create_movement("exr_OufpKqnrvx9p4", {
    "kind": "reembolso",
    "amount": 1350,
    "date": "2026-11-07",
})
```

```php tab="PHP"
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$expenseReport = $fiscalisto->expenseReports->createMovement('exr_OufpKqnrvx9p4', [
    'kind' => 'reembolso',
    'amount' => 1350,
    'date' => '2026-11-07',
]);
```

```go tab="Go"
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	expenseReport, err := client.ExpenseReports.CreateMovement(ctx, "exr_OufpKqnrvx9p4", &fiscalisto.CreateExpenseMovementParams{
		Kind:   "reembolso",
		Amount: 1350,
		Date:   "2026-11-07",
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(expenseReport.ID)
}
```

```java tab="Java"
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.model.CreateExpenseMovementParams;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expenseReport = fiscalisto.expenseReports().createMovement("exr_OufpKqnrvx9p4", new CreateExpenseMovementParams()
        .setKind("reembolso")
        .setAmount(1350)
        .setDate("2026-11-07"));
System.out.println(expenseReport.getId());
```

```csharp tab="C#"
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expenseReport = await fiscalisto.ExpenseReports.CreateMovementAsync("exr_OufpKqnrvx9p4", new CreateExpenseMovementParams
{
    Kind = "reembolso",
    Amount = 1350,
    Date = "2026-11-07",
});
```

`DELETE /v1/expense_reports/{id}/movements/{movement}` deshace un movimiento, y `POST /v1/expense_reports/{id}/reopen` regresa una aprobada a abierta: sus facturas dejan de deducirse y sale de las pólizas. No se puede reabrir una que ya se reportó en un recibo de nómina.

## La política

`GET /v1/expense_policy` trae los topes por categoría (`limits`, al día y por persona o por gasto, en México y en el extranjero), hasta cuánto se acepta sin factura (`ticket_limit`) y en cuántos días se comprueba (`due_days`). `POST /v1/expense_policy` cambia solo lo que manda:

```bash tab="cURL"
curl https://api.fiscalisto.com/v1/expense_policy \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "limits": { "alimentos": { "domestic": 750, "abroad": 1500, "per": "dia" } },
    "ticket_limit": 500
  }'
```

```ts tab="TypeScript"
import { Fiscalisto } from "fiscalisto";

// La llave viene de FISCALISTO_API_KEY.
const fiscalisto = new Fiscalisto();

const expensePolicy = await fiscalisto.expensePolicy.update({
  limits: {
    alimentos: { domestic: 750, abroad: 1500, per: "dia" },
  },
  ticket_limit: 500,
});
```

```python tab="Python"
from fiscalisto import Fiscalisto

# La llave viene de FISCALISTO_API_KEY.
fiscalisto = Fiscalisto()

expense_policy = fiscalisto.expense_policy.update({
    "limits": {
        "alimentos": {
            "domestic": 750,
            "abroad": 1500,
            "per": "dia",
        },
    },
    "ticket_limit": 500,
})
```

```php tab="PHP"
<?php

use Fiscalisto\Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
$fiscalisto = new Fiscalisto();

$expensePolicy = $fiscalisto->expensePolicy->update([
    'limits' => [
        'alimentos' => [
            'domestic' => 750,
            'abroad' => 1500,
            'per' => 'dia',
        ],
    ],
    'ticket_limit' => 500,
]);
```

```go tab="Go"
package main

import (
	"context"
	"fmt"
	"log"

	fiscalisto "fiscalisto.com/go"
)

func main() {
	// La llave viene de FISCALISTO_API_KEY.
	client, err := fiscalisto.NewClient("")
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()

	expensePolicy, err := client.ExpensePolicy.Update(ctx, &fiscalisto.UpdateExpensePolicyParams{
		Limits: map[string]any{
			"alimentos": map[string]any{
				"domestic": 750,
				"abroad":   1500,
				"per":      "dia",
			},
		},
		TicketLimit: fiscalisto.Float64(500),
	})
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", *expensePolicy)
}
```

```java tab="Java"
import com.fiscalisto.FiscalistoClient;
import com.fiscalisto.model.UpdateExpensePolicyParams;
import java.util.Map;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expensePolicy = fiscalisto.expensePolicy().update(new UpdateExpensePolicyParams()
        .setLimits(Map.of(
                "alimentos", Map.of(
                        "domestic", 750,
                        "abroad", 1500,
                        "per", "dia"
                )
        ))
        .setTicketLimit(500));
System.out.println(expensePolicy);
```

```csharp tab="C#"
using System.Text.Json;
using Fiscalisto;

// La llave viene de FISCALISTO_API_KEY.
var fiscalisto = new FiscalistoClient();

var expensePolicy = await fiscalisto.ExpensePolicy.UpdateAsync(new UpdateExpensePolicyParams
{
    Limits = JsonDocument.Parse("{\"alimentos\":{\"domestic\":750,\"abroad\":1500,\"per\":\"dia\"}}").RootElement,
    TicketLimit = 500,
});
```

Un gasto que pasa un tope de la política no se rechaza: se marca (`over_policy`) para quien aprueba. Los topes de la ley se aplican siempre, a la deducción.
