Prismatic OSINT EU Institutions

Prismatic OSINT EU Institutions

150 files OSINT

Overview

Prismatic OSINT EU Institutions provides adapter pattern implementations for European Union institutional data sources, integrating with EU sanctions lists, ECB financial data, Europol threat assessments, and EU regulatory databases for comprehensive European intelligence collection. Each adapter normalizes source-specific data formats into the platform's unified entity resolution schema, enabling cross-source correlation and knowledge graph integration through consistent data structures.

The application implements real-time monitoring of EU sanctions list updates, automatically detecting additions, removals, and modifications to consolidated restrictive measures lists. Entity matching against sanctions lists uses fuzzy name resolution with transliteration support for names across European languages, combined with confidence scoring derived from the platform's NABLA epistemic framework to distinguish true matches from coincidental name similarities. All screening results pass through Trinity Gate validation before being reported as findings.

Financial intelligence adapters integrate with ECB reference rates, EU trade statistics, and state aid databases, providing the economic context necessary for comprehensive due diligence assessments. Regulatory data adapters cover ECHA chemical substance registrations, EMA medicinal product authorizations, and TED public procurement data, enabling cross-domain intelligence synthesis that connects business entities to their regulatory footprint across the European Union.

Architecture

Source Adapters --> Response Parser --> Entity Normalizer --> Evidence Store
       |                  |                    |                    |
  EU Sanctions       XML/JSON/CSV          Unified Schema      Knowledge Graph
  ECB Data           Normalization         Confidence Score     PostgreSQL
  TED Tenders        Validation            Source Provenance    Meilisearch
  ECHA/EMA           Rate Limiting         Deduplication        ETS Cache
       |                  |                    |                    |
       +------------------+--------------------+--------------------+
                                 |
                          Update Monitor --> Change Notifications
                                 |
                          Screening Engine --> Fuzzy Entity Matching

All parsing and entity normalization follows pure function principles. Network requests use rate limiting and backpressure to comply with EU API usage policies. Each adapter runs in its own supervised process under the OTP supervision tree.

Key Modules

ModuleResponsibility
PrismaticOsintEuInstitutionsPublic facade: sanctions_screen/2, ted_search/1, ecb_rates/2, echa_lookup/1
PrismaticOsintEuInstitutions.ApplicationOTP application entry point with per-source adapter supervision
PrismaticOsintEuInstitutions.SanctionsAdapterEU consolidated sanctions list fetching, parsing, and update monitoring
PrismaticOsintEuInstitutions.ScreeningEngineFuzzy entity matching against sanctions with transliteration support
PrismaticOsintEuInstitutions.EcbAdapterECB reference rates, monetary statistics, and financial data retrieval
PrismaticOsintEuInstitutions.TedAdapterTED procurement data search, contract award monitoring, and supplier analysis
PrismaticOsintEuInstitutions.EchaAdapterECHA chemical substance registration and REACH compliance data
PrismaticOsintEuInstitutions.EmaAdapterEMA medicinal product authorization and pharmacovigilance data
PrismaticOsintEuInstitutions.UpdateMonitorReal-time monitoring of EU data source updates with change detection

Key Features

EU Sanctions Screening

The sanctions screening engine implements multi-criteria matching against the EU consolidated sanctions list, handling the complexity of names across European languages:

defmodule PrismaticOsintEuInstitutions.ScreeningEngine do
  @spec screen(String.t(), keyword()) :: {:ok, ScreeningResult.t()} | {:error, term()}
  def screen(entity_name, opts \\ []) do
    lists = Keyword.get(opts, :lists, [:eu_consolidated])
    threshold = Keyword.get(opts, :threshold, 0.85)

    candidates = Enum.flat_map(lists, fn list ->
      SanctionsAdapter.search(list, entity_name)
    end)

    matches = candidates
    |> Enum.map(fn candidate ->
      scores = %{
        exact: exact_match_score(entity_name, candidate.name),
        fuzzy: fuzzy_match_score(entity_name, candidate.name),
        transliterated: transliteration_score(entity_name, candidate.name),
        alias: alias_match_score(entity_name, candidate.aliases)
      }
      {candidate, aggregate_score(scores)}
    end)
    |> Enum.filter(fn {_candidate, score} -> score >= threshold end)
    |> Enum.sort_by(fn {_candidate, score} -> score end, :desc)

    {:ok, %ScreeningResult{
      entity: entity_name,
      matches: format_matches(matches),
      clear: Enum.empty?(matches),
      screening_id: generate_screening_id(),
      confidence: compute_result_confidence(matches),
      timestamp: DateTime.utc_now()
    }}
  end
end
  • Consolidated EU sanctions list screening with real-time update monitoring and automatic list refresh
  • Entity matching with fuzzy name resolution, transliteration support, and alias cross-referencing
  • Sanctions program categorization (terrorism, proliferation, human rights, regional) with regime mapping
  • Screening result confidence scoring with configurable thresholds for automated vs. manual review routing

Financial Intelligence

  • ECB reference rates and monetary statistics with historical time-series access for currency analysis
  • EU trade statistics and cross-border transaction pattern analysis for trade-based intelligence
  • Financial regulation entity lists (banking, insurance, investment supervision) for authorized entity verification
  • State aid database access for subsidy and government support tracking across member states

Regulatory Data Integration

