Skill: vendor-compliance-1099
Description
1099 vendor compliance pipeline for accounting firms. Pulls the full-year General Ledger from QBO, aggregates vendor payments by name, applies IRS $600 threshold, classifies 1099-NEC vs 1099-MISC, checks corporate exemptions, tracks W-9 and TIN status, filters credit card payments (1099-K handled by processor), calculates late-filing penalties, and produces a year-over-year CDC. Outputs an 8-tab Excel workbook.
Trigger phrases: "run 1099 compliance," "vendor 1099 check," "pull 1099 list," "who needs a 1099," "1099 vendor scan," "W-9 tracker," "1099-NEC list," "1099-MISC list"
NOT for: payroll W-2 compliance, 1042-S foreign withholding, 1099-K reconciliation (CC processor), or non-US entities.
Pipeline Location
scripts/pipelines/vendor-compliance-1099.py
Usage
# Standard run
python3 scripts/pipelines/vendor-compliance-1099.py --slug my-client --year 2025
# QBO sandbox
python3 scripts/pipelines/vendor-compliance-1099.py --slug my-client --year 2025 --sandbox
# Custom output directory
python3 scripts/pipelines/vendor-compliance-1099.py --slug my-client --year 2025 --out ~/Desktop/1099s
# Skip GL pull (empty vendor list — testing only)
python3 scripts/pipelines/vendor-compliance-1099.py --slug my-client --year 2025 --skip-gl
Arguments:
| Flag |
Required |
Default |
Notes |
--slug |
✅ |
— |
QBO client slug |
--year |
✅ |
— |
Tax year (e.g. 2025) |
--sandbox |
❌ |
false |
Use QBO sandbox |
--skip-gl |
❌ |
false |
Skip GL pull (empty output — testing only) |
--out |
❌ |
~/Desktop |
Output directory |
Output: 8-Tab Excel Workbook
| Tab |
Contents |
| Vendor Summary |
All vendors: total paid, ACH/check/wire vs CC split, form type, corp exempt flag, action required |
| 1099-NEC List |
Contractors/service vendors ≥$600 (reportable amount only), W-9 status, TIN status, action |
| 1099-MISC List |
Rent, royalties, prizes ≥$600 with MISC box classification (Box 1/2/3/6/10) |
| Exemptions |
Corp-flagged vendors (LLC/Inc/Corp/Ltd) requiring manual entity-type verification before skipping 1099 |
| W-9 Tracker |
Per-vendor W-9 received/pending/missing status; persisted between runs; editable date/TIN fields |
| Payment Methods |
ACH/check/wire vs. credit card split per vendor; CC excluded from 1099 reportable amount |
| Penalties Calc |
IRC §6721/6722 penalty scenarios: on-time, 15/30/45/60/90 days late + today's actual exposure |
| CDC Log |
New vendors (not in prior year), dropped vendors, amount changes ≥10% or ≥$500 YoY |
Output filename: VendorCompliance_1099_{slug}_{year}.xlsx
Key IRS Rules Implemented
$600 Threshold
- Applied to ACH/check/wire amounts only — credit card payments excluded (processor files 1099-K)
- Threshold is per-vendor, full calendar year aggregate
1099 Type Classification
| Form |
When |
Keyword triggers |
| 1099-NEC |
Non-employee compensation: contractors, consultants, attorneys, sole proprietors |
contractor, freelance, consultant, attorney, repair, cleaning, design, etc. |
| 1099-MISC |
Rent, royalties, prizes, medical payments |
rent, royalty, prize, award, medical, healthcare |
Default is 1099-NEC — NEC is assumed for all service payments unless account/memo indicates MISC category.
Corporate Exemption
- Vendor names matching
LLC|Inc|Corp|Ltd|Co.|Company|etc. → flagged as potentially exempt
- Still appear in Exemptions tab for manual verification
- Exception — always file regardless of entity type:
- Attorneys (IRC §6045(f)) → 1099-NEC
- Medical providers → 1099-MISC Box 6
Payment Method Filter
- Credit card keywords in memo/txn_type/split → classified as CC, excluded from reportable amount
- ACH/check/wire → included in reportable amount
- Unclassified payments → included (conservative — better to over-report)
W-9 & TIN Tracking
- W-9 status persisted at
.cache/vendor-compliance-1099/{slug}-w9.json
- New vendors auto-default to
NO status
- TIN status persisted at
.cache/vendor-compliance-1099/{slug}-tin.json
- Backup withholding: 24% applies if vendor fails to provide valid TIN
Filing Deadlines
| Form |
Recipient Copy |
IRS Paper |
IRS e-File |
| 1099-NEC |
January 31 |
January 31 |
January 31 |
| 1099-MISC (Box 7) |
January 31 |
January 31 |
January 31 |
| 1099-MISC (other boxes) |
January 31 |
February 28 |
March 31 |
e-File required if filing 10+ information returns.
Penalty Rates (IRC §6721/6722 — 2024)
| Days Late |
Per Form |
Small Biz Annual Cap |
| ≤30 days |
$60 |
$232,500 |
| 31–60 days |
$120 |
$664,500 |
| >60 days |
$310 |
$1,329,000 |
| Intentional disregard |
$630 minimum |
No cap |
Small business = avg annual gross receipts ≤$5M for 3 prior years.
Cache Files
| File |
Purpose |
.cache/vendor-compliance-1099/{slug}-{year}.json |
YoY snapshot for CDC (auto-saved each run) |
.cache/vendor-compliance-1099/{slug}-{year-1}.json |
Prior year snapshot for comparison |
.cache/vendor-compliance-1099/{slug}-w9.json |
W-9 status (persisted, editable manually) |
.cache/vendor-compliance-1099/{slug}-tin.json |
TIN status (persisted, editable manually) |
Updating W-9 status manually:
# Edit cache file directly to update W-9 status
cat .cache/vendor-compliance-1099/my-client-w9.json
# Modify "VendorName": "YES" | "NO" | "PENDING"
# Then re-run pipeline — status will be loaded automatically
Integration Requirements
- QBO Client: Node.js QBO client (auth token must be set)
- Python packages:
pip install openpyxl
- GL access required: Pipeline reads full-year GL — ensure QBO auth has GL report access
- No write access to QBO — read-only integration
Decimal Math
All financial calculations use Python Decimal with ROUND_HALF_UP at 2 decimal places. No float arithmetic. Same pattern as tax-package-prep.py and pl-deep-analysis.py.
When NOT to Use This Skill
- Payroll / W-2 compliance → separate payroll workflow
- 1099-K reconciliation → CC processor provides (not Sam's responsibility)
- Foreign vendor withholding → Form 1042-S, different rules
- State-level 1099 filing → varies by state, not covered here
- 1099-INT / 1099-DIV / 1099-B → investment/bank-issued, not vendor compliance
Workflow Checklist
Run this pipeline as part of year-end close:
- November/December: Pre-screen — run pipeline to identify missing W-9s before year-end
- January (early): Final run — full year GL aggregation
- January 15: W-9 collection deadline (internal)
- January 25: Prepare and review filings
- January 31: File 1099-NEC (recipient + IRS)
- February 28 / March 31: File 1099-MISC (IRS paper/e-file)
1---2name: vendor-compliance-10993description: 1099 vendor compliance pipeline for accounting firms. Pulls full-year General Ledger from QBO, aggregates vendor payments, applies IRS $600 threshold, classifies 1099-NEC vs 1099-MISC, checks corporate exemptions, tracks W-9 and TIN status, filters credit card payments (1099-K handled by processor), calculates late-filing penalties, and produces year-over-year CDC. Outputs an 8-tab Excel workbook. Use for year-end 1099 compliance runs, W-9 tracking, and IRS threshold checks. NOT for payroll W-2, 1042-S foreign withholding, or 1099-K reconciliation.4---56# Skill: vendor-compliance-109978## Description91099 vendor compliance pipeline for accounting firms. Pulls the full-year General Ledger from QBO, aggregates vendor payments by name, applies IRS $600 threshold, classifies 1099-NEC vs 1099-MISC, checks corporate exemptions, tracks W-9 and TIN status, filters credit card payments (1099-K handled by processor), calculates late-filing penalties, and produces a year-over-year CDC. Outputs an 8-tab Excel workbook.1011**Trigger phrases:** "run 1099 compliance," "vendor 1099 check," "pull 1099 list," "who needs a 1099," "1099 vendor scan," "W-9 tracker," "1099-NEC list," "1099-MISC list"1213**NOT for:** payroll W-2 compliance, 1042-S foreign withholding, 1099-K reconciliation (CC processor), or non-US entities.1415---1617## Pipeline Location18```19scripts/pipelines/vendor-compliance-1099.py20```2122## Usage2324```bash25# Standard run26python3 scripts/pipelines/vendor-compliance-1099.py --slug my-client --year 20252728# QBO sandbox29python3 scripts/pipelines/vendor-compliance-1099.py --slug my-client --year 2025 --sandbox3031# Custom output directory32python3 scripts/pipelines/vendor-compliance-1099.py --slug my-client --year 2025 --out ~/Desktop/1099s3334# Skip GL pull (empty vendor list — testing only)35python3 scripts/pipelines/vendor-compliance-1099.py --slug my-client --year 2025 --skip-gl36```3738**Arguments:**39| Flag | Required | Default | Notes |40|------|----------|---------|-------|41| `--slug` | ✅ | — | QBO client slug |42| `--year` | ✅ | — | Tax year (e.g. 2025) |43| `--sandbox` | ❌ | false | Use QBO sandbox |44| `--skip-gl` | ❌ | false | Skip GL pull (empty output — testing only) |45| `--out` | ❌ | ~/Desktop | Output directory |4647---4849## Output: 8-Tab Excel Workbook5051| Tab | Contents |52|-----|----------|53| **Vendor Summary** | All vendors: total paid, ACH/check/wire vs CC split, form type, corp exempt flag, action required |54| **1099-NEC List** | Contractors/service vendors ≥$600 (reportable amount only), W-9 status, TIN status, action |55| **1099-MISC List** | Rent, royalties, prizes ≥$600 with MISC box classification (Box 1/2/3/6/10) |56| **Exemptions** | Corp-flagged vendors (LLC/Inc/Corp/Ltd) requiring manual entity-type verification before skipping 1099 |57| **W-9 Tracker** | Per-vendor W-9 received/pending/missing status; persisted between runs; editable date/TIN fields |58| **Payment Methods** | ACH/check/wire vs. credit card split per vendor; CC excluded from 1099 reportable amount |59| **Penalties Calc** | IRC §6721/6722 penalty scenarios: on-time, 15/30/45/60/90 days late + today's actual exposure |60| **CDC Log** | New vendors (not in prior year), dropped vendors, amount changes ≥10% or ≥$500 YoY |6162**Output filename:** `VendorCompliance_1099_{slug}_{year}.xlsx`6364---6566## Key IRS Rules Implemented6768### $600 Threshold69- Applied to **ACH/check/wire amounts only** — credit card payments excluded (processor files 1099-K)70- Threshold is per-vendor, full calendar year aggregate7172### 1099 Type Classification73| Form | When | Keyword triggers |74|------|------|-----------------|75| **1099-NEC** | Non-employee compensation: contractors, consultants, attorneys, sole proprietors | contractor, freelance, consultant, attorney, repair, cleaning, design, etc. |76| **1099-MISC** | Rent, royalties, prizes, medical payments | rent, royalty, prize, award, medical, healthcare |7778**Default is 1099-NEC** — NEC is assumed for all service payments unless account/memo indicates MISC category.7980### Corporate Exemption81- Vendor names matching `LLC|Inc|Corp|Ltd|Co.|Company|etc.` → flagged as **potentially exempt**82- Still appear in Exemptions tab for manual verification83- **Exception — always file regardless of entity type:**84 - Attorneys (IRC §6045(f)) → 1099-NEC85 - Medical providers → 1099-MISC Box 68687### Payment Method Filter88- **Credit card keywords** in memo/txn_type/split → classified as CC, excluded from reportable amount89- **ACH/check/wire** → included in reportable amount90- Unclassified payments → included (conservative — better to over-report)9192### W-9 & TIN Tracking93- W-9 status persisted at `.cache/vendor-compliance-1099/{slug}-w9.json`94- New vendors auto-default to `NO` status95- TIN status persisted at `.cache/vendor-compliance-1099/{slug}-tin.json`96- **Backup withholding:** 24% applies if vendor fails to provide valid TIN9798---99100## Filing Deadlines101102| Form | Recipient Copy | IRS Paper | IRS e-File |103|------|---------------|-----------|-----------|104| 1099-NEC | January 31 | January 31 | January 31 |105| 1099-MISC (Box 7) | January 31 | January 31 | January 31 |106| 1099-MISC (other boxes) | January 31 | February 28 | March 31 |107108**e-File required** if filing 10+ information returns.109110---111112## Penalty Rates (IRC §6721/6722 — 2024)113114| Days Late | Per Form | Small Biz Annual Cap |115|-----------|----------|---------------------|116| ≤30 days | $60 | $232,500 |117| 31–60 days | $120 | $664,500 |118| >60 days | $310 | $1,329,000 |119| Intentional disregard | $630 minimum | No cap |120121Small business = avg annual gross receipts ≤$5M for 3 prior years.122123---124125## Cache Files126127| File | Purpose |128|------|---------|129| `.cache/vendor-compliance-1099/{slug}-{year}.json` | YoY snapshot for CDC (auto-saved each run) |130| `.cache/vendor-compliance-1099/{slug}-{year-1}.json` | Prior year snapshot for comparison |131| `.cache/vendor-compliance-1099/{slug}-w9.json` | W-9 status (persisted, editable manually) |132| `.cache/vendor-compliance-1099/{slug}-tin.json` | TIN status (persisted, editable manually) |133134**Updating W-9 status manually:**135```bash136# Edit cache file directly to update W-9 status137cat .cache/vendor-compliance-1099/my-client-w9.json138# Modify "VendorName": "YES" | "NO" | "PENDING"139# Then re-run pipeline — status will be loaded automatically140```141142---143144## Integration Requirements145146- **QBO Client:** Node.js QBO client (auth token must be set)147- **Python packages:** `pip install openpyxl`148- **GL access required:** Pipeline reads full-year GL — ensure QBO auth has GL report access149- **No write access to QBO** — read-only integration150151---152153## Decimal Math154155All financial calculations use Python `Decimal` with `ROUND_HALF_UP` at 2 decimal places. No float arithmetic. Same pattern as `tax-package-prep.py` and `pl-deep-analysis.py`.156157---158159## When NOT to Use This Skill160161- **Payroll / W-2 compliance** → separate payroll workflow162- **1099-K reconciliation** → CC processor provides (not Sam's responsibility)163- **Foreign vendor withholding** → Form 1042-S, different rules164- **State-level 1099 filing** → varies by state, not covered here165- **1099-INT / 1099-DIV / 1099-B** → investment/bank-issued, not vendor compliance166167---168169## Workflow Checklist170171Run this pipeline as part of year-end close:1721731. **November/December:** Pre-screen — run pipeline to identify missing W-9s before year-end1742. **January (early):** Final run — full year GL aggregation1753. **January 15:** W-9 collection deadline (internal)1764. **January 25:** Prepare and review filings1775. **January 31:** File 1099-NEC (recipient + IRS)1786. **February 28 / March 31:** File 1099-MISC (IRS paper/e-file)179180---181