{
  "name": "Beneficial ownership",
  "nodes": [
    {
      "id": "n_company",
      "name": "Company",
      "labels": ["Company", "LegalEntity", "InterestedParty"],
      "shape": "circle",
      "description": "A registered legal entity that can both own and be owned. Carrying both roles on one node is what makes an ownership chain expressible: the company you are asking about and the holding company three steps above it are the same kind of thing, and a model that separates them cannot follow the chain.",
      "properties": [
        { "name": "entityId", "type": "uuid", "key": true, "required": true, "unique": true, "indexed": true, "description": "Surrogate identifier. Company numbers are unique only within their own register, so two entities in different jurisdictions can share one." },
        { "name": "companyNumber", "type": "string", "required": true, "indexed": true, "description": "Registration number issued by the company's own register. Unique there, not globally, which is exactly why it is not the key." },
        { "name": "name", "type": "string", "required": true, "indexed": true, "description": "Registered name. Changes more often than outsiders expect, and a renamed shell is a common way to break a paper trail." },
        { "name": "entityType", "type": "enum", "required": true, "default": "registered_entity", "description": "Kind of entity, following the Beneficial Ownership Data Standard: registered_entity, state_body, arrangement or anonymous_entity. The last two exist because not every link in a chain is an ordinary company." },
        { "name": "incorporatedOn", "type": "date", "description": "Date of incorporation. A chain of entities all incorporated within days of each other is a structure, not a coincidence." },
        { "name": "dissolvedOn", "type": "date", "description": "Date the entity ceased to exist. Blank while it is live. Dissolved entities stay in the model because they explain historic ownership." },
        { "name": "status", "type": "enum", "required": true, "default": "active", "description": "Current standing on the register: active, dormant, dissolved or struck_off. Struck off usually means it stopped filing, not that anything was resolved." },
        { "name": "isListed", "type": "boolean", "default": "false", "description": "True for a publicly listed company. Listed entities are commonly exempt from beneficial-ownership disclosure, so a chain that reaches one often stops there by law rather than by secrecy." }
      ]
    },
    {
      "id": "n_person",
      "name": "Person",
      "labels": ["Person", "InterestedParty"],
      "shape": "circle",
      "description": "A natural person who holds or controls an interest. The endpoint every beneficial-ownership enquiry is trying to reach: the question is never which company owns this company, it is which human being ultimately benefits.",
      "properties": [
        { "name": "personId", "type": "uuid", "key": true, "required": true, "unique": true, "indexed": true, "description": "Surrogate identifier. Names are neither unique nor stable, and registers deliberately publish too little to identify someone by attributes alone." },
        { "name": "fullName", "type": "string", "required": true, "indexed": true, "description": "Name as filed. Transliteration and name order vary between registers, which is why matching people across jurisdictions is hard." },
        { "name": "birthMonth", "type": "integer", "description": "Month of birth only. Public registers publish month and year but withhold the day, so that the record disambiguates people without becoming an identity-theft resource. Modelled as filed rather than as a full date." },
        { "name": "birthYear", "type": "integer", "description": "Year of birth. Together with the month, enough to distinguish two people of the same name and no more." },
        { "name": "nationality", "type": "string", "description": "ISO 3166-1 alpha-2 code of declared nationality. Self-declared, and multiple nationalities are common among the people these registers exist to surface." },
        { "name": "isPoliticallyExposed", "type": "boolean", "default": "false", "description": "True for a politically exposed person — someone holding or close to public office. Not an accusation; it raises the level of diligence required." }
      ]
    },
    {
      "id": "n_trust",
      "name": "Trust",
      "labels": ["Trust", "Arrangement", "InterestedParty"],
      "shape": "circle",
      "description": "A legal arrangement holding assets for beneficiaries. Modelled separately from a company because it has no owners at all — it has a settlor, trustees and beneficiaries, and asking who owns a trust is a category error. The classic point at which an ownership chain stops looking like ownership.",
      "properties": [
        { "name": "arrangementId", "type": "uuid", "key": true, "required": true, "unique": true, "indexed": true, "description": "Surrogate identifier. Many arrangements have no registration number anywhere." },
        { "name": "name", "type": "string", "required": true, "description": "Name of the arrangement, where it has one." },
        { "name": "arrangementType", "type": "enum", "required": true, "default": "trust", "description": "Kind of arrangement: trust, foundation, partnership or other. Foundations behave like trusts in some jurisdictions and like companies in others." },
        { "name": "establishedOn", "type": "date", "description": "Date the arrangement was created." },
        { "name": "governingLawCode", "type": "string", "description": "ISO 3166-1 alpha-2 code of the law the arrangement is governed by, which is frequently not where any of its parties live." }
      ]
    },
    {
      "id": "n_unknown_party",
      "name": "UnknownParty",
      "labels": ["UnknownParty", "InterestedParty"],
      "shape": "circle",
      "description": "A placeholder for an interest that exists but whose holder is not known. Deliberately a node rather than a blank: 'this company has a beneficial owner and nobody will say who' is a finding, not missing data, and a model that represents it as absence throws away the most important thing the register recorded.",
      "properties": [
        { "name": "unknownPartyId", "type": "uuid", "key": true, "required": true, "unique": true, "indexed": true, "description": "Surrogate identifier, so that the same undisclosed interest can be referred to and tracked over time." },
        { "name": "reasonUnknown", "type": "enum", "required": true, "default": "not_disclosed", "description": "Why the holder is unidentified, following the Beneficial Ownership Data Standard: not_disclosed, no_beneficial_owners, subject_unable_to_identify, party_refused_to_provide or unknown_to_publisher. The distinction matters — 'there are none' is a very different claim from 'they would not say'." },
        { "name": "describedAs", "type": "string", "description": "How the filing itself described the holder, verbatim, such as 'a discretionary trust'. Often the only usable lead." },
        { "name": "firstReportedOn", "type": "date", "description": "When the gap was first recorded. A gap that persists across years of filings is a different problem from a new one." }
      ]
    },
    {
      "id": "n_jurisdiction",
      "name": "Jurisdiction",
      "labels": ["Jurisdiction"],
      "shape": "square",
      "description": "A state or territory with its own company law and register. Reference data, and load-bearing: whether an ownership chain can be followed at all is mostly a function of which jurisdictions it passes through.",
      "properties": [
        { "name": "jurisdictionCode", "type": "string", "key": true, "required": true, "unique": true, "indexed": true, "description": "ISO 3166 code, including subdivisions where company law is set below national level, as it is in the United States." },
        { "name": "name", "type": "string", "required": true, "description": "Name of the jurisdiction." },
        { "name": "hasPublicOwnershipRegister", "type": "boolean", "required": true, "default": "false", "description": "Whether beneficial ownership is published rather than merely collected. The single fact that most determines whether a chain can be traced." },
        { "name": "allowsNomineeShareholders", "type": "boolean", "default": "false", "description": "Whether shares may be held by a nominee without the beneficiary being disclosed on the register." },
        { "name": "financialSecrecyScore", "type": "float", "description": "Published secrecy index score, higher meaning more opaque. An assessment by a third party, not a legal status, and should be attributed wherever it is shown." }
      ]
    },
    {
      "id": "n_address",
      "name": "Address",
      "labels": ["Address"],
      "shape": "circle",
      "description": "A postal location used as a registered office or service address. Worth its own node rather than a string field for one reason: shared addresses cluster. Thousands of entities at one address is the cheapest signal in the whole dataset.",
      "properties": [
        { "name": "addressId", "type": "uuid", "key": true, "required": true, "unique": true, "indexed": true, "description": "Surrogate identifier for a normalised address. Free-text addresses vary in spelling and must be resolved to one node for clustering to work at all." },
        { "name": "fullAddress", "type": "string", "required": true, "indexed": true, "description": "Address as filed, normalised for comparison." },
        { "name": "addressType", "type": "enum", "required": true, "default": "registered_office", "description": "Role the address plays: registered_office, service_address or principal_place_of_business. A registered office is frequently just an agent's mailbox." },
        { "name": "countryCode", "type": "string", "description": "ISO 3166-1 alpha-2 code of the country, which need not match the jurisdiction of incorporation." },
        { "name": "registeredEntityCount", "type": "integer", "description": "How many entities currently give this address. A cached count rather than a fact about the address, kept because it is the field investigators sort by and recomputing it across a whole register is expensive." }
      ]
    },
    {
      "id": "n_share_class",
      "name": "ShareClass",
      "labels": ["ShareClass"],
      "shape": "square",
      "description": "A class of share with its own rights. The mechanism by which ownership and control come apart: a class carrying one percent of the capital and a majority of the votes makes its holder the controller of a company they barely own.",
      "properties": [
        { "name": "shareClassId", "type": "uuid", "key": true, "required": true, "unique": true, "indexed": true, "description": "Surrogate identifier. Class names such as Ordinary or Class B repeat across every company." },
        { "name": "name", "type": "string", "required": true, "description": "Name of the class as constituted, such as Ordinary or Class B Preference." },
        { "name": "votesPerShare", "type": "float", "required": true, "default": "1", "description": "Votes each share of this class carries. The number that lets a small economic stake become control, and zero for non-voting shares." },
        { "name": "nominalValue", "type": "float", "description": "Face value of one share in the class currency. Rarely bears any relation to worth." },
        { "name": "currencyCode", "type": "string", "description": "ISO 4217 code the nominal value is denominated in." },
        { "name": "carriesDividendRights", "type": "boolean", "default": "true", "description": "Whether the class shares in profits. A class with votes but no dividend, or the reverse, is a deliberate separation of control from benefit." }
      ]
    },
    {
      "id": "n_intermediary",
      "name": "Intermediary",
      "labels": ["Intermediary", "Organisation"],
      "shape": "circle",
      "description": "A corporate service provider, law firm or agent that forms and administers entities on behalf of clients. Rarely an owner, and often the most informative node in the graph: entities sharing an intermediary are related even when their ownership never intersects.",
      "properties": [
        { "name": "intermediaryId", "type": "uuid", "key": true, "required": true, "unique": true, "indexed": true, "description": "Surrogate identifier for the provider." },
        { "name": "name", "type": "string", "required": true, "indexed": true, "description": "Trading name of the intermediary." },
        { "name": "intermediaryType", "type": "enum", "required": true, "default": "corporate_service_provider", "description": "Kind of provider: corporate_service_provider, law_firm, bank, accountancy_firm or other. Determines which professional obligations apply to it." },
        { "name": "isRegulated", "type": "boolean", "default": "false", "description": "Whether the provider is supervised for anti-money-laundering purposes in its own jurisdiction. Unregulated formation agents are legal in many places." }
      ]
    },
    {
      "id": "n_filing",
      "name": "Filing",
      "labels": ["Filing", "Statement"],
      "shape": "diamond",
      "description": "One statement, made on one date, by one source, about who owns or controls an entity. A reified relationship, and the reason the model can be honest: ownership is never observed directly, only asserted by somebody at some moment, and two filings can disagree.",
      "properties": [
        { "name": "filingId", "type": "uuid", "key": true, "required": true, "unique": true, "indexed": true, "description": "Surrogate identifier for the statement." },
        { "name": "statementDate", "type": "date", "required": true, "description": "Date the statement claims to describe. Distinct from when it was filed, and it is the one that matters when reconstructing a structure as at a past date." },
        { "name": "filedOn", "type": "date", "required": true, "description": "Date the statement was actually submitted. A long gap from the statement date is itself informative." },
        { "name": "source", "type": "enum", "required": true, "default": "self_declaration", "description": "Where the claim comes from: self_declaration, official_register, third_party or investigation. Most beneficial-ownership data is self-declared and unverified, and a model that hides that is misleading." },
        { "name": "isCurrent", "type": "boolean", "default": "true", "description": "Whether this is the latest statement for its subject. Superseded filings are kept, because the change is often the finding." },
        { "name": "documentUrl", "type": "string", "description": "Link to the filed document, so a claim can be traced to its source." }
      ]
    },
    {
      "id": "n_register",
      "name": "Register",
      "labels": ["Register"],
      "shape": "square",
      "description": "An official body that collects and, sometimes, publishes company and ownership records. Modelled because the same entity can appear in several registers saying different things, and knowing which register a claim came from is part of knowing what it is worth.",
      "properties": [
        { "name": "registerCode", "type": "string", "key": true, "required": true, "unique": true, "indexed": true, "description": "Short stable code for the register." },
        { "name": "name", "type": "string", "required": true, "description": "Official name of the registering body." },
        { "name": "isPubliclyAccessible", "type": "boolean", "required": true, "default": "false", "description": "Whether the register can be searched by the public without a fee or a demonstrated interest. The practical difference between a chain that can be followed and one that cannot." },
        { "name": "usesStructuredData", "type": "boolean", "default": "false", "description": "Whether records are published as data rather than as scanned documents. Determines whether a chain can be traced at scale or only one company at a time." },
        { "name": "url", "type": "string", "description": "Where the register is searched." }
      ]
    },
    {
      "id": "n_sanctions_listing",
      "name": "SanctionsListing",
      "labels": ["SanctionsListing"],
      "shape": "circle",
      "description": "A designation of a person or entity on a sanctions list. Included because it is the reason much of this data is collected at all: a sanctioned individual holding a company through two intermediaries and a trust is precisely what beneficial-ownership registers exist to make visible.",
      "properties": [
        { "name": "listingId", "type": "uuid", "key": true, "required": true, "unique": true, "indexed": true, "description": "Surrogate identifier for the designation." },
        { "name": "listName", "type": "string", "required": true, "indexed": true, "description": "Name of the list the designation appears on. Lists differ by country and do not agree with each other." },
        { "name": "listedOn", "type": "date", "required": true, "description": "Date the designation took effect. Interests held before it are not thereby unlawful, which makes the date load-bearing." },
        { "name": "reason", "type": "string", "description": "Grounds given for the designation, as published." },
        { "name": "isActive", "type": "boolean", "default": "true", "description": "False once the designation is lifted. Delisted entries are kept because they explain historic restrictions." }
      ]
    }
  ],
  "relationships": [
    {
      "type": "OWNS", "from": "n_company", "to": "n_company", "cardinality": "n-n",
      "description": "A shareholding of one company in another, and the edge the whole model turns on. Self-referencing, so ownership composes to any depth: this is how a person owns a holding company that owns another that owns forty percent of the company you asked about. Flatten this into a direct person-to-company link and the question becomes unanswerable, which is why beneficial ownership is a graph problem and not a table.",
      "properties": [
        { "name": "percentageOfShares", "type": "float", "description": "Share of issued capital held. Blank where a register publishes only a band rather than a figure, which many do." },
        { "name": "percentageOfVotingRights", "type": "float", "description": "Share of votes held. Recorded separately from capital rather than derived from it, because share classes make them diverge — and that divergence is the whole point of the ShareClass node." },
        { "name": "isDirect", "type": "boolean", "required": true, "default": "true", "description": "True where the holding is held outright, false where it is itself the product of a chain. Both are worth storing: the direct edges are the evidence, an indirect one is a conclusion." },
        { "name": "heldSince", "type": "date", "description": "When the interest was acquired, so far as it is recorded." },
        { "name": "heldUntil", "type": "date", "description": "When it was disposed of. Blank while current. Historic edges stay in the model because who owned a company at the time of an event is usually the question." }
      ]
    },
    {
      "type": "OWNS", "from": "n_person", "to": "n_company", "cardinality": "n-n",
      "description": "A natural person holding shares directly. The simple case, and the one the whole structure exists to avoid leaving visible.",
      "properties": [
        { "name": "percentageOfShares", "type": "float", "description": "Share of issued capital held by the person." },
        { "name": "percentageOfVotingRights", "type": "float", "description": "Share of votes held, which can be far larger or smaller than the capital share." },
        { "name": "isDirect", "type": "boolean", "required": true, "default": "true", "description": "True for shares held in the person's own name, false where the figure is a computed look-through." },
        { "name": "heldSince", "type": "date", "description": "When the person acquired the interest." },
        { "name": "heldUntil", "type": "date", "description": "When they disposed of it. Blank while current." }
      ]
    },
    {
      "type": "OWNS", "from": "n_trust", "to": "n_company", "cardinality": "n-n",
      "description": "Shares held by a trust or foundation. The point where a chain stops answering the ownership question and starts answering a different one, because the trust's own beneficiaries are reached by a separate relationship entirely.",
      "properties": [
        { "name": "percentageOfShares", "type": "float", "description": "Share of issued capital held by the arrangement." },
        { "name": "percentageOfVotingRights", "type": "float", "description": "Share of votes held by the arrangement." },
        { "name": "isDirect", "type": "boolean", "required": true, "default": "true", "description": "True where the arrangement holds the shares itself rather than through an underlying company." },
        { "name": "heldSince", "type": "date", "description": "When the arrangement acquired the interest." },
        { "name": "heldUntil", "type": "date", "description": "When it was disposed of. Blank while current." }
      ]
    },
    {
      "type": "OWNS", "from": "n_unknown_party", "to": "n_company", "cardinality": "n-n",
      "description": "An interest that is declared to exist but whose holder is not identified. Recorded with the same shape as any other holding so that the gap sits in the chain where it actually falls, rather than being represented by the chain simply stopping.",
      "properties": [
        { "name": "percentageOfShares", "type": "float", "description": "Size of the undisclosed interest, where the size was given even though the holder was not — a common and revealing combination." },
        { "name": "percentageOfVotingRights", "type": "float", "description": "Votes attaching to the undisclosed interest, where stated." },
        { "name": "isDirect", "type": "boolean", "required": true, "default": "true", "description": "Whether the undisclosed interest is held directly in this company or somewhere further up an unmapped chain." },
        { "name": "heldSince", "type": "date", "description": "When the interest is said to have arisen." },
        { "name": "heldUntil", "type": "date", "description": "When it ceased, where a later filing says so." }
      ]
    },
    {
      "type": "CONTROLS", "from": "n_person", "to": "n_company", "cardinality": "n-n",
      "description": "Control held by a person without a corresponding shareholding — the second half of this model's argument. Ownership and control are not the same thing, and every beneficial-ownership regime exists because they can be separated deliberately. Someone who can appoint the board owns nothing and decides everything.",
      "properties": [
        { "name": "natureOfControl", "type": "enum", "required": true, "default": "significant_influence", "description": "How control arises, following the conditions used by public registers: appoints_majority_of_board, voting_rights_over_threshold, significant_influence, control_via_trust or control_via_firm. Only the second involves shares at all." },
        { "name": "basis", "type": "string", "description": "The instrument the control rests on — a shareholders' agreement, a golden share, a management contract. Usually the least public part of a structure." },
        { "name": "exercisedSince", "type": "date", "description": "When the control began, so far as it is recorded." }
      ]
    },
    {
      "type": "CONTROLS", "from": "n_company", "to": "n_company", "cardinality": "n-n",
      "description": "Control held by one company over another without owning it — through a board appointment right, a management agreement or a golden share. Self-referencing like OWNS, so control chains can be followed independently of ownership chains, and the two frequently do not overlap.",
      "properties": [
        { "name": "natureOfControl", "type": "enum", "required": true, "default": "significant_influence", "description": "How the control arises: appoints_majority_of_board, voting_rights_over_threshold, significant_influence, control_via_trust or control_via_firm." },
        { "name": "basis", "type": "string", "description": "The instrument the control rests on." },
        { "name": "exercisedSince", "type": "date", "description": "When the control began." }
      ]
    },
    {
      "type": "ACTS_FOR", "from": "n_person", "to": "n_person", "cardinality": "n-n",
      "description": "A nominee arrangement: one person holds or acts in their own name on behalf of another. Self-referencing, because both parties are people, and it is the single most effective device for making a register say something true and useless — the nominee's name is correctly recorded and tells you nothing.",
      "properties": [
        { "name": "arrangementType", "type": "enum", "required": true, "default": "nominee", "description": "Form the arrangement takes: nominee, proxy or power_of_attorney. Legally distinct, and equally effective at obscuring the beneficiary." },
        { "name": "isDisclosed", "type": "boolean", "required": true, "default": "false", "description": "Whether the arrangement is declared to any register. False is the norm in jurisdictions that permit nominee holdings, which is what makes them worth permitting." },
        { "name": "since", "type": "date", "description": "When the arrangement began, where it is known at all." }
      ]
    },
    {
      "type": "PARTY_TO", "from": "n_person", "to": "n_trust", "cardinality": "n-n",
      "description": "A person's role in a trust or foundation. Many-to-many and role-bearing rather than a set of separate relationships, because one person is frequently settlor and beneficiary at once, and the combination is what a reader needs to see.",
      "properties": [
        { "name": "role", "type": "enum", "required": true, "default": "beneficiary", "description": "Capacity the person acts in: settlor, trustee, protector or beneficiary. The settlor put the assets in, the beneficiary takes them out, and the protector can often override the trustee without appearing to control anything." },
        { "name": "since", "type": "date", "description": "When the person took on the role." }
      ]
    },
    {
      "type": "OFFICER_OF", "from": "n_person", "to": "n_company", "cardinality": "n-n",
      "description": "A directorship or comparable office. Neither ownership nor necessarily control, but the public face of an entity, and the field where a single person appearing as director of hundreds of companies is the finding.",
      "properties": [
        { "name": "role", "type": "enum", "required": true, "default": "director", "description": "Office held: director, secretary, partner or manager. Only some of these carry decision-making power." },
        { "name": "appointedOn", "type": "date", "required": true, "description": "Date of appointment." },
        { "name": "resignedOn", "type": "date", "description": "Date of resignation. Blank while serving." },
        { "name": "isNominee", "type": "boolean", "default": "false", "description": "True where the officer serves at another's direction rather than exercising their own judgement. Rarely declared, and usually inferred from how many boards the same person sits on." }
      ]
    },
    {
      "type": "INCORPORATED_IN", "from": "n_company", "to": "n_jurisdiction", "cardinality": "n-1",
      "description": "The jurisdiction whose law the company exists under, and therefore what it must disclose and to whom."
    },
    {
      "type": "RESIDENT_IN", "from": "n_person", "to": "n_jurisdiction", "cardinality": "n-1",
      "description": "Where a person is resident for disclosure purposes. Often unrelated to the jurisdictions of the entities they hold, which is the point."
    },
    {
      "type": "REGISTERED_AT", "from": "n_company", "to": "n_address", "cardinality": "n-1",
      "description": "The company's registered office. Many-to-one, and heavily so: one address routinely serves thousands of entities, and that concentration is a stronger signal than most of what the register publishes deliberately."
    },
    {
      "type": "ISSUES", "from": "n_company", "to": "n_share_class", "cardinality": "1-n",
      "description": "The classes of share a company has constituted. One-to-many, and a company with several classes is where ownership percentages stop predicting who decides anything."
    },
    {
      "type": "FORMED_BY", "from": "n_company", "to": "n_intermediary", "cardinality": "n-1",
      "description": "The service provider that incorporated and administers the entity. The relationship that links entities with no ownership connection at all, and the one that made leaked intermediary records so much more useful than the registers themselves."
    },
    {
      "type": "ADMINISTERED_FROM", "from": "n_intermediary", "to": "n_address", "cardinality": "n-1",
      "description": "Where the intermediary operates, which is frequently also the registered office of every entity it forms."
    },
    {
      "type": "DECLARES", "from": "n_filing", "to": "n_company", "cardinality": "n-1",
      "description": "The entity a filing makes claims about. Many filings describe one company over time, and comparing them is how a change of control is detected."
    },
    {
      "type": "FILED_WITH", "from": "n_filing", "to": "n_register", "cardinality": "n-1",
      "description": "The register a statement was submitted to, and therefore the rules it was made under and the verification, if any, it received."
    },
    {
      "type": "MAINTAINS", "from": "n_jurisdiction", "to": "n_register", "cardinality": "1-n",
      "description": "The registers a jurisdiction operates. One-to-many because company, beneficial-ownership and charity registers are frequently separate bodies holding conflicting records."
    },
    {
      "type": "DESIGNATED_ON", "from": "n_person", "to": "n_sanctions_listing", "cardinality": "n-n",
      "description": "A person's appearance on a sanctions list. Many-to-many because lists are national and a person designated by one state is often not designated by another, which is itself the thing a compliance check has to resolve."
    }
  ]
}
