"""
source_17.py — s17 · SÉRIE FICHES CHAKRAS — MOOLADHARA À SAHASTRARA + VOID
Série SOURCE ANNEXE FIABLE · généré depuis l'analyse globale gravée (Fable, 12 juil 2026).
CODE GROUPÉ : couvre les 8 sous-fiches (analyses individuelles dans chaque sous-page).
Règle : zéro invention — tout champ provient des planches ou d'un recoupement daté.
"""
from dataclasses import dataclass, field, asdict
import json
# ── SOCLE COMMUN (passe U6c — imbrication, GO Ben 13 juil 2026, 23h35) ────
# socle_corpus.py = clé de voûte du paquet corpus/ (types partagés · registre
# · GRAPHE des jonctions · VERDICTS D1-D6). Loi 2 du contrat : les jonctions
# CANONIQUES entre pièces (dNN/sNN) vivent UNE SEULE FOIS dans GRAPHE — la
# liste locale `jonctions` (cible/nature) reste une NOTE DE LECTURE de la
# série (code GROUPÉ : les analyses fines vivent dans les 8 sous-pages).
# Loi 3 : aucun verdict recopié — D4 (Swadisthan = FEU, porté par s17+s18)
# fait foi dans VERDICTS["D4"] · D3 (Agnya OR harmonisé) dans VERDICTS["D3"].
ID_CORPUS = "s17"
try:
from socle_corpus import GRAPHE, VERDICTS, SOURCES as REGISTRE_SOURCES
JONCTIONS_SOCLE = [j for j in GRAPHE if ID_CORPUS in (j.a, j.b)]
MODE_ILOT = False
except ImportError: # exécution isolée : le module reste lisible en îlot
GRAPHE, VERDICTS, REGISTRE_SOURCES = [], {}, {}
JONCTIONS_SOCLE, MODE_ILOT = [], True
@dataclass
class Fiche:
numero: str
chakra: str
@dataclass
class Jonction:
cible: str
nature: str
@dataclass
class Source:
sid: str = "s17"
titre: str = "SÉRIE FICHES CHAKRAS — MOOLADHARA À SAHASTRARA + VOID"
type_source: str = "série de 8 fiches pédagogiques uniformes"
origine: str = "auteur de la série non identifié"
auteur_shri_mataji: bool = False
fiabilite: str = "\U0001f7e2 iconographie SY standard cohérente · \U0001f7e1 auteur non identifié"
fiches: list = field(default_factory=lambda: [
Fiche("1", "Mooladhara"),
Fiche("2", "Swadisthan"),
Fiche("3", "Nabhi"),
Fiche("3,5", "Void (the master principle)"),
Fiche("4", "Anahat"),
Fiche("5", "Vishuddi"),
Fiche("6", "Agnya"),
Fiche("7", "Sahastrara"),
])
format_commun: list = field(default_factory=lambda: [
"4 vues : Position in Head · In Hands · In Feet · Gross Expression in Vertebral "
"Column + plexus physique correspondant",
"méditant central avec système subtil",
"tableau Correspondences : Colour · Element · Planet · Day · Stone · Symbol · "
"Quality · Organs controlled",
"texte descriptif",
])
points_cles: list = field(default_factory=lambda: [
"Mooladhara : outside the spine, below the sacrum (CONTRASTE avec s13 non-SY)",
"Swadisthan : élément Fire — ENTÉRINÉ (décision Ben, 12 juil 2026), l'eau passe au Nabhi ✅",
"Void (3,5) : 10 Maîtres avec dates verbatim (diverge légèrement de s16)",
"Agnya : Optic Thalamus = terminologie SY propre",
"Sahastrara : Pluto, Symbol Bandhan",
])
valeur: str = ("table de correspondances la plus complète de la SOURCE ANNEXE FIABLE — "
"référence croisée pour les codes Opus")
jonctions: list = field(default_factory=lambda: [
Jonction("d04", "carte-mère — même système complet fiche par fiche"),
Jonction("s16", "Void : liste des 10 Maîtres — légère divergence de dates à documenter"),
Jonction("s18", "tables de correspondances à confronter (Agnya, éléments)"),
Jonction("s19", "1008T — même découpage G/D/C par chakra"),
Jonction("s13", "contraste doctrinal Mooladhara (sous le sacrum vs périnée)"),
])
en_attente: list = field(default_factory=lambda: [
"✅ RÉSOLU (décision Ben, 12 juil 2026) : élément Swadisthan = FEU entériné (s17+s18 concordent)",
"\U0001f7e1 auteur de la série à identifier",
"analyses détaillées par chakra : voir les 8 sous-pages de s17",
])
def rapport(self) -> str:
etat_socle = ("îlot (socle_corpus non chargé)" if MODE_ILOT
else f"imbriqué — {len(JONCTIONS_SOCLE)} jonction(s) canoniques au GRAPHE")
return "\n".join([
f"[{self.sid}] {self.titre}",
f" fiches : {len(self.fiches)} · origine : {self.origine}",
f" de la main de Shri Mataji : {self.auteur_shri_mataji}",
f" fiabilité : {self.fiabilite}",
f" jonctions : {len(self.jonctions)}",
f" SOCLE : {etat_socle}",
])
def to_json(self) -> str:
data = asdict(self)
data["id_corpus"] = ID_CORPUS
data["jonctions_canoniques"] = [asdict(j) for j in JONCTIONS_SOCLE]
data["mode_ilot"] = MODE_ILOT
return json.dumps(data, ensure_ascii=False, indent=2)
if __name__ == "__main__":
print(Source().rapport())