{
  "openapi": "3.1.0",
  "info": {
    "title": "Simulação pública de bens e direitos",
    "version": "1.4.0",
    "description": "Estimativas sem login e sem persistência. Rotas market consultam veículos, aquisições de equipamentos, Tesouro Direto e Selic; inventory usa referências de estoques. A cobertura é explícita por categoria. A rota public-estimates mantém cenários manuais opcionais. Nenhum resultado substitui uma avaliação verificada."
  },
  "servers": [
    {
      "url": "https://estimabem.com.br"
    },
    {
      "url": "https://valor-do-imovel.vercel.app"
    }
  ],
  "security": [],
  "paths": {
    "/api/v1/asset-valuation/inventory/presets": {
      "get": {
        "operationId": "getInventoryPresets",
        "summary": "Produtos com unidade e fonte de preço predefinidas",
        "responses": {
          "200": {
            "description": "products: product_id, name, kind, unit_label, quantity_label, available, price e reference. available=false significa referência vencida; price=null. A evidência conserva sua data histórica.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/inventory/quick-estimates": {
      "post": {
        "operationId": "estimateInventoryPreset",
        "summary": "Estimar estoque informando apenas produto e quantidade",
        "description": "Público, sem cadastro ou persistência. Usa a média estadual publicada pelo DERAL, até 21 dias, na unidade predefinida. Não aceita preço enviado pelo cliente nem supõe localização ou condição do estoque. Valores monetários são strings decimais.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "product_id",
                  "quantity"
                ],
                "properties": {
                  "product_id": {
                    "type": "string"
                  },
                  "quantity": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                  },
                  "asset_class": {
                    "enum": [
                      "INVENTORY",
                      "STORED_COMMODITY"
                    ],
                    "default": "INVENTORY"
                  }
                }
              },
              "example": {
                "product_id": "deral-prp-cafe-beneficiado-produtor",
                "quantity": "100"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Estimativa com amount, unit_price, inventory, source, evidence, assumptions e limitations. pricing_mode=PRESET, inventory.state e condition nulos.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "413": {
            "description": "Corpo acima de 4 KB.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Produto sem referência recente, quantidade inválida ou campo não permitido.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/inventory/catalog": {
      "get": {
        "operationId": "getInventoryCatalog",
        "summary": "Catálogo de produtos, tipos e unidades",
        "responses": {
          "200": {
            "description": "Produtos selecionáveis; cobertura de preço explícita.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/inventory/material": {
      "get": {
        "operationId": "lookupInventoryMaterial",
        "summary": "Conferir descrição de um código CATMAT",
        "parameters": [
          {
            "name": "code",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{4,9}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Descrição oficial do item.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Código inválido ou inexistente.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Fonte indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/inventory/references": {
      "get": {
        "operationId": "getInventoryReferences",
        "summary": "Consultar evidências de preço do produto",
        "parameters": [
          {
            "name": "product_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "material_code",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Referências com ID, data, preço, unidade, região, nível de comercialização e URL. Lista vazia significa ausência de cobertura.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Entrada inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Fonte indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/inventory/estimates": {
      "post": {
        "operationId": "estimateIdentifiedInventory",
        "summary": "Estimar lote com referência pública ou cotação própria",
        "description": "Sem autenticação ou persistência. Corpo máximo 16 KB. Com reference, o servidor resolve o preço pelo ID. DERAL: captura semanal até 21 dias; compras públicas: até 180 dias e até 50 registros. Conversão apenas entre pesos documentados; embalagens de compras públicas exigem unidade exata. Fonte própria exige nome e data, sem acesso automático ao link.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "asset_class",
                  "product_id",
                  "kind",
                  "product_name",
                  "presentation",
                  "condition",
                  "state",
                  "quantity",
                  "unit",
                  "price_mode"
                ],
                "properties": {
                  "asset_class": {
                    "enum": [
                      "INVENTORY",
                      "STORED_COMMODITY"
                    ]
                  },
                  "product_id": {
                    "type": "string"
                  },
                  "kind": {
                    "enum": [
                      "agricultural",
                      "raw_material",
                      "finished",
                      "custom"
                    ]
                  },
                  "product_name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "presentation": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "brand": {
                    "type": "string",
                    "maxLength": 150
                  },
                  "lot": {
                    "type": "string",
                    "maxLength": 100
                  },
                  "condition": {
                    "enum": [
                      "normal",
                      "near_expiry",
                      "damaged",
                      "expired",
                      "used"
                    ]
                  },
                  "expiry": {
                    "type": "string"
                  },
                  "state": {
                    "enum": [
                      "AC",
                      "AL",
                      "AP",
                      "AM",
                      "BA",
                      "CE",
                      "DF",
                      "ES",
                      "GO",
                      "MA",
                      "MT",
                      "MS",
                      "MG",
                      "PA",
                      "PB",
                      "PR",
                      "PE",
                      "PI",
                      "RJ",
                      "RN",
                      "RS",
                      "RO",
                      "RR",
                      "SC",
                      "SP",
                      "SE",
                      "TO"
                    ]
                  },
                  "quantity": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                  },
                  "unit": {
                    "enum": [
                      "source",
                      "kg",
                      "tonne",
                      "sack60",
                      "sack50",
                      "unit",
                      "box",
                      "package",
                      "litre",
                      "metre",
                      "m3"
                    ]
                  },
                  "price_mode": {
                    "enum": [
                      "reference",
                      "manual"
                    ]
                  },
                  "unit_price": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                  },
                  "reference_id": {
                    "type": "string"
                  },
                  "material_code": {
                    "type": "string"
                  },
                  "reference_confirmed": {
                    "type": "boolean"
                  },
                  "evidence": {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "label",
                      "as_of"
                    ],
                    "properties": {
                      "label": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      "as_of": {
                        "type": "string",
                        "format": "date"
                      },
                      "url": {
                        "type": "string"
                      }
                    }
                  }
                },
                "allOf": [
                  {
                    "if": {
                      "properties": {
                        "price_mode": {
                          "const": "reference"
                        }
                      }
                    },
                    "then": {
                      "required": [
                        "reference_id",
                        "reference_confirmed"
                      ],
                      "properties": {
                        "reference_confirmed": {
                          "const": true
                        }
                      },
                      "not": {
                        "anyOf": [
                          {
                            "required": [
                              "unit_price"
                            ]
                          },
                          {
                            "required": [
                              "evidence"
                            ]
                          }
                        ]
                      }
                    }
                  },
                  {
                    "if": {
                      "properties": {
                        "price_mode": {
                          "const": "manual"
                        }
                      }
                    },
                    "then": {
                      "required": [
                        "unit_price",
                        "evidence"
                      ]
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "amount em BRL, basis PUBLIC_REFERENCE ou USER_PROVIDED, inventory, evidence, source, conversion_factor, hipóteses e limitações.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "413": {
            "description": "Corpo acima de 16 KB.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Dados, condição, referência ou unidade incompatíveis.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Fonte indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/market/guided-estimates": {
      "post": {
        "operationId": "estimateGuidedAssetScenario",
        "summary": "Cenários públicos por tipo de bem: rebanhos, metais, produção, fluxos e custo depreciado",
        "description": "Sem login e sem persistência. Valores decimais são strings. Retorna amount, basis, calculation, source, evidence, assumptions e limitations. Custo depreciado e fluxos são cenários com parâmetros do visitante, não preços verificados de revenda ou valor de mercado. Rebanhos: suínos/frangos de abate por peso vivo e média PR. Biológicos: um ciclo, com custos em valor presente; o saldo pode ser negativo. Metais: XAU/XAG, cotação USD/onça troy de Gold API e câmbio SGS 1; peso sem pedras. Participações: caixa líquido anual de todos os sócios e percentual; IP: fluxo líquido atribuível ao direito. Fluxos usam Selic constante, sem risco ou valor terminal. Limites e fontes inválidos geram 422/503, nunca valores fictícios.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "asset_class": {
                        "const": "AIRCRAFT"
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "replacement_cost": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "age_years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "useful_life_years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "residual_percent": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          }
                        },
                        "required": [
                          "name",
                          "replacement_cost",
                          "age_years",
                          "useful_life_years",
                          "residual_percent"
                        ]
                      }
                    },
                    "required": [
                      "asset_class",
                      "parameters"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "asset_class": {
                        "const": "VESSEL"
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "replacement_cost": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "age_years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "useful_life_years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "residual_percent": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          }
                        },
                        "required": [
                          "name",
                          "replacement_cost",
                          "age_years",
                          "useful_life_years",
                          "residual_percent"
                        ]
                      }
                    },
                    "required": [
                      "asset_class",
                      "parameters"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "asset_class": {
                        "const": "AGRICULTURAL_MACHINERY"
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "replacement_cost": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "age_years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "useful_life_years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "residual_percent": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          }
                        },
                        "required": [
                          "name",
                          "replacement_cost",
                          "age_years",
                          "useful_life_years",
                          "residual_percent"
                        ]
                      }
                    },
                    "required": [
                      "asset_class",
                      "parameters"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "asset_class": {
                        "const": "INDUSTRIAL_EQUIPMENT"
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "replacement_cost": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "age_years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "useful_life_years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "residual_percent": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          }
                        },
                        "required": [
                          "name",
                          "replacement_cost",
                          "age_years",
                          "useful_life_years",
                          "residual_percent"
                        ]
                      }
                    },
                    "required": [
                      "asset_class",
                      "parameters"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "asset_class": {
                        "const": "MEDICAL_EQUIPMENT"
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          },
                          "replacement_cost": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "age_years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "useful_life_years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "residual_percent": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          }
                        },
                        "required": [
                          "name",
                          "replacement_cost",
                          "age_years",
                          "useful_life_years",
                          "residual_percent"
                        ]
                      }
                    },
                    "required": [
                      "asset_class",
                      "parameters"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "asset_class": {
                        "const": "LIVESTOCK"
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "product_id": {
                            "type": "string",
                            "enum": [
                              "deral-prp-suino",
                              "deral-prp-frango-vivo"
                            ]
                          },
                          "heads": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "weight_kg": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          }
                        },
                        "required": [
                          "product_id",
                          "heads",
                          "weight_kg"
                        ]
                      }
                    },
                    "required": [
                      "asset_class",
                      "parameters"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "asset_class": {
                        "const": "BIOLOGICAL_ASSET"
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "product_id": {
                            "type": "string",
                            "enum": [
                              "deral-prp-cafe-beneficiado-produtor",
                              "deral-prp-milho",
                              "deral-prp-soja"
                            ]
                          },
                          "quantity": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "due_date": {
                            "type": "string",
                            "format": "date"
                          },
                          "remaining_costs": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          }
                        },
                        "required": [
                          "product_id",
                          "quantity",
                          "due_date",
                          "remaining_costs"
                        ]
                      }
                    },
                    "required": [
                      "asset_class",
                      "parameters"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "asset_class": {
                        "const": "PRIVATE_EQUITY_INTEREST"
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "annual_cash": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "ownership_percent": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          }
                        },
                        "required": [
                          "annual_cash",
                          "years",
                          "ownership_percent"
                        ]
                      }
                    },
                    "required": [
                      "asset_class",
                      "parameters"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "asset_class": {
                        "const": "INTELLECTUAL_PROPERTY"
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "right_type": {
                            "type": "string",
                            "enum": [
                              "brand",
                              "patent",
                              "software",
                              "license"
                            ]
                          },
                          "annual_cash": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          },
                          "years": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          }
                        },
                        "required": [
                          "right_type",
                          "annual_cash",
                          "years"
                        ]
                      }
                    },
                    "required": [
                      "asset_class",
                      "parameters"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "asset_class": {
                        "const": "PRECIOUS_ASSET"
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "metal": {
                            "type": "string",
                            "enum": [
                              "XAU",
                              "XAG"
                            ]
                          },
                          "purity_percent": {
                            "type": "string",
                            "enum": [
                              "99.9",
                              "95",
                              "92.5",
                              "91.666667",
                              "75",
                              "58.5",
                              "37.5"
                            ]
                          },
                          "weight_grams": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                          }
                        },
                        "required": [
                          "metal",
                          "purity_percent",
                          "weight_grams"
                        ]
                      }
                    },
                    "required": [
                      "asset_class",
                      "parameters"
                    ]
                  }
                ]
              },
              "example": {
                "asset_class": "LIVESTOCK",
                "parameters": {
                  "product_id": "deral-prp-suino",
                  "heads": "100",
                  "weight_kg": "100"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Resultado com amount decimal em BRL, basis, source, data, evidence e limitações. Quando não há comparáveis, amount=null e status=INSUFFICIENT_DATA; nunca substitua null por zero.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "413": {
            "description": "Corpo acima de 4 KB.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Entrada inválida ou referência indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Fonte indisponível, resposta inválida ou limite de consultas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/market/coverage": {
      "get": {
        "operationId": "getMarketCoverage",
        "summary": "Cobertura e dados necessários das 18 categorias",
        "responses": {
          "200": {
            "description": "categories por asset_class e equipment_families. specialized significa ausência de estimativa automática integrada.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/market/vehicles": {
      "get": {
        "operationId": "getVehicleCatalog",
        "summary": "Marcas, modelos ou anos/combustíveis dos veículos",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": true,
            "schema": {
              "enum": [
                "cars",
                "motorcycles",
                "trucks"
              ]
            }
          },
          {
            "name": "brand",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "model",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "items com code e name, preservados para compatibilidade. Informe type para marcas, type+brand para modelos/versões, e type+brand+model para anos. Na resposta de modelos, model_groups contém code, name e versions (code e nome completo da fonte), agrupados pelo prefixo do nome (grouping_basis=CATALOG_NAME_PREFIX). O code family: identifica apenas um grupo de navegação, não um código FIPE. Ao consultar anos ou estimar, envie versions[].code como model. Catálogo de terceiros Parallelum / FipeAPI.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Entrada inválida ou referência indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Fonte indisponível, resposta inválida ou limite de consultas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/market/vehicle-estimates": {
      "post": {
        "operationId": "estimateVehicleFromFipe",
        "summary": "Preço de referência FIPE por veículo",
        "description": "Fonte: Parallelum / FipeAPI, não API oficial da FIPE. Aceita referência do mês atual ou anterior; não aplica ajustes de quilometragem. Ano é o código composto de ano-modelo/combustível. Não aceita preço enviado pelo cliente.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "enum": [
                      "cars",
                      "motorcycles",
                      "trucks"
                    ]
                  },
                  "brand": {
                    "type": "string"
                  },
                  "model": {
                    "type": "string"
                  },
                  "year": {
                    "type": "string",
                    "pattern": "^(19[0-9]{2}|20[0-9]{2}|32000)-[1-5]$"
                  }
                },
                "required": [
                  "type",
                  "brand",
                  "model",
                  "year"
                ]
              },
              "example": {
                "type": "cars",
                "brand": "25",
                "model": "7693",
                "year": "2020-5"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Resultado com amount decimal em BRL, basis, source, data, evidence e limitações. Quando não há comparáveis, amount=null e status=INSUFFICIENT_DATA; nunca substitua null por zero.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "413": {
            "description": "Corpo acima de 4 KB.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Entrada inválida ou referência indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Fonte indisponível, resposta inválida ou limite de consultas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/market/equipment": {
      "get": {
        "operationId": "getEquipmentConfigurations",
        "summary": "Configurações com observações recentes de aquisição",
        "parameters": [
          {
            "name": "family",
            "in": "query",
            "required": true,
            "schema": {
              "enum": [
                "tractor",
                "compressor",
                "screw-compressor",
                "autoclave",
                "ultrasound",
                "patient-monitor",
                "defibrillator"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "items com code CATMAT, name completo, short_name para seleção, observations, sample_size, estimable e reason_code. Configurações estimáveis vêm primeiro; as demais não devem habilitar o cálculo público. Não é catálogo de marcas/modelos de usados.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Entrada inválida ou referência indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Fonte indisponível, resposta inválida ou limite de consultas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/market/equipment-estimates": {
      "post": {
        "operationId": "estimateEquipmentFromPurchases",
        "summary": "Referência de aquisição ou cenário de custo depreciado",
        "description": "Até 300 registros em 180 dias, mesma configuração CATMAT e unidade, três compras independentes, mediana e controle de dispersão. Novo: PUBLIC_PROCUREMENT_REFERENCE. Usado com age_years, useful_life_years (total desde novo) e residual_percent: DEPRECIATED_REPLACEMENT_COST, status SIMULATED, sem cotação de revenda. Não há vida útil ou taxa de depreciação inventada. Usado sem parâmetros mantém amount=null por compatibilidade; amostra insuficiente também retorna null. Não aceite parâmetros de vida útil para condition=new.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "family": {
                    "type": "string"
                  },
                  "product_code": {
                    "type": "string"
                  },
                  "condition": {
                    "enum": [
                      "new",
                      "used"
                    ]
                  },
                  "age_years": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                  },
                  "useful_life_years": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                  },
                  "residual_percent": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                  }
                },
                "required": [
                  "family",
                  "product_code",
                  "condition"
                ]
              },
              "example": {
                "family": "tractor",
                "product_code": "633632",
                "condition": "new"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Resultado com amount decimal em BRL, basis, source, data, evidence e limitações. Quando não há comparáveis, amount=null e status=INSUFFICIENT_DATA; nunca substitua null por zero.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "413": {
            "description": "Corpo acima de 4 KB.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Entrada inválida ou referência indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Fonte indisponível, resposta inválida ou limite de consultas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/market/treasury": {
      "get": {
        "operationId": "getTreasuryPrices",
        "summary": "Títulos e preços oficiais do Tesouro Direto",
        "responses": {
          "200": {
            "description": "items com id, name, maturity, price, price_basis=PU Base Manhã e as_of. Última data com até sete dias; títulos vencidos excluídos.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Entrada inválida ou referência indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Fonte indisponível, resposta inválida ou limite de consultas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/market/treasury-estimates": {
      "post": {
        "operationId": "estimateTreasuryPosition",
        "summary": "Estimar posição de títulos pelo preço oficial",
        "description": "Quantidade de títulos, inclusive frações, multiplicada pelo PU Base Manhã. Valor bruto; não prevê rentabilidade nem desconta impostos ou custódia.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "product_id": {
                    "type": "string"
                  },
                  "quantity": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                  }
                },
                "required": [
                  "product_id",
                  "quantity"
                ]
              },
              "example": {
                "product_id": "ID recebido do catálogo",
                "quantity": "1.25"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Resultado com amount decimal em BRL, basis, source, data, evidence e limitações. Quando não há comparáveis, amount=null e status=INSUFFICIENT_DATA; nunca substitua null por zero.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "413": {
            "description": "Corpo acima de 4 KB.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Entrada inválida ou referência indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Fonte indisponível, resposta inválida ou limite de consultas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/market/credit-estimates": {
      "post": {
        "operationId": "estimatePresentValue",
        "summary": "Valor presente com meta Selic do Banco Central",
        "description": "Cenário: valor nominal / (1 + meta Selic anual)^(dias/365). Saldo e data fornecidos pelo usuário; taxa SGS 432 recente e não futura, constante no cenário. Não estima risco, prazo de pagamento, desconto de cessão ou validade jurídica. Basis PRESENT_VALUE_BENCHMARK.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "asset_class": {
                    "enum": [
                      "RECEIVABLE",
                      "JUDICIAL_CREDIT"
                    ]
                  },
                  "face_value": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$"
                  },
                  "due_date": {
                    "type": "string",
                    "format": "date"
                  }
                },
                "required": [
                  "asset_class",
                  "face_value",
                  "due_date"
                ]
              },
              "example": {
                "asset_class": "RECEIVABLE",
                "face_value": "100000",
                "due_date": "2027-09-06"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Resultado com amount decimal em BRL, basis, source, data, evidence e limitações. Quando não há comparáveis, amount=null e status=INSUFFICIENT_DATA; nunca substitua null por zero.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "413": {
            "description": "Corpo acima de 4 KB.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Entrada inválida ou referência indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Fonte indisponível, resposta inválida ou limite de consultas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/asset-valuation/public-estimates": {
      "post": {
        "operationId": "simulatePublicAsset",
        "summary": "Simular com dados informados, sem credencial",
        "description": "Corpo máximo de 8192 bytes. Chamadas em outros projetos podem ser feitas pelo backend. Zero é um resultado válido; entradas inválidas retornam erro.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "asset_class",
                      "parameters"
                    ],
                    "properties": {
                      "asset_class": {
                        "type": "string",
                        "enum": [
                          "LIGHT_VEHICLE",
                          "HEAVY_VEHICLE",
                          "AGRICULTURAL_MACHINERY",
                          "INDUSTRIAL_EQUIPMENT",
                          "MEDICAL_EQUIPMENT",
                          "AIRCRAFT",
                          "VESSEL",
                          "PRIVATE_EQUITY_INTEREST",
                          "INTELLECTUAL_PROPERTY"
                        ]
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "prices"
                        ],
                        "properties": {
                          "prices": {
                            "type": "array",
                            "minItems": 3,
                            "maxItems": 3,
                            "items": {
                              "type": "string",
                              "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$",
                              "description": "Decimal sem separador de milhar; até seis casas."
                            }
                          }
                        }
                      }
                    }
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "asset_class",
                      "parameters"
                    ],
                    "properties": {
                      "asset_class": {
                        "type": "string",
                        "enum": [
                          "INVENTORY",
                          "STORED_COMMODITY",
                          "LIVESTOCK",
                          "FINANCIAL_SECURITY",
                          "BIOLOGICAL_ASSET"
                        ]
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "quantity",
                          "unit_price",
                          "unit"
                        ],
                        "properties": {
                          "quantity": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$",
                            "description": "Decimal sem separador de milhar; até seis casas."
                          },
                          "unit_price": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$",
                            "description": "Decimal sem separador de milhar; até seis casas."
                          },
                          "unit": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 40
                          }
                        }
                      }
                    }
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "asset_class",
                      "parameters"
                    ],
                    "properties": {
                      "asset_class": {
                        "type": "string",
                        "enum": [
                          "PRECIOUS_ASSET"
                        ]
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "quantity",
                          "unit_price",
                          "unit",
                          "purity_percent"
                        ],
                        "properties": {
                          "quantity": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$",
                            "description": "Decimal sem separador de milhar; até seis casas."
                          },
                          "unit_price": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$",
                            "description": "Decimal sem separador de milhar; até seis casas."
                          },
                          "unit": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 40
                          },
                          "purity_percent": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$",
                            "description": "Decimal sem separador de milhar; até seis casas."
                          }
                        }
                      }
                    }
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "required": [
                      "asset_class",
                      "parameters"
                    ],
                    "properties": {
                      "asset_class": {
                        "type": "string",
                        "enum": [
                          "RECEIVABLE",
                          "JUDICIAL_CREDIT"
                        ]
                      },
                      "parameters": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "face_value",
                          "discount_percent"
                        ],
                        "properties": {
                          "face_value": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$",
                            "description": "Decimal sem separador de milhar; até seis casas."
                          },
                          "discount_percent": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]{0,11})(\\.[0-9]{1,6})?$",
                            "description": "Decimal sem separador de milhar; até seis casas."
                          }
                        }
                      }
                    }
                  }
                ]
              },
              "example": {
                "asset_class": "INVENTORY",
                "parameters": {
                  "quantity": "100",
                  "unit_price": "25.50",
                  "unit": "unidade"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Simulação calculada; não é avaliação verificada.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "schema_version",
                    "asset_class",
                    "status",
                    "basis",
                    "currency",
                    "amount",
                    "label",
                    "calculation",
                    "assumptions",
                    "limitations",
                    "specialist_review_required",
                    "source",
                    "persisted",
                    "reference_range"
                  ],
                  "properties": {
                    "schema_version": {
                      "const": "1.0.0"
                    },
                    "asset_class": {
                      "type": "string"
                    },
                    "status": {
                      "const": "SIMULATED"
                    },
                    "basis": {
                      "const": "USER_PROVIDED"
                    },
                    "currency": {
                      "const": "BRL"
                    },
                    "amount": {
                      "type": "string",
                      "pattern": "^[0-9]+\\.[0-9]{2}$"
                    },
                    "label": {
                      "type": "string"
                    },
                    "calculation": {
                      "type": "string"
                    },
                    "assumptions": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "limitations": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "specialist_review_required": {
                      "type": "boolean"
                    },
                    "source": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "type",
                        "label"
                      ],
                      "properties": {
                        "type": {
                          "const": "USER_INPUT"
                        },
                        "label": {
                          "type": "string"
                        }
                      }
                    },
                    "persisted": {
                      "const": false
                    },
                    "reference_range": {
                      "oneOf": [
                        {
                          "type": "null"
                        },
                        {
                          "type": "object",
                          "additionalProperties": false,
                          "required": [
                            "low",
                            "high",
                            "meaning"
                          ],
                          "properties": {
                            "low": {
                              "type": "string"
                            },
                            "high": {
                              "type": "string"
                            },
                            "meaning": {
                              "type": "string"
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON inválido",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "code",
                    "message"
                  ],
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "request_id": {
                      "type": "string"
                    },
                    "retryable": {
                      "type": "boolean"
                    },
                    "details": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "code",
                    "message"
                  ],
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "request_id": {
                      "type": "string"
                    },
                    "retryable": {
                      "type": "boolean"
                    },
                    "details": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          },
          "413": {
            "description": "Corpo acima de 8 KB",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "code",
                    "message"
                  ],
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "request_id": {
                      "type": "string"
                    },
                    "retryable": {
                      "type": "boolean"
                    },
                    "details": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          },
          "415": {
            "description": "Envie application/json",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "code",
                    "message"
                  ],
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "request_id": {
                      "type": "string"
                    },
                    "retryable": {
                      "type": "boolean"
                    },
                    "details": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "description": "Dados inválidos ou categoria incompatível",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "code",
                    "message"
                  ],
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "request_id": {
                      "type": "string"
                    },
                    "retryable": {
                      "type": "boolean"
                    },
                    "details": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Serviço indisponível",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "code",
                    "message"
                  ],
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    },
                    "request_id": {
                      "type": "string"
                    },
                    "retryable": {
                      "type": "boolean"
                    },
                    "details": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}