Files
2026-07-20 15:00:07 -05:00

4.8 KiB

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.