reasoninglayer 0.1.2

Rust client SDK for the Reasoning Layer API
Documentation
//! Entity review DTOs.

use std::collections::BTreeMap;

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ReviewReason {
    AmbiguousSort,
    LowConfidence,
    MultipleCandidates,
    UnknownSort,
    ConflictingFeatures,
    MissingRequiredFeatures,
    ManualRequest,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ConflictResolution {
    KeepExisting,
    UseNew,
    Merge,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReviewCandidateMatchDto {
    pub display_name: String,
    #[serde(default)]
    pub features: BTreeMap<String, serde_json::Value>,
    pub similarity: f64,
    pub sort: String,
    pub term_id: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SortSuggestionDto {
    pub confidence: f64,
    #[serde(default)]
    pub features: Vec<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub observation_count: Option<u64>,
    pub origin: String,
    #[serde(default)]
    pub parent_sorts: Vec<String>,
    pub suggested_name: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PendingReviewDto {
    #[serde(default)]
    pub candidates: Vec<ReviewCandidateMatchDto>,
    pub entity_id: String,
    pub reason: String,
    pub sort: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AddPendingReviewRequest {
    #[serde(default)]
    pub candidates: Vec<ReviewCandidateMatchDto>,
    pub confidence: f64,
    pub entity_id: String,
    #[serde(default)]
    pub features: BTreeMap<String, serde_json::Value>,
    pub owner_id: String,
    pub reason: ReviewReason,
    pub sort: String,
    #[serde(default)]
    pub sort_suggestions: Vec<SortSuggestionDto>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub source_document: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub source_text: Option<String>,
    pub tenant_id: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApproveEntityRequest {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub notes: Option<String>,
    pub review_id: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BulkApproveRequest {
    pub review_ids: Vec<String>,
    pub reviewed_by: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BulkMergeRequest {
    pub review_ids: Vec<String>,
    pub reviewed_by: String,
    pub target_term_id: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BulkRejectRequest {
    pub reason: String,
    pub review_ids: Vec<String>,
    pub reviewed_by: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CorrectEntityRequest {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub features: Option<BTreeMap<String, serde_json::Value>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub notes: Option<String>,
    pub review_id: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sort: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MergeEntityRequest {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub conflict_resolution: Option<ConflictResolution>,
    pub review_id: String,
    pub target_term_id: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReExtractRequest {
    pub document_id: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub extraction_strategy: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub focus_sorts: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub instructions: Option<String>,
    pub tenant_id: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RejectEntityRequest {
    pub reason: String,
    pub review_id: String,
}