Export file formats¶
.json — complete backup¶
{"format": "fesua-tracker", "version": 1, "exportedAt": "2026-10-01T12:00:00.000Z",
"status": {"<key>": {…}}, "log": {"<id>": {…}}, "meta": {"settings": {"kids": […]}}, "file": {"<id>": {…}}, "sufs": {"<id>": {…}}}
Five collections: line decisions, log entries, students, the records of attached files (name, type, size, kind, which expenses they document), and the SUFS reimbursement requests the browser extension read, when there are any. The files' contents are not in the .json; they travel in the .zip.
.zip — the complete backup with files¶
A zip holding data.json (the .json export above) and a files/ folder with one entry per attached file, named <id>-<original name>, where <id> is the record's id (the first 32 hex digits of the file's SHA-256). Entries are stored uncompressed. Importing it brings in the records and the contents together.
.sqlite — database for tools¶
A SQLite file with:
| Table | Columns |
|---|---|
meta |
key, value (JSON) |
status |
key, s, kids (JSON), note, path, at |
log |
id, date, year, vendor, desc, amount (NULL = unknown), status, path, path_text, kids (JSON), note, repeat_of, at, extra (tax, shipping, etc.; NULL = not broken out), sufs (JSON: the linked SUFS request, when there is one), invoice (the receipt's number) |
log_item |
log_id, n, path, path_text, desc, qty, cost, extra, vendor, benefit, url, status (the item's result), sufs_line, invoice (when it differs from the expense's) — an expense's items, in order |
file |
id, name, type, size, kind, log_ids (JSON), kids (JSON), year, note, at, text (what was read from the file), inferred (JSON: the guessed date, amount, vendor) — records only, no contents |
sufs |
id, number, submit_date, provider, student_id, status, total, doc (JSON: the whole request) — SUFS requests read by the browser extension |
form_line |
key, category, type, detail, path, programs — the whole category list, for joins |
and a view log_readable joining the log to its form line names. Importable too.
The page builds it in the browser with sql.js (loaded from a CDN on first use, so it needs internet once).
.csv — the log for a spreadsheet¶
One row per item (an expense with three items gives three rows sharing its date, student and status). Columns: date, school year, vendor (the item's own, else the expense's), invoice/receipt number (the item's own, else the expense's), what it was, item, quantity, price each, tax, shipping, etc., item total, expense total, status, item result, SUFS request number, SUFS status, form line, students, note. Unknown prices are blank. Export only.
Import¶
Accepts .json, .sqlite, or a .zip holding either (stored or deflated), so a zipped backup works too; a .zip with a files/ folder brings the attached files' contents in as well. Two modes:
- Merge: for each decision, log entry and file record, the side with the newer
atwins; the student list is replaced by the file's. - Replace: the tracker becomes exactly what the file holds.
File contents found in a .zip are stored for every record that lacks them, in either mode.