TaxCodes en QuickBooks

Los TaxCodes son identificadores que QuickBooks usa para determinar que impuestos aplicar a cada linea de factura. En el sistema de Costa Rica se usan estos codigos:

13%
IVA General
TaxCode: 18
13%
IVA Servicios
TaxCode: 17
0%
Exento / Exportacion
TaxCode: 12
TaxCodeTasaTipoUso
1813%IVA GeneralProductos y bienes gravados
1713%IVA ServiciosServicios profesionales
120%ExentoProductos exentos, exportaciones
GlobalTaxCalculation: Siempre usar "TaxExcluded" en facturas con impuestos. Esto indica que los montos de linea no incluyen el impuesto — QB lo calcula aparte.
Tasas de impuesto — Costa Rica
13%
IVA Estandar
Bienes y servicios
4%
IVA Reducida
Canasta basica
2%
IVA Minima
Salud, educacion
TasaNombreTaxCode QBAplicacion
13%IVA General18Bienes y servicios generales
13%IVA Servicios17Servicios profesionales y tecnicos
4%IVA ReducidaCanasta basica tributaria
2%IVA MinimaServicios de salud y educacion
1%IVA EspecialBienes de primera necesidad
0%Exento12Exportaciones, exoneraciones
Uso en facturas de venta (Invoices)

Cada linea de factura incluye un TaxCodeRef que determina el impuesto aplicado.

Estructura de linea

{
  Amount: 100000,
  DetailType: "SalesItemLineDetail",
  SalesItemLineDetail: {
    ItemRef: { value: "1", name: "Services" },
    Qty: 1,
    UnitPrice: 100000,
    TaxCodeRef: { value: "18" }     // ← 18 = IVA 13%
  }
}

Factura completa con impuesto

{
  CustomerRef: { value: "42" },
  DocNumber: "FE-001-2025",           // max 21 chars
  TxnDate: "2025-02-15",
  CurrencyRef: { value: "CRC" },
  GlobalTaxCalculation: "TaxExcluded", // REQUERIDO con impuestos
  Line: [
    {
      Amount: 100000,
      DetailType: "SalesItemLineDetail",
      SalesItemLineDetail: {
        ItemRef: { value: "1", name: "Services" },
        Qty: 1,
        UnitPrice: 100000,
        TaxCodeRef: { value: "18" }   // IVA 13%
      }
    },
    {
      Amount: 50000,
      DetailType: "SalesItemLineDetail",
      SalesItemLineDetail: {
        ItemRef: { value: "1", name: "Services" },
        Qty: 1,
        UnitPrice: 50000,
        TaxCodeRef: { value: "12" }   // Exento
      }
    }
  ]
}
// Total = 100,000 + 13,000 (IVA) + 50,000 = 163,000
Mapeo automatico: El sistema determina el TaxCode segun la tasa: 13% → 18, 0% → 12. La funcion determinarTaxCodeOptimo(tasa) maneja la logica.
Tarifas en facturas de compra (Bills)

Las facturas de compra traen un campo tarifas con el desglose detallado de impuestos. Cada tarifa se mapea a una linea separada en el Bill.

Formato de la API externa

{
  "numero": "FC-001-2025",
  "proveedor": "Distribuidora ABC S.A.",
  "subtotal": 100000,
  "total": 111000,
  "tarifas": [
    {
      "id": 724,
      "nombre_tarifa": "Tarifa general 13%",
      "tasa": "13.00",
      "monto": "13000.00"
    },
    {
      "id": 825,
      "nombre_tarifa": "Retencion IR 2%",
      "tasa": "2.00",
      "monto": "-2000.00"      // negativo = retencion
    }
  ]
}

Tipos de impuestos reconocidos

TipoPalabras claveCuenta QBCodigo
IVATarifa general 13%, IVA, impuesto sobre las ventasIVA por Pagar2110
RET IRRetencion IR 2%, retencion, rentaRetencion Impuesto sobre la Renta2120
RET IVAretencion_iva, retencion_otrosRetenciones por Pagar2125
Timbrestimbre, timbresTimbres Fiscales2130
Contrib.contribucion, contribucionContribuciones por Pagar2140
OtrosCualquier otroImpuestos por Pagar2100
Ejemplo de contabilizacion

Una factura de compra con IVA y retencion genera multiples lineas en el Bill de QuickBooks.

Bill generado

Line: [
  {
    Amount: 100000,                    // Gasto principal
    DetailType: "AccountBasedExpenseLineDetail",
    AccountBasedExpenseLineDetail: {
      AccountRef: { value: "601" }     // Gastos de Oficina (IA)
    },
    Description: "Compra de suministros"
  },
  {
    Amount: 13000,                     // IVA
    DetailType: "AccountBasedExpenseLineDetail",
    AccountBasedExpenseLineDetail: {
      AccountRef: { value: "2110" }    // IVA por Pagar
    },
    Description: "IVA - 13%"
  },
  {
    Amount: -2000,                     // Retencion (negativa)
    DetailType: "AccountBasedExpenseLineDetail",
    AccountBasedExpenseLineDetail: {
      AccountRef: { value: "2120" }    // Retencion IR
    },
    Description: "Retencion - 2%"
  }
]

Asiento contable resultante

CuentaDebeHaber
Gastos de Oficina₡100,000
IVA por Pagar₡13,000
Retencion IR₡2,000
Cuentas por Pagar₡111,000
API y CLI

Endpoints REST

MetodoEndpointDescripcion
GET/taxratesObtener tasas de impuestos configuradas en QB
GET/taxcodesObtener codigos de impuestos disponibles

Obtener TaxCodes via API

curl -X GET "https://api.admindual.com/taxcodes?org=DUAL" \
  -H "x-api-key: YOUR_API_KEY"

Logica de determinacion

// src/utils/taxUtils.js

function determinarTaxCodeOptimo(taxRate) {
  if (!taxRate || taxRate <= 0)  return '12';   // Exento
  if (taxRate === 13)             return '18';   // IVA General
  return '18';                                    // Default IVA
}
Asignacion de cuentas: En facturas de compra, la IA analiza la descripcion y proveedor para sugerir la cuenta contable del gasto base. Las cuentas de impuestos se asignan automaticamente por tipo.
Configuracion en QuickBooks

Requisitos previos

1. Settings → Tax → Configurar tasas de impuestos
2. Activar codigos necesarios (18, 17, 12)
3. Verificar que las cuentas contables existan:
   - 2110: IVA por Pagar
   - 2120: Retencion IR
   - 2125: Retenciones por Pagar

Mejores practicas

PracticaDetalle
Cachear TaxCodesEvitar llamadas repetitivas al API de QB
Validar tasasAsegurar que sean numericas antes de mapear
FallbackSi QB no responde, usar codigos por defecto (18, 12)
Rate limitingRespetar limites: delay entre llamadas al endpoint