disclosure_status | Customer-concentration disclosure status. 'disclosed' means at least one qualifying customer concentration figure is present — populate concentrations[]. 'explicitly_none' means the filing states that no customer reaches its disclosure threshold. Judge per item, but 'disclosed' wins: if revenue says 'none above 10%' while receivables show a customer concentration, the status is 'disclosed'. |
disclosure_status.value | |
disclosure_status.evidence | Evidence object. Never null. |
disclosure_threshold | The percentage threshold the filing itself uses to frame customer significance. Commonly 10%, but company-defined (e.g. ADP uses 2%). Never hardcode 10 — when the filing states only a ranking ('top 3 customers') or a qualitative absence, there is no stated threshold, so this is a null-decision wrapper. |
disclosure_threshold.value | Threshold percentage as written (10 means 10%). null when no explicit threshold. |
disclosure_threshold.unit | 'percent' when a threshold value is present; null when value is null. |
disclosure_threshold.evidence | Evidence object. Never null. |
concentrations | One entry per (customer scope x concentrated item x period) qualifying concentration figure. null when disclosure_status is 'explicitly_none' or 'not_disclosed' (no empty array). Aggregated top-N figures are included with scope='group'. |
concentrations[].customer_name | The customer name as printed, including anonymised labels such as 'Customer A'. When scope='group' and the filing lists the names, join them in source order with ', '. null when the filing refers to a customer anonymously with no label, or gives only a bundle label. Never invent a name. |
concentrations[].category | Coarse category of the concentrated item. 'revenue' = revenue / net revenue / sales. 'receivables' = accounts receivable / trade receivables. 'other' = any other customer-attributed item (e.g. contract assets); the exact item phrase is preserved in evidence.quote. Backlog and supplier-side items (purchases, payment processing expense) are OUT OF SCOPE and must not appear. |
concentrations[].scope | 'single' = the figure attributes to one customer (incl. an anonymous 'one customer'). 'group' = an aggregated top-N customer figure (e.g. 'top 10 customers') or a segment-level bundle of major customers. |
concentrations[].group_size | Number of customers aggregated when scope='group' (10 for 'top 10 customers'). null when scope='single', or when the count is left indefinite. Never invent a count absent from the source. |
concentrations[].value | The measured concentration degree, a discriminated union by 'type' (mirroring the period shape). 'fixed' for one printed percentage; 'range' for a printed low-high band. null ONLY when the filing gives a qualitative concentration with no figure at all — a printed numeric band is NOT qualitative, it is a 'range'. |
concentrations[].period | Reporting period the concentration figure applies to. Model by the nature of the concentrated item: a full-period FLOW is a 'range'; a point-in-time BALANCE is 'as_of'. null when the filing attaches no period, or when only an ordinal label is printed and no year appears anywhere in context. |
concentrations[].evidence | Evidence object. Never null. |