Skip to main content

Overview

The Sincronizacion service synchronizes parametric catalogs from SIAT to your local system. These catalogs contain essential reference data like:
  • Economic activities
  • Product and service codes (SIN codes)
  • Document types
  • Payment methods
  • Currencies and units of measure
  • Tax legends
Synchronize catalogs regularly (daily or weekly) to ensure your system has the latest codes required for invoice validation.

Initialize the Service

import (
    "github.com/ron86i/go-siat"
    "github.com/ron86i/go-siat/pkg/config"
    "github.com/ron86i/go-siat/pkg/models"
)

s, err := siat.New("https://pilotosiatservicios.impuestos.gob.bo/v2", nil)
if err != nil {
    log.Fatalf("Error: %v", err)
}

sincService := s.Sincronizacion

cfg := config.Config{Token: "YOUR_API_TOKEN"}
ctx := context.Background()

Generic Builder Pattern

All synchronization requests use a generic builder with common parameters:
request := models.Sincronizacion.NewSyncFunction().
    WithCodigoAmbiente(1).          // 1=Production, 2=Pilot
    WithNit(123456789).             // Your NIT
    WithCodigoSistema("ABC123DEF"). // System code
    WithCuis("C2FC682B").           // Valid CUIS
    Build()
Most synchronization operations don’t require CodigoPuntoVenta or CodigoSucursal. Only specify them when the catalog is point-of-sale specific.

Synchronize Economic Activities

1

Build Request

actReq := models.Sincronizacion.NewSincronizarActividadesRequest().
    WithCodigoAmbiente(1).
    WithNit(123456789).
    WithCodigoSistema("ABC123DEF").
    WithCuis("C2FC682B").
    Build()
2

Execute and Process

actResp, err := sincService.SincronizarActividades(ctx, cfg, actReq)
if err != nil {
    log.Fatalf("Error syncing activities: %v", err)
}

if actResp.RespuestaListaActividades.Transaccion {
    fmt.Println("Activities synchronized successfully")
    
    // Process the activities list
    for _, act := range actResp.RespuestaListaActividades.ListaCodigos {
        fmt.Printf("Activity: %s - %s\n", 
            act.CodigoCaeb, act.Descripcion)
        // Store in your database
    }
}

Synchronize Products and Services

The products/services catalog contains SIN codes required for invoice line items:
prodReq := models.Sincronizacion.NewSincronizarListaProductosServiciosRequest().
    WithCodigoAmbiente(1).
    WithNit(123456789).
    WithCodigoSistema("ABC123DEF").
    WithCuis("C2FC682B").
    Build()

prodResp, err := sincService.SincronizarListaProductosServicios(ctx, cfg, prodReq)
if err != nil {
    log.Fatalf("Error syncing products: %v", err)
}

if prodResp.RespuestaListaProductos.Transaccion {
    fmt.Printf("Synced %d products/services\n", 
        len(prodResp.RespuestaListaProductos.ListaCodigos))
    
    // Store products in database
    for _, prod := range prodResp.RespuestaListaProductos.ListaCodigos {
        fmt.Printf("SIN Code: %s - %s\n", 
            prod.CodigoProducto, prod.DescripcionProducto)
    }
}

Synchronize Parametric Catalogs

Parametric catalogs provide reference data for various invoice fields:

Document Types

docReq := models.Sincronizacion.NewSincronizarParametricaTipoDocumentoIdentidadRequest().
    WithCodigoAmbiente(1).
    WithNit(123456789).
    WithCodigoSistema("ABC123DEF").
    WithCuis("C2FC682B").
    Build()

docResp, err := sincService.SincronizarParametricaTipoDocumentoIdentidad(
    ctx, cfg, docReq)

Payment Methods

pagoReq := models.Sincronizacion.NewSincronizarParametricaTipoMetodoPagoRequest().
    WithCodigoAmbiente(1).
    WithNit(123456789).
    WithCodigoSistema("ABC123DEF").
    WithCuis("C2FC682B").
    Build()

pagoResp, err := sincService.SincronizarParametricaTipoMetodoPago(
    ctx, cfg, pagoReq)

Currencies

monedaReq := models.Sincronizacion.NewSincronizarParametricaTipoMonedaRequest().
    WithCodigoAmbiente(1).
    WithNit(123456789).
    WithCodigoSistema("ABC123DEF").
    WithCuis("C2FC682B").
    Build()

monedaResp, err := sincService.SincronizarParametricaTipoMoneda(
    ctx, cfg, monedaReq)

Units of Measure

unidadReq := models.Sincronizacion.NewSincronizarParametricaUnidadMedidaRequest().
    WithCodigoAmbiente(1).
    WithNit(123456789).
    WithCodigoSistema("ABC123DEF").
    WithCuis("C2FC682B").
    Build()

unidadResp, err := sincService.SincronizarParametricaUnidadMedida(
    ctx, cfg, unidadReq)

Complete Synchronization Example

Perform a complete catalog synchronization:
package main

import (
    "context"
    "fmt"
    "log"

    "github.com/ron86i/go-siat"
    "github.com/ron86i/go-siat/pkg/config"
    "github.com/ron86i/go-siat/pkg/models"
)

