mirror of
https://github.com/Sea-Haven-Industries/payments-dashboard.git
synced 2026-09-30 07:43:12 +00:00
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.
22 lines
615 B
JSON
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"
|
|
}
|
|
}
|