# Draft: l10n(pt-BR): translate financial-instruments.md [DOC-6059]

## 1. What this is

First page of the `introduction` bulk-translation phase, and the second of the two pages
`CLAUDE.md` §10 names as the highest Brazil-terminology-density pages in scope. The other
one, `payment-identities.md`, was the pilot.

- Branch: `l10n/pt-br/introduction-batch-1`, stacked on `l10n/pt-br/resync-2026-09` (!1462).
- 1,626 lines, 16 sections, **7,581 translated words**.
- English unmodified.


## 2. Scope of this MR

One page translated in full, added to `scope.json`, manifest regenerated. Nothing else.

**Method note.** The file is ~1,200 lines of 32 near-identical rail blocks. Rather than
hand-writing those, I extracted every distinct translatable string (**66 prose table cells,
63 bullets**, plus formulaic object lines and headers), translated each **once**, and applied
the map deterministically. The transform **fails loudly on any unmapped line**; it reported
**0 unmapped** across all 1,194 lines of that region. This makes the 32 blocks incapable of
drifting apart and means a reviewer checks 129 strings rather than 690 cells.

## 3. Files changed

| File | Change |
|  --- | --- |
| `@l10n/pt-BR/.../introduction/concepts/financial-instruments.md` | new, 1,626 lines |
| `.l10n-sync/scope.json` | +1 file |
| `.l10n-sync/manifest.json` | regenerated, 5 files / 88 sections |


## 4. English source reference

Translated against `bootstrap` at `dba9f0fd6`, post-!1463, so "payment rail" throughout.

## 5. Mirrored-OpenAPI render check

n/a. Spec out of scope since !1459.

## 6. Structural preservation (CLAUDE.md §5)

Verified mechanically, not by eye:

|  | EN | pt-BR |
|  --- | --- | --- |
| Lines | 1,626 | 1,626 |
| Sections | 16 | 16 |
| `{% tab label= }` | 32 | 32 |
| `{% table %}` | 34 | 34 |
| `{% admonition` / `{% /admonition %}` | 42 / 42 | 42 / 42 |
| Code fences | 2 | 2 |


- `{% tab label="US_ACH" %}` labels are rail codes and stay English.
- The JSON sample is byte-identical except its one explanatory comment.
- Field names, enum values and quoted examples are untranslated (`bankName`, `CHECKING`,
`"Bank of Example"`).
- Same-page fragments resolve. The cross-file link to `payment-identities.md` uses the
**pt-BR** slug `#validando-identidades-para-payment-rails-específicos`, verified to exist
in that file per §5.3.


## 7. Terminology and termbase

No termbase changes; this consumes it. `payment rail` stays English per !1461/!1462. Verified
**zero** occurrences of `trilho`, `meio de pagamento`, `via de pagamento` or
`rede de pagamento`. `Pix`/`PIX`, `schema`, `payload` preserved at English parity.

Cross-page link text stays English (`[Payout network]`, `[Payment identities]`), matching the
four approved pages. Same-page anchor text is translated, because its slug must match.

## 8. Reviewer attention items (CLAUDE.md §3)

1. **This is the page Luis asked to spot check**, and it is the largest and most
terminology-dense single page in the project. The 129 distinct strings in
`.l10n-sync/` history are the efficient review surface; the 690 cells are repetitions
of them.
2. **Institution and standard names kept English**: `Bank Indonesia`, `Korea Financial Telecommunications and Clearings`, `ABA Routing Transit Number`, `Zengin Prompt Service`, `Direct Entry (BECS)`. Confirm that reads right to a Brazilian developer.
3. **Number formats localized** per §10: `AED 25.000`, `IDR 50.000.000`, `PHP 1.000.000`.
Times converted to 24-hour (`17h30 TRT`, `14h00 PHT`). Currency codes untouched.
4. **`accountType` glosses preserved** as source-language content: `CHECKING` (当座預金),
`SAVINGS` (Caja de Ahorro). Not translated to Portuguese, since they document what the
local bank calls the account.
5. **"Dois rails são avaliados em ordem"** is the pattern used for the 5 multi-rail
fallback bullets (AE_IPI, TR_FAST, PH_NRPS, AU_NPP, JP_ZENGIN). Worth one read for
naturalness since it repeats.


## 9. English-screenshot gap log

n/a. No screenshots on this page.

## 10. Source defects found (CLAUDE.md §9)

Reported, not fixed:

1. `{% admonition type="info" name="Metadata only onlist" %}` — "onlist" should be "on
list". Translated as intended meaning ("Apenas metadados na listagem") rather than
reproducing the typo.
2. Two spellings of the same constraint in adjacent rail blocks: "BICFI bank code for the
beneficiary’s bank (8-11 alphanumeric characters)" vs "(8–11 characters)" — hyphen vs
en-dash and differing wording. Translated faithfully to each.
3. `Type of bank account. Values include CHECKING and SAVINGS.` appears both with and
without backticks on the enum values across blocks.


## 11. Config changes

None.

## 12. Translation memory

`tm.jsonl` unchanged. **No harvest**, per §8.3 and handoff §4.10.

`harvest-tm.mjs --dry-run` reports **0 alignment problems** and 426 new records available
once approval lands.

**Known and accepted:** 18 TM records still carry retired `trilho` wording whose English
appears in `introduction`. I translated from the termbase, not from `tm-lookup`, for exactly
this reason. See handoff §4.10; the window closes when this batch is approved and harvested.

## 13. Pipeline / manifest

- `manifest.json`: **5 files, 88 sections**. Drift **green**.
- `selftest.mjs`: **all checks passed.**
- `harvest-tm.mjs --dry-run`: 0 kindMismatch, 0 lineCountMismatch, 0 cellCountMismatch,
0 markdocMismatch.


## 14. Review gate

Do not self-approve, mark ready, merge, or resolve discussions. This is Portuguese and
needs native review. Route to Luis Pain.

The GitLab review bot validates internal consistency, not premises. A green bot pass is not
a review.

## 15. Open items

1. Stacked on !1462, which is itself unapproved. If !1462 merges first this retargets to
`bootstrap` automatically.
2. 18 pages of `introduction` remain (~12,000 words). Next by size:
`payment-lifecycle.md` (1,926), `payout-network/asia-pacific.md` (1,469),
`ledger-transactions.md` (1,284).
3. An `--only <path>` flag on `harvest-tm` would let harvest track partial approval, which
is now the normal state. Handoff §4.10.