FollowTheMoney JSON
Nuestros archivos JSON siguen el formato de entidades de FollowTheMoney: cada entidad tiene un id, un esquema y un conjunto de propiedades cuyos valores son siempre listas de cadenas de texto. Se escriben como líneas JSON (un objeto JSON completo por línea), por lo que pueden procesarse en flujo sin cargar todo el archivo.
Dos archivos
entities.ftm.jsoncontiene cada registro como una entidad, seguida en la línea siguiente por su entidadSanction: la inclusión en el registro de origen. Hay dos líneas por registro. Úselo para cargar un grafo o un almacén de entidades, donde la inclusión en la lista es un nodo independiente.targets.nested.jsoncontiene una línea por registro, con su inclusión en la lista anidada bajoproperties.sanctions. Úselo cuando necesite un objeto autónomo por cada parte incluida en la lista.
Ambos usan UTF-8. Consulte también la referencia del modelo, la estructura de entidades y las entidades planas y anidadas.
Campos de la entidad
- id
- ID del registro,
crown-<number>. Un registro corresponde a una fila de un registro de origen. La inclusión en la lista tiene el idcrown-<number>-sanction. En la API, el mismo registro se identifica solo con el número. - caption
- Nombre para mostrar.
- schema
Person,Company,Organization,Vessel,Airplane,LegalEntity(tipo no indicado por la fuente) oSanction.- properties
- Nombre de la propiedad asociado a una lista de valores de texto. Las propiedades ausentes se omiten.
- referents
- Otros ids fusionados con este. Actualmente es siempre una lista vacía; las fusiones se expresan con
canonical_id. - datasets
- Registro de origen como identificador corto, p. ej.,
ofac_sdn,uk_ofsi,paris_mou_banned. - first_seen
- Cuándo recopilamos el registro por primera vez (ISO 8601, con desfase UTC incluido).
- last_seen
- Cuándo se confirmó el registro por última vez en su fuente.
- last_change
- Cuándo cambió el registro por última vez. Actualmente coincide con
last_seen. - target
trueen las partes incluidas en listas. No está presente en las entidadesSanction.- canonical_id
- Está presente cuando hemos determinado que el registro y registros de otros registros corresponden a la misma parte:
crown-e-<merge id>. Agrupe por este campo para ver una misma parte en distintos registros.
Propiedades
| Propiedad | En | Contenido |
|---|---|---|
name | todos los registros | Nombre principal tal como se publica |
alias | todos los registros | Otros nombres y grafías |
topics | todos los registros | Uno de sanction, role.pep, debarment, reg.action |
birthDate | Persona | YYYY, YYYY-MM o YYYY-MM-DD, con la precisión publicada |
nationality | Persona | ISO 3166-1 alfa-2, en minúsculas |
country | otros registros | ISO 3166-1 alfa-2, en minúsculas |
imoNumber | Embarcación y otros | IMO seguido de siete dígitos |
sourceUrl | registros, Sanction | Enlace al registro o a la lista en el publicador |
notes | todos los registros | Otros datos publicados como texto (direcciones, identificadores, banderas, observaciones) |
entity | Sanction | id del registro incluido en la lista |
authority | Sanction | Nombre del registro de origen |
program | Sanction | Programa o base de la inclusión, en palabras del publicador |
listingDate | Sanction | Fecha de publicación o de inclusión, cuando el registro la indica |
sanctions | solo en el archivo anidado | Las entidades Sanction del registro |
Grado de completitud de cada propiedad
| Propiedad | Registros con ella | Proporción |
|---|---|---|
| Cargando… | ||
Ejemplo: entities.ftm.json
Dos líneas de la colección maritime: una embarcación y su inclusión en la lista (se agregaron saltos de línea para facilitar la lectura; cada objeto es una sola línea en el archivo).
{"id":"crown-380054154","caption":"PELIKAN","schema":"Vessel",
"properties":{"name":["PELIKAN"],"topics":["debarment"],"alias":["BALTIC ATLANT SHPG-LITHUANIA"],
"imoNumber":["IMO6922169"],"notes":["IMO 6922169 · Flag: Comoros · From: 09/12/2009 · ISM: BALTIC ATLANT SHPG-LITHUANIA"]},
"referents":[],"datasets":["paris_mou_banned"],"first_seen":"2026-09-24T11:38:49.104591+00:00",
"last_seen":"2026-09-24T11:38:49.104591+00:00","last_change":"2026-09-24T11:38:49.104591+00:00","target":true}
{"id":"crown-380054154-sanction","schema":"Sanction","caption":"Banned from Paris MoU ports — Multiple detentions",
"properties":{"entity":["crown-380054154"],"authority":["Paris MoU Banned"],
"program":["Banned from Paris MoU ports — Multiple detentions"]},
"datasets":["paris_mou_banned"],"first_seen":"2026-09-24T11:38:49.104591+00:00",
"last_seen":"2026-09-24T11:38:49.104591+00:00","last_change":"2026-09-24T11:38:49.104591+00:00"}
Ejemplo: targets.nested.json
El mismo registro en el archivo anidado: una línea, con la inclusión en la lista dentro de properties.sanctions.
{"id":"crown-380054154","caption":"PELIKAN","schema":"Vessel",
"properties":{"name":["PELIKAN"],"topics":["debarment"],"alias":["BALTIC ATLANT SHPG-LITHUANIA"],
"imoNumber":["IMO6922169"],"notes":["…"],
"sanctions":[{"id":"crown-380054154-sanction","schema":"Sanction",
"caption":"Banned from Paris MoU ports — Multiple detentions",
"properties":{"entity":["crown-380054154"],"authority":["Paris MoU Banned"],
"program":["Banned from Paris MoU ports — Multiple detentions"]},
"datasets":["paris_mou_banned"], "first_seen":"…","last_seen":"…","last_change":"…"}]},
"referents":[],"datasets":["paris_mou_banned"],"first_seen":"…","last_seen":"…","last_change":"…","target":true}
Lectura de los archivos
Lea una línea a la vez; las colecciones más grandes alcanzan varios gigabytes (default: —).
import json
with open("targets.nested.json", encoding="utf-8") as f:
for line in f:
e = json.loads(line)
names = e["properties"].get("name", []) + e["properties"].get("alias", [])
programmes = [p for s in e["properties"].get("sanctions", [])
for p in s["properties"].get("program", [])]
print(e["id"], e["schema"], names[0], programmes)
# group records that we have matched as the same party
jq -r 'select(.canonical_id) | [.canonical_id, .id, .caption] | @tsv' targets.nested.json | sort
Lo que los archivos aún no contienen
- Las direcciones, los documentos de identidad, la titularidad, los vínculos familiares y de asociados, los cargos desempeñados y las direcciones de billeteras de criptomonedas no son entidades ni propiedades independientes. Cuando un publicador los proporciona, solo se conservan como texto en
notes. referentssiempre está vacío; las fusiones aparecen solo a través decanonical_id.last_changees la fecha de la última confirmación, no una fecha de cambio real.- Los tipos de entidad se infieren cuando la fuente no indica ninguno, y algunos son incorrectos; consulte la metodología.
Última actualización 2026-10-03