Commit graph

727 commits

Author SHA1 Message Date
DEls
84da8eceac feat(dn): a page to see and decide a deletion flag
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 21:56:07 +02:00
DEls
7c1a7f74fc feat(dn): route to delete or keep a flagged record
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 21:54:14 +02:00
DEls
77dbdeb160 feat(dn): rules for deciding deletion flags (delete with a saved copy, keep, never evidence)
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 21:52:53 +02:00
DEls
0113d1a1fa docs(dn): plan for deletion flags a person can act on
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:26:05 +02:00
DEls
c4f2fd7f56 fix(dn): tell the clerk to re-match when the slip itself changed
The automatic refresh already handles a PO that moved on; when the
banner still shows, only Try matching again helps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:18:00 +02:00
DEls
48df4cf026 feat(dn): inbox cards show the booking value and the PO position
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 20:14:53 +02:00
DEls
e6e41d3c22 fix(dn): an out-of-date match refreshes and keeps saved decisions instead of asking for a re-match
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 20:13:31 +02:00
DEls
91ac705536 feat(dn): New/Classic switch for the delivery review (DN_REVIEW_DEFAULT_VIEW, per-browser override)
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 20:09:39 +02:00
DEls
304d4b3e31 feat(dn): review cards — slip line over its PO line, green/amber, totals vs PO, Post when all green
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 20:07:56 +02:00
DEls
6cfc343625 feat(dn): review model — one card per PO line, green/amber with working, totals vs PO
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 20:07:06 +02:00
DEls
ba06cee545 feat(dn): explain a slip price against the PO rate (length, VAT, per 1000, kits)
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 20:06:25 +02:00
DEls
529028b8d1 docs(dn): phase 1 plan — the delivery review page
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:59:39 +02:00
DEls
4493bbc0db feat(clock): pay against the real work schedule
Mon-Thu 07:00-16:30, Friday 07:00-15:00, last Friday of the month
07:00-12:00 (weekends use the Mon-Thu bands). Each shift end has a
10-minute band either side; arrivals up to 07:10 pay from 07:00.
Lunch now phases in from 5h to 5h30 instead of a 30-minute cliff, so
a normal day pays 9 / 7.5 / 5 hours.

The worker calendar judges each day against that day's expected hours,
so a normal Friday is green, and the worker page shows the schedule.
The recalc script recognises rows already rewritten by the first rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:51:24 +02:00
DEls
1e55fea2c2 docs(dn): explain-or-ask design (smarter in-app matching, line colours, rulebook)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:50:35 +02:00
DEls
295f31fce6 fix(clock): recalc re-run counts already-paid rows as unchanged
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:32:50 +02:00
DEls
75b178dd33 feat(clock): store paid hours, not the raw scan span
A scan in up to 07:10 pays from 07:00; a scan out between 16:20 and
16:40 pays to 16:30; a session over five hours loses a 30-minute lunch.
A normal day is therefore exactly 9 hours (green on the calendar and
matrix); late arrivals, early exits and overtime use the real times.
Applied on clock-out, in missed-scan corrections and their preview.
The calendar keeps the raw scan times and labels hours "Paid hours".

Includes a dry-run-first script to recalculate existing QR entries; it
only rewrites rows still equal to their raw scan total.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:01:17 +02:00
DEls
e66ac520dc fix(dn): agent board shows only the open site question; Foreman skill lessons from run 1
- inbox_board: while a site question is open, blocking lists only that
  question (the reader's older doubts were misleading Foreman, e.g. the
  corrected FH Chamberlain order). next now points agents at
  prepare_delivery, and at the site manager for Ready-to-post slips;
  agents no longer book.
- Foreman skill: describe parked documents only from the open question;
  VERDICT counts only what is new this run (still-waiting items become a
  count line); quote refusals and their hint instead of guessing a cause;
  candidate_closed on regrouping means a document in the batch is set
  aside or posted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 18:42:18 +02:00
DEls
009ac0e30f docs(dn): Foreman inbox-clerk skill and the Claude review skill
Foreman (MiniMax) works the delivery-note inbox: checks every slip
against its photo and PO, fixes misreads, groups kits, prepares clean
slips with prepare_delivery (Ready to post, never booked) and asks the
site about the rest. The review skill spot-checks his work, moves
answered site questions on to Ready to post and applies site-confirmed
receipt corrections. The site manager pulls the trigger.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 17:49:18 +02:00
DEls
0307d2cb35 feat(mcp): prepare_delivery stages a slip for the site manager without booking it
Agents can now save a whole receiving plan (lines by number, kits, NIL
auto-close) and leave the slip in Ready to post; the site manager checks
the totals and presses Confirm delivery, which posts exactly what was
saved. Quantities over the PO need acceptExcess (site-approved) and a
slip with an open site question is refused.

