Cash-in agent — État actuel vs prévu et roadmap
Ce qui est implémenté aujourd'hui, ce qui est prévu mais non encore implémenté, plan de remédiation. Pour la vue d'ensemble, voir Cash-in agent — overview.
⚠️ État Actuel vs Prévu
✅ Ce Qui Est Implémenté
Configuration des Règles ✅
- CRUD configurations
- Validation total = 100%
- Simulateur de distribution
- Historique
Collecte des Frais ✅
- Débit client
- Crédit FEE_COLLECTION
- Ledger entries
Calcul des Montants ✅
- Service de simulation
- Calcul par pourcentage
⚠️ Ce Qui Est Prévu Mais Non Implémenté
Distribution Automatique ❌
- Service
CommissionDistributionServicemanquant - Pas d'intégration dans
TransactionCreationOrchestrator
- Service
Résolution Wallets ❌
- Logique prévue mais non codée
- Pas de service
TransactionEntitiesService
Sauvegarde Distributions ❌
- Table
commission_distributionscréée - Pas de service pour l'utiliser
- Table
🔧 Ce Qui Doit Être Fait
Phase 1: Service Transaction Entities (1 jour)
Créer:
services/ledger-wallets/src/transaction-entities/
├── transaction-entities.module.ts
├── transaction-entities.service.ts
└── entities/transaction-entity.entity.tsFonctionnalité:
- Sauvegarder contexte transaction (merchant_id, corporate_id, etc.)
- Récupérer entités pour résolution wallets
Phase 2: Service Commission Distributions (1 jour)
Créer:
services/ledger-wallets/src/commission-distributions/
├── commission-distributions.module.ts
├── commission-distributions.service.ts
└── entities/commission-distribution.entity.tsFonctionnalité:
- Sauvegarder distributions
- Gérer status (pending/completed/failed)
- Retry pour comptes manquants
Phase 3: Service Distribution Orchestrator (2 jours)
Créer:
services/orchestrator/src/application/services/
└── commission-distribution.service.tsFonctionnalité:
- Récupérer règles depuis Configuration Service
- Résoudre entités depuis
transaction_entities - Résoudre wallets/comptes bénéficiaires
- Créer transferts depuis FEE_COLLECTION
- Sauvegarder dans
commission_distributions
Phase 4: Intégration (1 jour)
Modifier:
services/ledger-wallets/src/transactions/orchestrators/
└── transaction-creation.orchestrator.tsAjouter après ligne 116:
typescript
// ÉTAPE 5: Distribuer commissions (si frais)
if (feeAmount > 0 && savedTransaction.status === TransactionStatus.COMPLETED) {
await this.commissionDistributionService.distribute({
transactionId: savedTransaction.id,
transactionTypeId: dto.transactionTypeId,
feeAmount: feeAmount,
currencyCode: dto.currencyCode || 'XAF',
});
}📝 Exemple Complet de Flux
Scénario: Cash-In 10,000 XAF avec frais 200 XAF
1. Transaction Créée
json
{
"id": "tx-123",
"amount": 10000,
"feeAmount": 200,
"transactionTypeId": "deposit-cashin-uuid"
}2. Frais Collectés
FEE_COLLECTION.balance: 0 → 200 XAF3. Règles Appliquées
json
{
"platform": { "percentage": 30, "amount": 60 },
"corporate": { "percentage": 20, "amount": 40 },
"merchant": { "percentage": 50, "amount": 100 }
}4. Distribution (Prévue)
FEE_COLLECTION: 200 → 0 XAF
Nex Wallet: 0 → 60 XAF
Corporate Wallet: 0 → 40 XAF
Merchant Wallet: 0 → 100 XAF5. Enregistrements
sql
-- commission_distributions
INSERT INTO commission_distributions VALUES
('dist-1', 'tx-123', 'rule-platform', 'platform', 'account-nxpay', 60, 30, 'completed'),
('dist-2', 'tx-123', 'rule-corporate', 'corporate', 'account-corp', 40, 20, 'completed'),
('dist-3', 'tx-123', 'rule-merchant', 'merchant', 'account-merchant', 100, 50, 'completed');🎯 Conclusion
État Actuel:
- ✅ Configuration: 100%
- ✅ Collecte: 100%
- ⚠️ Distribution: 0%
L'argent est collecté mais pas encore distribué automatiquement.
Pour activer la distribution:
- Implémenter les services manquants (4-5 jours)
- Intégrer dans le flux de transaction
- Tester avec transactions réelles
Document créé le: 2026-01-29
Version: 1.0.0