payments-dashboard/package.json
Adam Moussa f3772861d0
feat(fetchboa): v2 return/redeposit-aware reconciliation (#66)
The two-code 475/255 filter missed every return on the Jan-Jul statement
(29 ARP refer-to-maker credits, 24 electronic return credits, and the
redeposit cycles), leaving 5 paid-then-returned checks stuck at Cleared
($5,256.62, vendors unpaid). Rewrite fetchBoaTransactions around a pure
reconciliation module (src/boaRecon.js) covered by node:test:

- BAI transaction-code event map (only 475 = check paid is confirmed;
  remaining codes pend the enumeration replay) with a description-text
  fallback classifier for ARP refer-to-maker, return-of-posted-check
  (check-numbered and electronic) and ACH DES:PAYMENTS formats. Unknown
  check-shaped transactions are logged and counted, never dropped.
- Matching on check number AND amount over all candidates; wrong-amount
  or collapsed-number postings fall back to a unique exact-amount match
  within checks issued in the last 120 days; ambiguity means unmatched
  with no write.
- Transitions always set BOTH status and clear_status (the missed
  returns slipped through the divergence between them). clear_status is
  bank truth: returns apply even to Cleared records, a second paid debit
  on a Returned check is a redeposit back to Cleared, and a return on a
  voided check is terminal voided-and-bounced. Every applied event is
  appended to a history list; identical replayed events are noops.
- Optional {fromDate, toDate} replay payload (strictly validated) for
  gap replays and the BAI-code enumeration runs; default stays
  yesterday.
- Each run writes a boa_recon#<runDate> summary item (90-day TTL) with
  per-event counts, unmatched check numbers/amounts, and unknown codes;
  unmatched/unknown also console.error (Slack alerting is #71).

ACH transactions are classified but not yet acted on; bank-confirming
ACH lands with #69.
2026-07-21 20:30:03 -04:00

22 lines
615 B
JSON

{
"name": "payments-dashboard",
"version": "1.0.0",
"type": "module",
"description": "Payments CSV ingestion, Slack App Home dashboard, and expense approval routing",
"files": [
"src/"
],
"scripts": {
"test": "node --test \"tests/**/*.test.js\""
},
"dependencies": {
"@aws-sdk/client-dynamodb": "^3.1087.0",
"@aws-sdk/client-lambda": "^3.1087.0",
"@aws-sdk/client-s3": "^3.1087.0",
"@aws-sdk/client-secrets-manager": "^3.1087.0",
"@aws-sdk/client-sqs": "^3.1087.0",
"@aws-sdk/lib-dynamodb": "^3.1087.0",
"csv-parse": "^7.0.1",
"mailparser": "^3.9.14"
}
}