"""Diagnostic: inspect the actual MCS-150 fill output. Reports, per page: the AcroForm fields present (name + value + rect), and the rendered text, so we can see WHERE data lands vs WHERE the blank/example fields are. Run in the workers container against the live template + a fresh fill. """ import sys, json sys.path.insert(0, "/app") from pypdf import PdfReader TEMPLATE = "/app/docs/MCS-150 Form.pdf" def field_rows(reader, label): print(f"\n===== {label} =====") for i, pg in enumerate(reader.pages): annots = pg.get("/Annots") if not annots: continue annots = annots.get_object() if hasattr(annots, "get_object") else annots rows = [] for a in annots: o = a.get_object() t = o.get("/T") if t is None and o.get("/Parent"): t = o["/Parent"].get_object().get("/T") v = o.get("/V") rect = o.get("/Rect") ft = o.get("/FT") if t: rows.append((str(t), str(ft), str(v) if v is not None else "", [round(float(x)) for x in rect] if rect else None)) if rows: print(f"-- PDF page {i+1} ({len(rows)} fields) --") for name, ft, val, rect in rows: vstr = f" = {val!r}" if val else "" print(f" {name} [{ft}]{vstr} rect={rect}") # 1) the template as-is — what fields + any example values? r = PdfReader(TEMPLATE) field_rows(r, "TEMPLATE (original)") # 2) a fresh fill from scripts.document_gen.templates.mcs150_pdf_filler import fill_mcs150 intake = { "dot_number": "1609564", "legal_name": "MITCHELL W ALLEN", "dba_name": "", "entity_type": "sole_proprietorship", "business_street": "123 Main St", "business_city": "Town", "business_state": "TX", "business_zip": "75001", "phone": "5125551234", "ein": "123456789", "signer_name": "Mitchell W Allen", "signer_title": "Owner", "power_units": "2", "drivers": "1", } p = fill_mcs150(intake, order_number="DIAG") print("\nfilled file:", p) field_rows(PdfReader(p), "FILLED")