CautelaSynthetic data

Data analytics · workflow choice

Why Cautela starts with unrecognized-charge disputes

12,297of 67,095 complaints

are “cargo no reconocido”, a charge the customer does not recognize (called disputes on this page): 18.3% of all complaints, the largest of 10 complaint types, ahead of the next one by only 103 complaints (their 95% intervals overlap).

Organizer dataset, which is synthetic: nothing here describes a real bank. Warehouse warehouse_real.duckdb, gold run 20260927T012755Z-994fa0.

SLA breached
20.4%of disputes
2,507 of 12,297 disputes
Resolution time
15days median, 27 at p90
measured on the 2,862 disputes with a resolution time
Daily demand
11.2disputes per day
p95 18 per day, max 26 per day, over 1,098 days
Largest intake channel
50.4%Call Center
6,192 of 12,297 disputes

01

The largest complaint type, by a thin margin

Five complaint types sit within a few hundred complaints of each other. The volume lead alone would not justify the choice; the checks below and the fact that a disputed charge can be verified against the customer's own transactions do.

Complaints by type

Count of complaints per type, out of 67,095. Highlighted bar: unrecognized charge.

Transactions: unrecognized charge (Cargo no reconocido)
Fees: wrongful charge or fee (Cobro indebido)
Technical: app problem (Problema con app)
Branch: branch service (Atención en sucursal)
Service: service quality (Calidad de servicio)
Branch, no subcategory
Fees, no subcategory
Service, no subcategory
Transactions, no subcategory
Technical, no subcategory
Show the numbers
Complaint typeComplaintsShare95% CI
Transactions: unrecognized charge (Cargo no reconocido)12,29718.3%18.0% to 18.6%
Fees: wrongful charge or fee (Cobro indebido)12,19418.2%17.9% to 18.5%
Technical: app problem (Problema con app)12,12818.1%17.8% to 18.4%
Branch: branch service (Atención en sucursal)11,89217.7%17.4% to 18.0%
Service: service quality (Calidad de servicio)11,88617.7%17.4% to 18.0%
Branch, no subcategory1,4692.2%2.1% to 2.3%
Fees, no subcategory1,3592.0%1.9% to 2.1%
Service, no subcategory1,3081.9%1.8% to 2.1%
Transactions, no subcategory1,2831.9%1.8% to 2.0%
Technical, no subcategory1,2791.9%1.8% to 2.0%

Source: data_analytics/reports/workflow_comparison.json

SLA breached, by complaint type

Share of each type's complaints whose SLA was breached, with its 95% interval. Axis from 15% to 25%. Every type falls between 18.1% and 20.6%, so this metric cannot rank workflows.

Transactions: unrecognized charge (Cargo no reconocido)
Fees: wrongful charge or fee (Cobro indebido)
Technical: app problem (Problema con app)
Branch: branch service (Atención en sucursal)
Service: service quality (Calidad de servicio)
Branch, no subcategory
Fees, no subcategory
Service, no subcategory
Transactions, no subcategory
Technical, no subcategory
Show the numbers
Complaint typeSLA breachedRate95% CIResolution p50 / p90 (days)
Transactions: unrecognized charge (Cargo no reconocido)2,507 / 12,29720.4%19.7% to 21.1%15 / 27
Fees: wrongful charge or fee (Cobro indebido)2,431 / 12,19419.9%19.2% to 20.6%16 / 27
Technical: app problem (Problema con app)2,429 / 12,12820.0%19.3% to 20.8%16 / 28
Branch: branch service (Atención en sucursal)2,421 / 11,89220.4%19.6% to 21.1%16 / 28
Service: service quality (Calidad de servicio)2,412 / 11,88620.3%19.6% to 21.0%16 / 28
Branch, no subcategory303 / 1,46920.6%18.6% to 22.8%16 / 28
Fees, no subcategory249 / 1,35918.3%16.4% to 20.5%14 / 28
Service, no subcategory259 / 1,30819.8%17.7% to 22.1%16 / 28
Transactions, no subcategory232 / 1,28318.1%16.1% to 20.3%16 / 28
Technical, no subcategory252 / 1,27919.7%17.6% to 22.0%16 / 27

Source: data_analytics/reports/workflow_comparison.json

02

Seven candidate workflows, ranked by the hours they leave unresolved

Contact reasons stand in for the workflows a bank could automate. Ranked by agent-hours spent on contacts not resolved the first time, disputes come last; the choice rests on verifiability instead.

Scroll sideways inside the table for all 8 columns.

