anode-club/sdk-php

SDK PHP de l'ANODE

Maintainers

Package info

github.com/ANODE-CLUB/sdk-php

pkg:composer/anode-club/sdk-php

Statistics

Installs: 99

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.5 2026-04-10 13:18 UTC

This package is auto-updated.

Last update: 2026-04-10 13:18:36 UTC


README

Description

Ce SDK PHP permet la gestion des métadonnées des Mandats d'AccÚs aux Données des PDL (Points De Livraison) dans les fichiers PDF. Il offre une API simple et robuste pour :

  • Lire les mĂ©tadonnĂ©es des mandats depuis des PDFs existants
  • Écrire des mĂ©tadonnĂ©es dans des PDFs de mandats
  • GĂ©rer les informations des mandants (particuliers et professionnels)
  • Manipuler les donnĂ©es de points de livraison (PRM/PCE)

Installation

Prérequis

  • PHP 8.1 ou supĂ©rieur
  • Composer

Installation via Composer

composer require anode-club/sdk-php

Structure du projet

anode/sdk-php/
├── src/                                           # Code source du SDK
│   └── MetadonneesMandatAccesDonneesPDL/         # SDK MĂ©tadonnĂ©es Mandat d'AccĂšs aux DonnĂ©es PDL
│       └── V1/                                   # Version 1 de l'API
│           ├── Dto/                              # Data Transfer Objects
│           │   ├── Mandat.php                    # Classe principale du mandat
│           │   └── Mandat/                       # Composants du mandat
│           │       ├── Parties.php              # Parties impliquĂ©es (mandant + mandataire)
│           │       ├── Parties/                 # Types de parties
│           │       │   ├── Partie.php           # Classe abstraite de partie
│           │       │   └── Partie/              # Types concrets de parties
│           │       │       ├── PersonnePhysique.php     # Personne physique
│           │       │       ├── PersonneMorale.php       # Personne morale
│           │       │       └── PersonneMorale/          # Sous-composants personne morale
│           │       │           └── RepresentantLegal.php # ReprĂ©sentant lĂ©gal
│           │       ├── Objet.php                # Objet du mandat
│           │       ├── Objet/                   # Composants de l'objet
│           │       │   ├── Donnees.php          # Types de donnĂ©es demandĂ©es
│           │       │   ├── PointsDeLivraison.php       # Collection des PDL
│           │       │   ├── PointsDeLivraison/          # Types de PDL
│           │       │   │   ├── Prm.php          # Point PRM (Ă©lectricitĂ©)
│           │       │   │   └── Pce.php          # Point PCE (gaz)
│           │       │   └── Delegations.php      # DĂ©lĂ©gations accordĂ©es
│           │       └── Consentement.php         # Consentement et validitĂ©
│           └── Handler/                          # Gestionnaires
│               └── Pdf.php                      # Gestionnaire pour fichiers PDF
├── test/                                      # Tests unitaires
├── exemple/                                   # Exemples d'utilisation
│   └── mandat-acces-donnees-pdl/v1/          # Exemples V1
│       ├── lecture-meta-donnees.php             # Lecture des mĂ©tadonnĂ©es
│       ├── ajout-meta-donnees.php               # Ajout de mĂ©tadonnĂ©es
│       ├── mandat.pdf                           # PDF d'exemple
│       └── mandat-src.pdf                       # PDF source
└── composer.json                              # Configuration Composer

Utilisation

1. Lecture des métadonnées depuis un PDF

<?php

require __DIR__ . '/vendor/autoload.php';

use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Handler\Pdf;

// Instancier le gestionnaire PDF
$pdfHandler = new Pdf('mandat.pdf');

// Extraire les métadonnées du mandat
$mandat = $pdfHandler->getMandat();

// Afficher les données
var_dump($mandat);

2. Création et ajout de métadonnées dans un PDF

<?php

require __DIR__ . '/vendor/autoload.php';

use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat\Parties;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat\Parties\Partie\PersonneMorale;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat\Parties\Partie\PersonneMorale\RepresentantLegal;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat\Parties\Partie\PersonnePhysique;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat\Objet;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat\Objet\Delegations;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat\Objet\Donnees;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat\Objet\PointsDeLivraison;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat\Objet\PointsDeLivraison\Prm;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat\Objet\PointsDeLivraison\Pce;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Dto\Mandat\Consentement;
use AnodeClub\MetadonneesMandatAccesDonneesPDL\V1\Handler\Pdf;

// Créer les parties du mandat
$mandant = new PersonneMorale(
    'ACME',
    '123456789', 
    '1 rue de la République, 69001 Lyon',
    new RepresentantLegal('MARTIN', 'Julien', 'Président', 'julien.martin@domain.ext', '+33123456789')
);

