## TL;DR

Currency glyphs are small and stylized, so OCR misreads $ as S and the euro sign as C or E. Do not rely on the glyph: determine currency from the vendor master record and the invoice country first, and only use the extracted symbol as a cross-check. When they disagree, trust the vendor master and flag the symbol for review.

## Error

```text
Extracted currency: S (expected USD); symbol read as letter S
```

## Steps

1. Look up the vendor in the vendor master and take its default currency.
   Expected: An authoritative currency for this vendor.
2. Check the invoice country and language as a second signal.
   Expected: Corroboration or a flag for multi-currency vendors.
3. Compare against the OCR-read symbol after normalizing confusions (S/$, C/EUR).
   Expected: Agreement, or a flagged mismatch.
4. On mismatch, keep the vendor-master currency and queue the symbol for review.
   Expected: No invoice posts with a guessed currency.
5. Record the vendor's symbol rendering to improve future reads.
   Expected: The confusion map learns this vendor's font.

## When to use

- Extracted currency symbol looks like a letter
- Currency field is empty after extraction
- Vendor bills in a foreign currency

## When not to use

- Converting amounts between currencies
- Choosing functional currency for the entity
- Tax treatment of foreign currency

## Compatibility

Extractor-agnostic; needs access to the vendor master (NetSuite, QuickBooks, Xero, SAP).

## Variant phrasings

### OCR reads $ as S on invoice

### euro sign misread as C

### invoice currency detection wrong

## Root cause

Currency symbols share strokes with letters ($/S, euro/C) and are often printed small or in stylized fonts. OCR picks the nearest letter shape, especially at low DPI.

## Edge cases

- Some vendors genuinely bill in multiple currencies; the master default is only a prior, not proof
- Cryptocurrency symbols are outside standard maps; handle by explicit allowlist
- Scanned faxes can lose the symbol entirely; country plus vendor history decides

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_v4nqbpbUM_U3VJZrHkk8Yg
