{
  "meta": {
    "format": "pactoclick-evidence-v1",
    "generated_at": "2026-06-10T14:22:30.456Z",
    "generator": "PactoClick Evidence Ledger v1.2.3",
    "schema": "https://pactoclick.com/schemas/evidence-v1.json",
    "instructions": "Este documento es la evidencia forense digital del pacto. Todos los hashes están encadenados mediante SHA-256. Para verificar la integridad, recalcula los hashes en orden y comprueba que coinciden con los valores registrados. El verificador público está disponible en https://pactoclick.com/verify",
    "legal_disclaimer": "PactoClick genera evidencia electrónica reforzada para uso probatorio. No sustituye notaría, firma cualificada ni prestador cualificado de servicios de confianza. La identidad es declarada (no verificada contra fuente oficial). La valoración de la prueba corresponde al juzgador conforme a la legislación aplicable."
  },
  "pact": {
    "id": "c0a80121-7abc-4def-9012-3456789abcde",
    "title": "Presupuesto de reforma de cocina - 12m²",
    "description": "Reforma completa de cocina de 12m² en C/ Mayor 15, 28013 Madrid, incluyendo demolición de alicatado existente, nueva instalación eléctrica con 8 tomas, fontanería nueva para fregadero y lavavajillas, alicatado con gres porcelánico 30x60cm, instalación de muebles altos y bajos laminados, encimera de cuarzo y electrodomésticos Siemens (placa inducción, horno, campana). Plazo de ejecución: 15 días laborables desde la aceptación. Forma de pago: 40% a la aceptación, 30% a mitad de obra, 30% a la entrega.",
    "price": 3500,
    "currency": "EUR",
    "status": "ACCEPTED",
    "created_at": "2026-06-01T09:15:00.000Z",
    "accepted_at": "2026-06-10T14:22:30.456Z",
    "creator_user_id": "d7f3a1b2-cdef-4567-89ab-0123456789ab",
    "signing_url": "https://pactoclick.com/v/c0a80121-7abc-4def-9012-3456789abcde"
  },
  "intervenients": {
    "creator": {
      "role": "Solicitante (Emisor)",
      "full_name": "Carlos Martínez Ruiz",
      "dni": "87654321X",
      "company": "Reformas Express S.L.",
      "plan_tier": "PRO"
    },
    "signer": {
      "role": "Firmante (Receptor)",
      "full_name": "María García López",
      "dni": "12345678Z",
      "identity_source": "declarada por el firmante",
      "identity_verified_against_official_source": false
    },
    "platform": {
      "role": "Sistema de Evidencia",
      "name": "PactoClick Evidence Ledger",
      "operator": "Inncrea Innovation Hub S.L."
    }
  },
  "audit_events": [
    {
      "index": 1,
      "event_type": "CREATED",
      "timestamp_utc": "2026-06-01T09:15:00.000Z",
      "server_timestamp": "2026-06-01T09:15:00.123Z",
      "actor_type": "creator",
      "actor_user_id": "d7f3a1b2-cdef-4567-89ab-0123456789ab",
      "description": "Pacto creado por el solicitante",
      "technical_evidence": {
        "server_ip_observed": "84.123.45.67",
        "browser_reported_ip": "84.123.45.67",
        "ip_source": "cf-connecting-ip",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
        "device_summary": "Chrome en Windows (sobremesa/tablet)",
        "timezone": "Europe/Madrid",
        "screen_resolution": "1920x1080",
        "language": "es-ES"
      },
      "agreement_hash": "a8f5f167f44f4964e6c998dee827110c5e9b8e4d5e2a3c1f8b7d6e5a4c3b2a1f",
      "previous_event_hash": null,
      "event_hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    },
    {
      "index": 2,
      "event_type": "VIEWED",
      "timestamp_utc": "2026-06-10T14:20:15.000Z",
      "server_timestamp": "2026-06-10T14:20:15.456Z",
      "actor_type": "signer",
      "description": "El firmante ha abierto el enlace del pacto",
      "technical_evidence": {
        "server_ip_observed": "192.168.1.100",
        "browser_reported_ip": "83.45.67.89",
        "ip_source": "x-forwarded-for",
        "user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Mobile/15E148 Safari/604.1",
        "device_summary": "Safari en iOS/iPadOS (móvil)",
        "timezone": "Europe/Madrid",
        "screen_resolution": "390x844",
        "language": "es-ES"
      },
      "previous_event_hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "event_hash": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2"
    },
    {
      "index": 3,
      "event_type": "ACCEPTED",
      "timestamp_utc": "2026-06-10T14:22:30.456Z",
      "server_timestamp": "2026-06-10T14:22:30.789Z",
      "actor_type": "signer",
      "description": "El firmante ha aceptado el pacto con todas las evidencias técnicas",
      "identity_declared": {
        "signer_name": "María García López",
        "signer_id": "12345678Z",
        "identity_source": "declarada por el firmante",
        "identity_verified_against_official_source": false
      },
      "technical_evidence": {
        "server_ip_observed": "192.168.1.100",
        "browser_reported_ip": "83.45.67.89",
        "ip_source": "x-forwarded-for",
        "user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Mobile/15E148 Safari/604.1",
        "device_summary": "Safari en iOS/iPadOS (móvil)",
        "timezone": "Europe/Madrid",
        "screen_resolution": "390x844",
        "language": "es-ES",
        "acquisition_channel": "LINK",
        "is_bot": false,
        "visitor_type": "human"
      },
      "gps_evidence": {
        "gps_status": "capturado",
        "latitude": 40.416775,
        "longitude": -3.703790,
        "accuracy_meters": 5,
        "source": "device_gps",
        "reverse_geocoded": {
          "formatted": "Calle Mayor, 15, 28013 Madrid, España",
          "town": "Madrid",
          "municipality": "Madrid",
          "state": "Comunidad de Madrid",
          "country": "España"
        },
        "maps_url": "https://www.openstreetmap.org/?mlat=40.416775&mlon=-3.703790#map=18/40.416775/-3.703790"
      },
      "selfie_evidence": {
        "captured": true,
        "content_type": "image/jpeg",
        "selfie_hash": "c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5",
        "redacted": true,
        "redaction_note": "Los datos biométricos (selfie) han sido redactados en este fichero de ejemplo por privacidad. En un JSON real, la imagen se incluye codificada en base64 o referenciada por hash SHA-256."
      },
      "acceptance_consent": {
        "pact_accepted": true,
        "gps_authorized": true,
        "selfie_authorized": true,
        "legal_notice_shown": true,
        "consent_text": "Al hacer clic en 'Aceptar', declaro que he leído y acepto las condiciones del pacto, autorizo la captura de mi IP, coordenadas GPS y selfie como evidencias de esta aceptación, y reconozco que estos datos se incorporarán a la cadena de auditoría del certificado."
      },
      "agreement_hash": "a8f5f167f44f4964e6c998dee827110c5e9b8e4d5e2a3c1f8b7d6e5a4c3b2a1f",
      "previous_event_hash": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2",
      "event_hash": "f6e7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f"
    }
  ],
  "integrity": {
    "algorithm": "SHA-256",
    "chain_type": "append-only_hash_chain",
    "total_events": 3,
    "final_hash": "f6e7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f",
    "agreement_hash": "a8f5f167f44f4964e6c998dee827110c5e9b8e4d5e2a3c1f8b7d6e5a4c3b2a1f",
    "selfie_hash": "c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5",
    "hash_chain_valid": true,
    "verification_url": "https://pactoclick.com/verify?id=c0a80121-7abc-4def-9012-3456789abcde"
  },
  "verification_instructions": {
    "manual": "Para verificar manualmente: 1) Recalcule el hash SHA-256 de cada evento (timestamp + datos + previous_event_hash). 2) Compruebe que el event_hash coincide. 3) Verifique que el previous_event_hash de cada evento coincide con el event_hash del evento anterior. 4) Confirme que la cadena no tiene saltos ni modificaciones.",
    "automatic": "Visite https://pactoclick.com/verify e introduzca el ID del pacto o suba este archivo JSON. El verificador recalculará automáticamente todos los hashes.",
    "cli": "sha256sum sample-evidence.json y compare el hash final con el campo integrity.final_hash."
  }
}
