Skip to content

Repository files navigation

Quality Data Manager

Offline Windows desktop app that replaces the CollectingQualityPartPullInfo VBA macro. Drop a week's worth of daily QC "Quality Part Pull" files (or whole month/week folders) onto it; it reads each file's QC Form sheet, normalizes messy operator dates/times, validates every row, catches duplicates, and consolidates everything into a per-year SQLite store you can search and export to .xlsx/.csv.

Fully offline — the only network call is the manual update check. Built on the same Electron stack as jdot-utilities (same window shell, same standard auto-updater); SQLite is the source of truth, xlsx/csv are exports.

New here? End-user instructions live in docs/USER_GUIDE.md.

Why this beats the macro

  • Reads file contents, not filenames. Date/time/data come from inside each QC Form sheet — no rename dance, no fragile "resume from last row" logic.
  • Handles a whole month/week folder at once, streamed file-by-file with a live progress bar (thousands of files won't exhaust memory or look frozen).
  • Tolerant date/time parsing. 8:30 am, 830, 0830, 1345, 5/1/2026, 05-01-26, May 1, Excel serials — all normalized. Anything unclear is flagged, not silently mangled; the filename is a fallback.
  • Duplicate detection you control. Two rows are duplicates only when all of the configured key fields match (Settings → Duplicate-match fields). Content hashing means re-dropping the same file is harmless.
  • Nothing enters the store silently. Invalid / ambiguous / duplicate rows go to the Review queue; you fix inline and approve — or set an acceptance policy to auto-allow duplicates/ambiguous rows (tagged so you can see them).
  • See and search your data, and export a date range (last/this week, month, YTD, custom) with a live in-range count.

Features by tab

  • Import — drag-drop files or folders (or the Choose buttons). Live progress; a summary of committed / held / to-review / total when done.
  • Review — flagged rows as editable cards showing the actual problem messages. Sort (issue severity, date, part number, forge order, …) and filter (by text or issue type); duplicates are highlighted. Approve (records "no corrections" / "corrected") or Reject (kept, restorable). Auto-allowed rows never appear here.
  • Data — live stats, a searchable browser of committed rows (with a Review column showing each row's disposition and duplicate highlighting), and date-range export to xlsx/csv with an Include allowed duplicates toggle.
  • Settings — active year, source sheet, validation rules, import behavior (auto-commit, filename fallback), review acceptance (auto-allow duplicate/ambiguous, duplicate-match fields), store folder + journal mode, a Store health integrity check, update check, and a guarded database reset.

Layout

src/main/
  main.js                 Electron app + IPC + standard updater + launch integrity check
  preload.js              contextBridge API
  db.js                   SQLite store (files / batches / rows); migrations; queries
  settings.js             default rules + user overrides (deep-merge)
  pipeline/
    readXlsx.js           read the QC Form sheet (exceljs, lazy-required)
    parseDateTime.js      tolerant date/time normalization (confidence tiers)
    validate.js           rule engine (ok / warn / reject)
    dedup.js              file hash + configurable row key
    classify.js           review-acceptance disposition (pure, tested)
    importBatch.js        orchestrates a full drop -> classified rows (streamed)
    exportYear.js         date-range xlsx / csv export
src/renderer/             Import · Review · Data · Settings (index.html + renderer.js + styles.css)
config/defaultRules.json  validation + behavior defaults (editable in Settings)
test/                     pipeline · import · reject-button · acceptance suites

Run / build

npm install       # installs deps; postinstall rebuilds better-sqlite3 for Electron
npm test          # pure-node suites: parse/validate/dedup, import streaming,
                  # reject-button guard, acceptance policy (no Electron needed)
npm start         # launch the app
npm run dist      # build the Windows NSIS installer -> dist/

Requires Node 22+. Building the .exe must happen on Windows (the native better-sqlite3 binary) — CI (.github/workflows/build.yml) does this on windows-2022.

Releases & auto-update

This repo is public and hosts both the source and the GitHub Releases the updater reads. Push a version tag to cut a release:

git tag v1.2.0 && git push origin v1.2.0

CI builds the Windows installer and publishes it (installer + latest.yml + .blockmap) as a Release on this repo, using the built-in GITHUB_TOKEN — no personal access token and no separate feed repo needed. A manual workflow_dispatch run builds a test installer as a downloadable artifact without publishing.

The installed app checks for updates only when you click Settings → Check for updates (no background calls).

Validation rules (all editable in Settings)

Field Rule On failure
Date parseable; within active year ±1 reject / ambiguous → Review
Time parseable 00:00–23:59 reject → Review
Shift in {1, 2, 3} reject → Review
Press Line in {1, 3, 4, 5, 7, 9, 11} reject → Review
Forge Order 5–9 digits (optional FO prefix) warn (still imports)
Part Number e.g. NN-NNN-NN, NNNNN-NN warn (still imports)
Heat Code 3–4 letters warn (still imports)
Initials 2–4 letters, optional warn if present & odd
Duplicate all configured key fields match, or same file hash → Review (or auto-allowed, tagged)

Shared store

Set Store folder in Settings to a network path (e.g. P:\...\QCPull) so the qcpull.db and its exports live on the share and whoever runs the app that week writes to the same year store. On a network share the database automatically uses a rollback journal instead of WAL (WAL needs real shared memory).

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages