Changelog debug

Cambios del API /api/v1 para front-end, mobile e integradores.

← Volver al índice
Breaking cliente conductor admin

2026-08-29 — El fondo solidario, completo y en litros

Para el front-end y mobile del cliente y del conductor, y el panel admin.

Summary

Al fondo solidario aportan tres partes, cada una con su 1%: el cliente, el conductor, y Agüita, que iguala lo que pone el conductor. El dato siempre se guardó bien, pero las pantallas mostraban solo dos. Como el total sí incluía los tres, el desglose no cuadraba con su propio total y faltaba explicar cerca de un tercio del fondo.

Aparte, los campos que se anunciaban como "litros donados" no usaban la tasa de 5 USD/1000 L: sumaban los litros entregados por las órdenes que aportaron. Eso daba una cifra inflada decenas de veces.

Ambas cosas quedan corregidas, y todo lo que se muestra en litros sale ahora de la misma tasa configurable.

Changes

El desglose del fondo muestra los tres aportes

Endpoint Campo nuevo
GET /solidarity/stats aguitaContributionsUSD
GET /admin/solidarity-fund aguita_contributions_usd

En ambos se cumple ahora que cliente + conductor + Agüita = total.

Las contribuciones anteriores al 2026-06-08 son previas al aporte de Agüita: en ellas sale 0 y los otros dos ya componen su total. No es un error, es que entonces Agüita todavía no aportaba.

El recibo del pedido

GET /orders/{orderId}/receipt suma aguita_solidary_usd al breakdown, junto a los otros dos aportes. Antes se veían dos ítems que no sumaban el solidary_fund_usd que el mismo recibo mostraba. El recibo del conductor (GET /orders/{orderId}/driver-receipt) también lo incluye.

Ojo al mostrarlo: el aporte de Agüita sale de su propia comisión, así que no se suma a client_pays_usd. Al cliente no le cuesta nada.

El conductor ve que Agüita iguala su aporte

GET /drivers/me/stats y GET /driver/stats agregan, en cada bloque:

Campo Para qué sirve
matchedByAguitaUSD Lo que Agüita aportó igualando a ese conductor.
matchedByAguitaLTS Lo mismo, en litros.
totalImpactLTS Litros financiados entre su aporte y el de Agüita.

GET /driver/stats además pasa a devolver solidaryLTS, que solo estaba en el otro endpoint.

No asumas que matchedByAguitaUSD es igual a solidaryUSD. Se suma de las órdenes reales: las entregas anteriores al 2026-06-08 no fueron igualadas, así que para un conductor veterano las dos cifras difieren.

El cliente ve su aporte en litros

GET /solidarity/me agrega totalSolidaryLTS en el bloque user, y totalSolidaryLTS / matchedByAguitaUSD / matchedByAguitaLTS / totalImpactLTS en el bloque driver.

Agüita iguala al conductor, no al cliente, así que matchedByAguita* solo aparece en el bloque driver. Ponerlo en el del cliente sería falso.

No confundas totalLitersOrdered / totalLitersDelivered (litros de agua pedidos o entregados) con los campos *LTS (litros que financia el aporte).

Configuración

GET /admin/config/solidary devuelve aguita_solidary_pct. Es derivado y de solo lectura: siempre vale lo mismo que driver_solidary_pct y no se guarda. Mandarlo en el PATCH ahora da 422 en vez de ignorarse en silencio.

Cambios de valor (romper vs. antes)

Dos campos existentes cambian de valor sin cambiar de nombre. Si el front los muestra, hay que revisarlo antes de desplegar.

totalLitersDonated y total_liters_donated

Pasan a ser los litros que financia el fondo, a la tasa aguita.solidary.usd_per_1000_liters (5 USD por cada 1000 L). Antes sumaban los litros entregados por las órdenes que aportaron, que es otra cosa y daba un número mucho mayor.

Con un fondo de $1.240,50: antes 15.600.000, ahora 248.100.

GET /admin/solidarity-fund suma además assigned_liters y remanent_liters, en la misma unidad que sus equivalentes en dólares.

solidary_fund_usd en /admin/reports/orders

Se calculaba a mano como cliente + conductor, omitiendo el aporte de Agüita. Ahora usa el total real, así que sube. Afecta también a la columna "Fondo solidario (USD)" del CSV: una descarga vieja no cuadra con una nueva para los mismos pedidos. El valor viejo estaba mal; el mismo campo daba cifras distintas según el endpoint que preguntaras.