<?php
namespace App\Services;
use App\Models\Ecriture;
use Illuminate\Support\Carbon;
class SycebnlMapper
{
// Mapping rubrique -> compte SYCEBNL
const MAPPING = [
'R02' => ['711', 'recette', 'Cotisations des membres'],
'R16' => ['712', 'recette', 'Contributions bénéficiaires'],
'R14' => ['713', 'recette', 'Ressources spécifiques'],
'R06' => ['761', 'recette', 'Produits financiers'],
'R07' => ['761', 'recette', 'Produits financiers'],
'R15' => ['761', 'recette', 'Produits financiers'],
'R05' => ['771', 'recette', 'Autres produits'],
'D01' => ['621', 'prestation', 'Pharmacie'],
'D02' => ['622', 'prestation', 'Analyses'],
'D03' => ['623', 'prestation', 'Hospitalisation'],
'D05' => ['624', 'prestation', 'Consultations'],
'D06' => ['625', 'prestation', 'Imagerie'],
'D07' => ['626', 'prestation', 'Optique cadres'],
'D28' => ['626', 'prestation', 'Optique verres'],
'D08' => ['627', 'prestation', 'Dentaire'],
'D10' => ['628', 'prestation', 'Chirurgie'],
'D40' => ['629', 'prestation', 'Soins locaux'],
'D41' => ['630', 'prestation', 'Soins étranger'],
'D47' => ['641', 'fonctionnement', 'Prévention'],
'D25' => ['641', 'fonctionnement', 'Salaires'],
'D30' => ['642', 'fonctionnement', 'CNPS'],
'D23' => ['631', 'fonctionnement', 'Télécom'],
'D24' => ['651', 'fonctionnement', 'Frais bancaires'],
'D16' => ['661', 'instance', 'Travaux AG'],
'D44' => ['661', 'instance', 'Travaux commission'],
'D13' => ['671', 'exceptionnel', 'Dépenses mortuaires'],
'D12' => ['671', 'exceptionnel', 'Prime retraite'],
];
public function genererProduitsCharges(Carbon $debut, Carbon $fin): array
{
$ecritures = Ecriture::whereBetween('date', [$debut, $fin])
->where('etat', 'Terminé')
->get();
$result = ['recettes' => [], 'charges' => []];
foreach ($ecritures as $e) {
$map = self::MAPPING[$e->rubrique_code] ?? null;
if (!$map) continue;
[$compte, $type, $libelle] = $map;
$bucket = str_starts_with($e->rubrique_code, 'R') ? 'recettes' : 'charges';
$result[$bucket][$compte] = ($result[$bucket][$compte] ?? 0) + $e->montant;
}
return $result;
}
}