Files
geointel/frontend/src/types.ts
T
Jens 9f05451f04
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
Preserve native orthophoto detail for training
2026-07-27 01:20:10 +02:00

1713 lines
41 KiB
TypeScript

export interface ApiEnvelope<T> {
data: T
}
export interface ApiError {
code: string
message: string
details: Record<string, unknown> | unknown[]
}
export interface ApiErrorEnvelope {
error: ApiError
}
export interface ProjectRead {
id: string
name: string
description?: string | null
region: string
status: string
created_at?: string | null
updated_at?: string | null
}
export interface ProjectCreate {
name: string
description?: string | null
region?: string
}
export interface ProjectUpdate extends Partial<ProjectCreate> {
status?: 'active' | 'archived'
}
export interface ProjectListResponse {
items: ProjectRead[]
total: number
limit: number
offset: number
}
export interface DemoWorkflowResponse {
project_id: string
area_id: string
reference_dataset_id: string
candidate_dataset_id: string
raster_dataset_id?: string | null
quality_check_id: string
metric_count: number
status: string
message: string
created: boolean
}
export interface AreaRead {
id: string
project_id: string
name: string
original_crs?: string | null
area_m2?: number | null
created_at?: string | null
geometry_type?: string | null
geometry?: GeoJSON.Polygon | GeoJSON.MultiPolygon | null
}
export interface AreaCreate {
name: string
geometry: GeoJSON.Polygon | GeoJSON.MultiPolygon
crs?: string
}
export interface AreaListResponse {
items: AreaRead[]
total: number
limit: number
offset: number
}
export interface MunicipalitySearchItem {
niscode: string
name: string
name_nl?: string | null
name_fr?: string | null
name_de?: string | null
}
export interface MunicipalitySearchResponse {
items: MunicipalitySearchItem[]
total: number
}
export interface DatasetCreateResponse {
id: string
name: string
dataset_type: string
source: string
dataset_role?: string
source_name?: string | null
reference_layer_name?: string | null
source_metadata?: Record<string, unknown> | null
provenance_metadata?: Record<string, unknown> | null
imported_at?: string | null
temporal_series_key?: string | null
observed_at?: string | null
valid_from?: string | null
valid_to?: string | null
temporal_granularity?: string | null
source_version?: string | null
project_id: string
area_id?: string | null
storage_path?: string | null
original_filename?: string | null
stored_filename?: string | null
content_type?: string | null
size_bytes?: number | null
checksum_sha256?: string | null
crs?: string | null
bounds_json?: Record<string, number> | null
metadata_json?: Record<string, unknown> | null
vector_summary?: VectorSummary | null
status: string
derived_from_dataset_id?: string | null
created_at?: string | null
feature_count?: number | null
}
export interface JobRead {
id: string
job_type: string
status: string
project_id: string
dataset_id?: string | null
input_dataset_id?: string | null
output_dataset_id?: string | null
parameters_json: Record<string, unknown>
result_json?: Record<string, unknown> | null
error_message?: string | null
created_at?: string | null
started_at?: string | null
finished_at?: string | null
}
export interface JobListResponse {
items: JobRead[]
total: number
limit: number
offset: number
}
export interface AoiOperationPartition {
id: string
partition_key: string
provider_key: string
product_key: string
ordinal: number
status: 'queued' | 'running' | 'success' | 'failed' | 'skipped'
attempt_count: number
max_attempts: number
checkpoint_json?: Record<string, unknown> | null
result_json?: Record<string, unknown> | null
error_message?: string | null
}
export interface AoiOperation {
id: string
project_id: string
area_id?: string | null
parent_job_id?: string | null
operation_type: string
status: 'queued' | 'running' | 'partial' | 'success' | 'failed' | 'cancelled'
request_json: Record<string, unknown>
plan_json: Record<string, unknown>
result_json?: Record<string, unknown> | null
error_message?: string | null
progress: number
partition_counts: Record<string, number>
partitions: AoiOperationPartition[]
created_at?: string | null
started_at?: string | null
finished_at?: string | null
}
export interface AoiOperationListResponse {
items: AoiOperation[]
total: number
}
export interface VectorSummary {
feature_count?: number | null
geometry_types?: string[] | null
bounds_json?: Record<string, number> | null
approximate_area_m2?: number | null
crs?: string | null
feature_geometry_count?: number | null
invalid_features?: number | null
crs_assumed?: boolean | null
}
export interface VectorSummaryResponse {
feature_count?: number | null
geometry_types?: string[] | null
bounds_json?: Record<string, number> | null
approximate_area_m2?: number | null
crs?: string | null
feature_geometry_count?: number | null
invalid_features?: number | null
crs_assumed?: boolean | null
}
export interface RasterMetadataResponse {
driver: string
dataset_id?: string
width: number
height: number
band_count: number
crs?: string | null
bounds?: number[]
resolution?: number[]
dtype?: string[]
nodata?: unknown
transform?: string[] | number[] | null
path?: string
size_bytes?: number | null
checksum_sha256?: string | null
operation?: string | null
operation_parameters?: Record<string, unknown> | null
source_dataset_id?: string | null
}
export interface RasterInspectResponse {
dataset_id: string
ready: boolean
metadata: Record<string, unknown>
}
export interface RasterPreviewPayload {
path: string
format: string
width: number | null
height: number | null
}
export interface RasterPreviewResponse {
dataset_id: string
ready: boolean
preview: RasterPreviewPayload
metadata?: Record<string, unknown>
}
export interface RasterBandStats {
band_index: number
dtype: string | null
min: number | null
max: number | null
mean: number | null
std: number | null
nodata_count: number
nodata_ratio: number
valid_pixel_count: number
histogram: number[] | null
histogram_bins: number[] | null
}
export interface RasterStatsResponse {
dataset_id: string
source_dataset_id?: string | null
bands: RasterBandStats[]
generated_at?: string | null
}
export interface RasterNdviRequest {
nir_band: number
red_band: number
output_name?: string
}
export interface RasterNdwiRequest {
green_band: number
nir_band: number
output_name?: string
}
export interface RasterNdbiRequest {
swir_band: number
nir_band: number
output_name?: string
}
export interface RasterTileManifestTile {
path: string
pixel_window: number[]
bounds: number[]
transform: number[]
index: number
}
export interface RasterTileManifest {
tile_set_id: string
source_dataset_id: string
source_raster_id: string
bounds: number[]
tile_size: number
overlap: number
parameters: Record<string, unknown>
created_at: string
tile_paths: string[]
count: number
tiles: RasterTileManifestTile[]
}
export interface RasterTileResponse {
dataset_id: string
ready: boolean
operation: string
tile_set_id: string
tile_size: number
overlap: number
manifest_path: string
count: number
manifest: RasterTileManifest
}
export interface RasterTileHandoff {
manifest_path: string
tile_set_id?: string | null
tile_size?: number | null
overlap?: number | null
count?: number | null
source_dataset_id?: string | null
created_at?: string | null
}
export interface VectorBBoxResponse {
dataset_id: string
bounds_json: Record<string, number> | null
feature_count: number
crs?: string | null
}
export interface VectorStatsResponse {
dataset_id: string
feature_count: number
geometry_type_summary: Record<string, number>
bounds_json: Record<string, number> | null
crs?: string | null
}
export interface VectorSelectionBBox {
min_x: number
min_y: number
max_x: number
max_y: number
crs?: 'EPSG:4326'
}
export interface OrthophotoAcquireRequest {
bbox: VectorSelectionBBox
area_id?: string
product_key?: string
force_refresh?: boolean
resolution_m?: number
}
export interface OrthophotoProductRead {
key: string
provider: string
display_name: string
observation_label: string
temporal_granularity: string
native_resolution_m: number
supports_detection: boolean
color_mode: string
catalog_url: string
coverage_zone: string
attribution: string
license_note: string
limitation_message: string
}
export interface OrthophotoAcquisitionResult {
output_dataset_id: string
reused: boolean
provider: string
product_key: string
display_name: string
observation_label: string
temporal_granularity: string
supports_detection: boolean
layer: string
width: number
height: number
resolution_m: number
bbox_epsg4326: number[]
bbox_epsg31370: number[]
attribution: string
limitation_message: string
}
export interface DhmvAcquireRequest {
bbox: VectorSelectionBBox
area_id?: string | null
product_key?: 'dtm_1m' | 'dsm_1m'
resolution_m?: number | null
force_refresh?: boolean
}
export interface DhmvProductRead {
key: 'dtm_1m' | 'dsm_1m'
display_name: string
surface_model: 'terrain' | 'surface'
coverage_id: string
native_resolution_m: number
source_crs: string
vertical_reference: string
acquisition_period: string
catalog_url: string
attribution: string
limitation_message: string
}
export interface SpwTerrainAcquireRequest {
bbox: VectorSelectionBBox
area_id?: string | null
product_key?: 'spw_mnt_1m_2021_2022'
resolution_m?: number | null
force_refresh?: boolean
}
export interface SpwTerrainProductRead {
key: 'spw_mnt_1m_2021_2022'
display_name: string
surface_model: 'terrain'
source_filename: string
native_resolution_m: number
analysis_resolution_m: number
source_crs: 'EPSG:3812'
vertical_reference: string
acquisition_period: string
catalog_url: string
attribution: string
license_note: string
limitation_message: string
coverage_zones: string[]
configured: boolean
status: string
}
export interface GrbAcquireRequest {
bbox: VectorSelectionBBox
area_id?: string | null
product_key: 'buildings' | 'roads' | 'water' | 'parcels'
force_refresh?: boolean
}
export interface GrbProductRead {
key: 'buildings' | 'roads' | 'water' | 'parcels'
display_name: string
reference_layer_name: string
collections: string[]
geometry_types: string[]
source_crs: 'EPSG:4326'
authority_level: 'authoritative'
catalog_url: string
attribution: string
license_note: string
limitation_message: string
}
export interface OfficialVectorAcquireRequest {
bbox: VectorSelectionBBox
area_id?: string | null
product_key: string
force_refresh?: boolean
}
export interface OfficialVectorProductRead {
key: string
display_name: string
theme: 'buildings' | 'roads' | 'water' | 'parcels' | 'nature_value' | 'soil'
provider: string
source_name: string
reference_layer_name: string
service_type: 'OGC API Features' | 'WFS 2.0' | 'ArcGIS REST'
collection: string
geometry_types: string[]
source_crs: string
source_version: string
observation_label: string
authority_level: 'authoritative' | 'authoritative_historical_baseline'
catalog_url: string
attribution: string
license_note: string
limitation_message: string
coverage_zones: string[]
}
export interface TerrainSelectionResponse {
dataset_id: string
dataset_ids: string[]
partition_count: number
product_key: string
surface_model: 'terrain' | 'surface'
selection_bbox: VectorSelectionBBox
selection_area_id?: string | null
sample_count: number
slope_sample_count: number
coverage_ratio: number
resolution_m: number
vertical_reference: string
summary: {
metric_label: string
metric_value: number
metric_unit: string
aggregation_method: string
primary_metric_key: string
metrics: VectorSelectionMetric[]
}
unsupported_metrics: string[]
limitation_message: string
generated_at: string
}
export interface FloodHazardAcquireRequest {
bbox: VectorSelectionBBox
area_id?: string | null
product_key?: string
resolution_m?: number | null
force_refresh?: boolean
}
export interface FloodHazardProductRead {
key: string
display_name: string
mechanism: 'pluviaal' | 'fluviaal'
climate_context: string
probability_class: string
return_period_years: number
coverage_id: string
native_resolution_m: number
source_crs: string
source_value_unit: 'cm'
normalized_value_unit: 'm'
published_on: string
catalog_url: string
attribution: string
limitation_message: string
}
export interface FloodHazardSelectionResponse {
dataset_id: string
dataset_ids: string[]
partition_count: number
product_key: string
mechanism: 'pluviaal' | 'fluviaal'
climate_context: string
probability_class: string
return_period_years: number
selection_bbox: VectorSelectionBBox
selection_area_id?: string | null
selected_cell_count: number
inundated_cell_count: number
inundated_fraction: number
resolution_m: number
summary: {
metric_label: string
metric_value: number
metric_unit: string
aggregation_method: string
primary_metric_key: string
metrics: VectorSelectionMetric[]
}
unsupported_metrics: string[]
limitation_message: string
generated_at: string
}
export interface BathymetryProfileAcquireRequest {
bbox: VectorSelectionBBox
area_id?: string | null
force_refresh?: boolean
}
export interface BathymetrySourceRead {
key: string
display_name: string
owner: string
authority_level: 'authoritative' | 'contextual'
geographic_coverage: string
data_kind: string
query_modes: string[]
vertical_reference: string
horizontal_crs: string
native_resolution?: string | null
integration_status: 'operational' | 'probe_only' | 'available_not_integrated' | 'catalog_only'
acquisition_supported: boolean
configured: boolean
service_url?: string | null
catalog_url: string
attribution: string
license_note: string
limitation_message: string
}
export interface BathymetrySourceProbeRead {
source_key: 'mdk_bcp_bathymetry'
status:
| 'disabled'
| 'invalid_configuration'
| 'tls_error'
| 'endpoint_unavailable'
| 'invalid_capabilities'
| 'reachable'
configured_url: string
capabilities_url?: string | null
tls_verified: boolean
capabilities_reachable: boolean
acquisition_supported: false
wcs_version?: string | null
coverage_identifiers: string[]
advertised_formats: string[]
advertised_crs: string[]
response_sha256?: string | null
checked_at: string
message: string
limitation_message: string
}
export interface BathymetryRasterSelectionResponse {
dataset_id: string
product_key: 'spw_bathymetry_50cm_mdng'
selection_bbox: VectorSelectionBBox
selection_area_id?: string | null
selected_cell_count: number
valid_cell_count: number
coverage_ratio: number
resolution_m: number
vertical_reference: 'mDNG'
survey_period: string
summary: {
metric_label: string
metric_value: number
metric_unit: string
aggregation_method: string
primary_metric_key: string
metrics: VectorSelectionMetric[]
}
unsupported_metrics: string[]
limitation_message: string
generated_at: string
}
export interface ThematicRasterAcquireRequest {
bbox: VectorSelectionBBox
area_id?: string | null
product_key: string
force_refresh?: boolean
}
export interface ThematicRasterProductRead {
key: string
display_name: string
theme: 'space_occupation' | 'open_space' | 'forest' | 'agriculture' | 'population' | 'accessibility' | 'services' | 'land_cover'
metric_kind: 'binary_area' | 'population_density' | 'index_score' | 'normalized_score' | 'categorical_area'
coverage_id: string
native_resolution_m: number
analysis_resolution_m?: number | null
source_crs: 'EPSG:31370' | 'EPSG:3812'
source_value_unit: string
observation_year: number
source_version: string
catalog_url: string
attribution: string
license_note: string
legend_min_label: string
legend_max_label: string
included_source_values: number[]
limitation_message: string
coverage_zones: string[]
configured: boolean
status: 'configured' | 'source_not_provisioned'
}
export interface ThematicRasterSelectionResponse {
dataset_id: string
product_key: string
theme: ThematicRasterProductRead['theme']
metric_kind: ThematicRasterProductRead['metric_kind']
selection_bbox: VectorSelectionBBox
selection_area_id?: string | null
selected_cell_count: number
valid_cell_count: number
coverage_ratio: number
resolution_m: number
observation_year: number
summary: {
metric_label: string
metric_value: number
metric_unit: string
aggregation_method: string
primary_metric_key: string
metrics: Array<VectorSelectionMetric & { is_estimate: boolean }>
}
unsupported_metrics: string[]
limitation_message: string
generated_at: string
}
export interface MapImageOverlay {
url: string
bbox: [number, number, number, number]
label: string
opacity?: number
}
export interface MapViewportState {
bbox: VectorSelectionBBox
zoom: number
}
export interface VectorSelectionRequest {
bbox: VectorSelectionBBox
area_id?: string
limit?: number
}
export interface VectorSelectionDeriveRequest extends VectorSelectionRequest {
output_name?: string
}
export interface VectorSelectionResponse {
selection_bbox: VectorSelectionBBox
selection_area_id?: string | null
feature_count: number
total_feature_count?: number | null
limit: number
truncated: boolean
geojson: GeoJSON.FeatureCollection
summary?: VectorSelectionSummary | null
partition_count?: number | null
available_partition_count?: number | null
partition_scope_key?: string | null
source_name?: string | null
dataset_ids?: string[]
}
export interface VectorSelectionSummary {
metric_label: string
metric_value: number
metric_unit: string
aggregation_method: string
primary_metric_key?: string | null
feature_count: number
is_estimate: boolean
warning?: string | null
metrics?: VectorSelectionMetric[]
}
export interface VectorSelectionMetric {
metric_key: string
metric_label: string
metric_value: number
metric_unit: string
aggregation_method: string
is_estimate: boolean
warning?: string | null
}
export interface DatasetTemporalUpdate {
temporal_series_key: string
observed_at: string
valid_from?: string | null
valid_to?: string | null
temporal_granularity?: string
source_version?: string | null
}
export interface DatasetVersionRead {
id: string
dataset_id: string
version: number
storage_path?: string | null
source_version?: string | null
observed_at?: string | null
valid_from?: string | null
valid_to?: string | null
checksum_sha256?: string | null
source_metadata?: Record<string, unknown> | null
provenance_metadata?: Record<string, unknown> | null
created_at?: string | null
}
export interface TemporalComparisonRequest {
earlier_dataset_id: string
later_dataset_id: string
bbox: VectorSelectionBBox
area_id?: string | null
preview_limit?: number
}
export interface TemporalDatasetRef {
id: string
name: string
observed_at: string
source_version?: string | null
}
export interface TemporalMetricComparison {
metric_key: string
label: string
unit: string
aggregation_method: string
earlier_value: number
later_value: number
absolute_change: number
percent_change?: number | null
is_estimate: boolean
warning?: string | null
}
export interface TemporalObservationMetric {
metric_key: string
label: string
value: number
unit: string
aggregation_method: string
is_estimate: boolean
}
export interface TemporalObservation {
dataset: TemporalDatasetRef
metrics: TemporalObservationMetric[]
}
export interface TemporalObjectChanges {
available: boolean
added_count?: number | null
removed_count?: number | null
modified_count?: number | null
unchanged_count?: number | null
}
export interface TemporalComparisonResponse {
temporal_series_key: string
earlier: TemporalDatasetRef
later: TemporalDatasetRef
selection_bbox: VectorSelectionBBox
selection_area_id?: string | null
metric: TemporalMetricComparison
metrics: TemporalMetricComparison[]
timeline: TemporalObservation[]
object_changes: TemporalObjectChanges
geojson: GeoJSON.FeatureCollection
warnings: string[]
generated_at: string
}
export interface TemporalSeriesDataset {
id: string
name: string
observed_at: string
source_version?: string | null
feature_count?: number | null
}
export interface TemporalSeriesRead {
temporal_series_key: string
source_name?: string | null
reference_layer_name?: string | null
dataset_count: number
first_observed_at: string
last_observed_at: string
datasets: TemporalSeriesDataset[]
}
export interface TemporalSeriesListResponse {
items: TemporalSeriesRead[]
total: number
}
export interface DatasetListResponse {
items: DatasetCreateResponse[]
total: number
limit: number
offset: number
}
export type SourceFreshnessStatus = 'current' | 'due' | 'review_required' | 'local'
export interface SourceIntegritySummary {
missing_version_count: number
checksum_mismatch_count: number
missing_storage_file_count: number
size_mismatch_count: number
}
export interface SourceFreshnessItem {
source_name: string
display_name: string
dataset_count: number
ready_count: number
version_count: number
latest_imported_at?: string | null
latest_observed_at?: string | null
latest_source_version?: string | null
refresh_policy: 'rolling_snapshot' | 'annual_release' | 'edition' | 'scenario' | 'archive' | 'local'
review_interval_days?: number | null
next_review_at?: string | null
status: SourceFreshnessStatus
historical_series: boolean
auto_refresh_supported: false
reason: string
recommended_action: string
integrity: SourceIntegritySummary
}
export interface SourceFreshnessReport {
project_id: string
generated_at: string
summary: {
source_count: number
dataset_count: number
current_count: number
due_count: number
review_required_count: number
local_count: number
sources_with_integrity_issues: number
integrity_issue_count: number
}
items: SourceFreshnessItem[]
limitations: string[]
}
export type SourceCatalogProbeStatus = 'available' | 'degraded' | 'unavailable' | 'disabled'
export type SourceCatalogComparisonStatus = 'same' | 'different' | 'not_comparable' | 'no_local_data' | 'unavailable'
export interface SourceCatalogProbeItem {
source_name: string
display_name: string
service_type: 'WFS' | 'WMS' | 'HTML' | 'DCAT'
endpoint_url: string
status: SourceCatalogProbeStatus
reachable: boolean
checked_at: string
cached: boolean
expected_layers: string[]
matched_layers: string[]
missing_layers: string[]
advertised_layer_count: number
metadata_url?: string | null
metadata_identifier?: string | null
remote_title?: string | null
remote_version?: string | null
remote_modified_at?: string | null
remote_published_at?: string | null
local_source_version?: string | null
comparison_status: SourceCatalogComparisonStatus
capabilities_sha256?: string | null
capabilities_etag?: string | null
capabilities_last_modified_at?: string | null
message: string
error_code?: string | null
}
export interface SourceCatalogProbeReport {
project_id: string
generated_at: string
summary: {
provider_count: number
available_count: number
degraded_count: number
unavailable_count: number
disabled_count: number
different_version_count: number
}
items: SourceCatalogProbeItem[]
limitations: string[]
}
export type GrbRefreshLayerStatus =
| 'current'
| 'update_available'
| 'not_loaded'
| 'review_required'
| 'remote_unavailable'
export interface GrbRefreshLayerPlan {
theme: 'buildings' | 'roads' | 'water' | 'parcels'
display_name: string
collections: string[]
temporal_series_key: string
status: GrbRefreshLayerStatus
local_dataset_id?: string | null
local_source_version?: string | null
local_observed_at?: string | null
local_imported_at?: string | null
local_feature_count?: number | null
local_size_bytes?: number | null
retained_after_refresh: boolean
action_message: string
}
export interface GrbRefreshPlan {
project_id: string
scope: string
generated_at: string
remote_status: string
remote_version?: string | null
remote_edition_date?: string | null
catalog_checked_at?: string | null
summary: {
layer_count: number
current_count: number
update_available_count: number
not_loaded_count: number
review_required_count: number
remote_unavailable_count: number
new_dataset_count_if_applied: number
retained_dataset_count: number
current_feature_count: number
current_size_bytes: number
}
layers: GrbRefreshLayerPlan[]
execution_mode: 'operator_stage_then_apply'
staging_required: true
automatic_import: false
destructive_replacement: false
message: string
limitations: string[]
}
export interface GeojsonEnvelopeResponse {
data: object
}
export interface ChangeDetectionRequest {
source_dataset_id: string
target_dataset_id: string
iou_threshold: number
include_unchanged: boolean
}
export interface ChangeDetectionSummary {
source_dataset_id: string
target_dataset_id: string
source_feature_count: number
target_feature_count: number
added_count: number
removed_count: number
unchanged_count: number
iou_threshold: number
warnings: string[]
generated_at: string
geojson: GeoJSON.FeatureCollection
}
export interface ProviderCapability {
provider_name: string
display_name: string
authority_level: 'authoritative' | 'contextual' | 'manual' | 'fixture' | string
supported_layers: string[]
supported_geometry_types: string[]
supported_query_modes: string[]
fetch_signature: string
configured: boolean
status: string
limitation_message: string
attribution: string
license_note: string
not_configured_reason: string | null
}
export type CoverageStatus = 'operational' | 'partial' | 'not_configured' | 'unsupported'
export interface CoverageBBox {
minx: number
miny: number
maxx: number
maxy: number
}
export interface CoverageSourceContract {
source_name: string
display_name: string
authority_level: 'authoritative' | 'official_context' | 'contextual'
coverage_zones: string[]
themes: string[]
native_layers: string[]
supported_geometry_types: string[]
acquisition_mode: 'operator_archive' | 'operator_wfs' | 'bounded_api' | 'bounded_raster' | 'catalog_only'
integration_status: CoverageStatus
source_url: string
attribution: string
license_note: string
limitation_message: string
}
export interface CoverageCatalogResponse {
themes: string[]
zones: string[]
statuses: CoverageStatus[]
sources: CoverageSourceContract[]
}
export interface CoverageResolutionItem {
zone: string
theme: string
status: CoverageStatus
source_names: string[]
materialized_dataset_ids: string[]
evidence: Array<{
dataset_id: string
source_name: string
authority_level: 'authoritative' | 'official_context' | 'contextual'
source_version?: string | null
observed_at?: string | null
published_at?: string | null
crs?: string | null
resolution?: Record<string, unknown> | null
coverage_bbox_epsg4326?: number[] | null
attribution?: string | null
license_note?: string | null
checksum_sha256?: string | null
}>
limitation_message: string
}
export interface CoverageResolveResponse {
project_id: string
bbox: CoverageBBox
requested_themes: string[]
intersected_zones: string[]
outside_supported_scope: boolean
items: CoverageResolutionItem[]
warnings: string[]
}
export interface SystemCapabilitiesResponse {
status: string
service: string
version: string
database: string | null
postgis: boolean
rasterio: boolean
geopandas: boolean
yolo: boolean | string
sam: boolean | string
grb: string
sentinel: string
providers: ProviderCapability[]
}
export interface AssistantModelRead {
name: string
size_bytes?: number | null
parameter_size?: string | null
quantization_level?: string | null
capabilities: string[]
}
export interface AssistantModelsResponse {
items: AssistantModelRead[]
total: number
default_model?: string | null
}
export interface AssistantStatus {
enabled: boolean
reachable: boolean
status: string
base_url: string
default_model?: string | null
model_count: number
limitation_message: string
}
export interface AssistantChatMessage {
role: 'user' | 'assistant'
content: string
}
export interface AssistantQueryRequest {
question: string
model?: string | null
bbox?: VectorSelectionBBox | null
area_id?: string | null
history?: AssistantChatMessage[]
}
export interface AssistantContextMetric {
theme: string
label: string
value: number
unit: string
source: string
dataset_id: string
observed_at?: string | null
is_estimate: boolean
}
export interface AssistantTemporalSeries {
temporal_series_key: string
label: string
source: string
first_year: number
last_year: number
observation_count: number
}
export interface AssistantQueryResponse {
answer: string
model: string
scope_label: string
context_metrics: AssistantContextMetric[]
temporal_series: AssistantTemporalSeries[]
source_dataset_ids: string[]
warnings: string[]
generated_at: string
}
export interface ProviderCapabilitiesResponse {
providers: ProviderCapability[]
}
export interface ProviderLayersResponse {
provider_name: string
layers: string[]
}
export interface ProviderStatusResponse {
provider_name: string
configured: boolean
status: string
limitation_message: string
}
export interface ProviderImportResponse {
provider_name: string
status: string
message: string
requested_layers: string[]
dataset_id: string | null
dataset_role?: string | null
source_name?: string | null
}
export interface DetectionModelCapability {
model_id: string
display_name: string
framework: string
task_type: string
supported_classes: string[]
configured: boolean
status: string
limitation_message: string
version?: string | null
training_scope?: string | null
validation_scope?: string | null
validated_regions: string[]
nationally_validated: boolean
operator_review_required: boolean
}
export interface DetectionModelsResponse {
models: DetectionModelCapability[]
}
export interface ModelAssetRead {
model_asset_id: string
filename: string
display_name: string
model_path: string
suffix: string
framework: string
task_type: string
size_bytes: number
sha256: string
active: boolean
status: string
limitation_message: string
will_download_models: boolean
}
export interface ModelAssetListResponse {
items: ModelAssetRead[]
total: number
model_directory: string
}
export interface YoloPreflightChecks {
enabled: boolean
dependencies_available?: boolean | null
model_path_set?: boolean | null
model_file_exists?: boolean | null
model_load_requested: boolean
model_load_ok?: boolean | null
manifest_path_set?: boolean | null
manifest_valid?: boolean | null
tile_paths_exist?: boolean | null
tile_limit_ok?: boolean | null
}
export interface YoloPreflightRuntime {
dependencies_assumed: boolean
model_directory?: string | null
yolo_config_dir?: string | null
torch_version?: string | null
ultralytics_version?: string | null
cuda_available?: boolean | null
}
export interface YoloPreflightResponse {
model_id: string
model_asset_id?: string | null
model_path?: string | null
tile_manifest_path?: string | null
status: string
message: string
checks: YoloPreflightChecks
runtime: YoloPreflightRuntime
tile_count: number
max_tiles: number
will_download_models: boolean
will_run_inference: boolean
error_code?: string | null
}
export interface DetectionRunRequest {
project_id: string
dataset_id: string
model_id: string
model_asset_id?: string | null
confidence_threshold: number
class_filter?: string[] | null
tile_manifest_path?: string | null
parameters_json?: Record<string, unknown>
}
export interface DetectionRunResponse {
analysis_run_id: string
job_id: string
project_id: string
dataset_id: string
model_id: string
status: string
detection_count: number
error_code?: string | null
message: string
}
export interface DetectionRunRead {
id: string
project_id: string
dataset_id?: string | null
job_id?: string | null
analysis_type: string
status: string
model_name?: string | null
model_version?: string | null
parameters_json: Record<string, unknown>
result_json?: Record<string, unknown> | null
error_message?: string | null
created_at?: string | null
started_at?: string | null
finished_at?: string | null
}
export interface DetectionRunListResponse {
items: DetectionRunRead[]
total: number
}
export interface DetectionRead {
id: string
project_id: string
dataset_id?: string | null
analysis_run_id?: string | null
job_id?: string | null
model_name: string
model_version?: string | null
class_name: string
confidence: number
bbox_json?: Record<string, unknown> | null
source_tile_path?: string | null
properties_json?: Record<string, unknown> | null
created_at?: string | null
}
export interface DetectionListResponse {
items: DetectionRead[]
total: number
}
export interface DetectionQaRequest {
reference_dataset_id: string
iou_threshold: number
class_name?: string | null
min_confidence?: number | null
}
export interface DetectionQaResult {
status: string
quality_check_id: string
analysis_run_id: string
reference_dataset_id: string
candidate_feature_count: number
reference_feature_count: number
candidate_feature_count_raw?: number
reference_feature_count_raw?: number
matches: number
false_positives: number
false_negatives: number
precision?: number | null
recall?: number | null
f1_score?: number | null
mean_iou?: number | null
iou_threshold: number
warnings: string[]
coverage?: {
applied: boolean
mode: string
manifest_path?: string | null
tile_count: number
source_crs_values: string[]
candidate_raw_count: number
candidate_evaluated_count: number
candidate_excluded_outside_count: number
candidate_clipped_boundary_count: number
reference_raw_count: number
reference_evaluated_count: number
reference_excluded_outside_count: number
reference_clipped_boundary_count: number
}
box_to_footprint_diagnostics?: {
diagnostic_only: boolean
canonical_method: string
diagnostic_method: string
iou_threshold: number
strict_matches: number
envelope_matches: number
possible_box_to_footprint_mismatch_count: number
envelope_false_positives: number
envelope_false_negatives: number
envelope_precision?: number | null
envelope_recall?: number | null
envelope_f1_score?: number | null
envelope_mean_iou?: number | null
}
}
export type SegmentationModelCapability = DetectionModelCapability
export interface SegmentationModelsResponse {
models: SegmentationModelCapability[]
}
export interface SegmentationRunRequest {
project_id: string
dataset_id: string
model_id: string
confidence_threshold: number
class_filter?: string[] | null
tile_manifest_path?: string | null
parameters_json?: Record<string, unknown>
}
export interface SegmentationRunResponse {
analysis_run_id: string
job_id: string
project_id: string
dataset_id: string
model_id: string
status: string
segmentation_count: number
error_code?: string | null
message: string
}
export interface SegmentationRunRead {
id: string
project_id: string
dataset_id?: string | null
job_id?: string | null
analysis_type: string
status: string
model_name?: string | null
model_version?: string | null
parameters_json: Record<string, unknown>
result_json?: Record<string, unknown> | null
error_message?: string | null
created_at?: string | null
started_at?: string | null
finished_at?: string | null
}
export interface SegmentationRunListResponse {
items: SegmentationRunRead[]
total: number
}
export interface SegmentationRead {
id: string
project_id: string
dataset_id?: string | null
analysis_run_id?: string | null
job_id?: string | null
model_name: string
model_version?: string | null
class_name: string
confidence?: number | null
bbox_json?: Record<string, unknown> | null
area_m2?: number | null
mask_path?: string | null
source_tile_path?: string | null
tile_index?: number | null
properties_json?: Record<string, unknown> | null
provenance_json?: Record<string, unknown> | null
created_at?: string | null
}
export interface SegmentationListResponse {
items: SegmentationRead[]
total: number
}
export interface SegmentationQaRequest {
reference_dataset_id: string
iou_threshold: number
class_name?: string | null
min_confidence?: number | null
}
export type SegmentationQaResult = DetectionQaResult
export interface QaComparisonRequest {
candidate_dataset_id: string
reference_dataset_id: string
iou_threshold: number
area_id?: string | null
}
export interface QaComparisonResult {
status: string
warnings: string[]
candidate_feature_count: number
reference_feature_count: number
matches: number
false_positives: number
false_negatives: number
precision: number | null
recall: number | null
f1_score: number | null
mean_iou: number | null
iou_threshold: number
unsupported_geometry: boolean
unsupported_geometries: string[]
match_evidence?: Record<string, unknown>[]
false_positive_evidence?: Record<string, unknown>[]
false_negative_evidence?: Record<string, unknown>[]
generated_at: string
quality_check_id?: string
}
export interface MetricRead {
id: string
quality_check_id?: string | null
analysis_run_id?: string | null
metric_key: string
metric_value?: number | null
metric_unit?: string | null
label?: string | null
metadata_json?: Record<string, unknown> | null
created_at?: string | null
}
export interface QualityCheckRead {
id: string
project_id: string
job_id?: string | null
analysis_run_id?: string | null
candidate_dataset_id?: string | null
reference_dataset_id: string
check_type: string
status: string
score?: number | null
parameters_json?: Record<string, unknown> | null
findings_json?: Record<string, unknown> | null
created_at?: string | null
completed_at?: string | null
metrics: MetricRead[]
}
export interface QualityCheckListResponse {
items: QualityCheckRead[]
total: number
limit: number
offset: number
}
export interface QualityEvidenceGeoJsonResponse {
quality_check_id: string
project_id: string
candidate_dataset_id?: string | null
reference_dataset_id: string
analysis_run_id?: string | null
feature_count: number
warnings: string[]
geojson: GeoJSON.FeatureCollection
}
export type DetectionEvidenceRole = 'false_positive' | 'false_negative'
export type DetectionReviewDecision =
| 'confirmed_model_false_positive'
| 'confirmed_model_false_negative'
| 'reference_gap_or_change'
| 'qa_alignment_mismatch'
| 'imagery_obscured_or_uncertain'
| 'uncertain'
| 'unreviewed'
export interface DetectionReviewUpsert {
evidence_role: DetectionEvidenceRole
evidence_feature_id: string
decision: DetectionReviewDecision
notes?: string | null
reviewed_by?: string
}
export interface DetectionReviewRead {
id?: string | null
project_id: string
quality_check_id: string
analysis_run_id?: string | null
evidence_role: DetectionEvidenceRole
evidence_feature_id: string
detection_id?: string | null
reference_feature_id?: string | null
decision: DetectionReviewDecision
notes?: string | null
reviewed_by?: string | null
confidence?: number | null
class_name?: string | null
source_tile_path?: string | null
created_at?: string | null
updated_at?: string | null
}
export interface DetectionReviewSummary {
total: number
reviewed: number
remaining: number
false_positive_total: number
false_negative_total: number
decision_counts: Record<string, number>
}
export interface DetectionReviewList {
items: DetectionReviewRead[]
total: number
limit: number
offset: number
summary: DetectionReviewSummary
}
export type ExportKind = 'dataset' | 'detection_run' | 'segmentation_run' | 'vector_selection'
export interface ExportRead {
id: string
project_id: string
analysis_run_id?: string | null
export_type: string
storage_path: string
metadata_json?: Record<string, unknown> | null
created_at?: string | null
status: string
}
export interface ExportCreateResponse {
export_id: string
path: string
status: string
export_type: string
metadata_json?: Record<string, unknown> | null
}
export interface MapResultExportRequest {
project_id: string
mode: 'current' | 'evolution'
bbox: VectorSelectionBBox
dataset_id?: string
earlier_dataset_id?: string
later_dataset_id?: string
area_id?: string
partitioned?: boolean
product_key?: string
partition_scope_key?: string
theme_id?: string
name?: string
}
export interface ExportListResponse {
items: ExportRead[]
total: number
limit: number
offset: number
}
export interface ExportContentResponse {
export_id: string
export_type: string
content: Record<string, unknown>
}