---
title: "Sign"
description: "Elektronische Signaturen. Jede App ist ein Modul auf einem gemeinsamen Datenmodell."
canonical: "https://obop-platform.sliplane.app/de/apps/sign/"
lang: "de"
---

# Sign

## Wofür sie gedacht ist

Manage templates and signature requests through draft, sent, signed, declined and expired, and record the document hash that was signed. The platform cannot yet lock a record, so a signed request is immutable by convention only.

## Was das Paket leistet und was nicht

Document templates and signature requests with a draft, sent, signed, declined, expired flow. A request names the signer (personal data) and keeps the signature evidence as references. A signed request is immutable by convention only: the platform cannot yet lock a record, so nobody should edit a request once it is signed, and the document_hash records what was signed. Sending and recording a signature need a human approval; agents may only propose them.

## Modelle

### `sign_template`

A document that can be sent out for signature

Lesegruppe: `sign.user`. Schreibgruppe: `sign.manager`.

| Feld | Art | Datenklasse | Personenbezogene Daten | Gruppe | Agenten sehen | Beschreibung |
|---|---|---|---|---|---|---|
| `name` | text | `none` | nein | `sign.user` | im Klartext | Template name, for example Employment contract |
| `description` | longtext | `none` | nein | `sign.user` | im Klartext | What the document is for and who signs it |
| `body` | longtext | `none` | nein | `sign.user` | im Klartext | The document text, or a reference to where the file is kept |
| `signer_role` | text | `none` | nein | `sign.user` | im Klartext | Role of the person who signs, for example Customer |
| `active` | bool | `none` | nein | `sign.user` | im Klartext | Whether new requests can use the template |

### `sign_request`

A request for one person to sign one document

Lesegruppe: `sign.user`. Schreibgruppe: `sign.user`.

| Feld | Art | Datenklasse | Personenbezogene Daten | Gruppe | Agenten sehen | Beschreibung |
|---|---|---|---|---|---|---|
| `template_id` | ref → sign_template | `none` | nein | `sign.user` | im Klartext | The document to sign |
| `title` | text | `none` | nein | `sign.user` | im Klartext | Subject shown to the signer |
| `message` | longtext | `none` | nein | `sign.user` | im Klartext | Message shown to the signer in the request |
| `signer_name` | text | `internal` | ja | `sign.user` | maskiert | Name of the person who must sign |
| `signer_email` | text | `internal` | ja | `sign.user` | maskiert | Email address the request is sent to |
| `sent_on` | date | `none` | nein | `sign.user` | im Klartext | Day the request was sent (YYYY-MM-DD) |
| `expires_on` | date | `none` | nein | `sign.user` | im Klartext | Last day the request can be signed (YYYY-MM-DD) |
| `signed_on` | date | `none` | nein | `sign.user` | im Klartext | Day the document was signed (YYYY-MM-DD) |
| `signer_ip` | text | `internal` | ja | `sign.manager` | maskiert | IP address the signature came from (evidence) |
| `signer_user_agent` | text | `internal` | ja | `sign.manager` | maskiert | Browser the signature was made with (evidence) |
| `signature_reference` | text | `none` | nein | `sign.manager` | im Klartext | Where the signature image or certificate is stored |
| `document_hash` | text | `none` | nein | `sign.manager` | im Klartext | SHA-256 hash (hex) of the signed document, to prove it was not changed afterwards |
| `state` | select (draft, sent, signed, declined, expired) | `none` | nein | `sign.user` | im Klartext | Request status: draft, sent, signed, declined, expired |

## Workflows

### `sign_request`

| Aktion | Bewegt | Wer sie ausführen darf | Freigabe |
|---|---|---|---|
| `sign_request.send` | state: draft → sent | `sign.user` | ja |
| `sign_request.sign` | state: sent → signed | `sign.manager` | ja |
| `sign_request.decline` | state: sent → declined | `sign.user` | nein |
| `sign_request.expire` | state: sent → expired | `sign.user` | nein |

## Berechtigungsgruppen

Von dieser App verwendete Gruppen:

- `sign.manager`
- `sign.user`

## Freigabeschritte

Schritte, die ein Agent nur vorschlagen kann:

- `sign_request.send`
- `sign_request.sign`

## Was Agenten tun können und was nicht

Ein Agent kann Datensätze dieser App lesen, durchsuchen, anlegen und aktualisieren sowie Aktionen ausführen, die keine Freigabe brauchen, und zwar innerhalb der Berechtigungsgruppen seines Tokens.

Diese Schritte kann er nur vorschlagen, und eine Person muss sie freigeben: `sign_request.send`, `sign_request.sign`, `sign_template.delete`, `sign_request.delete`.

Personenbezogene Daten werden als Platzhalter maskiert: `sign_request.signer_name`, `sign_request.signer_email`, `sign_request.signer_ip`, `sign_request.signer_user_agent`.

## Abhängigkeiten

Keine.

## Installation

Installieren Sie sie in der App Customize (Marktplatz) oder über die Kommandozeile:

```bash
obop modules install-from sign
```

Erfordert eine Datenbank und Administratorrechte.

## Selbst bauen

[Der Modulleitfaden zeigt, wie Apps wie diese geschrieben werden](/de/docs/reference/module-manifest/)
