Skip to content

Latest commit

 

History

76 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Holdings Entry Assistant

Live demo TypeScript License: MIT

Walkthrough: CSV parse, per-row verdicts, and auto-fill of the simulated destination page

In my workflow, this browser-local assistant reduced a recurring holdings-entry task from roughly 1–2 hours to 3–5 minutes. This is a firsthand operational observation, not a controlled benchmark.

Try the synthetic demo or read how the project started.

The reconstructed intake interview shows the original requirements.

What it does

  1. Detects the holdings header and maps common CSV column names.
  2. Groups positions by account and flags cash, duplicates, unusual pricing, and unmapped account types.
  3. Shows every row before entry and excludes blocked rows by default.
  4. Prepares ticker, units, and cost basis in a versioned fill packet.
  5. Runs only when the operator clicks a bookmark on an eMoney Holdings page. Save remains manual.

I designed the tool to stop on ambiguous matches instead of guessing. I exclude market value from the fill packet so the operator can compare it on screen.

How it fits together

flowchart LR
  CSV["Holdings CSV"] --> Parser["holdings-csv-parser.ts<br/>header detect + column map"]
  Parser --> Schema["holdings-schema.ts<br/>group by account, flag rows"]
  Schema --> Review["review-export-surface.ts<br/>every row shown, blocked rows excluded"]
  Review --> Packet["paste-conductor.ts<br/>versioned fill packet to clipboard"]
  Packet --> Helper["emoney-browser-helper.ts<br/>bookmark, runs on the eMoney page"]
  Helper --> Save["Operator clicks Save in eMoney"]
Loading

Data boundary

The current browser build does not send holdings data to a project server. When the operator asks for a prepared packet, the browser copies it to the system clipboard. The bookmark reads the packet on the visible eMoney page.

“Clear session” removes loaded data from the page. It clears the clipboard only if the clipboard still contains this session's last payload. If the operator copied something else afterward, the command leaves it alone. Use only synthetic or otherwise authorized data.

See DISCLAIMER.md for the project boundary and SECURITY.md for private vulnerability reporting.

Run it

npm ci
npm test
npm run typecheck
npm run build:demo
npm run build:portable
npm run test:portable

npm run start:demo serves the browser build locally. The portable build produces one self-contained HTML file with a restrictive content security policy.

The implementation is TypeScript and plain DOM code, with Node’s built-in test runner, esbuild for the portable artifact, and an optional Tauri shell.

License

MIT. See LICENSE.

About

Human-gated, browser-local CSV-to-eMoney entry assistant. In my workflow, a recurring task fell from roughly 1-2 hours to 3-5 minutes; firsthand observation, not a controlled benchmark.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages