@php use App\Livewire\Portail\Inscription; use App\Support\PieceIdentite; $public = $mode === 'public'; $physique = $type === 'personne_physique'; // v1.17.0 — l'association : dénomination, objet, situation, récépissé ; « le président ». $association = $type === 'association'; $declaree = $association && $situation === 'declaree'; $attendue = $this->pieceAttendue(); $passeport = $piece_type === PieceIdentite::PASSEPORT; $etapes = [ 1 => [$physique ? 'L\'entreprise' : ($association ? 'L\'association' : 'La société'), $etape > 1 ? ($physique ? trim($rep_prenom.' '.$rep_nom_famille) : ($association ? $raison_sociale : trim($raison_sociale.' · '.($forme_juridique === 'Autre' ? $forme_autre : $forme_juridique), ' ·'))) : ($physique ? 'Activité' : ($association ? 'Dénomination, objet' : 'Dénomination, forme'))], 2 => [$physique ? 'Le titulaire' : ($association ? 'Le président' : 'Le gérant'), $etape > 2 ? trim($rep_prenom.' '.$rep_nom_famille) : ($association ? 'Identité, bureau' : 'Identité, associés')], 3 => ['Les pièces', 'Contrôle'], // v1.15.0 §B — la formule et ses options en dernier, puis l'envoi. 4 => ['Formule & options', $offre ? dh($offre['montant_ttc'], 0).' TTC / '.\App\Support\Prestations::periode($offre['periodicite']) : 'Et l\'envoi'], ]; $titres = [1 => $etapes[1][0], 2 => $etapes[2][0], 3 => 'Vos pièces', 4 => 'Formule & options']; $nbEtapes = Inscription::ETAPES; // Les points à corriger, dans l'ordre de l'écran. $cles = collect($errors->keys())->map(fn ($k) => preg_replace('/^associes\.\d+\..*$/', 'associes', $k))->unique(); $libellesErreurs = collect([ 'pieceSociete' => 'la pièce de la société', 'raison_sociale' => 'la dénomination', 'forme_juridique' => 'la forme juridique', 'forme_autre' => 'la forme juridique', 'activite' => $association ? 'l\'objet' : 'l\'activité', 'rc' => 'le n° de RC', 'recepisse_numero' => 'le n° du récépissé', 'recepisse_date' => 'la date du récépissé', 'recepisse_nature' => 'la nature du récépissé', 'recepisse_autorite' => 'l\'autorité', 'rc_ville' => 'la ville du RC', 'formuleId' => 'la formule', 'cinRecto' => 'la photo de la pièce', 'cinVerso' => 'le verso', 'rep_prenom' => 'le prénom', 'rep_nom_famille' => 'le nom', 'rep_piece_numero' => 'le n° de la pièce', 'rep_telephone' => 'le téléphone', 'rep_email' => 'l\'e-mail', 'rep_adresse' => 'l\'adresse personnelle', 'options' => 'les options', 'associes' => $association ? 'les membres du bureau' : 'les associés', 'ppe_precision' => 'la fonction exercée', 'consentement' => 'la case de consentement', ])->only($cles->all())->unique()->values(); // v1.14.1 — un PDF scanné en recto : les deux faces y sont, le verso devient facultatif. $rectoPdf = ($transit['cin_recto']['controles']['format'] ?? null) === 'PDF'; $faces = $passeport ? ['cin_recto' => ['cinRecto', 'Page d\'identité']] : ['cin_recto' => ['cinRecto', $rectoPdf ? 'Recto et verso' : 'Recto'], 'cin_verso' => ['cinVerso', 'Verso']]; $pieceSociete = $attendue['libelle'] ?? 'Certificat négatif'; $controleDe = function (?array $piece): array { $points = (array) ($piece['controles']['points'] ?? []); if ($points !== []) { return ['warn', $points[0]['libelle']]; } $pages = (int) ($piece['controles']['mesures']['pages'] ?? 0); return ['ok', ($piece['controles']['format'] ?? null) === 'PDF' && $pages > 0 ? 'PDF lisible · '.$pages.' page'.($pages > 1 ? 's' : '') : 'Lisible et entière']; }; $pieceRecue = $transit['societe'] ?? null; $vars = ['avertissements' => $avertissements, 'confirmes' => $confirmes]; @endphp
! $public])> @if (! $public) {{-- v1.16.0 §D5 — le cabinet : Les pièces · Vérifier · Formule et envoi. --}}
@include('portail.partiels.nouveau-client-express')
@else @if ($public)
Demande de domiciliation @if ($jeton) Brouillon enregistré @endif Quitter
@if ($etape > 1) @else @endif
{{ $titres[$etape] }}Étape {{ $etape }} sur {{ $nbEtapes }}{{ $jeton ? ' · brouillon enregistré' : '' }}
@endif
@unless ($public)