RankWorkflow(team judgment) and data proxy(team judgment)Contacts per yearHandling timeFirst-contact resolutionAgent-hours per yearUnresolved-contact hours per yearVerifiable against records(team judgment), and the record that settles it(team judgment)
1(not a named workflow) general complaintscontact reason Complaint38,900435 s43.6%4,696.2 h2,648.7 hnocomplaint types are mixed and 0 complaints link to a contact; only the dispute subtype names a fact a record can check
2(not a named workflow) technical supportcontact reason Technical34,206361 s69.9%3,425.0 h1,029.8 hnoapp faults have no record in the data
3Credit-product information and eligibilitycontact reason Commercial18,243540 s65.2%2,736.1 h951.9 hnono approved eligibility policy in the data; the problem statement requires a labeled synthetic policy service
4Account or payment inquiriescontact reason Transactional79,800221 s91.5%4,894.5 h415.6 hpartlybalances and transactions answer the question, but what the customer asked is not recorded (one detected-intent value over all transcripts)
5Card-service supportcontact reason Product50,150266 s89.6%3,710.9 h385.0 hpartlyproduct status and expiry are recorded; card actions (block, replace) have no outcome record
6(not a named workflow) retentioncontact reason Retention6,841479 s60.2%910.6 h362.8 hnoa retention offer has no right answer in the records
7Transaction-dispute intake (unrecognized charge)chosenunrecognized-charge complaints (Cargo no reconocido); handling time and FCR of the Complaint reason4,088435 s43.6%493.5 h278.3 hyesthe customer's own transactions, with merchant, channel, amount and date

Team judgment, not measured: the workflow each contact reason stands for, whether its outcome can be verified, and the record that would settle it. Unresolved-contact hours = agent-hours per year × (1 − first-contact resolution). All contact-center handling adds up to 20,373.3 agent-hours per year.

Disputes rank 7 of 7 by these hours (278.3 h per year). They were chosen for verifiability: the customer’s own transactions settle each outcome, and 73.2% (8,998 of 12,297) of dispute complaints have a charge of the customer in the 90 days before, where the agent looks.

Source: data_analytics/reports/insights.json, workflow_ranking

03

Where disputes arrive, and how complaint contacts end

Half of the disputes come in by phone. In the contact center, complaint contacts have the lowest first-contact resolution of any reason.

Disputes by reception channel

Share of 12,297 unrecognized-charge complaints, by the channel that received them.

Call Center
Email
Web
App
Branch
Regulator
Show the numbers
ChannelComplaintsShare
Call Center6,19250.4%
Email2,38819.4%
Web1,80714.7%
App1,29910.6%
Branch4733.8%
Regulator1381.1%

Source: data_analytics/reports/dispute_channel_mix.json

First-contact resolution, by contact reason

Share of contact-center interactions resolved on the first contact, with its 95% interval. All reasons together: 76.6%.

Complaint
Retention
Commercial
Technical
Product
Transactional
Show the numbers
Contact reasonResolved first timeRate95% CIMean handling (s)
Complaint51,021 / 117,02143.6%43.3% to 43.9%435
Retention12,380 / 20,57860.2%59.5% to 60.8%479
Commercial35,786 / 54,87965.2%64.8% to 65.6%540
Technical71,959 / 102,89969.9%69.7% to 70.2%360
Product135,213 / 150,86389.6%89.5% to 89.8%266
Transactional219,671 / 240,05691.5%91.4% to 91.6%221

Source: data_analytics/reports/fcr_by_contact_reason.json

Read with care. 43.6% is the contact center’s first-contact resolution for the Complaint reason (51,021 / 117,021). It cannot be linked to disputes: 0 of 67,095 complaints name the interaction they came from, and which reason a disputed-charge call is filed under is not recorded. Filed as Transactional, its rate would be 91.5%.

04

When disputes arrive

Tuesday to Friday carry the load, Monday is lower and weekends drop. Across the hours of the day the profile is nearly flat.

Disputes by weekday

Unrecognized-charge complaints per ISO weekday, out of 12,297.

Show the numbers
WeekdayComplaintsShare
Mon1,65713.5%
Tue1,99516.2%
Wed2,06716.8%
Thu2,06516.8%
Fri2,06616.8%
Sat1,41611.5%
Sun1,0318.4%

Source: data_analytics/reports/demand_by_weekday.json

Disputes by hour of day

Complaints per hour as stored, out of 12,297. The data dictionary gives no timezone, so the hours may be shifted.

