espace-paie-odentas/supabase/migrations/20251028_signature_verifications.sql
odentas d5a110484b feat: Système de vérification de signature électronique avec QR code
- Page publique /verify/[id] affichant Odentas Seal, TSA, certificat
- API /api/signatures/create-verification pour créer preuves
- Générateur PDF de preuve avec QR code (jsPDF)
- Hook useSignatureProof() pour intégration facile
- Table Supabase signature_verifications avec RLS public
- Page de test /test-signature-verification
- Documentation complète du système

Les signataires peuvent scanner le QR code ou visiter l'URL pour vérifier l'authenticité et l'intégrité de leur document signé.
2025-10-29 09:22:01 +01:00

74 lines
2.3 KiB
SQL

-- Table pour stocker les preuves de signature vérifiables publiquement
CREATE TABLE IF NOT EXISTS signature_verifications (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Informations du document
document_name TEXT NOT NULL,
pdf_url TEXT NOT NULL,
signed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
-- Informations du signataire
signer_name TEXT NOT NULL,
signer_email TEXT NOT NULL,
-- Données cryptographiques
signature_hash TEXT NOT NULL, -- Hash SHA-256 du contenu signé
signature_hex TEXT NOT NULL, -- Signature complète en hexadécimal
-- Certificat
certificate_info JSONB NOT NULL DEFAULT '{
"issuer": "",
"subject": "",
"valid_from": "",
"valid_until": "",
"serial_number": ""
}'::jsonb,
-- Horodatage (TSA)
timestamp JSONB NOT NULL DEFAULT '{
"tsa_url": "",
"timestamp": "",
"hash": ""
}'::jsonb,
-- Statuts de vérification
verification_status JSONB NOT NULL DEFAULT '{
"seal_valid": true,
"timestamp_valid": true,
"document_intact": true
}'::jsonb,
-- Métadonnées
contract_id UUID REFERENCES contracts(id) ON DELETE SET NULL,
organization_id UUID REFERENCES organizations(id) ON DELETE CASCADE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Index pour recherche rapide
CREATE INDEX idx_signature_verifications_id ON signature_verifications(id);
CREATE INDEX idx_signature_verifications_contract ON signature_verifications(contract_id);
CREATE INDEX idx_signature_verifications_org ON signature_verifications(organization_id);
-- RLS: Les pages de vérification sont publiques
ALTER TABLE signature_verifications ENABLE ROW LEVEL SECURITY;
-- Politique publique en lecture (n'importe qui peut vérifier une signature)
CREATE POLICY "Vérifications publiques" ON signature_verifications
FOR SELECT
USING (true);
-- Seul le système peut créer/modifier
CREATE POLICY "Système peut gérer" ON signature_verifications
FOR ALL
USING (auth.uid() IS NOT NULL)
WITH CHECK (auth.uid() IS NOT NULL);
-- Trigger de mise à jour
CREATE TRIGGER update_signature_verifications_updated_at
BEFORE UPDATE ON signature_verifications
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
COMMENT ON TABLE signature_verifications IS 'Preuves de signature électronique vérifiables publiquement via URL/QR code';