# TRAIL DPS 4.2 - LOT 11.22 - Exports et refacturation SMS

Date : 2026-05-28

## Objet

Finaliser le volet commercial SMS du LOT 11 en ajoutant une interface admin de facturation et des exports CSV exploitables.

Le mode secours / lecture seule n'est pas traité dans ce lot, conformément à la décision d'abandon fonctionnel.

## Fichiers livrés

- `ovh/SRC/SmsBillingReportService.php`
- `ovh/src/SmsBillingReportService.php`
- `ovh/public/admin/billing_sms.php`
- `ovh/public/admin/export_sms_billing.php`
- `ovh/public/admin/index.php`
- `ovh/public/admin/license.php`
- `ovh/sql/lot_11_22_verification_exports_sms_billing.sql`
- `ovh/docs/LOT_11_22_2026_05_28_EXPORTS_REFACTURATION_SMS.md`

Aucun fichier `env.php` ni configuration sensible n'est inclus dans le ZIP incrementiel.

## Fonctionnalités ajoutées

### Interface admin

Ajout d'une page :

```text
/admin/billing_sms.php
```

Elle permet de filtrer les SMS facturables par :

- periode de facturation ;
- licence ;
- type de SMS (`scope`).

La page affiche :

- nombre de SMS facturables ;
- nombre de licences concernees ;
- SMS hors forfait ;
- montant estime HT ;
- synthese par licence ;
- repartition par type de SMS.

### Exports CSV

Ajout d'un endpoint admin :

```text
/admin/export_sms_billing.php
```

Modes disponibles :

- `mode=summary` : synthese de facturation par licence ;
- `mode=detail` : detail des SMS facturables.

Les exports CSV utilisent le separateur `;` et un BOM UTF-8 pour compatibilite Excel/LibreOffice.

### Protection RGPD

L'export detail masque les numeros de telephone (`phone_masked`) pour limiter l'exposition de donnees personnelles dans les exports de facturation.

Les champs techniques disponibles dans l'export detail permettent de retrouver la trace en base si un audit interne est necessaire :

- `sms_log_id` ;
- `created_at` ;
- `license_id` ;
- `license_key` ;
- `scope` ;
- `provider_message_id` ;
- `related_share_id`.

## Calcul hors forfait

Pour chaque licence :

```text
SMS hors forfait = max(0, SMS facturables periode - quota SMS mensuel)
Montant estime HT = SMS hors forfait * prix SMS hors forfait
```

Si aucun quota SMS mensuel n'est configure, le hors forfait reste a 0 dans la synthese.

## Sources de donnees

- Base licence : table `licenses` pour les quotas, prix, clients et editions.
- Base tracking : table `sms_logs` pour les SMS reels.

Le service lit `ovh/tracking_config/env.php` pour se connecter a la base tracking. Une erreur de reporting SMS ne doit pas perturber les APIs operationnelles.

## Verification apres deploiement

1. Ouvrir `/admin/index.php`.
2. Cliquer sur `Facturation SMS`.
3. Verifier la periode du mois courant.
4. Exporter la synthese CSV.
5. Exporter le detail CSV.
6. Controler que les totaux correspondent aux lignes `sms_logs` rattachees a la licence.

## Points de vigilance

- Les exports se basent sur `sms_logs.billable = 1` lorsque la colonne existe.
- Les exports utilisent `license_id` lorsque la colonne existe, avec fallback possible sur `license_key`.
- Les dates sont interpretees en UTC cote base, comme le reste des journaux serveur.
- La colonne historique `rolling_365_course_count` reste conservee en base meme si la regle courses LOT 11.21 est passee a 300 jours.