Nouveau client

La demande part au client, vous en copie ; MOBDIE vérifie les pièces.

@endunless @if ($cabinetDuLien) {{-- v1.13.0 — la demande sera rattachée au cabinet du lien. --}}
Avec votre cabinet {{ $cabinetDuLien->raison_sociale }}, qui suivra votre dossier.
@endif
{{-- ===================== Étape 1 — la société ===================== --}} @if ($etape === 1)

{{ $titres[1] }}

{{ match (true) { $physique => 'L\'activité que vous exercerez à cette adresse.', $association => 'Commencez par '.$attendue['article'].' : la dénomination et l\'objet se remplissent seuls.', default => 'Commencez par '.$attendue['article'].' : la dénomination, la forme et l\'activité se remplissent seules.', } }}

Qui se domicilie ?
@foreach (Inscription::TYPES as $cle => $libelle) @endforeach
@if ($association) {{-- v1.17.0 — l'association : déclarée (récépissé) ou en cours (statuts). --}}
Où en est l'association ?
@foreach (Inscription::SITUATIONS as $cle => $libelle) @endforeach
@endif @unless ($physique) {{-- v1.14.1 — la pièce de la société d'abord, lue comme la CIN. --}}
@php $errSoc = $errors->first('pieceSociete'); @endphp @if ($pieceRecue && ! $errSoc) @php [$tonS, $msgS] = $controleDe($pieceRecue); @endphp
$tonS === 'ok', 'warn' => $tonS === 'warn'])> {{ $pieceSociete }} {{ $pieceRecue['original_name'] ?? 'Reçu' }} {{ $msgS }}
@else @endif
Contrôle de la pièce…
@if ($this->litEncore('societe')) {{-- v1.17.0 §E — la lecture tourne hors de la requête : l'écran vient la chercher. --}}
Lecture de la pièce… Vous pouvez continuer à saisir : les champs vides se rempliront.
@endif @if ($luSurSociete !== [])

Lu sur {{ $association ? $attendue['article'] : ($type === 'immatriculee' ? 'le registre de commerce' : 'le certificat') }} — vérifiez

Dénomination

{{ $luSurSociete['raison_sociale'] ?? '—' }}

@if ($association)

Objet

{{ $luSurSociete['activite'] ?? '—' }}

@if ($declaree)

Récépissé

{{ trim(($luSurSociete['recepisse_numero'] ?? '—').(($luSurSociete['recepisse_date'] ?? null) ? ' du '.\Illuminate\Support\Carbon::parse($luSurSociete['recepisse_date'])->format('d/m/Y') : '')) }}

@endif @else

Forme juridique

{{ $luSurSociete['forme_juridique'] ?? '—' }}

Activité

{{ $luSurSociete['activite'] ?? '—' }}

@endif
@elseif ($pieceRecue && in_array($lectureSociete, ['echec', 'rien'], true))

La pièce n'a pas pu être lue automatiquement : saisissez les champs ci-dessous.

@endif
@include('portail.partiels.champ', $vars + ['champ' => 'raison_sociale', 'libelle' => 'Dénomination', 'aide' => 'Majuscules mises automatiquement.', 'attrs' => 'autocomplete="organization"']) @if (($avertissements['raison_sociale'] ?? null) === 'doublon' && ! $errors->has('raison_sociale'))
{{ $association ? 'Une association' : 'Une société' }} « {{ $raison_sociale }} » est déjà domiciliée chez MOBDIE.
C'est la vôtre ? Accédez à votre espace : rien à refaire. Sinon, continuez.
@if ($public)Mon espace@endif
@endif
@unless ($association)
Forme juridique
@foreach (Inscription::FORMES as $forme) @endforeach
@if ($forme_juridique === 'Autre') @error('forme_autre')

{{ $message }}

@enderror @endif @error('forme_juridique')

{{ $message }}

@enderror @if (! $errors->has('forme_juridique') && ($avertissements['forme_juridique'] ?? null))

{{ $avertissements['forme_juridique'] }}

@elseif (! $errors->has('forme_juridique') && ($confirmes['forme_juridique'] ?? null))

{{ $confirmes['forme_juridique'] }}

@endif
@endunless @endunless @if ($association) @include('portail.partiels.champ', $vars + ['champ' => 'activite', 'libelle' => 'Objet', 'aide' => 'En quelques mots, l\'objet de l\'association, tel que ses statuts le disent.']) @else @include('portail.partiels.champ', $vars + ['champ' => 'activite', 'libelle' => 'Activité', 'aide' => 'En quelques mots, ce que fera '.($physique ? 'votre entreprise' : 'la société').'.']) @endif @if ($declaree) {{-- v1.17.0 — le récépissé de déclaration du siège (dahir n° 1-58-376, art. 5). --}}
@include('portail.partiels.champ', $vars + ['champ' => 'recepisse_numero', 'libelle' => 'N° du récépissé', 'attrs' => 'autocomplete="off"']) @include('portail.partiels.champ', $vars + ['champ' => 'recepisse_date', 'libelle' => 'Date du récépissé', 'saisie' => 'date']) @include('portail.partiels.champ', $vars + ['champ' => 'recepisse_autorite', 'libelle' => 'Délivré par', 'exemple' => 'Pachalik de Fès', 'aide' => 'L\'autorité locale où la déclaration a été déposée (pachalik, caïdat…).', 'classe' => 'plein'])
Récépissé
@foreach (\App\Support\Domiciliation::naturesRecepisse() as $cle => $libelle) @endforeach
@error('recepisse_nature')

{{ $message }}

@enderror
@endif @if ($type === 'immatriculee')
@include('portail.partiels.champ', $vars + ['champ' => 'rc', 'libelle' => 'N° de RC', 'exemple' => '72917', 'attrs' => 'inputmode="numeric" autocomplete="off"']) @include('portail.partiels.champ', $vars + ['champ' => 'rc_ville', 'libelle' => 'Ville du tribunal', 'aide' => 'Là où la société est immatriculée.', 'attrs' => 'list="villes-rc" autocomplete="off"'])
@foreach (\App\Support\Saisie::villesRc() as $ville) @endif @endif {{-- ===================== Étape 2 — le gérant ===================== --}} @if ($etape === 2)

{{ $titres[2] }}

Commencez par la pièce d'identité : nom et numéro se remplissent seuls.

Sa pièce d'identité

@foreach (Inscription::PIECES as $cle => $libelle) @endforeach
@foreach ($faces as $role => [$propriete, $face]) @php $recu = $transit[$role] ?? null; $err = $errors->first($propriete); @endphp
@if ($recu && ! $err) @php [$ton, $message] = $controleDe($recu); @endphp
$ton === 'ok', 'warn' => $ton === 'warn'])> {{ $face }} {{ $recu['original_name'] ?? 'Reçu' }} {{ $message }}
@elseif ($role === 'cin_verso' && $rectoPdf && ! $err) {{-- v1.14.1 — le PDF porte déjà le verso, le plus souvent. --}} @else @endif
@endforeach
Contrôle de la pièce…
@if ($this->litEncore('cin'))
Lecture de votre {{ Inscription::PIECES[$piece_type] ?? 'pièce' }}… Vous pouvez continuer à saisir : les champs vides se rempliront.
@endif @if (array_filter($luSurPiece) !== [])

Lu sur la pièce — vérifiez

Nom

{{ $luSurPiece['rep_nom_famille'] ?? '—' }}

Prénom

{{ $luSurPiece['rep_prenom'] ?? '—' }}

N° de la pièce

{{ $luSurPiece['rep_piece_numero'] ?? '—' }}

Pièce

{{ Inscription::PIECES[$piece_type] }}

@elseif ($lecture === 'echec' || $lecture === 'rien')

La pièce n'a pas pu être lue automatiquement : saisissez les champs ci-dessous.

@endif

{{ $physique ? 'Votre identité et vos coordonnées' : ($association ? 'Identité et coordonnées du président' : 'Son identité et ses coordonnées') }}

@include('portail.partiels.champ', $vars + ['champ' => 'rep_prenom', 'libelle' => 'Prénom', 'attrs' => 'autocomplete="given-name"']) @include('portail.partiels.champ', $vars + ['champ' => 'rep_nom_famille', 'libelle' => 'Nom', 'attrs' => 'autocomplete="family-name"']) @include('portail.partiels.champ', $vars + ['champ' => 'rep_piece_numero', 'libelle' => 'N° de '.(['cin' => 'CIN', 'passeport' => 'passeport', 'carte_sejour' => 'la carte de séjour'][$piece_type] ?? 'la pièce'), 'exemple' => $piece_type === 'cin' ? 'AB123456' : null, 'attrs' => 'autocapitalize="characters" autocomplete="off"']) @include('portail.partiels.champ', $vars + ['champ' => 'rep_telephone', 'libelle' => 'Téléphone', 'saisie' => 'tel', 'exemple' => '06 61 23 45 67', 'aide' => 'Marocain, ou étranger avec son indicatif (+33…).', 'attrs' => 'inputmode="tel" autocomplete="tel"']) @include('portail.partiels.champ', $vars + ['champ' => 'rep_email', 'libelle' => 'E-mail', 'saisie' => 'email', 'classe' => 'plein', 'exemple' => 'nom@exemple.ma', 'aide' => 'Le projet de contrat, le devis et vos codes de connexion y arrivent.', 'attrs' => 'inputmode="email" autocapitalize="off" autocomplete="email"']) @include('portail.partiels.champ', $vars + ['champ' => 'rep_adresse', 'libelle' => 'Adresse personnelle', 'classe' => 'plein', 'exemple' => '12, rue Ibn Sina, Agdal, Rabat', 'aide' => 'Nous vous écrirons ici, jamais à l\'adresse de domiciliation.', 'attrs' => 'autocomplete="street-address"'])
@unless ($physique)
@if ($association) {{-- v1.17.0 — loi 43-05 : ceux qui dirigent ou contrôlent l'association ; le président y est d'office. --}}

Les personnes qui dirigent ou contrôlent l'association

Président, trésorier, membres du bureau. {{ trim($rep_prenom.' '.$rep_nom_famille) ?: 'Le président' }} y figure d'office, comme président.

@else

Les associés

@endif @unless ($seulAssocie) @php $total = \App\Support\Saisie::totalDesParts($associes); @endphp
@foreach ($associes as $i => $associe)
@error('associes.'.$i.'.nom')

{{ $message }}

@enderror
@error('associes.'.$i.'.piece_numero')

{{ $message }}

@enderror
@if ($association)
@error('associes.'.$i.'.fonction')

{{ $message }}

@enderror
@else
%
@error('associes.'.$i.'.part')

{{ $message }}

@enderror
@endif @if (count($associes) > 1) @else @endif
@endforeach @if ($association) @error('associes')

{{ $message }}

@enderror @else
Total des parts 100) style="color:var(--err-txt)" @endif>{{ Inscription::pourcent($total) }}
@error('associes')

{{ $message }}

@enderror
@endif
@endunless
@endunless
@if ($ppe) @include('portail.partiels.champ', $vars + ['champ' => 'ppe_precision', 'libelle' => 'Laquelle ?']) @endif
@endif {{-- ===================== Étape 3 — les pièces et l'envoi ===================== --}} @if ($etape === 3)

Vos pièces

Chaque pièce est contrôlée dès son dépôt.

@php $recto = $transit['cin_recto'] ?? null; $verso = $transit['cin_verso'] ?? null; @endphp @if ($recto) @php [$tonR, $msgR] = $controleDe($recto); [$tonV, $msgV] = $verso ? $controleDe($verso) : ['ok', null]; $aReprendre = $tonR === 'warn' || $tonV === 'warn'; @endphp
$aReprendre])>
{{ Inscription::PIECES[$piece_type] }}{{ $passeport ? '' : ' — recto et verso' }}
{{ $passeport ? '' : ($rectoPdf ? 'Recto et verso : ' : 'Recto : ') }}{{ $msgR }} @if ($verso)Verso : {{ $msgV }}@endif
{{ $aReprendre ? 'À vérifier' : 'Conforme' }}
@else
Pièce d'identité
Manquante : ajoutez-la à l'étape 2
@endif @unless ($physique) @php $societe = $transit['societe'] ?? null; $errSoc = $errors->first('pieceSociete'); @endphp @if ($societe && ! $errSoc) @php [$tonS, $msgS] = $controleDe($societe); @endphp
$tonS === 'warn'])>
{{ $pieceSociete }}
{{ $msgS }}
{{ $tonS === 'warn' ? 'À vérifier' : 'Conforme' }} {{-- v1.14.1 — elle se remplace à l'étape 1, où sa lecture se voit et se compare. --}}
@else
$errSoc])>
{{ $pieceSociete }}
$errSoc])>{{ $errSoc ?: 'Manquante : ajoutez-la à l\'étape 1' }}
@endif @endunless
Une photo peu nette ne bloque pas l'envoi : MOBDIE la vérifiera et vous dira quoi refaire. Une pièce manquante ou illisible bloque l'envoi.

