meita / wps
Saudi WPS payroll protection file generator with multi-bank support (Al Rajhi, Riyad, AlAhli, Alinma, ANB) for any PHP or Laravel project.
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/meita/wps
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: ^10.5
README
PHP/Laravel package that generates Saudi WPS payroll files with multi-bank support (Al Rajhi, Riyad, SNB AlAhli, Alinma, ANB). All classes live under the Meita\Wps namespace.
Requirements
- PHP 8.1+
- Works in any PHP app or Laravel project.
Installation
composer require meita/wps
Quick start (PHP)
use Meita\Wps\Adapters\{AlRajhiAdapter, RiyadAdapter, AlAhliAdapter, AlinmaAdapter, ArabNationalBankAdapter}; use Meita\Wps\BankAdapterRegistry; use Meita\Wps\PayrollProtectionManager; use Meita\Wps\DTO\{Payment, PaymentBatch}; $registry = new BankAdapterRegistry([ 'alrajhi' => new AlRajhiAdapter(), 'riyad' => new RiyadAdapter(), 'alahli' => new AlAhliAdapter(), 'alinma' => new AlinmaAdapter(), 'anb' => new ArabNationalBankAdapter(), ]); $batch = new PaymentBatch( companyId: '1234567890', companyName: 'Meita LLC', payrollMonth: '2024-05', payments: [ new Payment('EMP-1', 'Ali Saleh', '1010101010', 'SA123...', 5500.75), new Payment('EMP-2', 'Sara Ahmed', '2020202020', 'SA456...', 4300.00, notes: 'Commission included'), ], reference: 'MAY-24', contactEmail: 'payroll@meita.sa' ); $manager = new PayrollProtectionManager($registry); $file = $manager->generate('alrajhi', $batch); file_put_contents($file->filename, $file->content);
Laravel usage
- The service provider auto-registers the default adapters and binds
PayrollProtectionManager. - Example:
use Meita\Wps\PayrollProtectionManager; use Meita\Wps\DTO\{Payment, PaymentBatch}; $batch = /* build your PaymentBatch */; $file = app(PayrollProtectionManager::class)->generate('riyad', $batch); Storage::put(\"wps/{$file->filename}\", $file->content);
- To override or add adapters, bind your own
BankAdapterRegistryin a service provider before resolvingPayrollProtectionManager.
Adding a custom bank adapter
- Extend
Meita\Wps\Adapters\AbstractDelimitedAdapter. - Implement
key(),bankName(),header()(optional), andfields()to shape each row. - Register the adapter in
BankAdapterRegistry(either manually or via a Laravel service provider).
Supported adapters
alrajhiriyadalahli(SNB)alinmaanb