PHPackages                             3neti/emi-core - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. 3neti/emi-core

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

3neti/emi-core
==============

Provider-agnostic EMI domain: contracts, enums, models, DTOs, events

v1.0.4(2mo ago)073↓85.5%4proprietaryPHPPHP ^8.3

Since Mar 30Pushed 2mo agoCompare

[ Source](https://github.com/3neti/emi-core)[ Packagist](https://packagist.org/packages/3neti/emi-core)[ RSS](/packages/3neti-emi-core/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (5)Dependencies (10)Versions (6)Used By (4)

lbhurtado/emi-core
==================

[](#lbhurtadoemi-core)

Provider-agnostic EMI (Electronic Money Issuer) domain package for Laravel. Defines the shared contracts, enums, models, and events that any EMI provider adapter can implement.

Requirements
------------

[](#requirements)

- PHP 8.3+
- Laravel 12 or 13

Installation
------------

[](#installation)

```
composer require lbhurtado/emi-core
```

The package auto-discovers its service provider. Publish the config if needed:

```
php artisan vendor:publish --tag=emi-core-config
```

What's Included
---------------

[](#whats-included)

### Contracts

[](#contracts)

Provider adapters must implement these interfaces:

- `WalletProvider` — wallet CRUD (add merchant/customer, get details/balance, edit)
- `TransferProvider` — staged transfers (pre-transfer, settle, cancel)
- `CashInProvider` — inbound funding
- `CashOutProvider` — outbound disbursement + OTP verification
- `SignsProviderPayloads` — request signature generation
- `VerifiesProviderPostbacks` — webhook/postback signature verification

### Enums

[](#enums)

- `ProviderCode` — registered EMI providers (currently: `paynamics_constellation`)
- `WalletType` — merchant, customer, phantom
- `WalletStatus` — active, locked, suspended, closed
- `ComplianceLevel` — KYC levels (-1 through 4)
- `VerificationStatus` — PENDING, FOR REVIEW, REJECTED, APPROVED, RECAPTURE
- `TransactionType` — cash\_in, cash\_out, transfer, airtime\_load, bills\_payment
- `TransactionStatus` — 12 states from `initiated` through `reconciling`
- `TransactionDirection` — inbound, outbound, internal

### Models

[](#models)

All models use enum casts and proper Eloquent relationships:

ModelPurpose`ProviderAccount`API credentials per provider/tenant`Wallet`Local mirror of provider wallet`WalletProfile`Personal/business identity fields`WalletLimitSnapshot`Captured limit fields at a point in time`Transaction`Master transaction mirror (indexed by `request_id`)`Transfer`Pre-transfer/settle/cancel lifecycle detail`CashIn`Cash-in detail (payment method, channel, sender)`CashOut`Cash-out detail (bank account, OTP status)`BankAccount`Linked settlement/disbursement bank accounts`OtpChallenge`OTP verification trail for cash-out`WebhookReceipt`Raw postback payload + signature verification`ReconciliationEntry`Local vs provider status drift detection### Key Design Decisions

[](#key-design-decisions)

- **request\_id as first-class key** — all transactions are uniquely indexed by `request_id` for idempotency and reconciliation
- **Enum casts everywhere** — wallet type, status, compliance level, transaction status all use PHP 8.1 backed enums
- **Provider-agnostic models** — models don't depend on any specific provider; the `provider_code` field identifies which adapter created them
- **Async-first mindset** — `TransactionStatus` includes states like `awaiting_provider`, `otp_required`, and `reconciling` for asynchronous provider flows

Testing
-------

[](#testing)

```
# From the monorepo host
composer test:emi-core
```

License
-------

[](#license)

Proprietary — Lester Hurtado

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance83

Actively maintained with recent releases

Popularity10

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

5

Last Release

89d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/586e1ed70140038e6348728222adbcf68bfc4455b1f94a4f8bcbe57917a63d57?d=identicon)[3neti](/maintainers/3neti)

---

Top Contributors

[![3neti](https://avatars.githubusercontent.com/u/89447696?v=4)](https://github.com/3neti "3neti (5 commits)")

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/3neti-emi-core/health.svg)

```
[![Health](https://phpackages.com/badges/3neti-emi-core/health.svg)](https://phpackages.com/packages/3neti-emi-core)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.1M337](/packages/psalm-plugin-laravel)[a2insights/filament-saas

Filament Saas for A2Insights

171.5k](/packages/a2insights-filament-saas)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
