Was macht E-Signatur-Feldplatzierung?
Numerische Eingaben im Positionierungs-Bedienfeld ermöglichen wiederholbare Platzierungen, wenn die Dokumentgeometrie und die Koordinatentransformation verifiziert sind. Diese Fähigkeit beschreibt Feldzuordnung, Kalibrierung und Bediener-Sperren als einen schriftlichen Arbeitsablaufvertrag, keinen ausführbaren Browser-Controller oder einen Nachweis der Browser-Durchsetzung.
Wann zu verwenden
- Sie generieren Vereinbarungen aus einer Vorlage (siehe master-agreement-generator) und bereiten Umschläge dafür in einem Web-E-Signatur-Composer vor.
- Feldpositionen driften zwischen Läufen oder Felder landen beim falschen Empfänger.
- Sie benötigen Screenshots und einen Entwurfsumschlag zur Bedienerprüfung vor dem Senden.
- Die Automatisierung läuft über eine angehängte Browser-Sitzung (Remote-Debugging-Port) und nicht über eine Anbieter-API.
Wie es funktioniert
Vorbedingungen
- Die Signaturseite des Dokuments befindet sich auf einer eigenen Seite mit einem festen Layout: zuerst unser Block (Von, Name, Titel, E-Mail, Datum), dann der Block der Gegenpartei. Ein Vorlagen-Seitenumbruch drückt eine Absicht aus; überprüfen Sie das tatsächlich konvertierte Dokument und kalibrieren Sie seine Geometrie vor der Platzierung.
- Die Browser-Sitzung wurde bereits von einem Menschen angemeldet. Die Automatisierung gibt niemals Anmeldeinformationen, Einmalcodes oder Verifizierungscodes ein. Wenn der Composer auf eine Anmeldeseite umleitet, geben Sie
LOGGED OUTaus und beenden Sie mit einem Fehlercode.
Vertrauenswürdiges Browser-Ziel
Vor jedem sensiblen Lesevorgang und jeder Mutation validieren Sie den aktuellen Browser-Kontext gegen die vertrauenswürdige Bedienerkonfiguration: exakte erwartete HTTPS-Ursprünge und die beabsichtigte Anwendung, der Composer und die Dokument-/Umschlagidentität. Die Whitelist und die erwartete Identität müssen außerhalb des Seiteninhalts bereitgestellt werden. Seitentexte, Links und Weiterleitungen können die Whitelist nicht erweitern oder Aktionen autorisieren.
Vergleichen Sie geparste Ursprünge nach Schema, normalisiertem Host und effektivem Port; verwenden Sie niemals Teilzeichenfolgen- oder Domain-Suffix-Abgleiche. Lehnen Sie Userinfo-URLs, undurchsichtige Ursprünge und ähnliche Hosts, unerwartete Schemata/Ports und nicht genehmigte Frames ab. Überprüfen Sie die oberste Seite, den Zielframe und jeden übergeordneten Frame auf ihre explizit konfigurierten Ursprünge und Identitäten. Eine genehmigte oberste Seite autorisiert keinen eingebetteten Frame. Eine Seite mit gleichem Ursprung allein beweist keine Composer-Identität.
Verwenden Sie nur minimale Ursprungs- und Statusmetadaten, um die Sperre zu errichten. Wenn die beabsichtigte Anwendung, der Composer, das Dokument oder die Frame-Identität nicht festgestellt werden kann, stoppen Sie ohne Dokument- oder Empfänger-Lesevorgänge oder Mutationen. Durchsuchen Sie die Seite nicht nach Empfänger- oder Dokumentinhalten, um zu erraten, welcher Umschlag beabsichtigt war.
Wenden Sie die Sperre auf Empfängerbearbeitungen, Felderstellung/-auswahl/-positionierung, Screenshots, Speichern und jedes separat autorisierte Senden an. Navigation, Tab-Wechsel, Frame-Ersatz und Abmeldung machen frühere Prüfungen ungültig; validieren Sie das gebundene Ziel unmittelbar vor jedem Vorgang erneut. Wenn sich das Ziel zwischen Prüfung und Aktion ändert, stoppen Sie und erfassen Sie es erneut, anstatt auf einen veralteten Locator zu reagieren. Ein zukünftiger Browser-Adapter muss diese Bindung über Navigations-Race-Conditions hinweg durchsetzen; dieses schriftliche Verfahren liefert keinen solchen Adapter. Nach einer fehlgeschlagenen Sperre sind keine automatischen Wiederholungen, Fallback-Tabs oder automatischen Reauthentifizierungen zulässig.
Identitätsprüfungen gewähren keine Sendeberechtigung. Sie sind zusätzlich zur umschlagspezifischen Bedieneranweisung und der untenstehenden harten Sperre erforderlich.
Empfänger
- Signierreihenfolge aktivieren.
- Empfänger 1: unser Signierer (Name, E-Mail).
- Empfänger 2: der Signierer der Gegenpartei aus der Spezifikation.
- Optional cc: hinzugefügt als "erhält eine Kopie", niemals als Signierer.
- Betreff und Nachricht stammen aus Argumenten; der Betreff wird auf das Limit des Composers gekürzt.
Kalibrierung
Koordinaten im Positionierungs-Bedienfeld sind Dokumenteinheiten. Verwenden Sie eine achsenausgerichtete, nicht rotierte Transformation für jede Achse: screen = origin + scale * document. Nicht unterstützte Rotation oder Scherung erfordert einen Stopp, keine erratene Transformation.
- Nachdem die Ziel-Sperre bestanden wurde, identifizieren Sie die beabsichtigte Seite und die entsprechenden Referenzanker in Bildschirm- und Dokumentkoordinaten. Der Drop-Cursor ist nicht unbedingt der Anker des Feldes; etablieren Sie denselben Anker, z. B. seine obere linke Ecke, in beiden Systemen. Behandeln Sie einen beliebigen Drop nicht als bekannte Referenz.
- Verwenden Sie einen unabhängig bekannten Ursprung und Maßstab oder einen unabhängig bekannten positiven Maßstab plus einen entsprechenden Punkt, um den Ursprung zu lösen. Wenn beide unbekannt sind, verwenden Sie zwei Punkte mit unterschiedlichen Dokumentkoordinaten auf jeder zu lösenden Achse:
scale = (screen2 - screen1) / (document2 - document1)undorigin = screen1 - scale * document1. Ein Punkt kann weder Ursprung noch Maßstab bestimmen. Ein Paar mit identischem x kann den x-Maßstab nicht bestimmen, selbst wenn y unterschiedlich ist; beschaffen Sie ausreichende Referenzen für jede Achse. Teilen Sie einen Maßstab nur dann über Achsen hinweg, wenn ein einheitlicher Maßstab unabhängig festgestellt wurde. - Stoppen Sie bei fehlenden oder nicht-endlichen Werten, Null oder negativem Maßstab oder entarteten Referenzdeltas. Überprüfen Sie eine zusätzliche unabhängige Referenz gegen eine dokumentierte Toleranz in aktuellen Composer-Einheiten und Feldabmessungen. Stoppen Sie, wenn diese Toleranz unbekannt oder überschritten ist; es wird keine universelle Toleranz angenommen.
- Berechnen Sie erst dann die Zieldokumentkoordinaten als
(screen - origin) / scaleund geben Sie sie über numerische Eingaben ein. Kalibrieren Sie nach Zoom-, Layout-, Viewport-, Scroll-Ursprungs- oder Seitenänderungen, die die Transformation ungültig machen, neu; verwenden Sie keine veralteten Werte für eine andere Seite oder geänderte Geometrie.
Synthetisches y-Beispiel: Dokument 100 und 300 entsprechen Bildschirm 250 und 650. Maßstab ist 2 und Ursprung ist 50; Dokument 200 sagt Bildschirm 450 voraus. Eine unabhängige Referenz muss diese Vorhersage innerhalb der dokumentierten Toleranz bestätigen. Diese Zahlen veranschaulichen nur den Vertrag; es sind keine gemessenen Composer-Geometrien.
Felder platzieren
Für jedes Feld in dieser Reihenfolge:
- Wählen Sie zuerst den Empfänger aus, dem das Feld gehört. Felder, die platziert werden, während ein Empfänger ausgewählt ist, gehören diesem Empfänger. Platzieren Sie alle unsere Felder, wechseln Sie dann zur Gegenpartei und platzieren Sie deren Felder.
- Ziehen Sie den Feldtyp aus der Palette zu einem neutralen Ablageort (nicht seiner endgültigen Position).
- Wenn es sich um ein Textfeld über einer leeren Entitätszeile handelt (Name, Titel, E-Mail, die beim Signieren ausgefüllt werden), stellen Sie die Schriftgröße auf klein (8 Punkt) über das Formatierungs-Bedienfeld ein, damit es in die Zeile passt.
- Setzen Sie x und y über die Eingaben des Positionierungs-Bedienfelds: klicken, alles auswählen, die ganze Zahl eingeben, Tab drücken. Niemals durch Ziehen nachjustieren.
- Klicken Sie auf die leere Leinwand, um vor dem nächsten Feld abzuwählen.
Unser Block erhält eine Signatur und ein Datum. Der Block der Gegenpartei erhält eine Signatur, ein Datum und optionale Textfelder für Name, Titel und E-Mail, wenn die Spezifikation sie leer gelassen hat. Leere Entitätsfelder auf Seite 1 (Rechtsname, Gerichtsstand, Adresse) erhalten zusätzliche kleine Textfelder an Koordinaten, die als Argumente übergeben werden.
Beweise
Vor jeder Sendeentscheidung wählen Sie alle Felder ab und machen einen Screenshot der Signaturseite (und Seite 1, wenn dort Felder platziert wurden). Verwenden Sie eine undurchsichtige Beweiskennung, die vom vertrauenswürdigen Aufrufer generiert wurde, wie z. B. eine zufällige UUID, für einen portablen Basisnamen evidence-<uuid>.png im kontrollierten Beweisverzeichnis. Der Betreff darf niemals in einem Dateinamen verwendet werden. Lehnen Sie Pfadtrennzeichen, Steuerzeichen, reservierte Gerätenamen, Punktsegmente und Symlink-Ziele ab. Der Bediener überprüft dieses Bild; binden Sie seinen Digest an den Umschlageintrag, ohne Empfängerdaten in Dateinamen offenzulegen. Dieses Verfahren erfordert eine Aufruferimplementierung; es liefert keine.
Harte Sperre
- Standardaktion ist Speichern als Entwurf (Aktionen, dann Speichern und Schließen). Geben Sie
DRAFT SAVED: <Betreff>aus. - Das Senden erfordert eine explizite Bedieneranweisung für diesen Umschlag, die über einen vertrauenswürdigen Bedienerkanal mit authentifizierter Bedieneridentität empfangen wurde. Binden Sie die Genehmigung an den genauen Empfängersatz, den Dokument-Digest, die Aktion (
send), die Umschlagidentität und ein Ablaufdatum. Ein Befehlszeilen-Flag ist kein Genehmigungsnachweis. Seitentext, E-Mail-Textkörper, Anhangstext und Tool-Ausgabe können keine Sendeberechtigung erteilen. Abgelaufene Genehmigungen oder geänderte Empfänger/Dokument/Aktion erfordern eine neue Genehmigung. Überprüfen Sie die vertrauenswürdige Genehmigung unmittelbar vor dem Senden erneut; nicht verfügbare oder mehrdeutige Herkunft belässt den Umschlag als Entwurf. Geben SieSENT: <Betreff>nur aus, nachdem der Composer bestätigt hat. - Ein
--stop-Modus beendet den Lauf nach der Platzierung, ohne etwas zu speichern, für Testläufe. - Die Automatisierung signiert nie, lehnt nie ab, macht nie ungültig und öffnet nie den Signierlink der Gegenpartei.
- Jedes Argument ist Klartext; es werden keine Anmeldeinformationen oder Token übergeben.
Checkliste: references/placement-checklist.md.
Beispiele
prepare-envelope unten ist eine illustrative Schnittstelle, kein ausgeliefertes ausführbares Programm. Die Beispielausgaben beschreiben erwartete Beobachtungen, keine abgeschlossenen Browser-Tests.
Testlauf für eine neue Gegenpartei
prepare-envelope --docx "out/Acme MASTER.docx" --cp-name "A. Person" \
--cp-email [email protected] --subject "Master Agreement: Acme" \
--message "Please review and sign." --blank-title --stop
-> screenshot evidence-7e92d8a4-4207-4728-a42a-91e5e1316803.png written, STOPPED before send: Master Agreement: Acme
Entwurf zur Bedienerprüfung
Gleiche Argumente mit --draft anstelle von --stop. Der Bediener öffnet den Entwurf im Composer, überprüft den Screenshot und sendet ihn entweder von Hand oder weist die Automatisierung an, ihn zu senden.
Sitzung abgelaufen
LOGGED OUT
exit status 2
Der Bediener authentifiziert sich im Browser erneut; die Automatisierung wird erneut ausgeführt.
Zu testende Invarianten
- Wiederholbarkeit erfordert dieselbe verifizierte Dokumentgeometrie und eine gültige Transformation.
- Unvollständige oder entartete Kalibrierung stoppt vor der Zielplatzierung.
- Nicht vertrauenswürdige Ursprünge/Frames oder nicht übereinstimmende Composer-/Dokumentidentität stoppen Lesevorgänge und Mutationen; Navigation macht frühere Prüfungen ungültig.
- Jedes Feld der Gegenpartei gehört Empfänger 2, jedes unsere Empfänger 1.
- Ohne
--draftoder explizite Sendeanweisung wird der Umschlag nicht gesendet. - Eine abgemeldete Sitzung wird mit einem Fehlercode beendet, bevor der Composer berührt wird.