Project

General

Profile

Edit Copy Actions

Feature #4652

closed

Working on Batch transactions in plaid for zelle payments

Added by Yogeesh sai about 2 months ago. Updated 15 days ago.

Status:
Closed
Priority:
Normal
Assignee:
Start date:
10/24/2025
Due date:
% Done:

50%

Estimated time:
8:00 h
Spent time:

Files

.env (0 Bytes) .env Yogeesh sai, 10/29/2025 01:52 PM Delete
index.js (0 Bytes) index.js Yogeesh sai, 10/29/2025 01:52 PM Delete
notifyManager.js (0 Bytes) notifyManager.js Yogeesh sai, 10/29/2025 01:52 PM Delete
plaidclient.js (0 Bytes) plaidclient.js Yogeesh sai, 10/29/2025 01:52 PM Delete
posUtils.js (0 Bytes) posUtils.js Yogeesh sai, 10/29/2025 01:52 PM Delete
reconcilezelle.js (0 Bytes) reconcilezelle.js Yogeesh sai, 10/29/2025 01:52 PM Delete
1.js (130 Bytes) 1.js Yogeesh sai, 10/30/2025 03:47 PM Delete
.env (224 Bytes) .env Yogeesh sai, 10/30/2025 03:47 PM Delete
index.js (380 Bytes) index.js Yogeesh sai, 10/30/2025 03:47 PM Delete
notifyManager.js (588 Bytes) notifyManager.js Yogeesh sai, 10/30/2025 03:47 PM Delete
plaidclient.js (635 Bytes) plaidclient.js Yogeesh sai, 10/30/2025 03:47 PM Delete
posUtils.js (482 Bytes) posUtils.js Yogeesh sai, 10/30/2025 03:47 PM Delete
reconcilezelle.js (897 Bytes) reconcilezelle.js Yogeesh sai, 10/30/2025 03:47 PM Delete
exchange-public-token.js (298 Bytes) exchange-public-token.js Yogeesh sai, 11/06/2025 12:11 PM Delete
package.json (349 Bytes) package.json Yogeesh sai, 11/06/2025 12:11 PM Delete
PlaidLink.js (547 Bytes) PlaidLink.js Yogeesh sai, 11/06/2025 12:11 PM Delete
package-lock.json (29.3 KB) package-lock.json Yogeesh sai, 11/06/2025 12:11 PM Delete
getZelleTransactions.js (467 Bytes) getZelleTransactions.js Yogeesh sai, 11/06/2025 12:11 PM Delete
index.js (367 Bytes) index.js Yogeesh sai, 11/06/2025 12:11 PM Delete
package.json (333 Bytes) package.json Yogeesh sai, 11/06/2025 12:12 PM Delete
notifyManager.js (569 Bytes) notifyManager.js Yogeesh sai, 11/06/2025 12:12 PM Delete
plaidClient.js (433 Bytes) plaidClient.js Yogeesh sai, 11/06/2025 12:12 PM Delete
package-lock.json (29.3 KB) package-lock.json Yogeesh sai, 11/06/2025 12:12 PM Delete
index.js (367 Bytes) index.js Yogeesh sai, 11/06/2025 12:12 PM Delete
getZelleTransactions.js (467 Bytes) getZelleTransactions.js Yogeesh sai, 11/06/2025 12:12 PM Delete
notifyManager.js (569 Bytes) notifyManager.js Yogeesh sai, 11/06/2025 12:12 PM Delete
package.json (333 Bytes) package.json Yogeesh sai, 11/06/2025 12:12 PM Delete
plaidClient.js (433 Bytes) plaidClient.js Yogeesh sai, 11/06/2025 12:12 PM Delete
package-lock.json (29.3 KB) package-lock.json Yogeesh sai, 11/06/2025 12:12 PM Delete
posUtils.js (437 Bytes) posUtils.js Yogeesh sai, 11/06/2025 12:12 PM Delete
reconcileZelle.js (783 Bytes) reconcileZelle.js Yogeesh sai, 11/06/2025 12:12 PM Delete
exchange-public-token.js (298 Bytes) exchange-public-token.js Yogeesh sai, 11/06/2025 12:13 PM Delete
package.json (349 Bytes) package.json Yogeesh sai, 11/06/2025 12:13 PM Delete
Plaid_Account.docx (127 KB) Plaid_Account.docx Yogeesh sai, 11/07/2025 01:32 PM Delete

Add

Subtasks


Add

Related issues

Updated by Yogeesh sai about 2 months ago

  • Status changed from New to In Progress
  • % Done changed from 0 to 40

Batch Reconciliation of Zelle Payments via Plaid
We want to:
1.Detect Zelle payments from customers.
2.Reconcile them with POS orders.
3.Run batch jobs to update payment status (paid/unpaid).
4.Notify the billing desk manager automatically.

System Architecture Overview:
1. Customer Pays via Zelle
Payment sent to your business phone/email registered with Zelle.
Appears in your bank account feed once posted.

2. Bank Account Connected to Plaid
Use Plaid Link to connect your business bank account.
Get access_token for API calls.