Show the numbers
HourComplaintsShare
00:004853.9%
01:005394.4%
02:005214.2%
03:005094.1%
04:004894.0%
05:005254.3%
06:005174.2%
07:005074.1%
08:005134.2%
09:005374.4%
10:005184.2%
11:005314.3%
12:004974.0%
13:004753.9%
14:004944.0%
15:005354.4%
16:005064.1%
17:005284.3%
18:005084.1%
19:005224.2%
20:005214.2%
21:005344.3%
22:004553.7%
23:005314.3%

Source: data_analytics/reports/demand_by_hour.json

05

By country and segment

Every country and segment files about 81 to 83 disputes per 1,000 customers. The need is the same everywhere, so one workflow can serve all three countries, each with its own claim-window rules: law where the team verified one, synthetic policy elsewhere.

Disputes per 1,000 customers, by country

Unrecognized-charge complaints divided by the country's customers, times 1,000.

Mexico
Colombia
Argentina
Show the numbers
CountryComplaintsCustomersPer 1,000SLA breachedResolution p50 / p90 (days)
Mexico6,14974,90782.0920.4%15 / 27
Colombia3,72745,25182.3620.2%15 / 28
Argentina2,42129,84281.1320.5%16 / 27

Source: data_analytics/reports/dispute_breakdowns.json

Disputes per 1,000 customers, by segment

Unrecognized-charge complaints divided by the segment's customers, times 1,000.

Basic
Plus
Premium
Student
Show the numbers
SegmentComplaintsCustomersPer 1,000SLA breachedResolution p50 / p90 (days)
Basic7,41489,75682.620.1%16 / 27
Plus3,02937,54780.6721.6%15 / 28
Premium1,22915,20780.8220.9%15 / 26.19999999999999
Student6257,49083.4417.0%14 / 27

Source: data_analytics/reports/dispute_breakdowns.json

06

Does the disposition model act safely?

Offline evaluation on the fresh test split (test_fresh), evaluated once: 1,240 generated cases (749 with one matching charge, 243 ambiguous, 248 with none). A decision is correct when the system acts on the right charge, asks with the right charge among its options when the case is ambiguous, or stops when nothing matches; unsafe means it acted when it should not have: on the wrong charge when one matched, or on any charge when the case was ambiguous or nothing matched (ml/metrics.py).

Correct decisions
89.8%vs 82.2% for the tuned rules baseline
Unsafe actions
4of 1,240 cases, vs 24 for the baseline

Correct decisions, by system

Share of 1,240 cases decided correctly, with its 95% interval. Axis from 60% to 100%.

Rules, fixed thresholds
Rules, tuned thresholds (baseline)
Learned ranker, calibrated thresholds
Learned ranker and disposition model (proposed)
Show the numbers
SystemCorrect95% CIActedAskedStopped
Rules, fixed thresholds69.6%66.2% to 72.9%7065340
Rules, tuned thresholds (baseline)82.2%79.5% to 84.8%617241382
Learned ranker, calibrated thresholds76.5%73.9% to 79.2%600157483
Learned ranker and disposition model (proposed)89.8%87.9% to 91.8%666247327

Source: ml/reports/results_fresh.json

Unsafe actions, by system

Cases where the system acted on the wrong charge, or acted at all on an ambiguous or no-match case, out of 1,240.

Rules, fixed thresholds
Rules, tuned thresholds (baseline)
Learned ranker, calibrated thresholds
Learned ranker and disposition model (proposed)
Show the numbers
SystemUnsafeCasesActed on
Rules, fixed thresholds551,240706
Rules, tuned thresholds (baseline)241,240617
Learned ranker, calibrated thresholds191,240600
Learned ranker and disposition model (proposed)41,240666

Source: ml/reports/results_fresh.json

07

What the dispute flow saves, and what one resolution costs

The range runs from the deployed configuration on chat disputes only to the decision component with call-center disputes routed to the same flow. Labor savings at this scale are small; section 02 gives the reason for the choice.

Conservative, chat only

50.9

agent-hours saved per year

USD 509 net per year

Reach
25.3% of disputes (App and Web disputes)
Automation rate
40.8%, end-to-end safe automated resolution, deployed
Share of contact-center hours
0.25%
Handoffs to a person
611 per year

Optimistic, with the call centerassumption

212.3

agent-hours saved per year

USD 2,123 net per year

Reach
75.6% of disputes (App, Web and call-center disputes)
Automation rate
56.9%, safe act rate (component)
Share of contact-center hours
1.04%
Handoffs to a person
1,332 per year

