docs(pont): module Intervention (fichinter) — pont sav-integration déployé + prérequis Dolibarr validés

- décision /interventions (Ticket=403 en prod) documentée
- pont rebuildé depuis sav-integration (Port+Adapters, HttpDolibarrClient fichinter)
- prérequis Dolibarr: extrafields numero_serie/sav_statut + fix code_client:'-1' (auto)
- chaîne prouvée VPS->tunnel->pont->Dolibarr 19, aller-retour réel OK
- accès NAS hors LAN via ssh -J navier-vps nas

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
steve 2026-07-13 15:30:40 +02:00
parent 68620d1a26
commit 63716ca635
1 changed files with 51 additions and 1 deletions

View File

@ -104,4 +104,54 @@ Montage : `VPS (client strongSwan) → 160189667.box.freepro.com (Freebox, VPN I
- **Vérif OK** : `ping 192.168.10.104` + `curl http://192.168.10.104:4444` → 200. - **Vérif OK** : `ping 192.168.10.104` + `curl http://192.168.10.104:4444` → 200.
- **Mobile** : même serveur Freebox IKEv2 pour iPhone/Mac nativement (Réglages → VPN → IKEv2). - **Mobile** : même serveur Freebox IKEv2 pour iPhone/Mac nativement (Réglages → VPN → IKEv2).
RESTE : pont (NAS, conteneur :8080) + NPM `api.navier-instruments.com``192.168.10.104:8080` + DNS `api.` → 78.138.45.8 (LWS). > **Accès NAS depuis n'importe quel réseau** : quand on n'est PAS sur le LAN interne, le NAS
> reste joignable via le VPS : `ssh -J navier-vps nas` (ProxyJump — l'auth SSH reste boutàbout
> avec la clé NAS, seul le TCP transite par le VPS+tunnel). Idem `scp`/`tar | ssh -J navier-vps nas`.
---
## ✅ RÉALISÉ (2026-07-13) — Pont SAV sur module INTERVENTION (fichinter), pas Ticket
**DÉCISION ACTÉE (Steve + Tiago) : le SAV s'écrit en FICHE D'INTERVENTION Dolibarr (module
`Intervention`, endpoints `/interventions`, table `llx_fichinter`), PAS en Ticket.**
Raison : le module Ticket renvoie **403** sur l'instance de prod (`GET /tickets` → 403), alors que
`GET /interventions`**200**. Validé en direct sur Dolibarr **19**. Cf. commit
`steve-dev #14 « bascule Tickets → fiches d'intervention »`, convergé dans la branche `sav-integration`.
**Source du pont = branche `sav-integration`** (repo `Ecosystem-Navier`, la plus à jour : pont
modulaire *Port + Adapters* configdriven ; `HttpDolibarrClient` écrit en `/interventions`,
`/thirdparties`, `/stockmovements`). L'ancien build (`main`) tapait `/tickets` → remplacé.
### Déploiement du pont (NAS, `/volume1/docker/sav-pont`)
- Image `navier/sav-pont:interv` buildée sur le NAS (`sudo docker build`, node 22 alpine, tsc → dist).
Dossier possédé par SteveC (`chown -R`) pour édition sans sudo ; **docker exige `sudo`** sur DSM 6.
- Conteneur : `sudo docker run -d --name sav-pont --restart unless-stopped -p 8080:8080
--env-file .env -v /volume1/docker/sav-pont-data:/data navier/sav-pont:interv`.
⚠️ **`docker restart` NE recharge PAS `--env-file`** → toujours **`rm` + `run`** après un changement `.env`.
- **Volume data** : le pont écrit un magasin de comptes/sessions dans `/data` → le volume
`/volume1/docker/sav-pont-data` doit appartenir à **uid 1000** (`node`) : `sudo chown -R 1000:1000`.
Sinon boucle de crash `EACCES … accounts.tmp`.
- `.env` (secrets jamais affichés) : adapters auto — `DOLIBARR_BASE_URL` + `DOLIBARR_API_KEY`
remplis → **HttpDolibarrClient (fichinter)** ; `TB_BASE_URL` → HttpThingsBoard. Ajoutés vs l'ancien :
`SESSION_SECRET` (HMAC sessions LAN, sinon sessions perdues à chaque redémarrage), `MEDIA_DIR=/data/media`,
`SEED_SUPERVISOR_NAME=Steve` / `SEED_SUPERVISOR_PIN=1234` (**superviseur initial — CHANGER le PIN**).
- Santé : `GET /healthz``{"status":"ok","deps":{"dolibarr":"http","thingsboard":"http","media":"local"}}`.
### Prérequis Dolibarr (fichinter) — appliqués et validés
Conforme au schéma **officiel** (wiki Extrafields / Table llx_extrafields) — pas de bricolage :
- **Module Intervention activé** (`GET /interventions` → 200). Compte technique `cpont-sav` (clé `DOLAPIKEY`).
- **2 extrafields créés** sur l'élément `fichinter` (le pont les écrit en `array_options`) :
`numero_serie` (varchar 128) + `sav_statut` (varchar 64). Créés par : ligne dans `llx_extrafields`
(`elementtype='fichinter'`) **+** colonne ajoutée dans `llx_fichinter_extrafields`. Backup préalable :
`/volume1/docker/dolibarr-extrafields.backup.sql`. Requête `sqlfilters=(ef.numero_serie:=:'…')` → 200.
- **Fix pont `createThirdparty`** : ajout de **`code_client: '-1'`** (numérotation auto). Sans ça, l'API
Dolibarr (addon `mod_codeclient_monkey`) refuse la création de tiers avec `ErrorCustomerCodeRequired`.
`-1` = *« automatic assignment »* **documenté dans la classe `Societe`** du cœur Dolibarr. Poussé sur
`sav-integration` (commit `fix(sav/pont): createThirdparty envoie code_client:'-1'`).
- **Allerretour réel validé** : tiers (code auto) + fiche d'intervention avec `numero_serie`/`sav_statut`
créés puis supprimés (POST/GET/DELETE → 200) sur Dolibarr 19.
### Chaîne complète prouvée
`Mac (ssh -J) → VPS → tunnel IKEv2 → NAS pont :8080 (/interventions fichinter) → Dolibarr 19 réel`.
Le pont **n'est pas exposé publiquement** : l'espace client (VPS) le relaiera en interne via le tunnel.
RESTE : espace client sur le VPS (proxy interne `/api``192.168.10.104:8080`, PAS d'`api.` public).