Merge pull request 'Use dedicated day, month and year controls for birthdays' (#70) from kyc-67 into main
This commit was merged in pull request #70.
This commit is contained in:
commit
ec4115d083
7 files changed
+552
-13
No files matched your search
@@ -211,3 +211,51 @@ smoke testing on the local demo opened the selector, searched for Poland and
|
||||
confirmed that the profile displays Poland after selection. Focused and full
|
||||
journey tests verify the stored `PL` code. Generated localization/build outputs
|
||||
remain ignored and uncommitted.
|
||||
|
||||
## Birthday entry — task #67
|
||||
|
||||
Task [#67](https://git.sendico.io/tech/sxchnge/issues/67), branch `kyc-67`.
|
||||
Delivery: [PR #70](https://git.sendico.io/tech/sxchnge/pulls/70).
|
||||
This change is stacked on the residence-country selector in PR #65; merge #65
|
||||
before the birthday PR.
|
||||
|
||||
The profile uses labeled Day, Month and Year controls. Day and year accept numeric
|
||||
entry with birthday autofill hints; month selection uses localized month names
|
||||
and standard Material keyboard/touch interaction. Customers can enter their birth
|
||||
year directly. No calendar paging or transport-format punctuation is required.
|
||||
The controls share a row when space allows and stack at narrow widths or enlarged
|
||||
text sizes. English and Russian labels, month names and errors follow the app locale.
|
||||
|
||||
Valid calendar dates are normalized to the existing `IdentityProfile.dateOfBirth`
|
||||
`YYYY-MM-DD` value through `IdentityProvider.updateProfile`. Partial, impossible
|
||||
and future dates clear that profile value so Continue cannot retain an earlier
|
||||
valid birthday. Local input components remain visible while correcting a date;
|
||||
complete invalid dates receive a specific live-region error below the group.
|
||||
Leap years, zero day/year and calendar rollover are checked. Today's date follows
|
||||
the existing model policy; no minimum age or arbitrary oldest birth year is added.
|
||||
Prefilled dates, locale changes and external profile replacement synchronize the
|
||||
controls. Back navigation restores the valid saved date. Busy state disables all
|
||||
three controls. Controllers are disposed with the widget.
|
||||
|
||||
The existing DTO, mapper, service, domain model and provider boundaries are retained.
|
||||
No dependency, transport or backend change is needed. This remains part of the KYC
|
||||
preparation-to-submission journey defined above: existing acceptance, failure,
|
||||
retry and abandonment signals apply, without new field events or date collection.
|
||||
The existing server-side review measurement gaps remain unchanged.
|
||||
|
||||
UX review and automated checks cover entry/correction, leap dates, invalid and
|
||||
future-date recovery, numeric restrictions, prefill/replacement/clearing, locale
|
||||
switching, disabled state, Tab/Enter/arrow-key month selection, Escape cancellation,
|
||||
and Russian controls/errors at 320px with 1.6 text scale. Labeled and minimum-size
|
||||
tap-target guidelines pass. Integration checks verify that invalid dates block
|
||||
Continue, Back preserves the birthday, and EN/RU flows still reach submission
|
||||
acceptance. Native screen-reader and mobile keyboard/autofill testing remain
|
||||
release checks; widget semantics are not a claim of device-level validation.
|
||||
|
||||
Validation: all four changed Dart files pass the format check; `flutter analyze`
|
||||
in `frontend/app` reports no issues; `make test-frontend` passes all 230 tests,
|
||||
including the seven new birthday widget tests and the new navigation/gating test.
|
||||
`flutter build web` passes, including its Wasm compatibility dry run. Browser
|
||||
smoke testing of the release build entered 23 April 1990, verified the inline
|
||||
error for 31 April and restored 23 April without losing month or year.
|
||||
Generated localization and build outputs remain ignored and uncommitted.
|
||||
Reference in new issue
Block a user