3. Fetch Transactions Using /transactions/sync
Run every 15–30 minutes or in scheduled batches.
Filter for Zelle payments:
js
tx.name.toLowerCase().includes('zelle')

4. Match Zelle Payment to POS Order
Match by: Amount
Timestamp (±15 min)
Optional: customer name or memo

5. Batch Reconciliation Logic
Run a batch job every few hours or nightly (e.g., 11 PM–5 AM).
Re-check unmatched POS orders.
If Zelle payment now appears, mark as paid.

6. Webhook Integration (Optional)
Use Plaid’s TRANSACTIONS_UPDATED webhook for near real-time updates.
Trigger reconciliation immediately when new transactions post.

7. Manager Notification
Send alerts via:
Email (Nodemailer)
SMS (Twilio)
Slack/WhatsApp (Webhook)

Example: Batch Flow
Time Action POS Status
12:15 PM Customer pays via Zelle awaiting_payment
12:30 PM Plaid fetches — no Zelle yet awaiting_payment
1:00 PM Zelle posts to bank, Plaid fetches itpaid
1:01 PM POS updates order, sends alert Done

Tips for Implementation:
>Use a cron job or Node.js scheduler (e.g., node-cron) for batch runs.
>Store unmatched orders in a database with timestamps.
>Use a retry window (e.g., 24 hours) before marking as permanently unpaid.
>Log all reconciliation attempts for auditability.

I have got the knowledge to integrate POS service in the AFC website and from the reference of evergreenfarmsusa website I got the pages what to create in the AFC website and for that 2 hours I have invested and after 2 hours we have went for team lunch and 2 hours I have spent for quantum computing project and research on the papers of quantum computing which was told by HR sir.

Updated by Yogeesh sai about 1 month ago

  • % Done changed from 40 to 50

1. Install node-cron
bash
npm install node-cron
2. Define Cron Schedule (4 Times Daily)
Time (IST) Purpose
9:00 AM Morning batch
1:00 PM Midday batch
5:00 PM Evening batch
11:00 PM Night batch (post-bank)
js
const cron = require('node-cron');
const reconcileZellePayments = require('./reconcileZelle');

cron.schedule('0 9 * * *', () => reconcileZellePayments('9AM'));
cron.schedule('0 13 * * *', () => reconcileZellePayments('1PM'));
cron.schedule('0 17 * * *', () => reconcileZellePayments('5PM'));
cron.schedule('0 23 * * *', () => reconcileZellePayments('11PM'));
3. reconcileZelle.js Logic Overview
js
const { getTransactions } = require('./plaidClient');
const { getPendingOrders, updateOrderStatus, notifyManager } = require('./posUtils');

async function reconcileZellePayments(batchLabel) {
console.log(`Running Zelle reconciliation batch: ${batchLabel}`);

const transactions = await getTransactions(); // Plaid /transactions/sync
const zelleTx = transactions.filter(tx => tx.name.toLowerCase().includes('zelle'));
const pendingOrders = await getPendingOrders();
for (const order of pendingOrders) {
const match = zelleTx.find(tx =>
Math.abs(new Date(tx.date) - new Date(order.timestamp)) < 15 * 60 * 1000 &&
tx.amount === order.amount
);
if (match) {
await updateOrderStatus(order.id, 'paid');
await notifyManager(order.id, match.date);
}
}
}
module.exports = reconcileZellePayments;
4. Webhook Integration (Optional)
Set up a webhook endpoint to listen for TRANSACTIONS_UPDATED.

Trigger reconcileZellePayments() immediately when new data arrives.

5. Notification Module
Use Nodemailer, Twilio, or Slack API to alert your billing desk manager:

js
function notifyManager(orderId, paymentTime) {
sendEmail({
to: '',
subject: 'Zelle Payment Received',
body: `Order #${orderId} was paid via Zelle at ${paymentTime}.`
});
}
Summary
Component Tool/Method
Scheduler node-cron
API Fetch Plaid /transactions/sync
Matching Logic Amount + Timestamp
Notification Email/SMS/Slack
Retry Window 24 hours
Would you like me to generate the full Node.js module with database hooks and webhook listener next?

Updated by Yogeesh sai about 1 month ago

I have got the errors in the code and I am solving the errors and plaid sandbox tokens,api calls and the details should be add in .env file that also I am adding on it also

Updated by Yogeesh sai about 1 month ago

Code has some errors and I'm solving on it

Actions #5

Updated by Yogeesh sai about 1 month ago

  • Subject changed from Batch transactions in plaid for zelle payments to Working on Batch transactions in plaid for zelle payments
  • % Done changed from 60 to 50
  • Estimated time changed from 4:00 h to 8:00 h

Updated by Yogeesh sai about 1 month ago

I have got some code errors and I am working on that errors

Updated by Yogeesh sai about 1 month ago

I am working on the errors and output part and this is the word document

Actions #10

Updated by Yogeesh sai 15 days ago

  • Status changed from In Progress to Closed
Edit Copy Actions

Also available in: Atom PDF