Guide administrateur Réservé — Dr Lessedjina
Portail
GUIDE ADMINISTRATEUR — CONFIDENTIEL

Guide complet — Gestion NeuralCare 92

Toutes les pages, tous les services, toutes les commandes. Infrastructure, praticiens, MemorIA, Jarvis, n8n, sauvegardes et dépannage.

1. Architecture du système

Serveur

Mac Studio M1 Ultra

128 Go RAM · Serveur local permanent · Doit rester allumé 24/7 · IP Tailscale : 100.66.176.77

Réseau

Tailscale

Tunnel VPN + HTTPS via tailscale serve · Port 443→8888 · Port 3000 HTTPS

Conteneurs

Docker Desktop

PostgreSQL 17 + pgvector · PostgREST v12 · pgAdmin 4 · Restart automatique

Backend

server.py (port 8888)

TDB + API + MemorIA upload · Géré par launchd com.neuralcare92.startup · KeepAlive

IA locale

Ollama

qwen3:8b (pipeline fallback) · qwen3:32b (Jarvis local) · nomic-embed-text (fallback embeddings)

IA cloud

Mistral AI (EU)

mistral-medium-latest · extraction OMOP + CR · mistral-embed 1024 dim · HDS Saclay

Automatisations

n8n 2.22.5

Port 5678 · Launchd com.secondcerveau.n8n · Workflow réception bilans TDB actif

Assistant vocal

JARVIS

5 services launchd · Wake word "Jarvis" · Whisper large-v3-turbo (Metal) · SpeechBrain

Docker Desktop doit être lancé pour que la base de données et PostgREST fonctionnent. Configurez-le en démarrage automatique : Docker Desktop → Settings → General → "Start Docker Desktop when you sign in".

2. Toutes les URLs et accès

APPLICATION NC92 — Mac Studio via Tailscale HTTPS

Page / ServiceURLAccès
Portail rééducateurshttps://macstudio-de-lilian.tailf45776.ts.net/portail.htmlTous praticiens
TDB IDE Coordinatricehttps://macstudio-de-lilian.tailf45776.ts.net/ide/TDB_IDE_NC92.htmlCatherine ROUSSEL
TDB Présidenthttps://macstudio-de-lilian.tailf45776.ts.net/president/TDB_President_NC92.htmlDr LESSEDJINA uniquement
Direction NC92https://macstudio-de-lilian.tailf45776.ts.net/direction-nc92.htmlURL seule = protection · cartes IDE + Président
MemorIA — Session audiohttps://macstudio-de-lilian.tailf45776.ts.net/memoria/session.htmlRééducateurs + IDE
MemorIA — Hub pré-consultationhttps://macstudio-de-lilian.tailf45776.ts.net/memoria/memoria.htmlDr LESSEDJINA + IDE
PostgREST APIhttps://macstudio-de-lilian.tailf45776.ts.net:3000JWT token requis
Guide rééducateurshttps://macstudio-de-lilian.tailf45776.ts.net/guide-reeduc.htmlPraticiens
Guide IDEhttps://macstudio-de-lilian.tailf45776.ts.net/guide-ide.htmlCatherine ROUSSEL
Guide admin (ce fichier)https://macstudio-de-lilian.tailf45776.ts.net/guide-admin.htmlDr LESSEDJINA uniquement
Guide utilisateurs (Tailscale)https://macstudio-de-lilian.tailf45776.ts.net/guide-utilisateurs.htmlNouveaux praticiens

ADMINISTRATION LOCALE — Via IP Tailscale (HTTP)

ServiceURLIdentifiants
pgAdmin 4http://100.66.176.77:5050dr.llessedjina@gmail.com / NC92Admin2026!
n8nhttp://100.66.176.77:5678Compte n8n (voir .env)
Tailscale Adminlogin.tailscale.com/admindr.llessedjina@gmail.com (Google auth)

SITE PUBLIC — neuralcare92.fr (Hostinger)

PageDescription
index.htmlHomepage — présentation NC92, équipe, carte ISM, stats, formulaire contact (Formspree xaqknjby)
avc.htmlPage AVC séquelles — vidéo YouTube bLs_sJ7M-4c intégrée
spasticite.htmlPage spasticité — protocole toxine botulique NC92
parcours.htmlParcours patient — étapes T0 à M6
specialites.htmlSpécialités — adresseurs, 3 cartes, J120/J240
questionnaire.htmlFormulaire patients — éligibilité et prise de contact
qrcode_questionnaire.htmlQR code vers le questionnaire — à imprimer pour les cabinets
actualites.htmlBlog / actualités NC92 — 2 articles actuels
presse.htmlPage presse — dossier de presse NC92
404.htmlPage d'erreur personnalisée

