---
title: "Sign"
description: "Firmas electrónicas. Cada aplicación es un módulo sobre un único modelo de datos."
canonical: "https://obop-platform.sliplane.app/es/apps/sign/"
lang: "es"
---

# Sign

## Para qué sirve

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.

## Qué hace y qué no hace el paquete

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.

## Modelos

### `sign_template`

A document that can be sent out for signature

Grupo de lectura: `sign.user`. Grupo de escritura: `sign.manager`.

| Campo | Tipo | Clase de datos | Datos personales | Grupo | Los agentes ven | Descripción |
|---|---|---|---|---|---|---|
| `name` | text | `none` | no | `sign.user` | en claro | Template name, for example Employment contract |
| `description` | longtext | `none` | no | `sign.user` | en claro | What the document is for and who signs it |
| `body` | longtext | `none` | no | `sign.user` | en claro | The document text, or a reference to where the file is kept |
| `signer_role` | text | `none` | no | `sign.user` | en claro | Role of the person who signs, for example Customer |
| `active` | bool | `none` | no | `sign.user` | en claro | Whether new requests can use the template |

### `sign_request`

A request for one person to sign one document

Grupo de lectura: `sign.user`. Grupo de escritura: `sign.user`.

| Campo | Tipo | Clase de datos | Datos personales | Grupo | Los agentes ven | Descripción |
|---|---|---|---|---|---|---|
| `template_id` | ref → sign_template | `none` | no | `sign.user` | en claro | The document to sign |
| `title` | text | `none` | no | `sign.user` | en claro | Subject shown to the signer |
| `message` | longtext | `none` | no | `sign.user` | en claro | Message shown to the signer in the request |
| `signer_name` | text | `internal` | sí | `sign.user` | enmascarado | Name of the person who must sign |
| `signer_email` | text | `internal` | sí | `sign.user` | enmascarado | Email address the request is sent to |
| `sent_on` | date | `none` | no | `sign.user` | en claro | Day the request was sent (YYYY-MM-DD) |
| `expires_on` | date | `none` | no | `sign.user` | en claro | Last day the request can be signed (YYYY-MM-DD) |
| `signed_on` | date | `none` | no | `sign.user` | en claro | Day the document was signed (YYYY-MM-DD) |
| `signer_ip` | text | `internal` | sí | `sign.manager` | enmascarado | IP address the signature came from (evidence) |
| `signer_user_agent` | text | `internal` | sí | `sign.manager` | enmascarado | Browser the signature was made with (evidence) |
| `signature_reference` | text | `none` | no | `sign.manager` | en claro | Where the signature image or certificate is stored |
| `document_hash` | text | `none` | no | `sign.manager` | en claro | SHA-256 hash (hex) of the signed document, to prove it was not changed afterwards |
| `state` | select (draft, sent, signed, declined, expired) | `none` | no | `sign.user` | en claro | Request status: draft, sent, signed, declined, expired |

## Flujos de trabajo

### `sign_request`

| Acción | Mueve | Quién puede ejecutarla | Aprobación |
|---|---|---|---|
| `sign_request.send` | state: draft → sent | `sign.user` | sí |
| `sign_request.sign` | state: sent → signed | `sign.manager` | sí |
| `sign_request.decline` | state: sent → declined | `sign.user` | no |
| `sign_request.expire` | state: sent → expired | `sign.user` | no |

## Grupos de permisos

Grupos que usa esta aplicación:

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

## Pasos con aprobación

Pasos que un agente solo puede proponer:

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

## Qué pueden y qué no pueden hacer los agentes

Un agente puede leer, buscar, crear y actualizar registros de esta aplicación, y ejecutar las acciones que no requieren aprobación, dentro de los grupos de permisos de su token.

Solo puede proponer estos pasos, y una persona debe aprobarlos: `sign_request.send`, `sign_request.sign`, `sign_template.delete`, `sign_request.delete`.

Los datos personales se enmascaran como tokens marcadores: `sign_request.signer_name`, `sign_request.signer_email`, `sign_request.signer_ip`, `sign_request.signer_user_agent`.

## Dependencias

Ninguna.

## Instalación

Instálala desde la aplicación Customize (Marketplace) o desde la línea de comandos:

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

Requiere una base de datos y derechos de administrador.

## Crea la tuya

[La guía de módulos explica cómo se escriben aplicaciones como esta](/es/docs/reference/module-manifest/)
