Corporate structure dashboard example

Examples

Bank Name Identifiers Descendants Only (GraphML) Descendants and Ancestors (GraphML)
Silicon Valley Bank FDIC, RSSD, LEI ⬇️ Download ⬇️ Download
Signature Bank FDIC, RSSD, LEI ⬇️ Download ⬇️ Download
Silvergate Bank FDIC, RSSD, LEI ⬇️ Download ⬇️ Download

Notes:

  • The NIC data is from 2023-02-20 and LEI from 2023-03-06.
  • The NIC and LEI data for the same entity is connected by special “Resolved” nodes that can be followed to see the corresponding LEI node to a NIC node and vice versa. In the case that a NIC entity has no explicit LEI ID, the resolution is best effort according to name and jurisdiction and may not always have an exact match.
  • Signature Bank’s resolution node between NIC and LEI is not in the database, since the addresses are different enough to escape the automated matching threshold.)
  • These graphs include all historical relationships as well, tagged with start and end dates to see the history of ownership.
  • The ancestor data only includes paths to ancestors from the given bank, and not the ancestors entire descendant tree.
  • This data also includes transformations into any parent or child in the tree, which represents prior mergers, sales, etc.

Running the Queries

Assuming that the resolved database has been loaded in neo4j, this script collects descendants and ancestors for three banks across both the NIC and LEI database and outputs them as GraphML. It was used to generate the examples above.

Retrieving descendants

The following query is used to retrieve all descendants of the given parent RSSD over both the NIC and LEI databases, including

  • all descendants from the NIC database
  • all banks that have transformed into the parent or any of its children
  • all banks from the LEI database that resolved with the parent or any descendants
  • all banks that descend from the LEI bank nodes

For example, to get the descendants of Silicon Valley Bank, use the following query:

MATCH (n{ID_RSSD: 802866})
CALL apoc.path.subgraphAll(n, {relationshipFilter: "RESOLVED_FROM|RELATIONSHIP>|TRANSFORMATION<|IS_DIRECTLY_CONSOLIDATED_BY<|IS_ULTIMATELY_CONSOLIDATED_BY<"})
YIELD nodes, relationships
RETURN nodes, relationships;

Retrieving descendants and ancestors

The following query adds ancestors to the results, only getting those paths that lead to the RSSD. The first CALL is the same as above, while the second CALL reverses the direction of the edges.

MATCH (n{ID_RSSD: 802866}) CALL apoc.path.subgraphAll(n, {relationshipFilter: "RESOLVED_FROM|RELATIONSHIP>|TRANSFORMATION<|IS_DIRECTLY_CONSOLIDATED_BY<|IS_ULTIMATELY_CONSOLIDATED_BY<"}) YIELD nodes, relationships
WITH nodes as nodes1, relationships as relationships1
MATCH (n{ID_RSSD: 802866}) CALL apoc.path.subgraphAll(n, {relationshipFilter: "RESOLVED_FROM|RELATIONSHIP<|TRANSFORMATION>|IS_DIRECTLY_CONSOLIDATED_BY>|IS_ULTIMATELY_CONSOLIDATED_BY>"}) YIELD nodes, relationships
RETURN nodes1, relationships1, nodes, relationships;