Detection and segmentation run listings returned every run a project had ever produced. Runs accumulate with every analysis while the panel only ever draws the recent ones, so the response grew without bound for no benefit. Both take limit and offset now and report total, limit, offset and truncated, matching the result listings. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1858 lines
46 KiB
TypeScript
1858 lines
46 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
|
|
/** Set when the selection was finer than one source cell and widened. */
|
|
cell_selection_warning?: string | null
|
|
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
|
|
/** Cells the flood model actually covers inside the selection. */
|
|
valid_cell_count?: number
|
|
no_data_cell_count?: number
|
|
data_coverage_ratio?: number
|
|
inundated_cell_count: number
|
|
/** Share of the *modelled* cells; null when nothing was modelled. */
|
|
inundated_fraction: number | null
|
|
coverage_warning?: string | null
|
|
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
|
|
/** Set when the selection was finer than one source cell and widened. */
|
|
cell_selection_warning?: string | null
|
|
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
|
|
/** Set when the selection was finer than one source cell and widened. */
|
|
cell_selection_warning?: string | null
|
|
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
|
|
/**
|
|
* Whole features touching the selection. Area and length metrics clip to the
|
|
* selection, so these two fields say how far the populations diverge.
|
|
*/
|
|
feature_count: number
|
|
fully_covered_feature_count?: number | null
|
|
partially_covered_feature_count?: number | null
|
|
selection_edge_warning?: string | null
|
|
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
|
|
/** Below this the footprints are separate objects rather than one redrawn. */
|
|
modified_threshold?: number
|
|
include_unchanged: boolean
|
|
/** Without a selection the comparison covers both datasets in full. */
|
|
bbox?: VectorSelectionBBox | null
|
|
area_id?: string | null
|
|
preview_limit?: number
|
|
}
|
|
|
|
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
|
|
/** A footprint that was redrawn, not demolished and rebuilt. */
|
|
modified_count?: number
|
|
unchanged_count: number
|
|
iou_threshold: number
|
|
modified_iou_threshold?: number | null
|
|
selection_area_id?: string | null
|
|
/** Counts cover the whole selection; the GeoJSON is capped. */
|
|
preview_limit?: number | null
|
|
preview_truncated?: boolean
|
|
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 {
|
|
/** The most recent page; `total` counts every run. */
|
|
items: DetectionRunRead[]
|
|
total: number
|
|
limit?: number | null
|
|
offset?: number
|
|
truncated?: boolean
|
|
}
|
|
|
|
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 {
|
|
/** One page of results; `total` is the complete population. */
|
|
items: DetectionRead[]
|
|
total: number
|
|
limit?: number | null
|
|
offset?: number
|
|
truncated?: boolean
|
|
}
|
|
|
|
export interface DetectionQaRequest {
|
|
reference_dataset_id: string
|
|
iou_threshold: number
|
|
class_name?: string | null
|
|
min_confidence?: number | null
|
|
/**
|
|
* Confidence cuts to report next to the run's own operating point. They are
|
|
* read off one matching pass, so a sweep costs no extra inference.
|
|
*/
|
|
calibration_thresholds?: number[]
|
|
}
|
|
|
|
/** One confidence cut, derived from a single run rather than a run of its own. */
|
|
export interface DetectionCalibrationPoint {
|
|
min_confidence: number
|
|
confidence_threshold: number | null
|
|
candidate_count: number
|
|
true_positives: number
|
|
false_positives: number
|
|
false_negatives: number
|
|
precision: number | null
|
|
recall: number | null
|
|
f1_score: number | null
|
|
best_f1_in_sweep: boolean
|
|
}
|
|
|
|
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
|
|
/** Whether the candidates are detector boxes or true footprint polygons. */
|
|
candidate_geometry_mode?: string
|
|
interpretation?: string
|
|
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
|
|
envelope_precision_recall_curve?: PrecisionRecallCurve
|
|
}
|
|
precision_recall_curve?: PrecisionRecallCurve
|
|
calibration_sweep?: DetectionCalibrationPoint[]
|
|
}
|
|
|
|
/**
|
|
* Threshold-independent view of a detection run: precision and recall at every
|
|
* confidence value that occurs, so two models can be compared without both
|
|
* being read at one arbitrary cut.
|
|
*/
|
|
export interface PrecisionRecallCurve {
|
|
iou_threshold: number
|
|
reference_count: number
|
|
candidate_count: number
|
|
average_precision: number
|
|
best_f1: number
|
|
best_f1_threshold: number | null
|
|
best_f1_precision?: number | null
|
|
best_f1_recall?: number | null
|
|
points: PrecisionRecallPoint[]
|
|
}
|
|
|
|
export interface PrecisionRecallPoint {
|
|
confidence_threshold: number
|
|
candidate_count: number
|
|
true_positives: number
|
|
false_positives: number
|
|
false_negatives: number
|
|
precision: number
|
|
recall: number
|
|
f1_score: number
|
|
}
|
|
|
|
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 {
|
|
/** The most recent page; `total` counts every run. */
|
|
items: SegmentationRunRead[]
|
|
total: number
|
|
limit?: number | null
|
|
offset?: number
|
|
truncated?: boolean
|
|
}
|
|
|
|
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 {
|
|
/** One page of results; `total` is the complete population. */
|
|
items: SegmentationRead[]
|
|
total: number
|
|
limit?: number | null
|
|
offset?: number
|
|
truncated?: boolean
|
|
}
|
|
|
|
export interface SegmentationQaRequest {
|
|
reference_dataset_id: string
|
|
iou_threshold: number
|
|
class_name?: string | null
|
|
min_confidence?: number | null
|
|
/** Read off the one matching pass, exactly as for detection. */
|
|
calibration_thresholds?: number[]
|
|
}
|
|
|
|
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
|
|
/**
|
|
* Features drawn. The overlay is capped so a regional check stays
|
|
* reviewable — misses and false positives first — while the counts in the
|
|
* quality check itself remain complete.
|
|
*/
|
|
feature_count: number
|
|
total_feature_count?: number | null
|
|
role_counts?: Record<string, number>
|
|
truncated?: boolean
|
|
limit?: number | null
|
|
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 ReviewedScore {
|
|
matches: number
|
|
false_positives: number
|
|
false_negatives: number
|
|
precision: number | null
|
|
recall: number | null
|
|
f1_score: number | null
|
|
}
|
|
|
|
export interface ReviewedFindingBreakdown {
|
|
total: number
|
|
/** Findings the operator established were not the model's error. */
|
|
exonerated: number
|
|
confirmed_or_inconclusive: number
|
|
unreviewed: number
|
|
}
|
|
|
|
/**
|
|
* The score with operator verdicts applied, next to the raw one. A finding
|
|
* adjudicated as a reference gap is not the model's error; the interval covers
|
|
* what the unreviewed remainder could still turn out to be.
|
|
*/
|
|
export interface ReviewedMetrics {
|
|
raw: ReviewedScore
|
|
adjudicated: ReviewedScore
|
|
pessimistic: ReviewedScore
|
|
optimistic: ReviewedScore
|
|
review_complete: boolean
|
|
false_positive_breakdown: ReviewedFindingBreakdown
|
|
false_negative_breakdown: ReviewedFindingBreakdown
|
|
}
|
|
|
|
export interface DetectionReviewSummary {
|
|
total: number
|
|
reviewed: number
|
|
remaining: number
|
|
false_positive_total: number
|
|
false_negative_total: number
|
|
decision_counts: Record<string, number>
|
|
reviewed_metrics?: ReviewedMetrics | null
|
|
}
|
|
|
|
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>
|
|
}
|