# Roadmap This is the backlog for az-utils. **Each checkbox is roughly one pull request.** Pick one, open (or claim) the matching issue, and send a small focused PR. Grouped by area; βœ… = shipped. > Tip for contributors: a typical utility becomes 3–4 PRs β€” `validate`, `format`, > a data/edge-case pass, and docs/examples. That keeps each change small and reviewable. ## πŸͺͺ Identity & documents - [x] **FIN** β€” `isValidFin`, `normalizeFin` (format check) - [ ] FIN β€” helpers to extract nothing sensitive; add fuzz tests - [ ] **VΓ–EN / TIN** β€” `isValidVoen` (10-digit format) - [ ] VΓ–EN β€” individual vs legal-entity detection - [ ] VΓ–EN β€” `formatVoen` - [ ] **Passport** β€” `isValidPassportNumber` (AA1234567 pattern) - [ ] **ID card series** β€” `isValidIdCardSeries` (AZE / MYI …) - [ ] **SSN / DSMF** social-insurance number format ## 🏦 Banking & finance - [x] **IBAN** β€” `isValidIban` (MOD-97 checksum) - [x] **IBAN** β€” `formatIban`, `normalizeIban` - [ ] IBAN β€” `extractBankCode`, `extractAccount` - [ ] **Bank code β†’ bank name** lookup dataset (NABZ β†’ Kapital Bank, …) - [ ] **SWIFT / BIC** validation for AZ banks - [ ] **Bank card** β€” Luhn check + local issuer detection - [ ] **AZN currency** β€” `formatManat(1234.5)` β†’ "1 234,50 β‚Ό" - [ ] AZN β€” `parseManat` (string β†’ number) - [ ] **Money in words** β€” `manatToWords(12.34)` β†’ "on iki manat otuz dΓΆrd qΙ™pik" - [ ] **Number formatting** β€” AZ locale separators (space + comma) ## πŸ“ž Phone & telecom - [ ] **Phone validate** β€” `isValidPhone("+994501234567")` - [ ] **Phone format** β€” E.164 / national / international - [ ] **Operator detection** β€” Azercell / Bakcell / Nar / Naxtel - [ ] **Mobile vs landline** detection - [ ] **Landline area codes** β†’ city mapping (012 β†’ BakΔ±, …) - [ ] **Phone β†’ clean/normalize** (strip separators, add +994) ## πŸ—ΊοΈ Geography & administrative data - [ ] **Regions (rayonlar)** dataset + lookup - [ ] **Cities** dataset + lookup - [ ] **Postal codes** β€” `isValidPostalCode` (AZ NNNN) - [ ] Postal code β†’ region resolver - [ ] **Car plates** β€” `isValidPlate` (NN-XX-NNN) - [ ] Car plate β€” region-code (01–85) β†’ region name - [ ] **Baku metro stations** dataset - [ ] **Economic regions** dataset ## πŸ“… Dates & calendar - [ ] **Public holidays** dataset (Novruz, Qurban, Republic Day, …) - [ ] `isPublicHoliday(date)` - [ ] `isWorkingDay(date)` (weekends + holidays) - [ ] `addWorkingDays(date, n)` / `workingDaysBetween(a, b)` - [ ] **Azerbaijani month names** + `formatDateAz` - [ ] **Azerbaijani weekday names** - [ ] **Novruz date** calculator (spring equinox based) - [ ] **Ramadan / Qurban** movable-feast helpers ## πŸ”€ Text & language - [ ] **Latin β†’ Cyrillic** transliteration - [ ] **Cyrillic β†’ Latin** transliteration - [ ] **Slugify** with AZ chars (Ι™β†’e, ΕŸβ†’sh, Γ§β†’c, ΔŸβ†’g, …) - [ ] **Correct casing** β€” `toUpperAz` / `toLowerAz` (Δ°/i, I/Δ±) - [ ] **Title case** (Azerbaijani-aware) - [ ] **Number to words** β€” `numberToWordsAz(1234)` - [ ] **Ordinal** β€” `ordinalAz(3)` β†’ "ΓΌΓ§ΓΌncΓΌ" - [ ] **Keyboard layout fixer** (text typed in wrong layout) - [ ] **Remove diacritics** (ASCII-fold Azerbaijani) - [ ] **Pluralization / case suffix** helper (vowel harmony) ## 🧰 Project infrastructure (also great first PRs) - [ ] Add `@vitest/coverage-v8` + coverage badge - [ ] Set up Changesets for versioned releases - [ ] Add a publish-to-npm GitHub Action - [ ] Add a documentation site (Docusaurus / VitePress) - [ ] Add benchmark suite - [ ] Add example playground / CodeSandbox - [ ] Translate README to Azerbaijani (`README.az.md`) - [ ] Add `CHANGELOG` automation --- **Adding something not on this list?** Open an issue first so we can agree on the API, then send the PR. See [CONTRIBUTING.md](./CONTRIBUTING.md).