Skip to content

chore: replace PhoneNormalizer with OpenEMR's PhoneNumber value object #78

Description

@kojiromike

The module has a hand-rolled PhoneNormalizer::toE164() that uses regex-based normalization. OpenEMR core now provides OpenEMR\Common\ValueObjects\PhoneNumber, a proper value object backed by libphonenumber with:

  • PhoneNumber::tryParse() / PhoneNumber::parse() — robust parsing with region support
  • ->toE164() — proper E.164 formatting
  • ->isValid() / ->isPossible() — validation against real area codes
  • ->toNational(), ->toInternational(), ->toHL7() — multiple format outputs

Also relevant: OpenEMR\Common\Utils\ValidationUtils::isValidPhoneNumber() for validation-only checks.

Steps

  1. Replace all PhoneNormalizer::toE164() call sites with PhoneNumber::tryParse()?->toE164()
  2. Consider passing PhoneNumber value objects through the service layer instead of raw E.164 strings
  3. Remove PhoneNormalizer class and its tests
  4. Verify libphonenumber is available at runtime via OpenEMR (no new Composer dependency needed)

Metadata

Metadata

Assignees

No one assigned

    Labels

    blockedWaiting on external dependency or decision

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions