Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions domain-skills/bulkpe/dashboard.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# BulkPe Dashboard (app.bulkpe.in)

**Flutter Web app rendered to canvas — there is NO DOM.** `document.querySelectorAll('input')` returns nothing; the body only has `flt-semantics-placeholder`. Forget selectors and JS clicks entirely: drive it with `screenshot()` → `click(x, y)` → `screenshot()` at the compositor level. Screenshots here are 1:1 CSS px (no retina scaling observed), but always re-screenshot to verify a click landed.

The operating company behind BulkPe virtual accounts is **Chaseout Technologies** (bank NEFTs to a BulkPe VA show as `CHASEOUT TECHNOLOGIES` / IFSC `YESB0CMSNOC`).

## Getting a statement (Virtual Account report)

1. Sidebar → `Report` (`/app/reports`).
2. Top-right `Generate` button → modal with `Generate Report for: Virtual Account | PG Collection | …`, quick filters, and From/To date fields.
3. Date fields open a Material date picker. The month back-chevron clicks are flaky — clicks may appear ignored but actually register; alternatively the **pencil icon** (bottom-left of picker) switches to typed input. After picking From it flows into To, then submits.
4. Report row appears with status `Pending` → `Completed` (~1 min). Click `Refresh`, then the download icon in the row. Direct CSV download.

## Report CSV traps

- Contains **NUL bytes** mid-file and non-UTF8 chars: read binary, `.replace(b'\x00', b'')`, decode `latin-1`.
- Columns: `Transaction Id, Reference Id, Beneficiary Name, ..., Amount, Payment Mode, Status, Status Description, UTR, Payment type (Credit/Debit), Charges, GST, Settelment Amount [sic], VA Closing Balance, ...`.
- `Payment type` = `Credit` (VA loads) vs `Debit` (payouts). Status `SUCCESS` / `FAILED` (`Insufficient Balance` is common — failed rows have Amount but were never paid; exclude them from payout totals).
- Penny-drop verification rows appear as `BulkpePenny…` beneficiaries with Amount 0.
- Charges + GST columns are per-transfer fees (only on SUCCESS rows).
25 changes: 25 additions & 0 deletions domain-skills/cashfree/merchant-payouts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Cashfree Merchant Dashboard — Payouts (merchant.cashfree.com)

React SPA. DOM selectors work, but custom selects don't respond to plain coordinate clicks reliably — dispatch `mousedown`/`mouseup`/`click` on the option element.

## Getting a statement / transfer data

There is no inline date-filtered transaction table worth scraping. Use **Reports**:

1. Sidebar → `Reports` (`/payouts/reports`).
2. `Report Type` select → e.g. **Account Statement** (all credits + debits + per-txn service charge & tax — best single export). `Transfer` = payouts only.
3. **Date Range** select → `Custom Date Range` opens a dual-month calendar. Click start day, end day, then `Apply`.
4. **Fund Source is required.** The `Generate Report` button is styled active but stays `disabled=true` until a Fund Source is chosen from its dropdown. If clicks seem ignored, check `button.disabled` via JS.
5. Report lands in the "Generated Reports" table (status `Processing` → ready in ~1 min). Download via the `⋮` actions menu → `Download`. CSV downloads directly.

## Account Statement CSV shape

Columns: `Added On, Debit/Credit, Particulars, Charged Amount (INR), Amount (INR), Service Charge (INR), Service Tax (INR), Closing Balance (INR), Event Id, Remarks`.

- `Particulars` values: `PAYOUT_TRANSFER` (user payouts), `SELF_WITHDRAWAL` (money pulled back to bank).
- Wallet loads appear as credits; payouts as debits. Service charge + tax are per-transfer (flat ₹ per IMPS/UPI transfer, so fee % is large on small tickets).

## Traps

- The date-picker dropdown closes on stray clicks and the click can land on checkboxes *behind* the (transparent-edged) popover — re-verify checkbox state after any miss.
- "Choose Columns" checkboxes: `Show All` re-checks everything in one click.