EU BodyData TypeUpdate FrequencyCoverage
EU CouncilSanctions listsDailyAll EU restrictive measures
ECBReference ratesDaily (workdays)30+ currencies
TEDProcurementDailyEU-wide public procurement above thresholds
ECHAChemical registrationWeeklyREACH registered substances
EMAMedicinal productsWeeklyAuthorized products, pharmacovigilance
EuropolThreat assessmentsQuarterlySOCTA, IOCTA reports
  • European Chemicals Agency (ECHA) substance registration and REACH compliance data
  • European Medicines Agency (EMA) medicinal product authorization and pharmacovigilance
  • EU procurement data from TED (Tenders Electronic Daily) with contract award monitoring
  • EU regulatory body decision databases for enforcement action tracking

Real-Time Update Monitoring

The UpdateMonitor process continuously tracks changes to EU data sources, detecting additions, removals, and modifications:

defmodule PrismaticOsintEuInstitutions.UpdateMonitor do
  use GenServer

  @check_interval :timer.minutes(15)

  def handle_info(:check_updates, state) do
    updates = Enum.flat_map(state.monitored_sources, fn source ->
      case check_source_updates(source, state.last_check[source]) do
        {:ok, changes} -> [{source, changes}]
        {:error, _} -> []
      end
    end)

    Enum.each(updates, fn {source, changes} ->
      PrismaticPubSub.broadcast("eu_institutions:updates", {:source_updated, source, changes})
    end)

    Process.send_after(self(), :check_updates, @check_interval)
    {:noreply, update_last_check(state, updates)}
  end
end

Source Health Monitoring

  • Availability tracking per EU data source with automatic failover and retry logic
  • Circuit breaker patterns preventing cascading failures when EU portals are unavailable
  • Telemetry emission for source response times, error rates, and data freshness metrics

Integrated Sources

SourceData TypeKey Capability
EU Sanctions ListSanctionsConsolidated restrictive measures with daily updates
TED (Tenders)ProcurementEU-wide public procurement data above threshold values
ECBFinancialExchange rates, monetary statistics, and financial stability data
EuropolThreatSOCTA, IOCTA threat intelligence assessments and trend analysis
ECHARegulatoryChemical substance registration and REACH compliance verification
EMARegulatoryMedicinal product authorization and safety signal monitoring

Usage

# EU sanctions screening with confidence scoring
{:ok, result} = PrismaticOsintEuInstitutions.sanctions_screen("Entity Name",
  lists: [:eu_consolidated, :eu_terrorism],
  threshold: 0.85
)
# => %{matches: [...], confidence: 0.92, screening_id: "scr_..."}

# EU procurement search via TED
{:ok, tenders} = PrismaticOsintEuInstitutions.ted_search(
  keywords: "cybersecurity", country: "CZ", min_value: 100_000)
# => %{tenders: [...], total: 47, page: 1}

# ECB reference rate data
{:ok, rates} = PrismaticOsintEuInstitutions.ecb_rates(:CZK, period: :last_90_days)
# => %{current: 25.12, history: [...], trend: :stable}

# ECHA substance lookup
{:ok, substance} = PrismaticOsintEuInstitutions.echa_lookup(cas: "64-17-5")
# => %{name: "Ethanol", reach_status: :registered, tonnage_band: "1000+"}

# Monitor EU source updates
{:ok, _} = PrismaticOsintEuInstitutions.subscribe_updates(:eu_sanctions)

NABLA Compliance

NABLA AxiomEU Institutions EnforcementImplementation
Provenance MandatoryEvery data point traceable to EU institutional sourceSource URL, retrieval timestamp, and list version on all records
Signal PluralitySanctions matches require multi-criteria corroborationScreening combines name, alias, DOB, and address signals
Time DecayEU data freshness tracked with update monitoringUpdateMonitor timestamps all retrievals, staleness triggers re-fetch
Source IndependenceEach EU institutional adapter operates independentlyPer-source process isolation with independent health monitoring
Contradiction PreservationConflicting data across EU sources preservedCross-source discrepancies maintained with confidence scores

Testing

Sanctions screening tests verify fuzzy matching accuracy, transliteration correctness, and false positive rates against labeled datasets of known sanctioned and non-sanctioned entities. ECB adapter tests verify rate data parsing, historical series accuracy, and update detection. TED adapter tests verify procurement search relevance and contract data completeness.

Integration tests exercise the full pipeline from EU source fetching through parsing, normalization, and evidence store persistence. Update monitoring tests verify change detection accuracy across simulated list updates.

Integration Points

ApplicationRelationship
Prismatic OSINT SourcesEU adapters registered in the unified OSINT source catalog with capability metadata
Prismatic OSINT BusinessEU financial and sanctions data feeding business intelligence profiles
Prismatic Storage EctoPostgreSQL persistence for screening results and regulatory data
Prismatic GraphEntity relationship mapping connecting EU data to the knowledge graph
Prismatic ComplianceNIS2 and compliance framework assessment consuming EU regulatory data
Prismatic DDDue diligence workflows incorporating EU sanctions screening results

Performance

OperationLatencyNotes
Sanctions screening500ms-3sFuzzy matching across consolidated list
ECB rate retrieval< 200msCached with 1-hour TTL
TED procurement search1-5sDepends on query complexity
ECHA substance lookup500ms-2sAPI-based retrieval
Update check (per source)< 1sHTTP HEAD/conditional GET
Entity normalization< 50msPure function transformation

Telemetry events: [:prismatic, :osint_eu, :sanctions_screened], [:prismatic, :osint_eu, :source_updated], [:prismatic, :osint_eu, :rate_fetched].


Connect & Contribute

Created by Tomáš Korcak (korczis) | Open Source under GHL