0 h487.1 h per year, highest scenario in the grid

Central handling time (7.24 min per dispute), USD 10 per agent-hour as a placeholder. A conversation the bot does not resolve safely is charged its tokens and then the full human handling time. Offline projection: no saving was measured in production.

Full grid: 12 scenarios of handling time, reach and rate

Scroll sideways inside the table for all 9 columns.

Handling timeReachRateDisputes sent to the bot per yearAgent-hours saved per yearAgent-hours still needed per yearShare of contact-center hoursLLM cost per yearNet saved per year
lowApp and Web disputes (25.3%)end-to-end safe automated resolution, deployed (40.8%)1,032.625.9 h37.5 h0.13%USD 0.21USD 258
lowApp and Web disputes (25.3%)safe act rate (component) (56.9%)1,032.636.0 h27.3 h0.18%USD 0.21USD 360
lowApp, Web and call-center disputes (75.6%) assumptionend-to-end safe automated resolution, deployed (40.8%)3,090.877.4 h112.2 h0.38%USD 0.64USD 773
lowApp, Web and call-center disputes (75.6%) assumptionsafe act rate (component) (56.9%)3,090.8107.9 h81.7 h0.53%USD 0.64USD 1,078
centralApp and Web disputes (25.3%)end-to-end safe automated resolution, deployed (40.8%)1,032.650.9 h73.8 h0.25%USD 0.21USD 509
centralApp and Web disputes (25.3%)safe act rate (component) (56.9%)1,032.670.9 h53.7 h0.35%USD 0.21USD 709
centralApp, Web and call-center disputes (75.6%) assumptionend-to-end safe automated resolution, deployed (40.8%)3,090.8152.3 h220.8 h0.75%USD 0.64USD 1,522
centralApp, Web and call-center disputes (75.6%) assumptionsafe act rate (component) (56.9%)3,090.8212.3 h160.8 h1.04%USD 0.64USD 2,123
highApp and Web disputes (25.3%)end-to-end safe automated resolution, deployed (40.8%)1,032.6116.7 h169.2 h0.57%USD 0.21USD 1,167
highApp and Web disputes (25.3%)safe act rate (component) (56.9%)1,032.6162.7 h123.2 h0.80%USD 0.21USD 1,627
highApp, Web and call-center disputes (75.6%) assumptionend-to-end safe automated resolution, deployed (40.8%)3,090.8349.4 h506.6 h1.71%USD 0.64USD 3,493
highApp, Web and call-center disputes (75.6%) assumptionsafe act rate (component) (56.9%)3,090.8487.1 h368.8 h2.39%USD 0.64USD 4,871

Source: data_analytics/reports/insights.json, projection_range

Cost of one resolution

Human handling per dispute
7.24 mincomplaint-contact mean, one contact
LLM cost per safe automated resolution
0.0006297USD, tokens only, measured
LLM cost per conversation
0.0002068USD, tokens only, measured
Hosting and compute
not definednot measured, excluded from every figure
Agent cost (placeholder)Human cost per disputeCost per dispute sent to the bot, conservative rate
USD 5 per agent-hourUSD 0.60USD 0.3574
USD 10 per agent-hourUSD 1.21USD 0.7146
USD 20 per agent-hourUSD 2.41USD 1.4291

The bot column adds the tokens of every conversation and the full human cost of each one it does not resolve safely.

Source: data_analytics/reports/insights.json, cost_per_resolution

08

The queue a person still handles

Every dispute the bot does not resolve safely reaches a person with the full handling time. In every scenario that is a few handoffs a day and a fraction of one agent in the busiest hour.

Disputes per day, all channels
11.2mean; p95 18.0, max 26 per day
Agent-minutes in the busiest hour, heaviest scenario
2.3 minWednesday 08:00, disputes as stored
Agent-minutes the contact center already handles in its busiest hour
170.4 minTuesday 03:00, all contact reasons

Scroll sideways inside the table for all 8 columns.

ReachRateHandoffs, share of disputesHandoffs per day, meanHandoffs per day, p95Handoffs in the busiest hourAgent-minutes in the busiest hourAgent-minutes on a p95 day
App and Web disputesend-to-end safe automated resolution, deployed14.9%1.72.70.110.76 min19.5 min
App and Web disputessafe act rate (component)10.9%1.22.00.080.55 min14.2 min
App, Web and call-center disputes assumptionend-to-end safe automated resolution, deployed44.8%5.08.10.312.27 min58.3 min
App, Web and call-center disputes assumptionsafe act rate (component)32.6%3.75.90.231.65 min42.5 min