3. Tableaux de bord — Inventaire complet

TDBFichierPortail / Scope PWA
KinésithérapeuteTDB_KINE_NC92.htmlPortail rééducateurs (scope /)
ErgothérapeuteTDB_ERGO_NC92.htmlPortail rééducateurs (scope /)
NeuropsychologueTDB_NEURO_NC92.htmlPortail rééducateurs (scope /)
OrthophonisteTDB_ORTHO_NC92.htmlPortail rééducateurs (scope /)
EAPATDB_EAPA_NC92.htmlPortail rééducateurs (scope /)
PsychologueTDB_PSYCHO_NC92.htmlPortail rééducateurs (scope /)
PsychomotricienTDB_PSYCHOMOT_NC92.htmlPortail rééducateurs (scope /)
PatientTDB_PATIENT_NC92.htmlPortail rééducateurs (scope /)
KPI réseauTDB_KPI_NC92.htmlPortail rééducateurs (scope /)
IDE Coordinatrice ISOLÉide/TDB_IDE_NC92.htmlPortail IDE (scope /ide/) — SW indépendant
Président ISOLÉpresident/TDB_President_NC92.htmlPortail Président (scope /president/) — SW indépendant
Isolation PWA : Les portails IDE et Président ont chacun leur propre Service Worker et cache indépendant. Ils n'apparaissent pas dans portail.html ni dans le SW principal (tdb-sw.js). Chaque portail s'installe depuis son URL propre.

4. Déployer le site neuralcare92.fr

1
Modifier les fichiers HTML localement

Dossier : ~/SecondCerveau/6-Outils/neuralcare92-site/

Modifier les fichiers dans VS Code ou via Claude Code. Ne jamais éditer directement sur le FTP.

2
Déployer avec le script
cd ~/SecondCerveau/6-Outils/neuralcare92-site
bash deploy.sh

Le script uploade automatiquement tous les fichiers modifiés vers Hostinger via FTP.

3
Vérifier en production

Ouvrir https://neuralcare92.fr en navigation privée pour vérifier que les changements sont en ligne (peut prendre 1–2 min).

FTP Hostinger : u121333995@72.60.93.224:21 · Mot de passe : NeuralCare92! · Ces credentials sont dans deploy.sh. Ne jamais vous connecter à l'IP 187.124.35.179 (serveur malveillant, même IP que botmac.py supprimé).

5. Ajouter / Retirer un praticien

Ajouter un praticien

1
Inviter sur Tailscale

login.tailscale.com/admin/machines → macstudio-de-lilianShare → entrer l'email du praticien → envoyer l'invitation.

2
Créer le compte portail (pgAdmin)

Accéder à pgAdmin : http://100.66.176.77:5050 → connexion → base nc92 → schéma api → table utilisateurs → Insert Row.

Champs à renseigner : nom, prenom, email, role (kiné/ergo/ortho/eapa/neuro/psycho/psychomot/ide/admin), password_hash (bcrypt), actif = true.

3
Envoyer les instructions

Transmettre au praticien : le guide-utilisateurs.html pour l'installation Tailscale + son identifiant/mot de passe portail. Pour l'IDE : l'URL spécifique …/ide/TDB_IDE_NC92.html.

Retirer un praticien

Faire les deux étapes — Tailscale coupe le réseau, DB désactive l'application. Les deux sont nécessaires.
1
Révoquer Tailscale

login.tailscale.com/admin/machines → macstudio-de-lilian → Share → supprimer l'email du praticien.

2
Désactiver le compte

