# rfp-form-filler CoWork skill that auto-fills the standard required forms, certifications, and representations that accompany a proposal submission — from MPM's maintained company profile — so the proposal team never retypes the same company data onto every form by hand. **Version:** 1.0.0 **Author:** Andy Gilliom **Repo:** https://git.mpm.to/mpm/rfp-form-filler **CoWork Project:** CW-025 — RFP Form Filler --- ## Overview This is the companion to **rfp-analyzer** (CW-010). Where rfp-analyzer produces the *list* of required forms for a solicitation, `rfp-form-filler` actually *fills them in*. It reads a maintained company-profile reference (verified corporate facts seeded from Odoo `res.company`, plus procurement-specific fields like UEI, CAGE, NAICS, insurance, and authorized signatory) and places those values onto whatever form the user provides — across four formats: fillable PDF (AcroForm), flat/scanned PDF, Word (.docx), and tables embedded in the RFP body. Its governing rule is *never fabricate compliance data*: any field the profile doesn't have is left blank and reported, and every certification/signature is routed to a human. > **Data note:** In this public repo the company-profile files (`references/company-profile.md`, `assets/mpm-profile.json`) are sanitized **templates**. The populated version containing MPM's real identifiers, insurance, and banking data is maintained privately in the CW-025 Google Drive coordination folder and inside the packaged `.skill`. Populate the template locally before use. --- ## Skills | Skill | What It Does | |---|---| | `rfp-form-filler` | Fills required proposal forms from the company profile. Triggers on: "fill out the forms", "required forms", "certifications and reps", "Buy America cert", "DBE form", "SF-LLL", "lobbying certification", "debarment/suspension", "W-9", "vendor registration", "bidder information form", "non-collusion affidavit", "EEO form", "references form", or any blank PDF/Word/RFP-embedded form needing company information. | --- ## Components | Path | Purpose | |---|---| | `SKILL.md` | Orchestrator: load profile → identify format → fill → deliver, with the never-fabricate rules. | | `references/company-profile.md` | Maintained company data (sanitized template here; real values kept private). Read first. | | `assets/mpm-profile.json` | Machine-readable profile with field-name aliases; used to seed the PDF Tools connector profile and to match form fields. | | `references/form-catalog.md` | Standard federal/transit forms (W-9, Buy America, SF-LLL, debarment, DBE, EEO, non-collusion, references), what each needs, and per-form gotchas. | | `references/format-workflows.md` | Per-format fill procedure for all four form formats. | | `scripts/fill_flat_pdf.py` | Overlays text onto flat (non-fillable) PDFs at given coordinates. | --- ## Setup Instructions 1. Install the skill into your CoWork profile (Save skill on the `.skill` card, or install from this repo). 2. Populate `references/company-profile.md` and `assets/mpm-profile.json` with your real company data (or use the private populated copy from the CW-025 Drive folder). 3. Ensure the **PDF Tools** connector is available for fillable-PDF handling, and the `docx`/`pdf` skills for Word and PDF work. 4. `scripts/fill_flat_pdf.py` requires `pypdf` and `reportlab` (`pip install pypdf reportlab`). ### Setup Checklist - [ ] Skill installed - [ ] Company profile populated (or private copy in place) - [ ] PDF Tools connector connected - [ ] `pypdf` + `reportlab` available for flat-PDF overlay --- ## Workflow Notes - **Never fabricate compliance data.** Missing values are left blank and reported as "needs input"; identifiers (UEI, CAGE, DUNS, EIN, DBE #) are never guessed. - **Certifications and signatures are human.** The skill fills identity portions and flags the affirmation/signature block for the authorized signatory. - **Profile currency.** SAM.gov registration, insurance certs, and DBE certs expire — re-verify each proposal cycle. Corporate basics can be re-pulled from Odoo `res.company`. --- ## Requirements - CoWork with the `docx` and `pdf` skills - PDF Tools connector (fillable-PDF profile fill) - Python: `pypdf`, `reportlab` (flat-PDF overlay) - Odoo MCP (CW-003) — optional, for re-seeding corporate basics --- ## Troubleshooting | Symptom | Fix | |---|---| | Form field left blank unexpectedly | The profile value is null/TODO — populate it in the profile files. | | Flat-PDF text lands in the wrong spot | Use `fill_flat_pdf.py --list-sizes` to get page dimensions; PDF origin is bottom-left. | | Fillable-PDF field names don't match profile | Match against the `aliases` lists in `mpm-profile.json`; add new aliases as needed. | | Certification checkbox pre-selected | It shouldn't be — those are human-affirm; report as a bug if the skill selected one. |