Handoffs = disputes × reach × (1 − safe automated resolution), each at 7.24 agent-minutes. The busiest hour is the weekday-hour cell with the most disputes (Wednesday 08:00, 0.70 disputes a week against 0.51 in the median cell, over 156.9 weeks). Hours are as stored; the data gives no timezone.

Source: data_analytics/reports/insights.json, handoff_queue

09

What the two review thresholds send to a person

Both thresholds are read from agent/policy/rules.yaml and measured on every disputable charge in the window, with amounts converted to USD the way the policy engine does.

SYN-AMOUNT-001 USD 450 or more

Disputable charges sent to a person
45.5%of 3,586,032 charges
Purchase p90, March 2024
USD 452.6012,611 purchases with a USD amount
Monthly purchase p90, 37 months
USD 447.90to USD 452.97
p50
USD 414.10
p75
USD 1,510.78
p90
USD 5,786.86
p95
USD 7,892.47
p99
USD 9,575.13

USD amount of every disputable charge in the window, by percentile; the first percentile at or above the threshold is marked. The threshold sits at the purchase p90 of the month the rule cites, and every month’s purchase p90 is close to it. Transfers and payments are larger, so they carry most of the 45.5%.

SYN-FRAUD-001 Fraud score 50 or more, or the fraud flag

Disputable charges sent to a person
0.098%by the fraud rule
Highest score of an unflagged charge
30.0threshold 50
Sent by the score alone
0charges without the flag

In this data the score threshold adds nothing beyond the flag. No unflagged charge scores above 30.0, so every charge the rule sends to a person is already flagged. Together the two rules send 45.5% of disputable charges to a person.

Source: data_analytics/reports/insights.json, thresholds (rules version 2026-09-26.2)

10

Satisfaction follows first-contact resolution

Survey scores move with whether the contact was resolved the first time, which makes a dispute taken end to end in one conversation the customer outcome to aim for.

CSAT, resolved on the first contact
3.00of 4; 97,851 surveys
CSAT, not resolved on the first contact
2.00of 4; 30,005 surveys
Difference
1.00 pointson a 1 to 4 scale

Scroll sideways inside the table for all 6 columns.

Contact reasonSurveysMean CSATMean CSAT, resolved first timeMean CSAT, not resolvedFirst-contact resolution of the surveyed
Complaint21,8432.43 of 43.00 of 42.00 of 443.4%
Retention3,7982.61 of 43.00 of 42.00 of 460.4%
Commercial10,2432.66 of 42.99 of 42.03 of 465.3%
Technical19,1932.70 of 43.00 of 42.00 of 469.4%
Product27,9422.90 of 43.00 of 42.01 of 489.7%
Transactional44,8372.91 of 43.00 of 41.99 of 491.5%

Mean CSAT by reason follows its first-contact resolution; Complaint, where disputes are filed, is lowest. Surveys link to contact-center interactions and never to complaints, so no survey can be tied to a dispute.

Dispute resolution satisfaction has a small sample. The complaint-level score (1 to 5) exists for 471 of 12,297 disputes (3.8%) and averages 3.07, against 3.01 for other complaints (2,013 of 54,798). It cannot measure a dispute outcome.

Source: data_analytics/reports/insights.json, satisfaction

