P0RACA-01 · Confidentialité
Le catalogue public expose les données complètes des entreprises et contacts
Preuve : Test isolé + code
La réponse Inertia contient le courriel et l’adresse même lorsqu’ils sont masqués, ainsi que les objets contacts complets, dont des notes internes. Le DTO PublicEntrepriseResource existe mais le contrôleur transmet les modèles bruts.
Reproduire et corriger
Reproduction / vérification
La sonde crée une entreprise avec courriel masqué et une note de contact interne, puis vérifie leur présence dans les props publiques. Aucun compte visiteur nécessaire.
Correction ou amélioration proposée
Utiliser une projection publique explicite partout : catalogue, aperçu des destinataires et fiches. Exclure notes, courriels secondaires, adresses privées et champs internes; appliquer chaque visibilité côté serveur.
Source : app/Http/Controllers/Public/PublicPageController.php:62
P0RACA-02 · Permissions
La permission manageUsers permet de créer un administrateur
Preuve : Test isolé
Un utilisateur non administrateur ayant manageUsers peut transmettre le rôle admin lors de la création. Le contrôleur synchronise tous les role_ids reçus sans restriction supplémentaire.
Reproduire et corriger
Reproduction / vérification
La sonde crée un délégué avec manageUsers, poste un nouvel utilisateur avec le rôle admin et vérifie que le compte créé est administrateur. Cela a été fait uniquement en SQLite mémoire.
Correction ou amélioration proposée
Réserver l’attribution des rôles privilégiés à un administrateur. Restreindre les rôles assignables par acteur, puis couvrir création et modification avec des tests d’autorisation.
Source : app/Http/Controllers/Admin/UserController.php:42
P1RACA-03 · Inscription
Un code postal du référentiel est refusé
Preuve : Chrome + test isolé
G0R 1B0 est enregistré dans les codes postaux valides et refusé à l’inscription. La saisie est normalisée sans espaces, mais pas les valeurs du référentiel. Les sept valeurs locales contiennent un espace.
Reproduire et corriger
Reproduction / vérification
Inscription entreprise : renseigner les champs, Bellechasse / Saint-Anselme, un produit et G0R 1B0. Le message « Ce code postal n’est pas desservi » apparaît.
Correction ou amélioration proposée
Normaliser les deux côtés avec la même règle. Décider si le référentiel contient des préfixes ou des codes complets et tester les deux formats autorisés.
Source : app/Http/Requests/PublicRegistrationRequest.php:54
Voir la preuve
P1RACA-04 · Inscription
L’inscription acheteur échoue sur des champs entreprise masqués
Preuve : Chrome + test isolé
Le formulaire acheteur conserve produit_ids=[]; la règle min:1 s’applique même lorsque required_if ne rend pas le champ obligatoire. Les erreurs des champs entreprise sont masquées dans ce parcours.
Reproduire et corriger
Reproduction / vérification
Sélectionner Acheteur, remplir nom, prénom, courriels et téléphone, puis envoyer. La sonde reproduit le rejet sur produit_ids; avec consentements=[] elle confirme aussi le rejet des consentements.
Correction ou amélioration proposée
Exclure les champs entreprise du contrat acheteur ou appliquer leurs règles uniquement au type entreprise. Afficher un résumé des erreurs pour ne jamais rester sans explication.
Source : app/Http/Requests/PublicRegistrationRequest.php:40
P1RACA-05 · Entreprise
Le propriétaire ne peut pas enregistrer sa propre fiche
Preuve : Chrome + test isolé
Le formulaire renvoie toujours user_id. Le validateur interdit à tout non-admin d’envoyer une valeur user_id, même s’il s’agit du propriétaire actuel et qu’elle ne change pas. Cette erreur n’est pas affichée.
Reproduire et corriger
Reproduction / vérification
Se connecter avec entreprise03@raca.test, ouvrir sa fiche puis Enregistrer sans rien modifier. La sonde confirme l’erreur user_id pour ce même contrat.
Correction ou amélioration proposée
Ne pas envoyer user_id depuis la vue entreprise ou accepter sa valeur inchangée en empêchant strictement les changements. Ajouter un message visible.
Source : app/Http/Requests/Admin/EntrepriseRequest.php:78
P1RACA-06 · Produits
L’édition peut effacer quatre attributs produit existants
Preuve : Chrome + lecture base + code
Pour le produit Œufs de l’entreprise 3, contenant, durée de vie, code-barres et quantité minimale existent en base mais apparaissent vides. relationMap lit du camelCase alors que Laravel sérialise ces relations en snake_case. Enregistrer envoie les listes vides et sync les retire.
Reproduire et corriger
Reproduction / vérification
Ouvrir le premier produit de l’entreprise 3. Comparer les champs vides avec inspect.php : Sac, Moins de 7 jours, UPC-A et 1 unité sont bien associés. Aucun enregistrement destructeur de cette fiche n’a été effectué.
Correction ou amélioration proposée
Corriger le mapping des clés sérialisées et ajouter un test ouvrir/enregistrer sans changement qui préserve tous les pivots.
Source : resources/js/pages/admin/Entreprises/Products.vue:32
Voir la preuve
P1RACA-07 · Demandes
Un brouillon enregistré ne peut être repris ni envoyé
Preuve : Chrome + routes
L’enregistrement du brouillon fonctionne dans Chrome. La fiche obtenue propose seulement Annuler; aucune édition, reprise ou action d’envoi n’existe, ni route de mise à jour correspondante.
Reproduire et corriger
Reproduction / vérification
Créer une demande et Enregistrer en brouillon. Ouvrir ensuite sa fiche depuis Mes demandes. Le brouillon d’audit 1 a montré ce cas avant d’être annulé.
Correction ou amélioration proposée
Ajouter l’édition et l’envoi d’un brouillon existant, en préservant critères, destinataires et pièce jointe. Ne pas créer un nouvel objet à chaque reprise.
Source : resources/js/pages/portal/QuoteRequests/Show.vue:7
Voir la preuve
P1RACA-08 · Demandes
La pièce jointe d’une réponse n’est pas accessible dans la vue acheteur
Preuve : Chrome + lecture base
Le PDF offre-audit.pdf est bien stocké avec la réponse. Le tableau acheteur présente seulement entreprise, statut, montant et message; aucun lien ne permet de récupérer la pièce jointe.
Reproduire et corriger
Reproduction / vérification
Envoyer une réponse entreprise avec un PDF puis consulter la demande côté acheteur. La demande d’audit 2 contient une réponse à 74,95 CAD et le fichier en base.
Correction ou amélioration proposée
Afficher le nom et le lien de téléchargement de chaque document de réponse, via la route protégée déjà présente. Ajouter une indication claire lorsqu’aucun document n’est joint.
Source : resources/js/pages/portal/QuoteRequests/Show.vue:7
Voir la preuve
P1RACA-09 · Navigation
La déconnexion ouvre l’accueil dans une fenêtre d’erreur Inertia
Preuve : Chrome
La session est fermée mais le POST Inertia suit une redirection vers l’accueil Blade. L’accueil apparaît dans inertia-error-dialog au-dessus de l’ancien écran, au lieu d’une navigation normale.
Reproduire et corriger
Reproduction / vérification
Depuis un espace connecté, cliquer Se déconnecter. Reproduit dans un nouvel onglet dédié; le relevé AX identifie explicitement inertia-error-dialog.
Correction ou amélioration proposée
Retourner une redirection externe Inertia vers l’accueil ou assurer une navigation complète à la déconnexion. Vérifier le même passage Inertia/Blade après toute suppression de compte ou redirection publique.
Source : resources/js/layouts/AdminLayout.vue:407
Voir la preuve
P1RACA-10 · Listes
Des données deviennent inaccessibles après la première page
Preuve : Code; seuil non atteint dans la base locale
Les contrôleurs paginent les utilisateurs, les demandes émises et reçues, mais leurs vues ne rendent ni pagination ni chargement supplémentaire. La supervision admin réutilise aussi la liste des demandes.
Reproduire et corriger
Reproduction / vérification
Dépasser 20 utilisateurs ou 20 demandes. Le serveur renvoie la première page et l’interface ne permet pas d’accéder à la suivante. Les 21 référentiels, eux, ont un Paginator.
Correction ou amélioration proposée
Ajouter une pagination avec total, page courante et conservation des filtres sur ces listes. Vérifier avec au moins 21 éléments par type.
Source : resources/js/pages/portal/QuoteRequests/Index.vue:23
P1RACA-11 · Utilisateurs
Un compte créé par un admin reste non vérifié sans invitation
Preuve : Test isolé
La création back-office stocke un mot de passe et les rôles, mais ne vérifie pas le courriel et n’envoie aucune invitation. Les routes métier exigent pourtant verified.
Reproduire et corriger
Reproduction / vérification
La sonde crée un acheteur via /admin/users et confirme email_verified_at=null et aucune notification. L’interface ne signale pas cet état sur la liste.
Correction ou amélioration proposée
Définir un parcours d’invitation cohérent avec activation et choix du mot de passe. Afficher le statut et une action de renvoi; éviter de demander à l’admin de communiquer un mot de passe.
Source : app/Http/Controllers/Admin/UserController.php:39
P1RACA-12 · Publication
Une entreprise peut être publique avant l’activation du compte
Preuve : Test isolé
Après inscription, la nouvelle entreprise entre directement dans le catalogue, alors que son propriétaire n’a pas confirmé son courriel. La recherche ne contrôle pas de statut de publication ni la vérification du propriétaire.
Reproduire et corriger
Reproduction / vérification
La sonde utilise un préfixe postal normalisé, inscrit une entreprise puis vérifie simultanément compte non vérifié et nom présent dans le catalogue.
Correction ou amélioration proposée
Décider le moment de publication et le matérialiser en base. Filtrer toutes les surfaces publiques et exports selon cette règle, et prévoir une modération si nécessaire.
Source : app/Services/CatalogueSearch.php:76
P1RACA-13 · Validation
Plusieurs formulaires échouent sans afficher leurs erreurs
Preuve : Chrome + code
Entreprise, produit, utilisateur, référentiel, outils et réponse fournisseur stockent les erreurs useForm sans rendre de messages de champ ou de résumé. Une soumission peut donc sembler ignorée.
Reproduire et corriger
Reproduction / vérification
Exemple : enregistrer la fiche entreprise en tant que propriétaire. Autres cas à vérifier après correction : produit vide, utilisateur sans mot de passe conforme, import invalide et réponse vide.
Correction ou amélioration proposée
Afficher un résumé focalisé et des erreurs près des champs; ouvrir l’onglet concerné. Conserver la saisie et annoncer les erreurs aux lecteurs d’écran.
Source : resources/js/pages/admin/Entreprises/Form.vue:32
P1RACA-14 · Produits
Un identifiant de relation invalide provoque une erreur 500 et une création partielle
Preuve : Test isolé
Les IDs des attributs multiples sont validés comme entiers, sans exists. Le produit est créé avant les sync et sans transaction. Une clé étrangère invalide produit une 500 après l’insertion du produit.
Reproduire et corriger
Reproduction / vérification
La sonde poste un nouveau produit avec specificite_ids=[999999], obtient 500 puis confirme que le produit de base a quand même été créé.
Correction ou amélioration proposée
Valider les références avec exists et distinct, puis entourer création/mise à jour et synchronisations d’une transaction atomique.
Source : app/Http/Controllers/Admin/EntrepriseProduitController.php:38
P1RACA-15 · Import
Un CSV mal formé provoque une erreur 500; les imports ne sont pas atomiques
Preuve : Test isolé + code
Une ligne plus longue que l’en-tête fait échouer array_combine. L’import applique les lignes au fil de l’eau sans validation préalable ni transaction; une erreur tardive peut donc laisser un import incomplet.
Reproduire et corriger
Reproduction / vérification
Sonde : fichier avec en-tête nom et ligne Audit;ColonneEnTrop → 500. Le scénario de plusieurs lignes et erreur tardive reste à tester visuellement.
Correction ou amélioration proposée
Prévalider en-têtes, longueurs, encodage et références MRC. Afficher les erreurs avec numéros de ligne et fournir un aperçu avant application atomique.
Source : app/Http/Controllers/Admin/DataToolsController.php:90
P1RACA-16 · Échéances
Les dates saisies n’ont pas de fuseau et les écrans exposent les valeurs UTC brutes
Preuve : Chrome + configuration + code
Une échéance saisie à 16:00 est persistée comme 16:00Z avec APP_TIMEZONE=UTC, puis affichée en ISO. Le 30 octobre, 16:00 Toronto correspond à 20:00Z; le contrat de saisie ne précise pas ce décalage.
Reproduire et corriger
Reproduction / vérification
Demande d’audit 2 : saisie 2026-10-30T16:00, affichage 2026-10-30T16:00:00.000000Z. Les fermetures automatiques utilisent cette date serveur.
Correction ou amélioration proposée
Définir America/Toronto pour l’interprétation utilisateur, convertir explicitement en UTC et afficher une date française lisible avec fuseau. Tester les changements d’heure.
Source : resources/js/pages/portal/QuoteRequests/Form.vue:24
Voir la preuve
P1RACA-17 · Confidentialité
Les exports publics révèlent la ville malgré son masquage
Preuve : Test isolé + code
Le CSV public exporte systématiquement ville et MRC. Le PDF liste affiche également la ville sans consulter le réglage ville. Cela diverge du contrat de visibilité proposé par l’interface.
Reproduire et corriger
Reproduction / vérification
La sonde crée une ville masquée, télécharge le CSV et y retrouve son nom. Le template PDF a le même défaut; le PDF individuel contrôle la ville mais affiche encore la MRC.
Correction ou amélioration proposée
Centraliser les règles de visibilité dans la même projection publique pour HTML, JSON, CSV et tous les PDF.
Source : app/Http/Controllers/Public/EntrepriseExportController.php:39
P2RACA-18 · Inscription
Les consentements sont tous précochés
Preuve : Chrome
Communications courriel, Conditions d’utilisation et Publication au catalogue sont sélectionnés dès l’arrivée. Les trois choix ont pourtant des finalités distinctes.
Reproduire et corriger
Reproduction / vérification
Ouvrir une nouvelle inscription entreprise; les trois cases valent 1. Le formulaire les présélectionne aussi après réinitialisation.
Correction ou amélioration proposée
Présenter des choix explicites, expliquer les finalités et distinguer les exigences métier des options. Faire valider le texte par le responsable du projet.
Source : resources/js/pages/public/Inscription.vue:48
P2RACA-19 · Inscription
Le serveur n’exige aucun consentement précis
Preuve : Test isolé + code
Le serveur demande au moins un identifiant de consentement, quel qu’il soit. Le test d’inscription réussit avec uniquement Publication au catalogue, sans Conditions d’utilisation. Ce constat décrit le comportement; il ne constitue pas un avis juridique.
Reproduire et corriger
Reproduction / vérification
La sonde de publication avant activation utilise uniquement le consentement Publication au catalogue et obtient une inscription sans erreur.
Correction ou amélioration proposée
Définir les consentements réellement requis par le projet, les vérifier individuellement et conserver une trace datée/versionnée de leur acceptation.
Source : app/Http/Requests/PublicRegistrationRequest.php:38
P2RACA-20 · Inscription
Le parcours impose deux courriels successifs et son texte de succès est ambigu
Preuve : Code
Le premier courriel sert à activer l’adresse; son clic déclenche ensuite un second courriel de réinitialisation pour choisir un mot de passe. Le dialogue de succès parle directement du lien de choix du mot de passe.
Reproduire et corriger
Reproduction / vérification
Lire RegistrationController, AccountActivationController et le dialogue « Inscription complétée ». Livraison réelle et complétion de ce parcours non validées pendant cet audit.
Correction ou amélioration proposée
Afficher les étapes exactes, le destinataire et une action de renvoi. Envisager un lien d’invitation unique qui vérifie l’adresse et conduit au choix du mot de passe.
Source : app/Http/Controllers/Public/AccountActivationController.php:20
P2RACA-21 · Navigation
Le menu acheteur contient deux destinations interdites
Preuve : Chrome
Tableau de bord et logo pointent vers /admin, refusé à l’acheteur. Le lien Entreprises mène aussi à un périmètre non autorisé pour un acheteur normal.
Reproduire et corriger
Reproduction / vérification
Connexion avec le compte acheteur d’audit : cliquer Tableau de bord → page 403 Forbidden. Les droits serveur restent correctement appliqués.
Correction ou amélioration proposée
Construire la navigation selon les capacités réelles et faire pointer le logo vers l’accueil adapté au rôle.
Source : resources/js/layouts/AdminLayout.vue:155
Voir la preuve
P2RACA-22 · Navigation
Les vues entreprise et acheteur se présentent comme une administration
Preuve : Chrome
L’en-tête affiche Espace d’administration pour les trois rôles. Le tableau de bord entreprise reprend aussi ADMINISTRATION RACA et des instructions de gestion du contenu non accessibles à ce compte.
Reproduire et corriger
Reproduction / vérification
Comparer l’espace acheteur, l’espace entreprise03 et l’administrateur.
Correction ou amélioration proposée
Adapter les titres, les raccourcis et les indicateurs : espace acheteur, espace entreprise et administration.
Source : resources/js/layouts/AdminLayout.vue:377
P2RACA-23 · Permissions
Le menu ignore les permissions déléguées et les rôles multiples
Preuve : Code
canSee vérifie seulement le premier role.slug. Des contrôleurs acceptent pourtant des gestionnaires MRC ou des permissions spécifiques; leurs outils peuvent être autorisés mais invisibles dans le menu.
Reproduire et corriger
Reproduction / vérification
Exemples : accès outils autorisé par isMrcManager ou exportMrc, entrée de menu réservée à role=admin. L’ordre des rôles influence aussi la visibilité.
Correction ou amélioration proposée
Exposer les capacités autorisées côté serveur et les réutiliser dans le menu. Tester les comptes MRC et les combinaisons de rôles.
Source : resources/js/layouts/AdminLayout.vue:247
P2RACA-24 · Demandes
La confirmation finale ne récapitule pas les informations à envoyer
Preuve : Chrome
La dernière étape indique seulement le nombre de destinataires. Le titre, les dates, le besoin, le fichier et les noms des fournisseurs ne sont pas récapitulés.
Reproduire et corriger
Reproduction / vérification
Passer à l’étape 3 de création; l’écran « Prêt à envoyer » ne contient qu’un court texte et les boutons.
Correction ou amélioration proposée
Afficher un récapitulatif complet avant l’envoi avec accès clair à la modification de chaque bloc.
Source : resources/js/pages/portal/QuoteRequests/Form.vue:504
P2RACA-25 · Demandes
Le formulaire de réponse reste disponible pour une demande fermée ou expirée
Preuve : Code; état fermé créé pendant l’audit
Le serveur refuse correctement de répondre à une demande non ouverte avec 422, mais le formulaire fournisseur n’est conditionné ni au statut ni à l’échéance et n’affiche pas ses erreurs.
Reproduire et corriger
Reproduction / vérification
Ouvrir côté fournisseur une demande fermée ou dépassant son échéance et tenter une réponse. L’interface annonce toujours Envoyer la réponse.
Correction ou amélioration proposée
Afficher Fermée/Expirée, conserver l’offre existante en lecture seule et expliquer pourquoi l’envoi est indisponible.
Source : resources/js/pages/portal/ReceivedQuoteRequests/Show.vue:4
P2RACA-26 · Demandes
Une nouvelle réponse écrase l’offre précédente sans historique
Preuve : Code
updateOrCreate remplace montant, message et date; aucune version de l’ancienne offre n’est conservée. Le formulaire reste un formulaire d’envoi après la première réponse.
Reproduire et corriger
Reproduction / vérification
Soumettre deux offres successives pour le même destinataire. Le modèle impose une seule ligne de réponse.
Correction ou amélioration proposée
Décider si la modification d’offre est autorisée. Si oui, afficher Modifier ma réponse et conserver les versions/horodatages utiles.
Source : app/Http/Controllers/Portal/ReceivedQuoteRequestController.php:41
P2RACA-27 · Demandes
Le fournisseur ne voit pas l’identité et les coordonnées de l’acheteur
Preuve : Chrome + code
Le contrôleur charge le demandeur et son profil acheteur mais l’écran reçu affiche uniquement titre, échéance, description et besoins.
Reproduire et corriger
Reproduction / vérification
Ouvrir la demande d’audit côté entreprise : Cuisine Audit RACA et le téléphone de test ne sont pas présentés.
Correction ou amélioration proposée
Afficher un bloc demandeur avec organisation et coordonnées prévues par le métier, en respectant leur périmètre de partage.
Source : resources/js/pages/portal/ReceivedQuoteRequests/Show.vue:4
Voir la preuve
P2RACA-28 · Demandes
Fermer et Annuler s’appliquent immédiatement sans explication
Preuve : Chrome + routes
Les deux actions changent immédiatement le statut et disparaissent après succès. Aucune confirmation, explication de l’effet ou possibilité de réouverture n’est proposée.
Reproduire et corriger
Reproduction / vérification
La demande 2 a été fermée et le brouillon 1 annulé pendant l’audit; les boutons ont appliqué les actions directement.
Correction ou amélioration proposée
Préciser l’effet sur les réponses et demander une confirmation pour ces changements. Prévoir une réouverture si le processus métier le permet.
Source : resources/js/pages/portal/QuoteRequests/Show.vue:7
P2RACA-29 · Demandes
Les statuts métier sont affichés en anglais
Preuve : Chrome
draft, sent, pending, viewed, responded, closed et cancelled sont exposés tels quels. La présentation n’aide pas à distinguer état de la demande et état du destinataire.
Reproduire et corriger
Reproduction / vérification
Consulter Mes demandes, Demandes reçues et la fiche d’échange d’audit.
Correction ou amélioration proposée
Centraliser des libellés français et des badges cohérents : Brouillon, Envoyée, Consultée, Réponse reçue, Fermée, Annulée.
Source : resources/js/pages/portal/QuoteRequests/Index.vue:46
P2RACA-30 · Demandes
Le montant acheteur est affiché avec un point décimal
Preuve : Chrome + lecture base
Le formulaire fournisseur affiche 74,95 $, la base conserve correctement 74.95, mais la vue acheteur rend 74.95 $. Le défaut est uniquement de présentation.
Reproduire et corriger
Reproduction / vérification
Comparer les captures de la réponse entreprise et de l’offre reçue par l’acheteur.
Correction ou amélioration proposée
Employer Intl.NumberFormat fr-CA avec devise CAD et conserver les montants décimaux exacts côté serveur.
Source : resources/js/pages/portal/QuoteRequests/Show.vue:7
Voir la preuve
P2RACA-31 · Compte
Le profil ne permet pas de modifier les informations de l’inscription
Preuve : Chrome + code
Le profil ne propose que nom et courriel. Prénom, téléphone, organisation et fonction acheteur n’ont pas d’écran de maintenance, bien qu’ils soient collectés à l’inscription.
Reproduire et corriger
Reproduction / vérification
Ouvrir Mon profil depuis un compte acheteur et comparer avec le formulaire initial.
Correction ou amélioration proposée
Ajouter les champs de profil nécessaires selon le type de compte et conserver la séparation personne/entreprise.
Source : resources/js/pages/settings/Profile.vue:30
P2RACA-32 · Catalogue
Réinitialiser les filtres ne permet pas de sortir d’une recherche sans résultat
Preuve : Chrome
Sur zzzauditintrouvable sans filtres, le bouton laisse le mot-clé et reconduit exactement la même recherche vide. L’utilisateur voit un bouton de récupération qui ne change rien.
Reproduire et corriger
Reproduction / vérification
Rechercher zzzauditintrouvable puis Réinitialiser les filtres. Reproduit sur écran mobile.
Correction ou amélioration proposée
Proposer Réinitialiser la recherche qui vide mot-clé et filtres, ou distinguer clairement les deux actions.
Source : resources/js/pages/public/Catalogue.vue:131
Voir la preuve
P2RACA-33 · Statistiques
Les recherches quittées rapidement ne sont pas journalisées
Preuve : Code
L’enregistrement est différé de dix secondes et son timer annulé au démontage. Un visiteur qui cherche puis ouvre une autre page avant ce délai n’est pas compté.
Reproduire et corriger
Reproduction / vérification
Rechercher puis quitter la page avant dix secondes; comparer au rapport. Une nouvelle recherche réinitialise aussi le timer.
Correction ou amélioration proposée
Définir la métrique désirée et enregistrer l’événement au moment convenu, avec dédoublonnage. Vérifier séparément la politique de collecte et les choix de confidentialité.
Source : resources/js/pages/public/Catalogue.vue:113
P2RACA-34 · Catalogue
La fiche publique indexable est beaucoup moins complète que la fenêtre du répertoire
Preuve : Code
La page Blade dédiée à une entreprise présente nom, adresse, ville, courriel et noms de produits. Certifications, modes de livraison, détails et liens web y sont absents. Elle ne respecte pas non plus tous les réglages de visibilité.
Reproduire et corriger
Reproduction / vérification
Comparer la route /repertoire/{id}/{slug} à Afficher plus dans le catalogue.
Correction ou amélioration proposée
Partager les données publiques projetées et un contenu métier cohérent entre page indexable, fenêtre et export.
Source : resources/views/public/entreprise.blade.php:1
P2RACA-35 · Catalogue
Plusieurs attributs saisis ne sont jamais montrés dans la fiche détaillée
Preuve : Chrome + code
La fenêtre entreprise affiche surtout spécificités, conservation, volume et transaction. Contenants, durée de vie, code-barres, quantité minimale, disponibilités et modes de livraison sont chargés mais non présentés.
Reproduire et corriger
Reproduction / vérification
Comparer la fiche du produit Œufs de l’entreprise 3 aux informations existantes en base.
Correction ou amélioration proposée
Afficher les informations utiles à la décision d’approvisionnement, en regroupant les détails et en masquant les blocs réellement vides.
Source : resources/js/components/public/EnterpriseDialog.vue:135
P2RACA-36 · Tableau de bord
Les fiches « récemment modifiées » sont triées par création
Preuve : Code
Le contrôleur utilise latest() sans colonne; cela trie sur created_at. L’écran promet les six dernières mises à jour.
Reproduire et corriger
Reproduction / vérification
Modifier une ancienne entreprise puis comparer son ordre au tableau de bord. Le contrat de requête confirme le décalage.
Correction ou amélioration proposée
Trier par updated_at avec un critère secondaire stable et, au besoin, afficher la date de modification.
Source : app/Http/Controllers/Admin/AdminController.php:36
P2RACA-37 · Contenu
Publier ne prend pas en compte les modifications non enregistrées
Preuve : Code
Le bouton Publier appelle une route séparée sans envoyer le formulaire. Le serveur copie le draft_content déjà sauvegardé. Un utilisateur peut croire publier son texte actuel alors qu’il publie la version précédente.
Reproduire et corriger
Reproduction / vérification
Modifier un titre puis Publier sans Enregistrer le brouillon. Ce cas n’a pas été appliqué au contenu existant pendant l’audit.
Correction ou amélioration proposée
Désactiver Publier tant que le formulaire est sale, ou enregistrer puis publier atomiquement. Afficher la version et la date publiées.
Source : resources/js/pages/admin/Content/Edit.vue:52
P2RACA-38 · Contenu
Le contenu structuré n’est validé que comme tableau
Preuve : Code
Le serveur ne valide pas les champs internes, les tailles de textes, la structure des cartes ni les questions/réponses. Les rendus supposent pourtant plusieurs structures précises.
Reproduire et corriger
Reproduction / vérification
Examiner les règles du ContentController : content required|array seulement. Les cas malformés n’ont pas été injectés dans les pages locales existantes.
Correction ou amélioration proposée
Valider les sous-champs et valeurs autorisées, produire des erreurs lisibles et refuser une publication incohérente.
Source : app/Http/Controllers/Admin/ContentController.php:30
P2RACA-39 · Formulaires
Des libellés techniques apparaissent dans les classifications et produits
Preuve : Chrome
Les écrans affichent type production, type clientele, specificite, duree vie et quantite minimale commande, issus directement des clés de programmation.
Reproduire et corriger
Reproduction / vérification
Ouvrir Classifications d’une entreprise ou Modifier le produit.
Correction ou amélioration proposée
Définir des libellés français métier explicites, avec accents, pluriels et aide pour les termes spécialisés.
Source : resources/js/pages/admin/Entreprises/Form.vue:179
Voir la preuve
P2RACA-40 · Accessibilité
Des boutons et champs n’ont pas de nom accessible explicite
Preuve : Chrome + code
Dans les produits et utilisateurs, plusieurs actions ne sont identifiées que par un pictogramme. Les contacts et marques utilisent principalement des placeholders qui disparaissent pendant la saisie.
Reproduire et corriger
Reproduction / vérification
Lire les contrôles de produits : boutons crayon/poubelle sans texte; lire les champs contacts remplis, dont le nom accessible devient la valeur seule.
Correction ou amélioration proposée
Ajouter aria-label, titres et labels persistants. Identifier précisément la ligne concernée dans les actions répétées.
Source : resources/js/pages/admin/Entreprises/Products.vue:101
P2RACA-41 · Référentiels
Une ville peut être créée sans MRC
Preuve : Code
Le référentiel Villes propose une MRC mais la validation la rend nullable. Une ville orpheline ne peut plus être sélectionnée normalement à l’inscription et échappe aux filtres MRC.
Reproduire et corriger
Reproduction / vérification
Ajouter une ville sans sélectionner de MRC; le contrat serveur l’autorise. Ne pas utiliser un référentiel réel pour ce test.
Correction ou amélioration proposée
Rendre mrc_id requis pour les villes, contrôler les imports et prévoir le traitement des villes orphelines déjà présentes.
Source : app/Http/Requests/Admin/UpsertReferenceRequest.php:29
P2RACA-42 · Export
Les exports CSV n’échappent pas les préfixes de formule Excel
Preuve : Test isolé
Un nom commençant par = est exporté tel quel. Selon le tableur et ses réglages, une donnée utilisateur peut être interprétée comme une formule à l’ouverture. La sonde confirme la chaîne brute, pas une exécution dans Excel.
Reproduire et corriger
Reproduction / vérification
La sonde exporte une entreprise nommée =1+1 et vérifie sa présence sans neutralisation dans le CSV.
Correction ou amélioration proposée
Neutraliser les préfixes de formule pour les cellules textuelles dans tous les exports CSV et tester aussi +, -, @, tabulations et retours de ligne.
Source : app/Http/Controllers/Public/EntrepriseExportController.php:35
P2RACA-43 · Présentation
Les données de démonstration ne sont pas cohérentes avec la région
Preuve : Chrome + export
Portneuf/Pont-Rouge apparaissent dans le répertoire régional, des codes postaux commencent par T, P, N ou V et les sites pointent vers des domaines .test. Certaines civilités ne correspondent pas aux prénoms de démonstration.
Reproduire et corriger
Reproduction / vérification
Consulter la liste, les contacts et l’export public de 12 entreprises.
Correction ou amélioration proposée
Préparer un jeu de démonstration crédible et approuvé, avec coordonnées fictives clairement identifiées et géographie correcte. Éviter les liens externes non fonctionnels pendant la présentation.
Source : database/seeders/EntrepriseSeeder.php:34
P2RACA-44 · Navigation publique
Un utilisateur connecté voit encore Connexion et Inscription
Preuve : Chrome + code
Le site public ne présente pas Mon espace, le rôle courant ou un accès rapide à Mes demandes. Il reste identique après connexion.
Reproduire et corriger
Reproduction / vérification
Depuis une session acheteur, ouvrir le répertoire public; l’en-tête propose toujours Connexion.
Correction ou amélioration proposée
Afficher un accès au portail approprié et un état de session clair sur les surfaces Blade et Vue.
Source : resources/js/layouts/PublicLayout.vue:51
P2RACA-45 · HTTP / SEO
Une page inexistante répond HTTP 200
Preuve : Test isolé
La route de secours rend la page NotFound sans statut 404. Les moteurs et outils de suivi peuvent traiter une URL inexistante comme valide.
Reproduire et corriger
Reproduction / vérification
La sonde GET /audit-page-inexistante obtient 200.
Correction ou amélioration proposée
Rendre la page d’erreur avec statut HTTP 404 et conserver une navigation de retour utile.
Source : routes/web.php:83
P3RACA-46 · Statistiques
Les filtres du rapport sont affichés comme des compteurs opaques
Preuve : Chrome
Le détail indique MRC (1) ou Produits (1) sans nommer Appalaches ou le produit. Deux lignes peuvent ainsi paraître identiques malgré des choix différents.
Reproduire et corriger
Reproduction / vérification
Consulter le détail du Rapport des recherches et comparer les regroupements MRC.
Correction ou amélioration proposée
Résoudre les IDs en libellés et afficher les valeurs ou un détail dépliable par groupe.
Source : resources/js/pages/admin/Reports/Searches.vue:245
Voir la preuve
P3RACA-47 · PDF
L’export est lisible mais peu aligné sur l’identité du site
Preuve : PDF rendu et inspecté
Le PDF public des 12 entreprises tient correctement sur une page A4 paysage sans texte coupé. Il utilise une palette verte, sans logo RACA, ni rappel des filtres ou pagination.
Reproduire et corriger
Reproduction / vérification
Ouvrir export-public-page1.png, rendu par Poppler depuis le PDF téléchargé dans Chrome.
Correction ou amélioration proposée
Ajouter le logo, les filtres appliqués, un pied de page et une palette cohérente. Revalider la mise en page avec beaucoup plus de lignes.
Source : resources/views/pdf/entreprises.blade.php:17
Voir la preuve
P3RACA-48 · Mobile
Le bouton de confidentialité occupe une place importante sur petit écran
Preuve : Chrome à 390 × 844
Le bouton fixe Préférences de confidentialité recouvre le bas de la zone de lecture. Les cartes restent lisibles et la recherche s’empile correctement à cette largeur.
Reproduire et corriger
Reproduction / vérification
Voir les captures mobiles du répertoire et de la recherche vide.
Correction ou amélioration proposée
Réduire l’encombrement du bouton, préserver une zone de clic accessible et vérifier les dialogues/claviers sur appareils réels.
Source : resources/js/components/public/CookieBanner.vue:72
Voir la preuve
P3RACA-49 · Contenu
Le texte de la politique de témoins paraît ancien et générique
Preuve : Chrome; observation éditoriale
La page annonce août 2023 et évoque panier/paiement, boutons sociaux et Google Analytics. Ces passages doivent être rapprochés des technologies réellement utilisées. Aucun avis juridique n’est formulé.
Reproduire et corriger
Reproduction / vérification
Ouvrir Politique de témoins et lire la date et les sections techniques.
Correction ou amélioration proposée
Faire actualiser les informations factuelles et les coordonnées par le responsable du contenu, puis vérifier l’adéquation avec le fonctionnement effectif.
Source : resources/js/pages/public/CookiePolicy.vue:1
P3RACA-50 · Contenu
L’éditeur ne propose pas d’aperçu ni d’historique de publication
Preuve : Chrome + code
Voir le site ouvre la version publiée. Aucun aperçu du brouillon, comparaison, historique ou retour à une publication antérieure n’est présent.
Reproduire et corriger
Reproduction / vérification
Ouvrir Contenu Accueil et FAQ et examiner les actions disponibles.
Correction ou amélioration proposée
Ajouter un aperçu protégé et un petit historique de versions avec auteur, date et restauration contrôlée.
Source : resources/js/pages/admin/Content/Edit.vue:61
P2RACA-51 · Validation
Des clés de traduction brutes sont affichées à l’inscription
Preuve : Chrome + code
Le formulaire entreprise vide affiche validation.required_if pour plusieurs champs. Le fichier français ne fournit que deux messages génériques et deux attributs; les autres règles manquent de traduction.
Reproduire et corriger
Reproduction / vérification
Ouvrir Inscription et envoyer le formulaire vide. Observé pour nom d’entreprise, courriel d’entreprise, produits, adresse, MRC, ville et code postal.
Correction ou amélioration proposée
Compléter les traductions de validation utilisées et les noms français des champs. Couvrir aussi confirmations, dates, unicité, fichiers, tailles et relations dans la recette.
Source : lang/fr/validation.php:4