Genika ← Retour au Sommaire

Participations Croisees & Cycles : Resolution par l'Algorithme de Tarjan (Art. 223 A CGI)

Résolution mathématique rigoureuse des boucles d'autodétention par point fixe local

1. 💡 RÉPONSE RAPIDE / RÈGLE FISCALE

En pratique, il est frequent que des societes d'un meme groupe detiennent mutuellement une fraction de leur capital (detention circulaire directe : A detient B qui detient A ; ou boucle multi-societes : A detient B qui detient C qui detient A).

  1. Appreciation fiscale du seuil de 95 % en presence de boucles : L'administration fiscale et la jurisprudence admettent que la detention indirecte effective soit calculee en resolvant le systeme d'equations resultant de la serie geometrique des detentions reciproques.
  2. Autocroisement et dilution : Les droits d'autocontrole ou de detention reciproque ne doivent pas fausser l'appreciation du seuil d'integration : la societe mere doit toujours justifier d'un controle ultime d'au moins 95 % des droits de vote et du capital social de la filiale candidate, deduction faite de la boucle d'autodetention.

2. ⚙️ LOGIQUE MÉTIER & CONDITIONS D'APPLICATION

Face a un schema comportant des participations reciproques, un calcul arithmetique naif produit une boucle infinie ou une division par zero. Le moteur Genika traite ces structures circulaires de facon transparente :

▶ Spécifications algorithmiques et modélisation du moteur ▸

La resolution s'effectue dans holdingsGraph.ts en deux phases :

1. Phase 1 : Partitionnement en Composantes Fortement Connexes (Tarjan) :

La fonction computeSCCs(nodes, links) explore le graphe oriente G = (V, E) en profondeur (DFS). Elle maintient pour chaque sommet un indice de decouverte index et un rang d'accessibilite lowlink. Une pile sccStack extrait l'ensemble des SCCs en temps lineaire O(|V| + |E|). Une composante avec |SCC| > 1 signale la presence d'une participation croisee.

2. Phase 2 : Methode de Point Fixe Iteratif :

Pour chaque composante cyclique, le vecteur d'etat des detentions effectives X^(t) in [0, 1]^n est actualise selon :

X^(t+1)_v = min(1,0, Direct(head, v) + sum[X^(t)_u * Weight(u, v)]) pour u in Parents(v).

Critere d'arret : l'algorithme itere jusqu'a ce que la variation maximale entre deux etapes consecutives soit inferieure a epsilon = 10^-4 :

||X^(t+1) - X^(t)||_infinity = max |X^(t+1)_v - X^(t)_v| < 0,0001.

Un garde-fou a 50 iterations maximales previent toute divergence. Si la convergence est atteinte, converged = true est valide.

6. 🎯 CTA FINAL DISCRET

Modélisez vos structures à participations croisées et calculez instantanément vos taux de contrôle réels sur Genika.