From cb4761772bc6fa44c59173597e817acdac32a3fe Mon Sep 17 00:00:00 2001 From: mpmedia Date: Mon, 20 Jul 2026 15:00:07 -0500 Subject: [PATCH] Add README.md (v1.0.0) --- README.md | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..ef31915 --- /dev/null +++ b/README.md @@ -0,0 +1,79 @@ +# 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. |