| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 3341 |
| Technical Name |
wt_hrms_payroll_bank_files |
| License | OPL-1 |
| Website | https://way4tech.com |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 3341 |
| Technical Name |
wt_hrms_payroll_bank_files |
| License | OPL-1 |
| Website | https://way4tech.com |
WT HRMS Payroll — Bank Disbursement Files (HBL, MCB, UBL, Meezan + Generic)
Stop hand-formatting CSVs for your bank's portal. Pick a payslip batch, pick a format, click Generate — download a bank-ready file with the exact columns HBL, MCB, UBL or Meezan want. Clone the Generic template for any other bank in five minutes.
bank disbursement · salary file · HBL Connect · MCB Mass Payment · UBL Cash Management · Meezan Business Online · CSV export · bulk salary · pakistan bank · salary upload · HRMS Odoo 19 · Odoo 19 · Odoo 18 · community edition · enterprise alternative · open hrms · HR software · HR automation · way4tech
Live Preview
A real screenshot from a working WT HRMS install on Odoo 19.
The Problem This Solves
Every Pakistani bank wants a different CSV layout. Building it in Excel every month is a recipe for typos and stale data.
Each bank has its own column order
HBL wants Beneficiary Account first; UBL wants Beneficiary Name first; Meezan wants IBAN. Building each layout by hand wastes hours per cycle.
Missing bank accounts cause silent failures
A new employee with no bank account on file means a row goes missing — you only find out when the bank's portal rejects half the file.
No history of what was uploaded
Three months later, "what file did we upload to MCB on April 5th?" has no answer. CSVs live in someone's downloads folder.
The Solution — 5 Pre-Loaded Formats + a Tiny Token Language
Pick a format, pick a batch, click Generate. The disbursement run record stores the file forever — alongside line count, total amount and skipped employees.
- ✓ 5 ready-made bank formats: HBL, MCB, UBL, Meezan, plus a Generic CSV baseline
- ✓ Wizard-driven generation — WT HRMS → Payroll → Bank Files → Generate Bank File, pick batch + format, click Generate
- ✓ Auto-numbered run record with sequence
DISB/YYYY/MM/#### - ✓ Disbursement History view — every generated file with batch, format, line count, total, who generated it, when
- ✓ 4-state lifecycle: Draft → Generated → Posted to Bank → Cancelled
- ✓ Token system:
__amount__,__period__,__static:value__, dotted attribute paths (e.g.employee_id.bank_account_id.acc_number) - ✓ 3 file extensions: CSV, TXT, TSV
- ✓ 4 delimiters: comma, semicolon, pipe, tab
- ✓ 4 encodings: UTF-8, UTF-8 with BOM, Latin-1, Windows-1252 (matches every bank we tested)
- ✓ Optional header row per format
- ✓ Auto-skips employees missing a bank account — their names land in the Skipped Employees tab so you can chase them
- ✓ Picks confirmed & paid payslips from the chosen batch — never accidentally pays a draft
- ✓ Mail thread + chatter on every disbursement run — full audit trail forever
- ✓ Permission-aware menus — HR User can read/download history, HR Manager can generate & manage formats
Column Token Cheat Sheet
Each format is just a list of Header:source lines. Source is one of the special tokens or a dotted attribute path on the payslip.
| Token | Resolves To | Example |
|---|---|---|
__amount__ | Payslip net amount | Amount:__amount__ |
__period__ | YYYY-MM derived from Date To | Reference:__period__ |
__static:VALUE__ | Literal constant text | Currency:__static:PKR__ |
field.subfield | Dotted attribute path on payslip | Account:employee_id.bank_account_id.acc_number |
Lines starting with # are treated as comments and ignored. Recordsets are auto-collapsed (first record / display_name). False / None resolve to empty string — safe by default.
Five Pre-Seeded Formats
| Bank | Code | Columns (in order) | Notes |
|---|---|---|---|
| Habib Bank | HBL | Beneficiary Account, Beneficiary Name, Amount, Bank Code (HABBPKKA), Reference, Description | Upload at HBL Connect → Disbursements → Bulk Upload |
| MCB Bank | MCB | Account Number, Account Title, Amount, Reference, Narration | MCB Mass Payment template via Corporate Net Banking |
| United Bank | UBL | Beneficiary Name, Beneficiary Account, Currency (PKR), Amount, Purpose (SALARY), Reference | UBL Cash Management Bulk Disbursement |
| Meezan Bank | MEZN | IBAN, Beneficiary, Amount, Reference, Remarks | Meezan Business Online — Salary Upload Module |
| Generic CSV | GEN | Employee Code, Name, Department, Account, Bank, Amount, Period | Clone & adjust columns for any other bank |
Step-by-Step User Guide
Install & check the formats
Apps → "WT HRMS Payroll — Bank Disbursement Files" → Install. Then go to WT HRMS → Payroll → Bank Files → Bank Formats. You'll see 5 pre-loaded formats: HBL, MCB, UBL, MEZN, GEN.
Set bank accounts on employees
Open Employees → for each employee, set Bank Account (the res.partner.bank linked via bank_account_id). The disbursement reads employee_id.bank_account_id.acc_number directly — missing accounts get a clear skip message.
Run a payroll batch & confirm
Go to WT HRMS → Payroll → Batches. Generate Payslips → Compute All → Confirm All. The disbursement file picks payslips in confirmed or paid state only.
Generate the bank file
Go to WT HRMS → Payroll → Bank Files → Generate Bank File. The wizard opens. Pick the payslip batch and the bank format (e.g. HBL). Click Generate. The disbursement-run record opens.
Inspect, download, mark posted
On the run record review Line Count, Total Amount, Skipped Employees. Click Download to grab the file (e.g. HBL_April-2026_20260427_104015.csv). Upload it to your bank's portal. Back in Odoo click Mark Posted to Bank to close the loop.
Add a new bank in 5 minutes
Go to Bank Formats → duplicate Generic CSV → rename / set code (e.g. ABL) → edit Columns Definition with the bank's spec → pick delimiter / encoding. Save. The new format appears in the wizard immediately.
Every Feature That Matters
5 Banks Out-of-the-Box
HBL, MCB, UBL, Meezan, plus a Generic CSV starter — install & go.
Token Language
__amount__, __period__, __static:VALUE__, dotted attribute paths — cover any column requirement.
Wizard Workflow
Pick batch + format → Generate — record stays in DB with the binary file as attachment.
Run History
Disbursement History view shows batch, format, line count, total, generated by & when, state.
4-State Lifecycle
Draft → Generated → Posted to Bank → Cancelled with state-aware buttons.
Skipped Employee Audit
Anyone missing a bank account is listed in the Skipped Employees tab — no silent dropouts.
Encoding & Delimiter Control
UTF-8 / UTF-8 BOM / Latin-1 / Windows-1252; comma / semicolon / pipe / tab; CSV / TXT / TSV.
State-Filtered Picking
Only confirmed & paid payslips are included. Drafts, cancelled and computed are ignored.
Permission-Aware Menus
HR User reads / downloads history; HR Manager generates files and edits formats.
Compatibility & Requirements
| Odoo Edition | Community & Enterprise |
| Odoo Version | 19.0 |
| Dependencies | wt_hrms_payroll, hr |
| Python Packages | None — only stdlib (csv, io, base64) |
| External Services | None — bank file is generated locally and downloaded by you |
| License | LGPL-3 |
About Waqas Riasat & Way4Tech
WT HRMS is a community-first HR + payroll suite for Odoo 19. Bank Disbursement Files closes the last mile of payroll — from confirmed payslip to bank-portal upload in two clicks.
way4tech.com · info@way4tech.com · WhatsApp +92 315 411 4748
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module