Company filter expansion specification¶
Status: reconciled with delivered work, 2026-09-14. Specification #678. The active read shapes are in the schema reference and read contract. This document records the scope decisions and delivery status. It does not add filter keys.
Delivery status¶
| Request | Status | Delivered contract and decision |
|---|---|---|
| #650 | Delivered; G1/G2 complete | gross_profit_growth for one or three years, with annual endpoint evidence. ADR-0022. |
| #651 | Delivered; A1/A2 complete | auditor_ids, current CVR auditor-firm vocabulary and appointment history. ADR-0023. |
| #652 | Delivered; P1/P2/P3 complete | registry_roles, has_attributed_work_contact, has_board_work_contact, and coverage evidence. ADR-0024. |
| #654 | Delivered; W1/W2/W3 complete | Sales-area, target-market, technology, webshop, Google tag and Meta Pixel observations. ADR-0025. |
| #653 | Postponed; B1 incomplete, B2/B3 not built | No BBR read, collector, or filter is published. The owner's postponement overrides the earlier plan. |
The four delivered source requests are closed. The BBR issue is also closed, but its closure records postponement, not delivery. Reopen #653 when access and field definitions are ready; do not treat its closed state as source certification or create a duplicate build issue.
Shared delivered rules¶
Company search, Company Facet counts, and the reported filter contract share the supported predicates. Sets use OR; different keys use AND. Unknown keys, malformed values, and inverted bounds are caller errors. Each CVR appears once, and exact totals count companies rather than evidence rows.
Detail keeps source identity, collection/source times, evidence references, versions, and explicit unavailable states. Contact-filter output contains no personal values or suppression reasons. Derived writes advance the search publication in the same transaction; UTC dates and reached web-expiry boundaries also invalidate old cursors. Consumers use the reported contract, not guesses based on one result page or private tables.
Gross-profit growth¶
The delivered object is {"years": 1|3, "min": <finite percentage>}.
Growth is 100 * (latest - baseline) / baseline; the baseline must be positive.
For example, 100 to 120 is 20%, and 100 to -20 is -120%. Zero/negative or
missing baselines remain unavailable. This is endpoint change over N years,
not CAGR or growth in each intervening year.
Resolve corrections before metrics. Both periods must be annual, paired by exact calendar dates shifted by N years with leap-day normalization, retained under the five-year rule, and supported by matching fact periods, one currency, and the same non-dimensional entity scope. Missing comparison metadata requires re-extraction; it is not assumed. A newer unparsed or PDF-only correction does not permit a previous parsed filing to supply a result.
The comparison is computed after selective registry filters. ADR-0022 records the population probe, the revised facet plan, and its measured 0.95-second selective read. It also records the remaining population-scan limitation for unbounded growth-only filtering; this document does not claim every possible filter combination meets the representative latency target.
Current auditor firms¶
The selected source is the CVR company document's REVISION membership, not
filing-level auditor extraction. auditor_ids uses the disclosed company
participant's enhedsNummer; it is not a guessed CVR or a name match.
The reference vocabulary includes current company-participant firms only.
Member FUNKTION dates determine current appointments, with inclusive ends
on the UTC read date. Container periods do not. Multiple current firms remain
separate. Missing dates or a missing relationship collection are unavailable;
an empty collection means no appointment was stated in that snapshot.
There is no has_revisor boolean. Natural-person and unknown kinds remain
qualified evidence but do not enter the firm filter.
The original proposal's filing taxonomy/corpus work is not a pending condition for this delivered route. Filing-level auditor extraction was excluded when ADR-0023 selected current registry appointments. Submitting enterprises, signing people, and financial filing corrections do not determine this filter.
Registry roles and work-contact availability¶
registry_roles supports board and executive_management under ADR-0024's
closed organisation/member-function vocabulary. Only PERSON members qualify.
Alternates, legal entities, ended/future memberships, and unknown starts cannot
prove a current qualifying role. Member dates are used, not container dates.
has_attributed_work_contact accepts a retained permitted attributed value,
including one on an unresolved company-scoped mention. has_board_work_contact
also requires an unreversed registry-person resolution and this company's
current board membership. Generic nearby mailboxes do not become person values.
True means at least one permitted supporting value. False requires successful evaluation of the declared retained data and bounded people-extraction input; it does not mean every website page was examined. A later relevant failed or missing evaluation makes an old negative unavailable. Retained positives keep the existing indefinite retention policy. Board negatives also require evaluable registry membership evidence. Both boolean selections exclude null. Suppression applies to derived reads and invalidates their publication.
These aggregates are approved under ADR-0008/0015; #602 remains deferred. Employee status, decision-maker authority, contact unlock, and credit or entitlement rules are not delivered dimensions.
Evidenced web classifications¶
The delivered keys are sales_areas, target_markets, technologies,
has_webshop, has_google_tag, and has_facebook_pixel.
Sales areas are local, regional, national, and international;
target markets are b2b, b2c, and b2g. A permitted company-specific quote
must support each classification. Addresses, language choices, and unattached
procurement mentions do not suffice. Conflicting claims remain inspectable
and make the affected current classification unavailable.
The bounded technology catalog contains wordpress, woocommerce, shopify,
google_tag_manager, google_tag, and meta_pixel. ADR-0025 records the exact
DOM/JavaScript installation rules and official source references. A Tag Manager
container alone is not a configured Google tag. Webshop evidence requires the
supported Shopify or WooCommerce product-add controls; a basket word is not
enough. No collection step fires tags, sends events, or submits forms.
HTML inspection uses retained successful selections with a 1,000,000-character input bound. Missing/incompatible HTML and exceeded limits are unavailable, never negative findings. A false value means no supported signature was found in that coverage, not site-wide absence. The identity-block route has no supported matching HTML boundary and cannot supply this detector's result.
The frozen run field is policy.page_fresh_seconds, currently 2,592,000 seconds
(30 days). Expiry starts at the earliest source fetch, not re-extraction time.
A newer successful evaluation supersedes the old one. A failed attempt keeps
earlier evidence with separate failure/freshness state. Expired evidence is
readable but cannot match a current hard filter.
Postponed BBR scope¶
B1 verified documentation routes and candidate mappings only. Requests to BBR/DAR v3 with the available project credentials returned HTTP 401. The exact current-company/P-unit → DAR → BBR join, source code lists, status and unknown-value semantics, and complete bulk coverage remain unproved.
| Requested field | Candidate mapping or unresolved decision |
|---|---|
| Building type | BBR building-use code; validate the live code list. |
| Market segment | No agreed meaning or source mapping. |
| Construction year | Disclosed building year; verify unknown sentinels. |
| Building size | Decide footprint versus floor area. |
| Kitchen | Unit kitchen-facility code; needs an exact unit link. |
| Toilet | Unit toilet count versus shared-facility code; needs an exact unit link. |
| Total area | Unit's disclosed area; no ownership or occupation claim. |
| Number of units | Requires a complete current child-unit collection. |
| Number of rooms | Unit room count; needs an exact unit link and unknown semantics. |
These are future candidates, not accepted contract fields. If resumed, B1 must settle all nine rows, source access, the exact join, and the charter source registry before implementation. B2/B3 would then deliver an independent registry-class collector and same-location nested filters with exact counts. Facts from different premises must never satisfy one location predicate. No website campaign, fuzzy address join, nearest building, or consumer-side base-table filter substitutes for this work.
Verification and consumer boundary¶
The delivered migrations are 20260910120000_gross_profit_growth.sql,
20260911120000_current_registry_auditors.sql,
20260912120000_company_contact_availability.sql, and
20260913120000_web_classification_filters.sql. Later migrations maintain
these surfaces; the schema reference is the current public inventory.
Tests cover collection with controlled source evidence and authenticated SQL reads on a disposable database built from the full migration chain. Coverage includes financial corrections and scope, auditor member dates, role/contact suppression and failed coverage, web classifications and detector negatives, search/facet agreement, more than 100 companies, and publication invalidation. The known-consumer register records the sales contract dependencies. Consumer work is linked from the respective published read sections (#183 auditor, #185 role/contact, #187 web). This reconciliation does not certify a new consumer deployment or a BBR conformance run.
Private contact routes, inferred person authority, property ownership, unproved market segments, whole-web absence, population-wide paid enrichment, and new consumer base-table access remain outside scope.