JavaScript is required

Investment Penetration

Equity Penetration Analysis and Ultimate Controller Identification

Multi-level equity relationship tracing to identify ultimate beneficial owners and controllers, essential for due diligence and risk management.

Functional Overview

This example demonstrates equity penetration analysis visualization for tracing a company’s ultimate controller and beneficial owner. Through multi-level equity relationship chains, it can penetrate complex ownership structures to identify the actual controller behind them. This is crucial for anti-money laundering, due diligence, risk management, and other scenarios, helping to reveal hidden interest relationships.

Implementation of Key Features

Multi-Level Equity Relationship Tree

Use tree layout to display complete equity penetration chain:

const graphOptions: RGOptions = {
    layout: {
        layoutName: 'tree',
        from: 'left',
        treeNodeGapH: 100,
        treeNodeGapV: 10,
        alignItemsX: 'start',
        alignParentItemsX: 'end'
    },
    defaultExpandHolderPosition: 'bottom',
    defaultLineShape: RGLineShape.StandardOrthogonal
};

Layout clearly displays left-side shareholders and right-side investments.

Equity Ratio Display

Show shareholding ratios on connection lines:

myJsonData.lines.forEach((line) => {
    line.text = `${line.data.ratio}%`;
    line.text = line.text;
});

Each connection line labels equity ratio, clearly displaying control rights.

Penetration Level Identification

Use color or style to identify penetration levels:

const updateNodeStyles = async () => {
    graphInstance.getNodes().forEach((node) => {
        const level = Math.abs(node.lot.level || 0);
        graphInstance.updateNode(node.id, {
            color: getPenetrationColor(level),
            className: `penetration-level-${level}`
        });
    });
};

Different levels use different colors, intuitively showing penetration depth.

Dynamic Penetration Calculation

Calculate cumulative shareholding ratio for each path:

const calculateCumulativeRatio = (node: RGNode): number => {
    if (node.lot.level === 0) return 100;

    const links = graphInstance.getLinks().filter(l => l.toNode.id === node.id);
    let maxRatio = 0;

    links.forEach(link => {
        const parentRatio = calculateCumulativeRatio(link.fromNode);
        const currentRatio = (parentRatio * link.line.data.ratio) / 100;
        if (currentRatio > maxRatio) {
            maxRatio = currentRatio;
        }
    });

    return maxRatio;
};

Recursively calculate final control ratio.

Ultimate Controller Identification

Automatically identify and mark ultimate controllers:

const identifyUltimateController = () => {
    const leafNodes = graphInstance.getNodes().filter(node => node.rgChildrenSize === 0);
    const controllers = leafNodes.filter(node => {
        const cumulativeRatio = calculateCumulativeRatio(node);
        return cumulativeRatio > 50; // Over 50% considered control
    });

    controllers.forEach(node => {
        graphInstance.updateNode(node.id, {
            className: 'ultimate-controller',
            data: { ...node.data, isUltimateController: true }
        });
    });
};

Mark final controllers with shareholding ratios exceeding threshold (e.g., 50%).

Multi-Path Display

Show scenarios where the same shareholder controls the target company through different paths:

const highlightControlPaths = (targetNodeId: string) => {
    const allPaths = findAllPathsToTarget(targetNodeId);
    allPaths.forEach(path => {
        const pathColor = getUniqueColor();
        path.forEach((nodeId, index) => {
            if (index < path.length - 1) {
                const line = findLine(path[index], path[index + 1]);
                graphInstance.updateLine(line.id, { color: pathColor, lineWidth: 3 });
            }
        });
    });
};

Different paths use different colors, clearly showing multiple control chains.

Related Party Identification

Identify and mark related party relationships:

const identifyRelatedParties = () => {
    const nodes = graphInstance.getNodes();
    nodes.forEach(node => {
        const shares = findCommonShareholders(node);
        if (shares.length > 1) {
            graphInstance.updateNode(node.id, {
                data: { ...node.data, relatedPartyCount: shares.length }
            });
        }
    });
};

Find multiple companies controlled through the same shareholder.

Time Series Penetration

Support viewing historical equity changes:

const showHistoricalPenetration = async (date: Date) => {
    const historicalData = await fetchHistoricalEquityData(date);
    graphInstance.setJsonData(historicalData);
    updateNodeStyles();
};

Time slider can select equity structure at different dates.

Risk Indicator Calculation

Calculate and display penetration analysis risk indicators:

const calculateRiskIndicators = (nodeId: string) => {
    const depth = getPenetrationDepth(nodeId);
    const complexity = getPathComplexity(nodeId);
    const control = calculateCumulativeRatio(nodeId);

    return {
        depth,
        complexity,
        control,
        risk: calculateRiskScore(depth, complexity, control)
    };
};

More penetration levels, more complex paths, higher risk.

Creative Use Cases

Anti-Money Laundering Investigations

Identify company ultimate beneficiaries in AML investigations. Penetrate complex equity structures to find actual controllers.

KYC (Know Your Customer)

Banks and financial institutions conduct customer due diligence. Verify customer identity and actual controllers.

Supply Chain Risk Management

Penetrate supplier equity structures to identify potential risks. Avoid doing business with high-risk entities.

M&A Transaction Analysis

Analyze target company equity penetration structure before M&A. Identify all related parties and potential obstacles.

Credit Assessment

Consider actual controller when assessing enterprise credit risk. Ultimate controller’s credit status affects enterprise credit.

Tax Compliance

Tax authorities use penetration analysis to identify related transactions and tax avoidance behaviors.

Government Procurement Review

Review bidder equity penetration structures to identify bid-rigging and collusion risks.

Legal Litigation

Trace responsible parties through multi-level company structures in litigation to find actual responsible parties.

Media Investigations

Journalists investigate company背后的实际控制人和利益链. Expose potential conflicts of interest.

Competitive Analysis

Analyze competitor capital penetration structures to understand strategic layouts and control relationships.

Insurance Claims

Penetrate insured person structures in insurance claims to identify potential fraud.

Asset Recovery

Penetrate asset holding structures in asset recovery cases to find hidden assets.

Compliance Auditing

Enterprises use penetration analysis internally for audits. Identify unauthorized related transactions.

Investment Decisions

Investment institutions use penetration analysis to assess investment targets. Understand complete ownership and control structures.

Trust and Estate Planning

Visualize equity penetration in trust and estate planning to ensure wealth transfer meets expectations.