Tarifes
Crea preus EUR per client, resol la precedència del catàleg i repricia esborranys sense reescriure l'històric.
Les tarifes sobreescriuen preus de venda del catàleg dins d'una empresa. Són
tenant-scoped, només EUR i usen preus unitaris amb quatre decimals per mantenir
precisió en productes mesurats. Pertanyen al mòdul de pla Productes, però usen
scopes propis: price_lists:read i price_lists:write.
Cicle de vida i endpoints
| Operació | Endpoint | Scope |
|---|---|---|
| Llistar / crear | GET, POST /v1/price-lists | price_lists:read / price_lists:write |
| Opcions compactes | GET /v1/price-lists/options | price_lists:read |
| Llegir / actualitzar / eliminar | GET, PUT, DELETE /v1/price-lists/{priceList} | lectura / escriptura |
| Llistar / upsert d'ítems | GET, POST /v1/price-lists/{priceList}/items | lectura / escriptura |
| Eliminar un ítem | DELETE /v1/price-lists/{priceList}/items/{item} | price_lists:write |
| Resoldre preu efectiu | POST /v1/price-lists/resolve | price_lists:read |
| Resoldre fins a 100 seleccions | POST /v1/price-lists/resolve-many | price_lists:read |
| Reassignar un ítem retirat | POST /v1/price-lists/{priceList}/items/{item}/reassign | price_lists:write |
| Purgar definitivament un ítem retirat | POST /v1/price-lists/{priceList}/items/{item}/purge | price_lists:write |
Una tarifa neix active; PUT alterna entre active i inactive. Les
inactives continuen llegibles per a històric, però no se seleccionen en clients
o documents nous. No es pot eliminar una tarifa assignada a clients o
esborranys. Les eliminacions de tarifa i ítem són irreversibles.
curl -X POST https://api.factuarea.com/v1/price-lists \
-H "Authorization: Bearer $FACTUAREA_API_KEY" \
-H "Idempotency-Key: 01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a01" \
-H "Content-Type: application/json" \
-d '{"name":"Majorista 2026"}'El nom és únic dins de l'empresa.
Afegir o reemplaçar un preu
POST /v1/price-lists/{priceList}/items fa upsert. Un destí es pot anomenar de
tres formes mútuament excloents:
- configuració comercial emmagatzemada (
configuration_id); - selecció normalitzada (
selection_signature, 64 caràcters hexadecimals); - creuament legacy de producte + variant/presentació opcionals.
{
"product_id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a20",
"configuration_id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a21",
"unit_price": "79.5000",
"price_unit": "C62"
}Envia l'id d'un ítem per actualitzar exactament aquell ítem. Reutilitzar el
mateix destí amb un altre id es rebutja. price_unit ha de ser compatible amb
el destí. El llistat accepta search sobre els noms visibles de producte,
variant, presentació, configuració i valors d'opció, a més de
status=active|retired.
Precedència de resolució
Per a una selecció nova el resolver aplica aquest ordre estable:
- tarifa dirigida a la configuració emmagatzemada;
- tarifa dirigida a la signatura de selecció;
- tarifa legacy (variant + presentació, variant, presentació, producte, de més a menys específica);
- preu comercial final propi de la configuració;
- preu comercial propi de la presentació;
- preu propi de la variant per unitat base;
- preu del producte per unitat base.
Tota entrada de tarifa guanya a qualsevol preu propi del catàleg. Els ajustos d'opció només se sumen si la font guanyadora no els ha absorbit ja.
POST /v1/price-lists/resolve{
"price_list_id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a02",
"product_id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a20",
"configuration_id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a21",
"selection_signature": "b7293f69a30c36b77f6d5ba27f2bc4f1f68e97e447ab8776bf080531d0a1dcee",
"option_value_ids": ["01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a22"]
}La resposta identifica origen, unit_price, price_unit, unitat base i
snapshot de tarifa. També retorna unit_semantics, source_amount,
option_adjustment_total i option_adjustments_absorbed, per detectar si els
ajustos d'opció s'han absorbit o sumat. Ometre price_list_id recorre els preus
propis del catàleg. Una font per unitat base es converteix una vegada amb una
presentació fixa; una font per unitat comercial no es converteix mai.
POST /v1/price-lists/resolve-many resol fins a 100 seleccions completes en una
petició de només lectura i pot comparar cada resultat amb current_unit_price.
Emparella per index, no per l'ordre de la resposta. Un destí invàlid
s'atribueix a targets.<n>.
Destins retirats
Quan una eliminació de catàleg confirmada invalida un destí, la seva entrada de tarifa queda retirada, no redirigida en silenci al preu del producte. Conserva import, motiu/data i snapshot del destí, però s'exclou de la resolució, assignacions i estadístiques.
Fes servir .../{item}/reassign per crear una entrada activa nova dirigida
a un destí viu; la retirada queda com a històric immutable.
.../{item}/purge esborra definitivament aquest històric i exigeix
confirm: true, Idempotency-Key i confirmació irreversible als clients que
respecten x-irreversible. No es pot purgar una entrada activa o desconeguda.
Contactes, esborranys i repricing
Configura la tarifa de venda del contacte amb PUT /v1/contacts/{contact}/customer-profile
i default_price_list_uuid; els documents de venda nous conserven
price_list_id. Factures, pressupostos, proformes, albarans i plantilles
recurrents retornen id/nom de tarifa i els camps resolts de cada línia.
Canviar la tarifa d'un esborrany amb línies exigeix reprice_strategy:
| Estratègia | Efecte |
|---|---|
existing_catalog_lines | Recalcula línies amb font price_list, variant o product. |
future_lines_only | Conserva totes les línies i aplica la nova tarifa només a seleccions futures. |
Els preus manuals, costos d'oferta de proveïdor i snapshots de packs mai es repricien silenciosament. Els documents emesos/històrics són snapshots immutables i no canvien en editar una tarifa.
Errors i MCP
Ramifica per aquests codis, no pel missatge: price_list_not_found,
duplicate_price_list_name, inactive_price_list, invalid_price_list_item i
price_list_in_use.
El domini MCP Pricing té 13 tools equivalents: list_price_lists,
create_price_list, get_price_list, update_price_list, delete_price_list,
get_price_list_options, list_price_list_items, upsert_price_list_item,
delete_price_list_item, resolve_catalog_price, resolve_many_catalog_prices,
reassign_retired_price_list_item i purge_retired_price_list_item. El consentiment OAuth
exposa price_lists.read i price_lists.write, de manera que les 13 tools estan
disponibles tant mitjançant OAuth com mitjançant API key, subjectes al mòdul
Productes del pla.
Consulta Catàleg de productes, Imports i dates i la Referència de l'API.
Conserva els valors resolts de la línia
Conserva price_unit i les quantitats base i comercials resoltes juntament amb el snapshot del catàleg. additional_description afegeix detall llegible sense seleccionar un altre preu. La vista prèvia de recurrents exposa la factura següent resolta sense desar-la; consulta factures recurrents i l’exemple concret de resposta de l’operació.