Récapitulatif

@if ($association)
Association {{ $raison_sociale }} · {{ Inscription::SITUATIONS[$situation] }}{{ $declaree && $recepisse_numero ? ', récépissé n° '.$recepisse_numero : '' }} @else
{{ $physique ? 'Entreprise' : 'Société' }} {{ $physique ? mb_strtoupper(trim($rep_prenom.' '.$rep_nom_famille)) : $raison_sociale }}{{ ! $physique && $forme_juridique ? ' · '.($forme_juridique === 'Autre' ? $forme_autre : $forme_juridique) : '' }} · {{ Inscription::TYPES[$type] }}{{ $type === 'immatriculee' ? ', RC '.$rc.' ('.$rc_ville.')' : '' }} @endif
{{ $etapes[2][0] }} {{ trim($rep_prenom.' '.$rep_nom_famille) }} · {{ Inscription::PIECES[$piece_type] }} {{ $rep_piece_numero }} · {{ $rep_telephone }} · {{ $rep_email }}
@if (! $physique && ! $seulAssocie)
{{ $association ? 'Bureau' : 'Associés' }} {{ collect($associes)->map(fn ($a) => trim(($a['nom'] ?? '').' '.($association ? (($a['fonction'] ?? '') !== '' ? '('.$a['fonction'].')' : '') : (($a['part'] ?? '') !== '' ? $a['part'].' %' : ''))))->filter()->implode(' · ') }}
@endif
@endif {{-- ===================== Étape 4 — la formule, les options, l'envoi (v1.15.0) ===================== --}} @if ($etape === 4) @include('portail.partiels.formule-et-options') @endif
@if ($libellesErreurs->isNotEmpty()) @endif
@if ($etape > 1) @elseif ($public) Retour @else @endif @if ($etape < $nbEtapes) @else @endif
@endif @script @endscript