Keep the Appartement legal profile optional while aligning every user-editable save-time legal-profile constraint between the domain, HTTP boundary, and Angular form.
Acceptance criteria
An incomplete or empty legal profile remains saveable until Bail generation or finalization requires completeness.
Habitable surface and estimated annual energy cost accept null or nonnegative values and reject negative values inline.
Providing an energy cost requires a reference year from 1900 through 2100; a year without a cost is cleared before submission.
Energy rating remains limited to A–G through the existing selector.
Department codes are normalized to uppercase and validated against the backend’s accepted French codes using the existing text input and actionable guidance.
Backend validation returns all nested legal-profile field paths/codes without raw framework messages.
Frontend and backend tests cover each nuanced parity case and relevant checks pass.
## Parent
#41
## What to build
Keep the Appartement legal profile optional while aligning every user-editable save-time legal-profile constraint between the domain, HTTP boundary, and Angular form.
## Acceptance criteria
- [ ] An incomplete or empty legal profile remains saveable until Bail generation or finalization requires completeness.
- [ ] Habitable surface and estimated annual energy cost accept null or nonnegative values and reject negative values inline.
- [ ] Providing an energy cost requires a reference year from 1900 through 2100; a year without a cost is cleared before submission.
- [ ] Energy rating remains limited to A–G through the existing selector.
- [ ] Department codes are normalized to uppercase and validated against the backend’s accepted French codes using the existing text input and actionable guidance.
- [ ] Backend validation returns all nested legal-profile field paths/codes without raw framework messages.
- [ ] Frontend and backend tests cover each nuanced parity case and relevant checks pass.
## Blocked by
- #43
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent
#41
What to build
Keep the Appartement legal profile optional while aligning every user-editable save-time legal-profile constraint between the domain, HTTP boundary, and Angular form.
Acceptance criteria
Blocked by
/blocked_by #43
mentioned in issue #46
mentioned in commit aa2c273eb52a25233eb136fcd7c2e548efd1ccd2
Preserved GitLab #45 history: source attribution, exact timestamps, discussion grouping and review positions. Historical diff snapshots: 1; visible source notes: 3.
gitlab-47-issue-45.md (SHA-256
109e55c23370e4094959880d2a198e97c3e8df648943b2fa3b89b1538adb19ec)gitlab-47-issue-45.json (SHA-256
591838dd5bd6c1cdb38143a295632ac59203e65c2592a0240112e392eaf8f749)Old CI job execution and reports are omitted. Original source files and rollback backups remain protected.