[](https://forgejo.pschneider.fr/notazof/yavsc/actions?workflow=buildAndTest.yml)
[](https://forgejo.pschneider.fr/notazof/yavsc/releases/latest)
* [](https://github.com/pazof/yavsc/actions/workflows/docker-publish-android.yml)
* [](https://github.com/pazof/yavsc/actions/workflows/docker-publish-backend.yml)
2. Notifié, le prestataire valide un devis, avec arrhes ou avance. il signe son devis, qui peu contenir des documents attachés à faire signer par le client, un ou des contrats, stockés au format Markdown par le prestataire dans ses contrats à faire signer.
* **Aujourd'hui** : une prestation par commande, sur un axe client → prestataire unique, sans sous-traitance. **Cible roadmap** : montages multi-parties (plusieurs clients et/ou plusieurs fournisseurs collaborant autour d'un même projet, avec sous-traitance validée par le client) — voir la [ROADMAP](../ROADMAP.md).
* **Annulation : partielle et non testée.** Côté client, `HairCutCommandController.ClientCancel` / `ClientCancelConfirm` supprime la commande **sans déclencher de refund PayPal** ni logique arrhes vs avance ; aucune action d'annulation côté prestataire. La description du README (arrhes +20%, avance non-annulable) **n'est pas implémentée**. Cible : câbler `RefundTransaction` et le workflow complet, voir [ROADMAP](../ROADMAP.md).
* **Réclamation post-prestation : aucun support applicatif.** Passée la date de la prestation, le client n'a aucun chemin dans l'UI pour signaler un litige — aucune route, aucun contrôleur, aucun modèle. La fonctionnalité de conciliation est planifiée au **Jalon 5** (cf. [doc/ddd-exploration-2026-06-14.md](../doc/ddd-exploration-2026-06-14.md)) : double vue client/prestataire, dossier de conciliation, décision. En attendant, tout passe par e-mail au propriétaire de l'installation.
* **Paiement : PayPal uniquement, via l'API NVP/SOAP.** Aucun autre PSP n'est intégré (pas de Stripe, pas d'Adyen). L'API NVP/SOAP que PayPal a dépréciée au profit de REST reste fonctionnelle mais n'est plus recommandée par PayPal ; aucune migration n'est planifiée à court terme.
* **Collecte centralisée.** Tous les paiements PayPal transitent par le compte du propriétaire de l'installation — c'est le seul identifiant configuré côté PSP. Les professionnels apparaissent comme tierces parties du point de vue PayPal.
* **Pas de gestion de paie.** Aucune édition de fiche de paye, ni paiement en masse. Seuls les paiements unitaires sus-cités sont supportés.
| `appsettings-org.Development.json` | Surcharge locale pour `ASPNETCORE_ENVIRONMENT=Development`. Concrètement, `Site.Authority` et `Site.ExternalUrl` pointent sur `https://localhost:5001`, `Site.Title`/`Slogan` sont adaptés, et la `ConnectionStrings.YavscConnection` est fournie. **Ignoré par `.gitignore`** (`appsettings-*.*.json`) : chaque développeur crée le sien à partir de ce qui est documenté ici et du modèle `appsettings-org.json`. | Non |
| `appsettings-org-dist.json` | Généré par la cible `copy-binaries` du `contrib/Makefile` (alias `make reinstall`) à partir d'`appsettings-org.json` lors du déploiement, puis copié dans `$(BASEAPPDIR)`. C'est un clone du modèle, juste renommé pour signaler « à éditer ». | Non |
**Première installation sur un serveur :**
```bash
make install_service # construit, déploie, active systemd
cd $BASEAPPDIR # voir contrib/.env
ls appsettings-org*.json # -> appsettings-org-dist.json (le modèle, jamais éditer celui-là)
cp appsettings-org-dist.json appsettings-org.json
$EDITOR appsettings-org.json
```
Le `Makefile` renomme `appsettings-org.json` en `appsettings-org-dist.json`
juste avant le `cp -a` vers `$(BASEAPPDIR)`, et **supprime** la version
`appsettings-org.json` du publish dir. Conséquence : un `make reinstall`
ultérieur n'écrasera jamais ton `appsettings-org.json` édité — il
recopiera un `appsettings-org-dist.json` neuf par-dessus, sans
supprimer ton édition. Si tu veux repartir d'un modèle vierge, supprime
d'abord `appsettings-org.json` du serveur ; sinon, laisse-le en place.
**Valeurs minimales à renseigner pour un serveur de production :**
-`Site.Authority` — issuer OIDC visible de l'extérieur (URL exacte sous
laquelle `/.well-known/openid-configuration` est servi, par exemple
`https://yavsc.pschneider.fr`). C'est la valeur que PostIt et toutes
les autres applications clientes passent dans `Authority`.
-`Site.ExternalUrl` — URL canonique du serveur, utilisée pour générer
les liens absolus dans les e-mails, construire les RedirectUris des
clients OIDC tiers, etc. **Depuis la migration PKCE de PostIt, le
seed EF Core d'IdentityServer utilise `Site.ExternalUrl` pour
autoriser une RedirectUri du client `postit`** : cela permet à PostIt
d'être lancé depuis une page web de Yavsc.Org (iframe launcher)