$mandataire = new PersonnePhysique(
    'DUPONT',
    'Jean',
    '456 avenue des Fournisseurs, 75001 Paris',
    'jean.dupont@energy.com',
    '+33987654321'
);

$parties = new Parties($mandant, $mandataire);

// Définir l'objet du mandat
$donnees = new Donnees(
    true,  // Données techniques
    true,  // Données contractuelles  
    false, // Données d'usage
    24     // Période d'historique en mois
);

$pointsDeLivraison = (new PointsDeLivraison())
    ->add(new Prm('12345678901234'))  // PDL électricité
    ->add(new Pce('GI123456'));       // PDL gaz naturel

$delegations = (new Delegations())
    ->add('Consultation des données de consommation')
    ->add('Transmission aux fournisseurs d\'énergie');

$objet = new Objet($donnees, $pointsDeLivraison, $delegations);

// Définir le consentement
$consentement = new Consentement(
    new \DateTimeImmutable('2024-01-01 12:34:56', new \DateTimeZone('Europe/Paris')),
    new \DateTimeImmutable('2024-12-31 23:59:59', new \DateTimeZone('Europe/Paris'))
);

// Créer le mandat complet
$mandat = new Mandat($parties, $objet, $consentement);

// Intégrer dans le PDF
$pdfHandler = new Pdf('mandat.pdf');
$pdfHandler->setMandat($mandat);

API Principale

DTOs (Data Transfer Objects)

Structure du mandat

  • Mandat : DTO principal reprĂ©sentant un mandat complet d'accĂšs aux donnĂ©es
    • Parties : Les parties impliquĂ©es dans le mandat (mandant + mandataire)
    • Objet : L'objet du mandat (donnĂ©es demandĂ©es, PDL concernĂ©s)
    • Consentement : Le consentement donnĂ© et sa pĂ©riode de validitĂ©

Types de parties

  • Partie : Classe abstraite reprĂ©sentant une partie au mandat
    • PersonnePhysique : Personne physique (particulier)
    • PersonneMorale : Personne morale (entreprise, association...)
      • RepresentantLegal : ReprĂ©sentant lĂ©gal de la personne morale

Objet du mandat

  • Objet : Regroupe ce qui est demandĂ© dans le mandat
    • Donnees : Types de donnĂ©es et permissions d'accĂšs
    • PointsDeLivraison : Collection de points de livraison concernĂ©s
    • Delegations : DĂ©lĂ©gations accordĂ©es (optionnel)

Composants techniques

  • PointsDeLivraison : Collection des points de mesure
    • Prm : Point RĂ©fĂ©rence Mesure (Ă©lectricitĂ©)
    • Pce : Point de Comptage et d'Estimation (gaz)
  • Consentement : PĂ©riode de validitĂ© du mandat

Handlers (Gestionnaires)

  • Pdf : Gestionnaire pour lire/Ă©crire les mĂ©tadonnĂ©es dans les fichiers PDF

Types de points de livraison

  • Prm : Point de Reference Mesure (Ă©lectricitĂ©)
  • Pce : Point de Comptage et d'Estimation (gaz)

Exemples d'implémentation

Des exemples complets sont disponibles dans le dossier exemple/ :

Développement

Scripts disponibles

# Formatage du code (PSR-12)
composer run lint

# Analyse statique
composer run analyse

# Tests unitaires
composer run test

# Couverture de code
composer run coverage

Architecture

Le SDK suit une architecture en couches avec une approche orientée métier juridique :

  • DTOs : Classes immutables (readonly) utilisant la terminologie juridique française
    • Mandat : Le document juridique principal
    • Parties : Mandant (qui donne le mandat) et Mandataire (qui le reçoit)
    • Objet : Ce qui est demandĂ© dans le mandat
    • Consentement : Validation et pĂ©riode de validitĂ©
  • Handlers : Gestionnaires responsables des opĂ©rations sur les fichiers PDF
  • SĂ©rialisation : Chaque DTO dispose de mĂ©thodes buildXml() et makeFromXml() pour la conversion XML

Cette architecture garantit :

  • ✅ Terminologie juridique appropriĂ©e (mandant/mandataire, consentement)
  • ✅ ImmutabilitĂ© des donnĂ©es (DTOs readonly)
  • ✅ SĂ©paration des responsabilitĂ©s (DTOs vs Handlers)
  • ✅ Structure intuitive reflĂ©tant le domaine mĂ©tier juridique

Standards

  • PSR-4 : Autoloading des classes
  • PSR-12 : Style de code
  • Compatible PHP 8.1+
  • Tests avec PHPUnit
  • Analyse statique avec PHPStan

Licence

Ce projet est développé par CNNE pour la gestion des mandats d'accÚs aux données des points de livraison d'énergie.