func main() {
    s, err := siat.New("https://pilotosiatservicios.impuestos.gob.bo/v2", nil)
    if err != nil {
        log.Fatalf("Error: %v", err)
    }

    sincService := s.Sincronizacion
    ctx := context.Background()
    cfg := config.Config{Token: "YOUR_API_TOKEN"}

    // Common parameters
    nit := int64(123456789)
    sistema := "ABC123DEF"
    cuis := "C2FC682B"

    // Sync economic activities
    actReq := models.Sincronizacion.NewSincronizarActividadesRequest().
        WithCodigoAmbiente(1).
        WithNit(nit).
        WithCodigoSistema(sistema).
        WithCuis(cuis).
        Build()

    actResp, err := sincService.SincronizarActividades(ctx, cfg, actReq)
    if err == nil && actResp.RespuestaListaActividades.Transaccion {
        fmt.Println("✓ Activities synchronized")
    }

    // Sync products and services
    prodReq := models.Sincronizacion.NewSincronizarListaProductosServiciosRequest().
        WithCodigoAmbiente(1).
        WithNit(nit).
        WithCodigoSistema(sistema).
        WithCuis(cuis).
        Build()

    prodResp, err := sincService.SincronizarListaProductosServicios(ctx, cfg, prodReq)
    if err == nil && prodResp.RespuestaListaProductos.Transaccion {
        fmt.Printf("✓ Synced %d products/services\n", 
            len(prodResp.RespuestaListaProductos.ListaCodigos))
    }

    // Sync parametric catalogs
    syncParametrics(ctx, cfg, sincService, nit, sistema, cuis)
}

func syncParametrics(ctx context.Context, cfg config.Config, 
    service *siat.SincronizacionService, nit int64, sistema, cuis string) {
    
    catalogs := []struct {
        name string
        fn   func() error
    }{
        {"Document Types", func() error {
            req := models.Sincronizacion.NewSincronizarParametricaTipoDocumentoIdentidadRequest().
                WithCodigoAmbiente(1).WithNit(nit).WithCodigoSistema(sistema).WithCuis(cuis).Build()
            _, err := service.SincronizarParametricaTipoDocumentoIdentidad(ctx, cfg, req)
            return err
        }},
        {"Payment Methods", func() error {
            req := models.Sincronizacion.NewSincronizarParametricaTipoMetodoPagoRequest().
                WithCodigoAmbiente(1).WithNit(nit).WithCodigoSistema(sistema).WithCuis(cuis).Build()
            _, err := service.SincronizarParametricaTipoMetodoPago(ctx, cfg, req)
            return err
        }},
        {"Currencies", func() error {
            req := models.Sincronizacion.NewSincronizarParametricaTipoMonedaRequest().
                WithCodigoAmbiente(1).WithNit(nit).WithCodigoSistema(sistema).WithCuis(cuis).Build()
            _, err := service.SincronizarParametricaTipoMoneda(ctx, cfg, req)
            return err
        }},
    }

    for _, cat := range catalogs {
        if err := cat.fn(); err == nil {
            fmt.Printf("✓ %s synchronized\n", cat.name)
        }
    }
}

Available Synchronization Functions

Core Catalogs

FunctionDescription
SincronizarActividadesEconomic activities (CAEB codes)
SincronizarListaProductosServiciosProducts and services (SIN codes)
SincronizarListaLeyendasFacturaInvoice legends (legal text)
SincronizarListaActividadesDocumentoSectorActivity-document sector mapping
SincronizarListaMensajesServiciosService error messages

Parametric Catalogs

FunctionDescription
SincronizarParametricaTipoDocumentoIdentidadIdentity document types
SincronizarParametricaTipoDocumentoSectorDocument sector types
SincronizarParametricaTipoEmisionEmission types
SincronizarParametricaTiposFacturaInvoice types
SincronizarParametricaTipoMetodoPagoPayment methods
SincronizarParametricaTipoMonedaCurrency codes
SincronizarParametricaUnidadMedidaUnits of measure
SincronizarParametricaTipoPuntoVentaPoint of sale types
SincronizarParametricaMotivoAnulacionCancellation reasons
SincronizarParametricaEventosSignificativosSignificant events
SincronizarParametricaPaisOrigenCountry codes

Best Practices

  • Perform initial sync when setting up the system
  • Schedule daily syncs for critical catalogs (products, activities)
  • Weekly syncs are sufficient for stable parametric data
  • Sync immediately after SIAT announces catalog updates
  • Store catalogs in a local database for fast lookup
  • Index by code fields for efficient searches
  • Track sync timestamps to identify stale data
  • Implement soft deletes to preserve historical references
  • Log sync failures but don’t block operations
  • Use cached data if sync fails
  • Alert administrators when catalogs become outdated
  • Validate that critical catalogs exist before allowing invoicing
  • Run synchronization in background jobs
  • Don’t sync during peak business hours
  • Cache frequently-used catalog entries in memory
  • Consider parallel syncing for multiple catalogs

Next Steps

Point of Sale Operations

Register and manage points of sale

Invoice Submission

Create and submit electronic invoices

Build docs developers (and LLMs) love