# COPRO — Médiathèque et suivi des appels de fonds

Mise à jour du 25 septembre 2026 dans la copie du projet.

## Consulter les comptes

Dans **Budget → Appel de fond**, le tableau global présente chaque copropriétaire avec :

- le montant annuel enregistré ;
- le report des exercices précédents ;
- les échéances trimestrielles dues à la date consultée (« Appelé à date ») ;
- les paiements enregistrés sur l’exercice jusqu’à cette date ;
- le solde, avec les crédits clairement identifiés ;
- un accès à son historique d’appels.

Le calcul affiché est **report + échéances à date − paiements de l’exercice**. Les trimestres futurs et les paiements postérieurs à la date choisie ne sont pas comptés. Le montant annuel n’est donc pas confondu avec le montant immédiatement dû. Le report reste fondé sur les appels historiques et les recettes connues depuis la date de début de plateforme configurée.

Un montant annuel incohérent avec sa répartition est signalé « À vérifier » : le module n’affiche pas un solde ou un total agrégé trompeur.

L’historique reste dans **Appels de fonds**, avec référence, copropriétaire, trimestre, date de génération, échéance, montant, PDF et statut d’envoi. Le clic « Historique » sur une ligne filtre les appels de cette personne ; « Tous les copropriétaires » retire ce filtre. L’état SMTP n’est pas une preuve de réception ou de lecture.

## Retrouver et organiser les documents

Les PDF générés sont désormais référencés dans la médiathèque sous **Comptabilité & finances → Appels de fonds**. Cette sous-catégorie est créée si nécessaire. Le filtre année permet de retrouver un exercice sans créer une catégorie différente pour chaque année.

La médiathèque comporte une navigation par catégories et sous-catégories, une recherche, des filtres par année, accès et état, des dates lisibles et des actions séparées des informations du document.

Les droits sont contrôlés aussi au téléchargement :

| Document | Copropriétaire | Gestionnaire de la copropriété |
|---|---|---|
| Document commun actif | Consultation | Consultation et gestion |
| Document personnel ordinaire | Son propre document, avec modification et archivage | Consultation et gestion |
| Appel de fonds généré | Son propre PDF | Tous les PDF de sa copropriété |
| Document d’une autre copropriété | Aucun accès | Aucun accès sans mandat dans cette copropriété |

Les appels générés restent figés : ils ne peuvent pas être remplacés, retirés ou modifiés depuis la médiathèque. Un copropriétaire peut ajouter un document personnel, mais ne peut ni le rendre commun ni l’attribuer à quelqu’un d’autre. Les catégories sont gérées par les gestionnaires ; les catégories globales partagées par la plateforme ne sont pas modifiables depuis une copropriété.

L’action **Retirer** enlève un document ordinaire de l’index de la médiathèque. Elle conserve le fichier sous-jacent pour éviter de détruire une ancienne pièce jointe éventuellement partagée. Les liens de téléchargement sont recontrôlés en base.

Pour ton classement actuel, les convocations et procès-verbaux restent dans **Assemblées générales**, et l’attestation d’immatriculation reste dans **Copropriété**. Voici une organisation simple pour la suite :

| Catégorie | Contenu conseillé |
|---|---|
| Comptabilité & finances | Appels de fonds individuels, budgets, comptes, RIB |
| Assemblées générales | Convocations, procès-verbaux, annexes |
| Copropriété | Immatriculation, règlement, état descriptif de division |
| Assurances & sinistres | Attestations, contrats d’assurance, dossiers de sinistre |
| Contrats & prestataires | Contrats d’entretien et de prestation |
| Documents techniques | Diagnostics, plans, carnet d’entretien |
| Communication | Informations adressées aux copropriétaires |

Seule la catégorie nécessaire aux appels est créée automatiquement. Les documents existants n’ont pas été déplacés arbitrairement.

## Paramètres et première activation

L’IBAN et le modèle d’email sont maintenant stockés en base, séparément pour chaque copropriété :

- `mod_appelfondParam` : IBAN ;
- `mod_appelfondTemplate` : objet et message de la catégorie `appels_fonds` ;
- `mod_appelfondDocument` : lien entre campagne, copropriétaire et entrée de médiathèque.

Sur le serveur, ouvrir le nouvel écran **Appels de fonds** puis **Activer et reprendre les archives existantes**. Cette action crée les trois tables si nécessaire, reprend les paramètres JSON existants et référence les PDF des campagnes précédentes. Elle ne renvoie aucun email et ne modifie pas les montants comptables. L’opération est relançable sans multiplier les documents.

Dans les paramètres, le bouton **Synchroniser les archives avec la médiathèque** reste disponible pour reprendre des archives ajoutées ultérieurement. Enregistrer des paramètres ou préparer une nouvelle campagne active également les tables si nécessaire.

Si le compte SQL n’a pas le droit `CREATE TABLE`, le script `migrations/20260925_appels_media.sql` permet à l’administrateur du serveur de créer les tables, puis la synchronisation reprend les données.

Les PDF restent physiquement dans `var/appels/<coproId>/`, hors du répertoire public : la médiathèque référence le fichier original, sans copie supplémentaire. Les journaux de campagne et la protection contre les doubles envois restent également dans ce dossier. Il faut donc le conserver lors des mises à jour. L’ancien `settings.json` n’est plus modifié après migration ; la base est prioritaire.

Les identifiants SMTP restent dans `inc/config.php`. Le Dompdf partagé défini par `APPS_PDF` reste utilisé en priorité.

## Vérifications et limites

Les tests isolés couvrent la reprise des paramètres, la création des catégories, l’archivage idempotent, les comptes à différentes dates, les crédits, les PDF réels, les accès admin/propriétaire, les téléchargements privés, la modification de documents personnels, les écritures avec CSRF et le rendu PHP des écrans.

Tests fournis : `tests/test_appels.php`, `tests/test_media_v2.php`, `tests/test_views_v2.php` et `tests/test_smtp.php`. Ils utilisent des données fictives, SQLite en mémoire et un transport SMTP simulé. `REAL_PDF=1` active le vrai moteur PDF pour les tests de génération. Ils ne se connectent pas à ta base ni à ton serveur SMTP.

Le schéma MySQL réel, la configuration de l’hébergement et un envoi réel restent à vérifier sur ton serveur. L’accès au navigateur de test a été bloqué par son contrôle de sécurité : les vues ont été contrôlées par leur rendu PHP et leur code, mais je ne dispose pas de captures validant l’affichage final desktop/mobile avec tes données. Le harnais d’évaluation utilise les feuilles de style réelles du projet et des données fictives.

Les corrections générales d’authentification signalées dans le premier rapport restent à traiter avant ouverture de la plateforme à d’autres copropriétés.
