80 lines
4.8 KiB
Markdown
80 lines
4.8 KiB
Markdown
# 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. |
|