Confirm delivery on the web now refreshes a slip whose match went stale
because another slip on the same PO was booked, re-applying the saved
decisions instead of sending the user back to an AI re-match.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 17:47:35 +02:00
DEls
2014a02db5 Merge main into feat/dn-stage-3b 2026-10-09 13:37:42 +02:00
DEls
6736c7e20d fix(mcp): reassign_receipt refuses to revalue a po_rate booking without a rate
Keeping the old value when the quantity or line changes would book, say,
162.5 m at the value of 65 m. Adds hints for both value refusals.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:37:34 +02:00
DEls
a176f1e90e feat(mcp): reassign_receipt also fixes line-posted receipts and keeps their bookings in step
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 13:36:14 +02:00
DEls
c2dbafcaa2 fix(dn): strip each of the slip's own numbers before looking for a second document
The joined 'DOC|ALT' string never matched the evidence text, so a slip
with alternate numbers counted its own numbers as a second document and
stayed held in grouping.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:32:48 +02:00
DEls
eca2cb845c fix(dn): a fragment of background paper no longer holds a page in grouping
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 13:30:11 +02:00
DEls
fbc1f4f5c6 feat(mcp): split_or_crop_page uploads crops and keeps the original
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 13:28:16 +02:00
DEls
083cf849c8 feat(mcp): merge_suppliers repoints a duplicate supplier and flags it for deletion
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 13:23:02 +02:00
DEls
9ac2aa5428 feat(mcp): reassign_receipt fixes a wrong booking without deleting it
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 13:19:41 +02:00
DEls
6101ca8f2e feat(mcp): agents flag records for deletion instead of deleting
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 13:14:17 +02:00
DEls
ddb6391fa6 Merge branch 'feat/clock-fix-missing-in'
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:10:56 +02:00
DEls
d94d29f0a2 docs: Stage 3b plan (request_deletion, reassign_receipt, merge_suppliers, split_or_crop_page, background fragments)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:07:56 +02:00
DEls
b32ad0bc8b feat(clock): fix a missing clock-in from Needs attention
When nobody scanned a worker in, the evening scan was stored as the IN
and the correction dialog only allowed a leaving time after it. The
dialog now shows an editable arrival and leaving time, with a one-click
"this scan was actually the clock-out" swap. Late scans (16:00+) get a
hint on the card. A corrected arrival is stored as the optional
actual_in_at on the correction row (migration script included, not
applied); the original QR scan is untouched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:57:09 +02:00
DEls
82c6f95878 fix(dn): run a queued agent job only on ticks with no inbox batch
Both are page reads; two in one tick can pass the 300s ceiling and get a
batch reclaimed and read twice. The job waits for the next tick instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:54:46 +02:00
DEls
4c437cd320 fix(dn): keep the site's open question through a grouping change
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 12:50:04 +02:00
DEls
f1e3c43de5 fix(dn): the n8n tick also runs queued agent batch jobs
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 12:47:04 +02:00
DEls
29135bdc57 fix(mcp): post_delivery refreshes a stale preview after other receipts on the PO
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 12:45:24 +02:00
DEls
35c18c32a3 docs: Stage 3a plan (stale preview refresh, MCP job drain, site question through regroup)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:42:40 +02:00
DEls
7b23d23ed7 feat(dn): Waiting for site column on the delivery-note inbox
Documents with an open site question move out of Identify/Match into
their own column, and each card shows the question itself in an amber
box instead of a generic badge, so the site sees what it has to answer
without opening the slip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:07:49 +02:00
DEls
e97bf93c7d chore: add foreman scheduler mod; keep it out of the app type-check
foreman/ is a Claude Code mod (job runner + hooks) that imports the
claude-code runtime types, so tsc over the app failed on it. Excluding
it from tsconfig keeps the Next build green.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:05:50 +02:00
DEls
3cd4101ca6 fix(dn): show an open site question as the headline in Needs attention
The inbox list took its reason from documentProgress, which listed the
model's old identity doubts ("Is MEGCPO9376 correct?", "No matching PO
found") ahead of the question an agent asked the site. While a site
question is open it is now the only reason, labelled 'Waiting for site'
with the action 'Answer the site question'; once answered the normal
reasons return.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 11:54:54 +02:00
DEls
9a6aed50a4 feat(management): add admin planning dashboards
Add turnover, project, retention, and year comparison pages from the supplied workbook, protected by named admin access. Include the local chart gallery, grouped monthly hover, smooth comparison toggle, and monthly income minus cost series.

Require named PocketBase sign-in in every environment and remove the shared PIN bypass. Update access documentation and business-route test fixtures.
2026-10-09 10:16:50 +02:00
DEls
46452ce48f fix(mcp): include payload_hash in post_delivery's journal row
PocketBase requires it on mcp_operations; the in-memory test database
did not, so post_delivery failed on live data with 'Failed to create record'.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 07:37:29 +02:00
DEls
6999c0a6dc fix(mcp): load page collection fields so move_to_purchase_orders can fetch the photo
The page was read with a fields list that dropped collectionId and
collectionName, so the PocketBase file URL came back empty on live data
(tests stubbed the URL helper). Found in the acceptance run on PO 9412.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 07:36:06 +02:00
DEls
f0101cf736 feat(dn): answer site-decision questions on the slip page
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 07:06:09 +02:00
DEls
2f45986fbb fix(dn): keep an open site question through a pipeline re-run
A re-run replaced the candidate's checks wholesale, which would drop the
agent's question and could mark the slip ready to post unanswered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 07:02:48 +02:00
DEls
9a6db8049f feat(dn): agents can ask the site a question about a delivery document
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 07:00:02 +02:00
DEls
4a8edf1f7e docs(dn): site-decision implementation plan
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 06:57:29 +02:00
DEls
01239c6633 fix(dn): drag to pan a zoomed page in Check page grouping
The grouping preview zoomed by widening the image inside a scroll box with
no way to move it on a Mac (hidden horizontal scrollbar). Adds a shared
mouse drag-to-pan hook, a grab cursor and a one-line hint.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 06:40:49 +02:00
DEls
1ef172c98a feat(mcp): address delivery lines by source line, not index
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 02:41:35 +02:00
DEls
b77aa7c6f8 perf(mcp): fetch only open delivery documents for the inbox board
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 02:40:22 +02:00
DEls
b0ecfbca10 feat(mcp): compact delivery inbox board for agents
Co-Authored-By: MiniMax Code <noreply@minimax.io>
2026-10-09 02:39:38 +02:00