espace-paie-odentas/RESET_POSITIONS_TEST.md

3.3 KiB

Reset des Positions de Signature (Test Pourcentages)

Context

Passage du système de coordonnées en millimètres vers un système en pourcentages. Cela permet d'avoir un rendu indépendant de la résolution/taille du PDF.

Changements Effectués

1. Types Modifiés

  • EstimatedPosition : x, y, width, height maintenant en POURCENTAGES (%)
  • ExtractedPosition : x, y, width, height maintenant en POURCENTAGES (%)

2. Fonctions Modifiées

extractPrecisePositionsFromPdf()

// AVANT : Stockage en mm
const xMm = textPosition.x * PT_TO_MM;
const yMm = pageHeightMm - (textPosition.y * PT_TO_MM);

// APRÈS : Conversion en pourcentages
const xMm = textPosition.x * PT_TO_MM;
const yMm = pageHeightMm - (textPosition.y * PT_TO_MM);
const xPercent = (xMm / pageWidthMm) * 100;
const yPercent = (yMm / pageHeightMm) * 100;
const widthPercent = (widthMm / pageWidthMm) * 100;
const heightPercent = (heightMm / pageHeightMm) * 100;

estimatePositionsFromPlaceholders()

// AVANT : Positions en mm absolus
const x = isEmployee ? A4_WIDTH_MM - MARGIN_X_MM - width : MARGIN_X_MM;
const y = A4_HEIGHT_MM - MARGIN_BOTTOM_MM - height;

// APRÈS : Positions en pourcentages
const widthPercent = ((ph.width || 150) / 210) * 100;
const heightPercent = ((ph.height || 60) / 297) * 100;
const xPercent = isEmployee ? 100 - MARGIN_X_PERCENT - widthPercent : MARGIN_X_PERCENT;
const yPercent = 100 - MARGIN_BOTTOM_PERCENT - heightPercent;

3. Composant PDFImageViewer

// AVANT : Conversion mm → %
const leftPercent = (pos.x / pageWidthMm) * 100;
const topPercent = (pos.y / pageHeightMm) * 100;

// APRÈS : Utilisation directe des pourcentages
style={{
  left: `${pos.x}%`,
  top: `${pos.y}%`,
  width: `${pos.width}%`,
  height: `${pos.height}%`,
}}

Avantages

Indépendant de la résolution : Peu importe la taille du rendu (petit écran, grand écran, zoom), les positions relatives restent correctes

Simplifie le code : Plus besoin de connaître les dimensions réelles en mm du PDF

Cohérence : Le placeholder est à X% du haut → le cadre s'affiche à X% du haut

Responsive : Fonctionne sur mobile, tablette, desktop sans recalcul

Pour Tester

  1. Supprimer les anciennes positions en base (elles sont en mm) :
DELETE FROM sign_positions WHERE request_id = '2e187e3d-770b-46a1-b7c8-de7a01726059';
  1. Recharger la page de signature : /signer/2e187e3d-770b-46a1-b7c8-de7a01726059/xxx

  2. L'API va :

    • Détecter qu'il n'y a pas de positions en DB
    • Lancer l'extraction précise depuis le PDF
    • Calculer les positions en POURCENTAGES
    • Les stocker en DB
    • Les renvoyer au front
  3. Le front va :

    • Recevoir les positions en pourcentages
    • Les appliquer directement sans conversion
    • Afficher les cadres proportionnellement à la taille du conteneur

Vérification Console

Vous devriez voir :

[PLACEHOLDER] Trouvé sur page 3: Signature Employeur (Employeur)
  Position: x=9.5%, y=70.0%, w=35.7%, h=10.1%
[PLACEHOLDER] Trouvé sur page 3: Signature Salarié (Salarié)
  Position: x=54.8%, y=70.0%, w=35.7%, h=10.1%

Au lieu de :

originalMm: {x: 20, y: 260, w: 150, h: 60}
percentCalculated: {left: '9.52', top: '87.54', width: '71.43', height: '20.20'}