pgAdmin → api.utilisateurs → UPDATE : actif = false pour cet utilisateur. Ne pas supprimer la ligne (conservation de l'historique).

6. Services launchd — Gestion complète

Important : Pour les services avec KeepAlive=true, launchctl stop et launchctl unload sont insuffisants — launchd relance immédiatement. Toujours utiliser bootout pour stopper réellement.
com.neuralcare92.startup

Backend server.py

Port 8888 · TDB + API + MemorIA · RunAtLoad + KeepAlive · Charge .env

com.secondcerveau.jarvis

Jarvis — Bot Telegram vocal

@Jarvis20_48_bot · rituels, vault, médical

com.secondcerveau.jarvis-bridge

Jarvis — Bridge

Bridge entre daemon vocal et bot Telegram

com.secondcerveau.jarvis-daemon

Jarvis — Daemon vocal

Micro → Whisper wake word → SpeechBrain → Whisper large-v3-turbo → LLM → TTS Henri

com.secondcerveau.telegrambot

@Lilianum_bot

Capture texte/vocal/image → 0-Inbox vault

com.secondcerveau.n8n

n8n

Port 5678 · Workflow réception bilans TDB actif

com.neuralcare92.backup

Backup PostgreSQL

⚠️ INACTIF · Attend SCALEWAY_ACCESS_KEY + SCALEWAY_SECRET_KEY dans .env

Commandes de gestion

# Voir l'état de tous les services NC92
launchctl list | grep -E "secondcerveau|neuralcare"

# Stopper un service (KeepAlive → obligatoirement bootout)
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.neuralcare92.startup.plist

# Redémarrer un service
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.neuralcare92.startup.plist

# Stopper TOUS les services Jarvis d'un coup
for svc in jarvis jarvis-bridge jarvis-daemon telegrambot; do
  launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.secondcerveau.${svc}.plist
done

# Activer le backup Scaleway (quand clés disponibles)
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.neuralcare92.backup.plist

7. Docker + PostgreSQL

Vérifier l'état des containers
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

Containers attendus : nc92-postgres (PostgreSQL 17, port 5432) · nc92-postgrest (port 3000) · nc92-pgadmin (port 5050)

Redémarrer la stack
cd ~/SecondCerveau/6-Outils/nc92-backend
docker compose restart
Backup manuel de la base
docker exec nc92-postgres pg_dump -U nc92_admin nc92 | gzip > ~/nc92-backups/nc92_$(date +%Y%m%d_%H%M).sql.gz
ls -lh ~/nc92-backups/

Les backups automatiques sont dans ~/nc92-backups/ (7 fichiers, rotation quotidienne). Source of truth DB = 6-Outils/nc92-backend/sql/init_complet.sql.

Restaurer depuis un backup
gunzip -c ~/nc92-backups/nc92_YYYYMMDD_HHMM.sql.gz > /tmp/restore.sql
docker cp /tmp/restore.sql nc92-postgres:/tmp/
docker exec nc92-postgres psql -U nc92_admin -d nc92 -f /tmp/restore.sql

8. MemorIA — Pipeline et gestion

MemorIA = mémoire clinique collective NC92. Pipeline : audio WAV → Whisper (transcription) → anonymisation → Mistral Medium (extraction OMOP + CR) → mistral-embed (1024 dim) → PostgreSQL pgvector.
Fichiers clés MemorIA

6-Outils/nc92-backend/server.py — endpoint POST /api/memoria-upload · lance pipeline.py

6-Outils/nc92-backend/pipeline.py — pipeline complet audio → MemorIA

6-Outils/nc92-backend/.env — MISTRAL_API_KEY, TELEGRAM_ALERT_TOKEN, DB config

6-Outils/nc92-backend/sql/init_complet.sql — source of truth DB (136 codes OMOP)

Logs pipeline
tail -f ~/SecondCerveau/6-Outils/memoria/logs/pipeline.log

Rotation quotidienne, 7 jours de rétention. Alertes Telegram automatiques sur échec critique.

Lancer les tests pipeline
cd ~/SecondCerveau/6-Outils/memoria
../jarvis-env/bin/python -m pytest tests/ -v
# 27 tests · 0 service requis · ~50ms
Redémarrer server.py
# NE PAS utiliser kickstart -k seul (garde le port 8888 occupé)
launchctl bootout gui/$(id -u)/com.neuralcare92.startup
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.neuralcare92.startup.plist

9. JARVIS — Assistant vocal

Vérifier l'état de Jarvis
tail -50 ~/SecondCerveau/6-Outils/jarvis-daemon.log
# Score SpeechBrain attendu : > 0.40 (seuil actuel)
# Si scores négatifs (-0.13…) → bruit ambiant seul, normal
# Si score < 0.40 sur votre voix → ré-enrôler le profil vocal
Redémarrer le daemon vocal
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.secondcerveau.jarvis-daemon.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.secondcerveau.jarvis-daemon.plist
Ré-enrôler le profil vocal (si scores < 0.40)
# 1. Stopper TOUS les services Jarvis
for svc in jarvis jarvis-bridge jarvis-daemon; do
  launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.secondcerveau.${svc}.plist
done
# 2. Ré-enrôler (parler 3 segments de 25–30s quand demandé)
cd ~/SecondCerveau/6-Outils/jarvis-daemon
../jarvis-env/bin/python enroll.py
# 3. Relancer tous les services
for svc in jarvis jarvis-bridge jarvis-daemon; do
  launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.secondcerveau.${svc}.plist
done

Scores post-enrôlement attendus : 0.50–0.85. Seuil acceptation : 0.40.

10. n8n — Automatisations

Accéder à n8n

URL : http://100.66.176.77:5678 (via Tailscale IP)

Workflows actifs : NC92 — Réception Bilans TDB (ID: RlvmnfxTfcjLhTvu)

Redémarrer n8n
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.secondcerveau.n8n.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.secondcerveau.n8n.plist
Le pipeline MemorIA audio est bypassé par server.py (subprocess direct) — le workflow n8n MemorIA Pipeline est importé mais inactif. Seul le workflow "Réception Bilans TDB" est actif.

11. Dépannage fréquent

Le portail ne répond plus (https://macstudio-de-lilian…)
Vérifier server.py :
curl http://localhost:8888/portail.html
# Si timeout → relancer server.py
launchctl bootout gui/$(id -u)/com.neuralcare92.startup
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.neuralcare92.startup.plist
Si le problème persiste, vérifier Docker (docker ps) et que PostgreSQL tourne.
Un container Docker est en état "Exited"
# Voir les logs du container en erreur
docker logs nc92-postgres
# Redémarrer toute la stack
cd ~/SecondCerveau/6-Outils/nc92-backend && docker compose up -d
Jarvis ne répond plus à la voix
1. Lire les logs : tail -50 ~/SecondCerveau/6-Outils/jarvis-daemon.log
2. Si scores SpeechBrain tous négatifs = bruit ambiant seul (normal si personne ne parle).
3. Si score < 0.40 sur votre voix → ré-enrôler (section 9 ci-dessus).
4. Vérifier Tailscale actif (Jarvis utilise bridge via réseau Tailscale).
MemorIA ne traite pas les enregistrements audio
# Vérifier les logs pipeline
tail -50 ~/SecondCerveau/6-Outils/memoria/logs/pipeline.log
# Vérifier que server.py répond
curl http://localhost:8888/api/memoria-upload
# Vérifier la clé Mistral dans .env
grep MISTRAL_API_KEY ~/SecondCerveau/6-Outils/nc92-backend/.env
Les alertes d'échec sont envoyées automatiquement sur Telegram (TELEGRAM_ALERT_TOKEN dans .env).
Vérifier l'IP Tailscale et l'état HTTPS
tailscale ip -4
# Attendu : 100.66.176.77
tailscale serve status
# Port 443 → 8888 doit être actif
# Port 3000 HTTPS doit être actif
tailscale status
# Affiche tous les appareils connectés au réseau NC92
Restaurer tailscale serve après redémarrage Mac
Tailscale serve est normalement persistant. Si les ports HTTPS ne répondent plus :
tailscale serve --bg 8888
# Port 443 → server.py
tailscale serve --bg --https=3000 3000
# Port 3000 HTTPS → PostgREST
Activer le backup Scaleway (quand clés reçues)
# 1. Ajouter les clés dans .env
echo "SCALEWAY_ACCESS_KEY=votre_cle" >> ~/SecondCerveau/6-Outils/nc92-backend/.env
echo "SCALEWAY_SECRET_KEY=votre_secret" >> ~/SecondCerveau/6-Outils/nc92-backend/.env
# 2. Tester sans activer
python3 ~/SecondCerveau/6-Outils/nc92-backend/backup_pg.py --dry-run
# 3. Activer le service launchd
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.neuralcare92.backup.plist
Sécurité : Ce guide contient des credentials sensibles. Ne jamais le partager avec les praticiens du réseau. Utiliser guide-utilisateurs.html pour les nouveaux praticiens. Changer les mots de passe régulièrement.