Skip to main content

Discount, interest and fine simulator

Tweak the modality, value, due date, discount, interest and fine to preview — day by day — how much a customer pays across the lifetime of a Pix charge with due date (OVERDUE / COBV). The calculations run 100% in your browser — nothing is sent to the Woovi API and no charge is created.

The form labels below are currently in pt-BR. Localizing the component strings is tracked as a follow-up.

Carregando simulador…

Discount modalities

Woovi exposes six modalities, aligned with the BACEN COBV standard:

  1. FIXED_VALUE_UNTIL_SPECIFIED_DATE — fixed cents off, valid until a specified date. Accepts multiple tiers (e.g. R$1.00 off if paid 5 days early; R$0.50 off if paid 10 days early).
  2. PERCENTAGE_UNTIL_SPECIFIED_DATE — same idea in percentage (basis points).
  3. VALUE_PER_RUNNING_DAY_ADVANCE — cents per running (calendar) day before the due date.
  4. VALUE_PER_BUSINESS_DAY_ADVANCE — cents per business day (skips weekends and BR banking holidays).
  5. PERCENTAGE_PER_RUNNING_DAY_ADVANCE — basis points per running day before the due date.
  6. PERCENTAGE_PER_BUSINESS_DAY_ADVANCE — basis points per business day.

How the math works

  • Discount (discountSettings): only applied before the due date (dayIndex < daysForDueDate). On the due date and later the discount is zero.
  • Interest (interests.value): basis points per running day, only after the due date. E.g. 100 = 1.00% per day.
  • Fine (fines.value): applied once after the due date. type: 'FIXED' in cents; type: 'PERCENTAGE' in basis points over the principal.
  • daysAfterDueDate: defines the simulation window after the due date — not an expiration rule. After this limit, the screen simply stops generating rows.

Unit convention

To avoid floating-point pitfalls, Woovi (and BACEN) use two integer units:

  • CentsR$1.00 = 100. Applies to chargeValue, value of modalities 3/4, entries of discountFixedDate for modality 1, and fines with type: 'FIXED'.
  • Basis points1.00% = 100. Applies to value of modalities 5/6, entries of modality 2, interests.value, and fines with type: 'PERCENTAGE'.

The screen shows a readable preview next to each field (R$X.XX or X.XX%) so you don't have to do the math yourself.

Export to the API

  • Copiar JSON returns the envelope { modality, modalityNumber, input, rows } — same format emitted by the --out flag of the simulateChargeDiscount.ts script in the Woovi monorepo.
  • Copiar como cURL assembles a POST /api/v1/charge ready to run. Replace <APP_ID> with your AppID and <CORRELATION_ID> with a unique identifier before executing.

daily vs summary mode

By default the schedule shows one row per day (daily). Toggle Summary mode to keep only relevant milestones: creation day, days where the discount tier changes, the due date itself, the first day after the due date, and the last simulated day.