Assumptions behind the business figures

  1. USD 10 per agent-hour is an illustrative placeholder (not sourced; replace with the bank's loaded cost).
  2. Only in the second reach scenario: the bank sends call-center disputes to the same flow; nothing in the data measures that they would use it
  3. A conversation the bot does not resolve safely costs its tokens and then the whole human handling time; a structured handoff may shorten the human contact, not measured
  4. Handling time per dispute is the Complaint contact-reason mean (complaints cannot be linked to contacts).
  5. The workflow-to-contact-reason mapping and the verifiable column are team judgments.

11

How Cautela decides

What the assistant does on its own, when it asks, when it needs a yes and when a person takes over, with the thresholds the service runs (policy version 2026-09-26.2). Rules marked law come from a legal text; synthetic policy is a team value the bank would replace with its own.

  1. 1Acts alone

    Reads the customer’s own charges, profile and the dispute policy with read-only tools. Explains a Declined or Reversed charge without opening anything, since no money is left to recover. It never writes on its own.

    SYN-STATUS-002synthetic policySYN-STATUS-003synthetic policy

  2. 2Asks the customer

    Names one charge only when the model’s match probability is at least 0.79; otherwise it lists up to 3 candidates and the customer picks. Before opening a dispute it shows the charge as the tools read it and asks whether the customer recognizes it.

  3. 3Confirms before writing

    open_dispute_case and block_card run only after an explicit yes bound to that action and its arguments. Only Approved or Pending charges can be disputed, inside the country’s claim window.

    SYN-CONFIRM-001synthetic policySYN-STATUS-001synthetic policy

  4. 4Hands off to a person

    At USD 450 or more (the case is filed, then a person reviews it); at a fraud score of 50 or more, or a fraud flag (it also offers to block the card); when the charge is outside its claim window; when the USD amount cannot be established; when nothing fits (no-match probability at least 0.0464); when the customer asks for a person, the request is outside dispute intake, a security check fires or a tool fails.

    SYN-AMOUNT-001synthetic policySYN-FRAUD-001synthetic policySYN-DATA-001synthetic policySYN-HUMAN-001synthetic policySYN-SCOPE-001synthetic policySYN-SEC-001synthetic policy

Policy can only narrow a model proposal. The model proposes, and the policy engine decides what is allowed: a proposal can remove an action or add an escalation, never add an action the rules did not allow, skip a confirmation or cite a reason the rules do not know (agent/policy/engine.py, narrow).

Thresholds

Scroll sideways inside the table for all 5 columns.

ThresholdValueGovernsKindSource
Match probability to act≥ 0.79Names one charge instead of askingfitted on the validation split, at most 1% unsafe decisionsml/reports/fitted.json
Act floor≥ 0.60Lowest match probability that may ever actbusiness rule, set before any test resultml/reports/fitted.json
No-match probability to hand off≥ 0.0464Hands off instead of askingfitted on the validation splitml/reports/fitted.json
Options shownup to 3Candidates listed when it asksfixedml/reports/fitted.json
Rule baseline, no trained modeltop < 0.60 or margin < 0.15Asks instead of actingfixed ruleagent/tools/ranking.py
Human review amountUSD 450Filed, then reviewed by a personsynthetic policySYN-AMOUNT-001synthetic policyagent/policy/rules.yaml
Fraudscore ≥ 50 or fraud flagHands off, offers a card blocksynthetic policySYN-FRAUD-001synthetic policyagent/policy/rules.yaml
Exchange rates, per USDCOP 4,000, ARS 350, MXN 17USD value of a charge with no USD amountsynthetic policy, measured on the datasetSYN-FX-001synthetic policyagent/policy/rules.yaml

Claim windows

Scroll sideways inside the table for all 6 columns.

RuleCountryApplies toCustomer hasBank answers withinVerification
MX-WINDOW-001lawMexicoany product, any channel90 calendar days45 calendar daysfrom team research, not re-read for this build
CO-WINDOW-001lawColombiaany product, Web and App5 business days15 business daysfrom team research, not re-read for this build
CO-WINDOW-002synthetic policyColombiaany product, any channel90 calendar daysnot setnot verified
AR-WINDOW-001lawArgentinacredit cards, any channel30 calendar days15 calendar days (60 for a charge made abroad)read in the primary legal text
AR-WINDOW-002synthetic policyArgentinaany product, any channel30 calendar days10 business daysnot verified

Where two rules cover a country, the more specific one applies (Colombia’s law covers Web and App; Argentina’s covers credit cards) and the other covers the rest. Windows are counted from the transaction date, because the dataset has no statement dates; that can only shorten a window, never lengthen it. Sources: agent/policy/rules.yaml, agent/tools/ranking.py, ml/reports/fitted.json.

What these numbers cannot tell you

  • The dataset is synthetic and templated. The five main complaint types differ by at most 3.5% in volume; all 12,297 dispute descriptions share one identical text, and 171,321 call transcripts hold 42 distinct customer turns. Outcome metrics barely vary, so they describe the data generator more than any bank.
  • The 43.6% first-contact resolution is not a dispute metric. It is the contact center’s rate for the Complaint reason; no complaint links to an interaction, so the dispute workflow’s own first-contact resolution cannot be measured here.
  • The evaluation is offline, on generated scenarios. 1,240 cases built over organizer transactions with team-written messages (data version 0189e386ce7fe882). It measures the decision component, not production traffic, and it was run without a language model.
  • Hours carry no timezone. Hour-of-day and weekday shares are as stored and may be shifted.

Reproduce: make analytics; full write-up in data_analytics/reports/why-this-workflow.md and ml/reports/results.md.