docs: update HISTORY v0.26.0, remove completed XLSX dual-column from FUTURE
This commit is contained in:
parent
831f617893
commit
d32a30495d
47
FUTURE.md
47
FUTURE.md
|
|
@ -31,53 +31,6 @@ Items are grouped under their priority section heading (`## 🔴 CRITICAL`, `##
|
|||
|
||||
## Pending Recommendations
|
||||
|
||||
### 🔴 Import XLSX Dual-Column Layout Not Parsed — CRITICAL
|
||||
**Priority:** CRITICAL
|
||||
**Added:** 2026-05-11 by Ripley
|
||||
|
||||
**Description:**
|
||||
The real-world spreadsheet (`backups/monthly bills.xlsx`) uses a **dual-column layout** — each monthly sheet is split into two halves representing two payment periods:
|
||||
- **Left half (columns A-E):** Bills due around the **1st** of the month
|
||||
- **Right half (columns G-K):** Bills due around the **15th** of the month
|
||||
|
||||
Each half has its own `Due Date | Bill | Amount | Paid Date | Date Cleared` headers. The current parser only detects headers in the first row and processes columns linearly, so it captures the 1st-of-month bills but completely misses all 15th-of-month bills (roughly half the data).
|
||||
|
||||
Example from Apr 2026 sheet:
|
||||
```
|
||||
Left (1st): auto | Roadrunner ATV | $225.64 | paid 2026-03-01 (due ~1st)
|
||||
Right (15th): | Amazon chase card | $366 | paid 2026-04-20 (due ~15th)
|
||||
```
|
||||
|
||||
**Rationale:**
|
||||
- This is the actual production spreadsheet the app needs to import
|
||||
- ~100 monthly sheets spanning 2017–2026, each with two payment periods
|
||||
- The 15th-of-month bills (credit cards, loans, subscriptions) are completely lost during import
|
||||
- Without dual-column support, the import feature is broken for real data
|
||||
- The "1st vs 15th" split is semantically meaningful — it maps to `due_day` in the bill model
|
||||
|
||||
**Additional Issues in This Spreadsheet:**
|
||||
- Rows 1–2 contain paycheck/leftover summary data, not bills — parser must skip these
|
||||
- Non-numeric amount values: "double pay", blank amounts, "past due" — need graceful handling
|
||||
- Due date column contains non-date values: "auto" (autopay indicator), "24th" (day-of-month shorthand), account numbers like "9522104"
|
||||
- Some sheets have slight column layout variations (extra column, merged cells)
|
||||
- Sheet names have typos: "Januaru 2021", "Novevmber 2019", "Febuary 2023" — parser already handles these
|
||||
- 3 non-month sheets ("2018 taxes", "debt totoals", "home ownership expenses") should be skipped — already handled by `NON_MONTH_SHEET_RE`
|
||||
- "auto" in the Due Date column is an autopay flag, not a date — should be detected as a label, not parsed as a date
|
||||
|
||||
**Implementation Notes:**
|
||||
- Modify `spreadsheetImportService.js` to detect dual-column headers in a single sheet row
|
||||
- When two sets of bill headers are found (A-E and G-K), process each half independently
|
||||
- Left half rows should default `due_day` to ~1, right half rows should default `due_day` to ~15
|
||||
- Each half produces its own set of rows with the same sheet name/month context
|
||||
- Handle non-numeric amount cells gracefully (null amount, "double pay" as a note/label)
|
||||
- "auto" in Due Date column → set `autopay` label/detected label, don't try to parse as date
|
||||
- "24th" in Due Date column → parse as day-of-month (24)
|
||||
- Skip rows where the bill name cell is blank AND the amount cell is blank or non-numeric
|
||||
- Filter out paycheck/summary rows (Row 1: Paycheck amounts, Row 2: Left Over calculations)
|
||||
- The `backups/monthly bills.xlsx` file is in `backups/` (gitignored) for testing
|
||||
- Files to modify: `services/spreadsheetImportService.js`, possibly `routes/import.js`
|
||||
- Estimated effort: 4-6 hours
|
||||
|
||||
### 🔴 No Confirmation Before Destructive Actions — CRITICAL
|
||||
**Priority:** CRITICAL
|
||||
**Added:** 2026-05-11 by Ripley
|
||||
|
|
|
|||
14
HISTORY.md
14
HISTORY.md
|
|
@ -1,5 +1,19 @@
|
|||
# Bill Tracker — Changelog
|
||||
|
||||
## v0.26.0
|
||||
|
||||
### Added
|
||||
- **Dual-column XLSX import** — Spreadsheets with two side-by-side bill tables (bills due ~1st and ~15th) are now both imported. Left half defaults `due_day` to 1, right half defaults to 15.
|
||||
- **Header row scanning** — Parser scans rows 0–4 for bill headers instead of assuming row 0, correctly skipping paycheck/summary rows.
|
||||
- **Day pattern parsing** — Due date values like "1st", "15th", "24th" are now parsed as day-of-month numbers.
|
||||
- **Non-numeric amount labels** — "auto", "double pay", "past due" in amount cells become detected labels instead of causing parse errors.
|
||||
|
||||
### Changed
|
||||
- **Cell type validation** — Allow `'s'` (shared formula) cell type in XLSX parsing, fixing import failures on some spreadsheet formats.
|
||||
|
||||
### Security
|
||||
- **Audit by Private_Hudson** — Bounds validation in `isBlankRowForHeaderSet`, anchored regex for day patterns, label sanitization verified. All checks PASS.
|
||||
|
||||
## v0.25.0
|
||||
|
||||
### Added
|
||||
|
|
|
|||
Loading…
Reference in New Issue