Moteur de Formulaire et Gestion des Flux Multi-Parties
DocuSeal repose sur un éditeur PDF interactif capable d'injecter dynamiquement plus de vingt-quatre types de champs. Le module de construction, situé dans app/javascript/template_builder/, utilise une architecture orientée composants Vue.js pour offrir une expérience responsive. La gestion des règles conditionnelles et des calculs intégrés est centralisée dans field_settings.vue.
L'orchestration des signatures supporte des chaînes séquentielles ou des parallélisations. Le modèle Submission coordonne l'ordre d'intervention via la propriété submitter_sequence et applique des restrictions granulaires basées sur les profils métiers. Chaque interaction génère un journal d'audit immuable grâce au service lib/submissions/generate_audit_trail.rb, qui agrège les horodatages, empreintes réseau et métadonnées terminal.
Optimisation Mobile et Rendu Vectoriel
L'accès externe ne nécessite aucun client dédié. Le contrôleur expose un point de terminaison redéfini pour produire des liens de transfert sécurisés et leur équivalent graphique :
# app/controllers/templates_qr_link_controller.rb
def retrieve_qr_representation
return render plain: 'restricted', status: :forbidden unless @template.shareable?
target_endpoint = submission_entry_path(
slug_reference: @template.identifier,
domain_origin: link_router_host
)
encoder_instance = RQRCode::QRCode.new(target_endpoint, level: :quartile)
@svg_stream = encoder_instance.as_svg(
foreground: '111111',
background: 'fafafa',
path_type: 'all',
include_xml_header: false
)
render layout: false
end
Intrados Technologique et Persistances
L'application s'appuie sur Ruby on Rails 7, PostgreSQL pour les relations complexes et Active Storage pour la gestion du cycle de vie des binaires. Sidekiq absorbe les traitements CPU-intensifs (rendu PDF, dispatching). La segmentation tenant-aware découple explicitement Account et User, préparant l'environnement au multilocataire. Les protocoles RESTful, référencés dans docs/api/, exigent une authentification Bearer et retournent des sérialisations JSON strictes.
Côté présentation, Vue 3 et Tailwind CSS forment la stack UI. Turbo Drive fluidifie la navigation client-side, tandis que les modules dans app/javascript/submission_form/ intègrent le tracé manuscrit, les validateurs natifs et la persistance incrémentale.
Conteneurisation et Topologies de Déploiement
La livraison s'uniformise via docker-compose.yml. Une configuration isolant les dépendances critiques :
# docker-compose.platform.yml
services:
frontend-gateway:
image: registry.docuseal.io/core:v2-stable
ports:
- "9090:8080"
volumes:
- ./persisted-assets:/opt/docuseal/storage
depends_on:
- sql-primary
- queue-cache
sql-primary:
image: postgres:16-alpine
environment:
PGDATA: /var/lib/postgresql/data/pgdata
POSTGRES_DB: seal_platform
volumes:
- pg_volumes:/var/lib/postgresql/data
queue-cache:
image: redis:7-alpine
command: redis-server --maxmemory 256mb --policy allkeys-lru
Cette modularité autorise trois scénarios : développement léger (SQLite embarqué), production haute charge (PostgreSQL + Redis Sentinel), ou orchestration cloud (Helm chart public).
Systèmes Éventuels et Connecteurs Frontend
Au-delà des appels synchrones, un bus Webhook propage les changements d'état. La validation cryptographique des payloads repose sur HMAC-SHA256, configurée via webhook_validation_middleware.rb. Les événements triggerables incluent flow.completed, form.revoked, template.modifier.
Pour l'injection native, des wrappers officiels (@docuseal/react, @docuseal/vue) fournissent des composants fédérés communiquant via OAuth2 ou clés API rotatives.
Gouvernance, Chiffrement et Conformité
La traçabilité légale suit le standard PKCS#7 avec option de timestamping RFC 3161. Les attributs sensibles (captations graphiques, journaux intermédiaires) traversent un gestionnaire EncryptedFieldStrategy supportant le rotationnement AES-256. Les stratégies de rétention et les logs d'accès respectent les directives RGPD. Un job planifié permet l'anonymisation ou l'archivage froid conforme.
Tuning Requêtes et Observabilité
Les requêtes d'agrégation bénéficient d'indexes partielles ciblant les flux opérationnels :
-- Index composite filtré pour limiter la couverture aux documents actifs
CREATE INDEX idx_flow_account_ref_state
ON flows(owner_account_id, template_reference_id, initiated_at DESC)
WHERE lifecycle_phase = 'active' AND tombstone IS NULL;
Les convresions documentaires utilisent des workers Sidekiq priorisés. Les métriques Prometheus s'exposent via config/initializers/telemetry.rb. Les indicateurs sentinelles couvrent le latency P95, la taille des files d'attente, et la saturation disque. Les enomalies courantes proviennent de timeouts DB, de saturations S3-compatibles, ou de désalignements TLS.
Provisionnement et Validation Pré-Production
Initialisation rapide de l'environnement de travail :
git clone https://gitcode.com/GitHub_Trending/do/docuseal.git
cd docuseal
cp .env.template .env.custom
docker compose up --build
Exécution des validations fonctionnelles avant industrialisation :
bin/setup
bundle exec rspec spec/ --tag ~slow --format progress