Modelo de datos relacionales¶
Catálogo de tablas y columnas de SQLAlchemy estática. La inspección SQLite de Runtime sigue siendo autorizada para una instancia instalada, especialmente después de migraciones ligeras.
Regenerar con python pipeline/skills/technical_documentation/scripts/generate.py.
Descubierta 19 tablas cartografiadas y 159 columnas cartografiadas.
Resumen del cuadro¶
api_tokens — ApiToken¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | — | — | lambda : str(uuid.uuid4()) | backend/modelos/management.py:99 |
user_id |
String |
— | no | — | Sí | users.id |
— | backend/modelos/management.py:100 |
workspace_id |
String |
— | Sí | — | — | — | — | `backend/modelos/management.py:101' |
name |
String |
— | no | — | — | — | — | backend/modelos/management.py:102 |
token_hash |
String |
— | no | Sí | Sí | — | retacado | backend/modelos/management.py:103 |
token_prefix |
String |
— | no | — | — | — | retacado | backend/modelos/management.py:104 |
scopes |
String |
— | — | — | — | — | 'Leer, escribir' | backend/modelos/management.py:105 |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/management.py:106 |
last_used_at |
DateTime(timezone=True) |
— | Sí | — | — | — | — | backend/modelos/management.py:107 |
revoked |
Integer |
— | — | — | — | — | 0 | backend/modelos/management.py:108 |
articles — Article¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
Integer |
Sí | — | — | Sí | — | — | backend/modelos/lector.py:26 |
source_id |
Integer |
— | — | — | — | feed_sources.id |
— | `backend/modelos/lector.py:27 ' |
title |
String |
— | — | — | — | — | — | backend/modelos/lector.py:28 |
url |
String |
— | — | Sí | — | — | — | `backend/modelos/lector.py:29' |
content |
Text |
— | — | — | — | — | — | backend/modelos/reader.py:34 |
full_content |
Text |
— | Sí | — | — | — | — | `backend/modelos/reader.py:35' |
published_at |
DateTime(timezone=True) |
— | — | — | — | — | — | backend/modelos/reader.py:36 |
is_read |
Boolean |
— | — | — | — | — | Falso | `backend/modelos/reader.py:37' |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | `backend/modelos/reader.py:38' |
contacts — Contact¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | — | — | lambda : str(uuid.uuid4()) | backend/modelos/contact.py:34 |
workspace_id |
String |
— | no | — | Sí | workspaces.id |
— | `backend/modelos/contact.py:35' |
type |
String |
— | no | — | — | — | ContactType.PERSONAL.value | `backend/modelos/contact.py:38' |
name |
String |
— | no | — | — | — | — | backend/modelos/contact.py:40 |
email |
String |
— | no | — | Sí | — | — | backend/modelos/contact.py:41 |
phone |
String |
— | Sí | — | — | — | — | backend/modelos/contact.py:42 |
company |
String |
— | Sí | — | — | — | — | `backend/modelos/contact.py:44' |
job_title |
String |
— | Sí | — | — | — | — | backend/modelos/contact.py:45 |
address |
String |
— | Sí | — | — | — | — | backend/modelos/contact.py:46 |
notes |
Text |
— | Sí | — | — | — | — | backend/modelos/contact.py:47 |
emails |
Text |
— | — | — | — | — | '[]' | backend/modelos/contact.py:49 |
phones |
Text |
— | — | — | — | — | '[]' | backend/modelos/contact.py:50 |
addresses |
Text |
— | — | — | — | — | '[]' | backend/modelos/contact.py:51 |
google_resource_name |
String |
— | Sí | — | Sí | — | — | backend/modelos/contact.py:53 |
apple_resource_id |
String |
— | Sí | — | — | — | — | backend/modelos/contact.py:54 |
last_synced_at |
DateTime(timezone=True) |
— | Sí | — | — | — | — | backend/modelos/contact.py:56 |
source |
String |
— | no | — | — | — | ContactoFuente.LOCAL.value | backend/modelos/contact.py:57 |
photo_url |
String |
— | Sí | — | — | — | — | backend/modelos/contact.py:58 |
tags |
String |
— | — | — | — | — | '[]' | backend/modelos/contact.py:60 |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/contact.py:62 |
updated_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/contact.py:63 |
feed_sources — FeedSource¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
Integer |
Sí | — | — | Sí | — | — | backend/modelos/lector.py:14 |
name |
String |
— | — | — | Sí | — | — | `backend/modelos/lector.py:15 ' |
url |
String |
— | — | Sí | Sí | — | — | backend/modelos/reader.py:16 |
category |
String |
— | — | — | Sí | — | — | backend/modelos/lector.py:17 |
type |
String |
— | — | — | — | — | 'rss' | backend/modelos/reader.py:18 |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | `backend/modelos/lector.py:19 ' |
hidden_events — HiddenEvent¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
event_id |
String |
Sí | — | — | Sí | — | — | backend/modelos/calendar.py:13 |
user_id |
String |
— | Sí | — | Sí | — | — | backend/modelos/calendar.py:14 |
hidden_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/calendar.py:15 |
mail_message_tags — MailMessageTag¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
message_id |
String |
Sí | — | — | — | — | — | backend/modelos/mail.py:45 |
tag_id |
String |
Sí | — | — | — | mail_tags.id |
— | backend/modelos/mail.py:46 |
account_email |
String |
— | — | — | — | — | '' | backend/modelos/mail.py:47 |
subject |
String |
— | — | — | — | — | '' | backend/models/mail.py:48 |
sender |
String |
— | — | — | — | — | '' | `backend/modelos/mail.py:49' |
date_str |
String |
— | — | — | — | — | '' | backend/modelos/mail.py:50 |
mail_tags — MailTag¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | — | — | lambda : str(uuid.uuid4()) | backend/modelos/mail.py:36 |
name |
String |
— | no | — | — | — | — | backend/modelos/mail.py:37 |
color |
String |
— | — | — | — | — | '#3b82f6' | `backend/modelos/mail.py:38' |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | `backend/modelos/mail.py:39' |
mail_views — MailView¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | — | — | lambda : str(uuid.uuid4()) | backend/modelos/mail.py:56 |
name |
String |
— | no | — | — | — | — | `backend/modelos/mail.py:57 ' |
fields |
Text |
— | — | — | — | — | '[]' | backend/modelos/mail.py:58 |
filters |
Text |
— | — | — | — | — | '[]' | `backend/modelos/mail.py:59 ' |
filter_logic |
String |
— | — | — | — | — | Y | backend/modelos/mail.py:60 |
group_by |
String |
— | — | — | — | — | 'ninguno' | backend/models/mail.py:61 |
sort_by |
String |
— | — | — | — | — | Fecha | backend/modelos/mail.py:62 |
sort_dir |
String |
— | — | — | — | — | 'desc' | backend/modelos/mail.py:63 |
actions |
Text |
— | — | — | — | — | "["archivo"","trash"","marca_leed"]' | backend/modelos/mail.py:64 |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/models/mail.py:65 |
updated_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/models/mail.py:66 |
memberships — Membership¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
user_id |
String |
Sí | — | — | — | users.id |
— | backend/modelos/management.py:54 |
workspace_id |
String |
Sí | — | — | — | workspaces.id |
— | backend/modelos/management.py:55 |
role |
String |
— | — | — | — | — | UserRole.VIEWER | backend/modelos/management.py:56 |
permissions |
String |
— | — | — | — | — | {"capacidades": ["leer"]} | backend/modelos/management.py:57 |
joined_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/management.py:58 |
messages — MailMessage¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | Sí | — | — | backend/modelos/mail.py:13 |
thread_id |
String |
— | — | — | Sí | — | — | backend/models/mail.py:14 |
account_email |
String |
— | — | — | Sí | — | — | backend/models/mail.py:15 |
subject |
String |
— | — | — | — | — | — | backend/models/mail.py:16 |
sender |
String |
— | — | — | — | — | — | backend/models/mail.py:17 |
recipient |
String |
— | — | — | — | — | — | backend/models/mail.py:18 |
cc |
String |
— | — | — | — | — | — | backend/models/mail.py:19 |
bcc |
String |
— | — | — | — | — | — | backend/models/mail.py:20 |
date |
String |
— | — | — | — | — | — | backend/models/mail.py:21 |
timestamp |
Integer |
— | — | — | — | — | — | backend/models/mail.py:22 |
body_text |
Text |
— | — | — | — | — | — | backend/modelos/mail.py:23 |
body_html |
Text |
— | — | — | — | — | — | backend/modelos/mail.py:24 |
snippet |
String |
— | — | — | — | — | — | backend/modelos/mail.py:25 |
is_read |
Boolean |
— | — | — | — | — | Falso | backend/modelos/mail.py:26 |
is_starred |
Boolean |
— | — | — | — | — | Falso | backend/modelos/mail.py:27 |
category |
String |
— | — | — | — | — | — | backend/modelos/mail.py:28 |
labels |
String |
— | — | — | — | — | — | `backend/modelos/mail.py:29' |
raw_json |
Text |
— | — | — | — | — | — | backend/modelos/mail.py:30 |
newsletter_account — NewsletterAccount¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
Integer |
Sí | — | — | Sí | — | — | `backend/modelos/reader.py:47' |
mail_server |
String |
— | — | — | — | — | '' | `backend/modelos/reader.py:48' |
mail_port |
Integer |
— | — | — | — | — | 110 | `backend/modelos/lector.py:49' |
mail_ssl |
String |
— | — | — | — | — | 'starttls' | `backend/modelos/reader.py:51' |
email |
String |
— | — | — | — | — | '' | `backend/modelos/lector.py:52' |
password |
String |
— | — | — | — | — | retacado | `backend/modelos/lector.py:53' |
delete_after_ingest |
Boolean |
— | — | — | — | — | Verdadero | backend/modelos/reader.py:54 |
updated_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/reader.py:55 |
notifications — Notification¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | — | — | lambda : str(uuid.uuid4()) | backend/modelos/notificación.py:14 |
workspace_id |
String |
— | no | — | Sí | workspaces.id |
— | backend/modelos/notificación.py:15 |
level |
String |
— | no | — | — | — | «INFO» | backend/modelos/notificación.py:17 |
title |
String |
— | no | — | — | — | — | backend/modelos/notificación.py:18 |
message |
Text |
— | no | — | — | — | — | backend/modelos/notificación.py:19 |
is_read |
Boolean |
— | — | — | — | — | Falso | `backend/modelos/notificación.py:20 ' |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/notificación.py:24 |
pdf_annotations — PdfAnnotation¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
Integer |
Sí | — | — | Sí | — | — | `backend/models/pdf_anotación.py:24». |
source_uri |
String |
— | no | — | Sí | — | — | `backend/models/pdf_anotación.py:28' |
page |
Integer |
— | no | — | — | — | — | backend/models/pdf_anotación.py:30 |
type |
String |
— | no | — | — | — | — | `backend/models/pdf_anotación.py:34». |
color |
String |
— | — | — | — | — | '#ffeb3b' | `backend/models/pdf_anotación.py:36». |
rects_json |
Text |
— | Sí | — | — | — | — | `backend/models/pdf_anotación.py:40». |
text |
Text |
— | Sí | — | — | — | — | `backend/models/pdf_anotación.py:42». |
comment |
Text |
— | Sí | — | — | — | — | `backend/models/pdf_anotación.py:44». |
tags |
String |
— | Sí | — | — | — | — | `backend/models/pdf_anotación.py:47». |
managed_key |
String |
— | Sí | Sí | Sí | — | — | `backend/models/pdf_anotación.py:51». |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | `backend/models/pdf_anotación.py:53». |
updated_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | `backend/models/pdf_anotación.py:57». |
share_links — ShareLink¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | — | — | lambda : uuid.uuid4().hex | backend/modelos/management.py:119 |
page_id |
String |
— | no | — | Sí | — | — | backend/modelos/management.py:120 |
workspace_id |
String |
— | no | — | — | — | — | backend/modelos/management.py:121 |
vault_id |
String |
— | Sí | — | — | — | — | backend/modelos/management.py:127 |
created_by |
String |
— | — | — | — | — | — | backend/modelos/management.py:128 |
permission |
String |
— | — | — | — | — | 'ver' | backend/modelos/management.py:129 |
expires_at |
DateTime(timezone=True) |
— | Sí | — | — | — | — | backend/modelos/management.py:130 |
revoked |
Integer |
— | — | — | — | — | 0 | backend/modelos/manejo.py:131 |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/management.py:132 |
task_execution_history — TaskExecutionHistory¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | — | — | lambda : str(uuid.uuid4()) | backend/modelos/scheduler.py:12 |
task_name |
String |
— | no | — | Sí | — | — | backend/modelos/scheduler.py:13 |
description |
String |
— | — | — | — | — | — | backend/modelos/scheduler.py:14 |
status |
String |
— | no | — | — | — | — | backend/modelos/scheduler.py:15 |
message |
Text |
— | — | — | — | — | — | backend/modelos/scheduler.py:16 |
started_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/scheduler.py:18 |
finished_at |
DateTime(timezone=True) |
— | — | — | — | — | — | backend/modelos/scheduler.py:19 |
duration_seconds |
Float |
— | — | — | — | — | — | `backend/modelos/scheduler.py:20 ' |
users — User¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | — | — | lambda : str(uuid.uuid4()) | backend/modelos/management.py:20 |
email |
String |
— | no | Sí | Sí | — | — | backend/modelos/management.py:21 |
name |
String |
— | — | — | — | — | — | backend/modelos/management.py:22 |
avatar_url |
String |
— | — | — | — | — | — | backend/modelos/management.py:23 |
password_hash |
String |
— | Sí | — | — | — | retacado | backend/modelos/management.py:28 |
auto_provisioned |
Boolean |
— | no | — | — | — | Falso | backend/modelos/management.py:35 |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/management.py:36 |
vault_access — VaultAccess¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | — | — | lambda : str(uuid.uuid4()) | backend/modelos/management.py:78 |
vault_id |
String |
— | no | — | — | vaults.id |
— | backend/modelos/management.py:79 |
user_id |
String |
— | no | — | — | users.id |
— | backend/modelos/management.py:80 |
workspace_id |
String |
— | no | — | — | workspaces.id |
— | backend/modelos/management.py:81 |
permissions |
String |
— | — | — | — | — | {"capacidades": ["leer"]} | backend/modelos/management.py:83 |
granted_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/management.py:84 |
vaults — Vault¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | — | — | lambda : str(uuid.uuid4()) | backend/modelos/management.py:66 |
workspace_id |
String |
— | — | — | — | workspaces.id |
— | backend/modelos/management.py:67 |
name |
String |
— | no | — | — | — | — | backend/modelos/management.py:68 |
path_override |
String |
— | — | — | — | — | — | backend/modelos/management.py:69 |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/management.py:70 |
workspaces — Workspace¶
| Columna | Tipo | Clave principal | Nublable | Único | Índice | Clave extranjera | Código fuente | Fuente |
|---|---|---|---|---|---|---|---|---|
id |
String |
Sí | — | — | — | — | lambda : str(uuid.uuid4()) | backend/modelos/management.py:43 |
name |
String |
— | no | — | — | — | — | backend/modelos/management.py:44 |
slug |
String |
— | — | Sí | Sí | — | — | backend/modelos/manejo.py:45 |
created_at |
DateTime(timezone=True) |
— | — | — | — | — | lambda : datetime.now (timezone.utc) | backend/modelos/management.py:46 |