# Backend Service IO Contracts ## ProjectService `create_project(input: ProjectCreate) -> ProjectRead` `list_projects() -> list[ProjectRead]` `get_project(project_id: str) -> ProjectRead` ## AreaService `create_area(project_id: str, input: AreaCreate) -> AreaRead` `list_areas(project_id: str) -> FeatureCollection` `validate_geometry(geojson: dict) -> GeometryValidationResult` ## DatasetService `register_upload(project_id: str, file) -> DatasetRead` `extract_metadata(dataset_id: str) -> DatasetMetadataResult` `list_datasets(project_id: str) -> list[DatasetRead]` `get_dataset(dataset_id: str) -> DatasetRead` ## RasterService `read_metadata(path: Path) -> RasterMetadata` `clip(dataset_id: str, area_id: str) -> JobRead` `tile(dataset_id: str, parameters: TileParameters) -> JobRead` `calculate_index(dataset_id: str, index_type: str, bands: dict) -> JobRead` ## VectorService `read_metadata(path: Path) -> VectorMetadata` `clip(dataset_id: str, area_id: str) -> JobRead` `buffer(dataset_id: str, distance_m: float) -> JobRead` `intersect(left_dataset_id: str, right_dataset_id: str) -> JobRead` ## DetectionService `create_run(project_id: str, input: DetectionRunCreate) -> AnalysisRunRead` `execute_run(run_id: str) -> DetectionRunResult` ## SegmentationService `create_run(project_id: str, input: SegmentationRunCreate) -> AnalysisRunRead` `execute_run(run_id: str) -> SegmentationRunResult` ## QAQCService `create_quality_check(input: QualityCheckCreate) -> QualityCheckRead` `calculate_iou_matrix(candidate_layer_id: str, reference_layer_id: str) -> IoUMatrix` `calculate_metrics(matches: list[Match]) -> QualityMetrics` ## ExportService `create_export(input: ExportCreate) -> ExportRead` `write_geojson(layer_id: str) -> Path` `write_metrics_csv(analysis_run_id: str) -> Path`