From 6ba5e7ee794b580b0a86fba408c6516626d79c89 Mon Sep 17 00:00:00 2001 From: Georges Haddad Date: Sat, 11 Apr 2026 17:16:15 +0300 Subject: [PATCH] fix: inherit person name from page 1 during confirmation for multi-page PDFs - Move first_name validation after document load so page 2+ can inherit - Resolve page 1's confirmed person and auto-fill name/father/family/registry - Fixes 'First name is required' error on subsequent PDF pages --- routers/review.py | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/routers/review.py b/routers/review.py index 04d2b6d..6cd230d 100644 --- a/routers/review.py +++ b/routers/review.py @@ -281,8 +281,6 @@ async def confirm_document(doc_id: int, request: Request): raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Invalid properties payload") first_name = (person_data.get("first_name") or "").strip() - if not first_name: - raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="First name is required") registry_number = (person_data.get("registry_number") or "").strip() or None @@ -295,6 +293,36 @@ async def confirm_document(doc_id: int, request: Request): raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Document not found") current_doc = dict(current_doc) + + # For multi-page PDFs (page 2+), resolve page 1's person and inherit name if needed + page1_person_id = None + is_subsequent_page = ( + current_doc.get("pdf_group_id") + and (current_doc.get("page_number") or 0) > 1 + ) + if is_subsequent_page: + page1_doc = conn.execute( + """SELECT d.person_id, p.first_name, p.father_name, p.family_name, + p.registry_number + FROM documents d + LEFT JOIN persons p ON p.id = d.person_id + WHERE d.pdf_group_id=? AND d.page_number=1 AND d.person_id IS NOT NULL""", + (current_doc["pdf_group_id"],), + ).fetchone() + if page1_doc and page1_doc["person_id"]: + page1_person_id = page1_doc["person_id"] + # Inherit name from page 1's person if not provided + if not first_name and page1_doc["first_name"]: + first_name = page1_doc["first_name"] + person_data["first_name"] = first_name + # Also inherit other person fields if empty + for field in ("father_name", "family_name", "registry_number"): + if not (person_data.get(field) or "").strip() and page1_doc[field]: + person_data[field] = page1_doc[field] + registry_number = (person_data.get("registry_number") or "").strip() or None + + if not first_name: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="First name is required") if current_doc["status"] == "pending": raise HTTPException( status_code=status.HTTP_409_CONFLICT, @@ -345,16 +373,7 @@ async def confirm_document(doc_id: int, request: Request): person_id = None - # For multi-page PDFs (page 2+), auto-link to page 1's person - page1_person_id = None - if current_doc.get("pdf_group_id") and (current_doc.get("page_number") or 0) > 1: - page1 = conn.execute( - """SELECT person_id FROM documents - WHERE pdf_group_id=? AND page_number=1 AND person_id IS NOT NULL""", - (current_doc["pdf_group_id"],), - ).fetchone() - if page1: - page1_person_id = page1["person_id"] + # page1_person_id already resolved above for multi-page PDFs # Option 1: User explicitly chose to merge with an existing person if merge_person_id: