1340d1957f
Adds a preview/apply rule to the Cleanup tool for parents who have NO birth date
of their own (so the existing born-on-or-before rule can't reach them) but who
have a child born long ago — they're necessarily deceased. This is the gap that
left ~56 parents in the Paul tree as "unknown".
- cleanup_service.preview_deceased_by_child(year): parents of any child born
on/before the cutoff, excluding already-deceased; returns child_birth_year.
- GET /trees/{id}/cleanup/deceased-by-child?born_on_or_before=1900. Apply reuses
the existing POST .../cleanup/deceased (same audited mark-deceased path).
- Frontend: a new card in the Cleanup tool (year input → preview → select →
apply), preview-first like the rest of the tool.
Test covers preview (finds the no-birthdate parent of a pre-cutoff child,
excludes modern-child parents), child_birth_year, apply, and re-preview drop.
Suite 106 passing.
Signed-off-by: Justin Paul <justin@jpaul.me>
57 lines
926 B
Python
57 lines
926 B
Python
import uuid
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class DeceasedCandidate(BaseModel):
|
|
person_id: uuid.UUID
|
|
name: str
|
|
birth_year: int
|
|
|
|
|
|
class DeceasedByChildCandidate(BaseModel):
|
|
person_id: uuid.UUID
|
|
name: str
|
|
child_birth_year: int
|
|
|
|
|
|
class DeceasedApply(BaseModel):
|
|
person_ids: list[uuid.UUID]
|
|
|
|
|
|
class GenderProposal(BaseModel):
|
|
person_id: uuid.UUID
|
|
name: str
|
|
proposed_gender: str
|
|
|
|
|
|
class GenderUpdate(BaseModel):
|
|
person_id: uuid.UUID
|
|
gender: str
|
|
|
|
|
|
class GenderApply(BaseModel):
|
|
updates: list[GenderUpdate]
|
|
|
|
|
|
class NameIssue(BaseModel):
|
|
name_id: uuid.UUID
|
|
person_id: uuid.UUID
|
|
given: str | None = None
|
|
surname: str | None = None
|
|
issue: str
|
|
|
|
|
|
class NameEdit(BaseModel):
|
|
name_id: uuid.UUID
|
|
given: str | None = None
|
|
surname: str | None = None
|
|
|
|
|
|
class NameApply(BaseModel):
|
|
edits: list[NameEdit]
|
|
|
|
|
|
class CleanupResult(BaseModel):
|
|
updated: int
|