> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sherlocker.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Consultar resultado da operação

> Retorna o resultado hierárquico de uma operação `completed`: a árvore cedente → sacados → títulos com issues por nó, mais summary, coverage e degraded_rules. Antes de `completed`, retorna 409. `filter=issues` (padrão) poda nós aprovados; `filter=all` devolve a árvore completa.



## OpenAPI

````yaml /openapi/motor-credito.json get /operations/{id}/result
openapi: 3.0.0
info:
  title: Sherlocker Motor de Borderô - API v1
  description: >-
    API pública do Motor de Borderô: cria operações assíncronas de análise de
    borderô CNAB 400 via multipart/form-data (cedente, sacados, títulos e
    validação cruzada com NFe), consulta o status por polling e busca o
    resultado hierárquico (cedente → sacados → títulos, com issues por nó) em
    /result. Autenticação por chave de API (Bearer slhk_) no header. Erros em
    RFC 7807 (application/problem+json). Em beta: requer a feature
    analysis_engine habilitada no workspace.
  version: '1.0'
servers:
  - url: https://221b-api.sherlocker.com.br/api/v1
    description: >-
      Mesma base da API 221b. Autentica via Authorization: Bearer slhk_ (nao usa
      ?token=).
security:
  - bearerAuth: []
paths:
  /operations/{id}/result:
    get:
      tags:
        - Operações
      summary: Consultar resultado da operação
      description: >-
        Retorna o resultado hierárquico de uma operação `completed`: a árvore
        cedente → sacados → títulos com issues por nó, mais summary, coverage e
        degraded_rules. Antes de `completed`, retorna 409. `filter=issues`
        (padrão) poda nós aprovados; `filter=all` devolve a árvore completa.
      operationId: getOperationResult
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: UUID da operação (campo operation_id da resposta do POST).
        - name: filter
          in: query
          required: false
          schema:
            type: string
            enum:
              - issues
              - all
            default: issues
          description: >-
            issues (padrão): poda títulos aprovados e sacados sem problemas.
            all: árvore completa. Outro valor retorna 400 (Invalid filter value.
            Use "issues" or "all".).
        - name: include
          in: query
          required: false
          schema:
            type: string
          description: >-
            Blocos extras, separados por vírgula. Valor suportado:
            execution_plan (adiciona o campo execution_plan à resposta; hoje
            sempre []).
        - name: x-request-id
          in: header
          required: false
          schema:
            type: string
          description: >-
            Identificador de rastreio opcional fornecido pelo cliente. Ecoado no
            header da resposta (nunca no body).
      responses:
        '200':
          description: Resultado hierárquico da operação.
          headers:
            x-request-id:
              schema:
                type: string
              description: Identificador da requisição (ecoado ou gerado).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperationResult'
              example:
                operation_id: b2c3d4e5-0000-0000-0000-000000000001
                cedente:
                  id: c0a80001-0000-0000-0000-000000000001
                  cnpj: '12345678000195'
                  razao_social: CEDENTE LTDA
                  status: blocked
                  issues:
                    - rule_id: CEDENTE_PROTESTOS
                      rule_name: Protestos
                      category: blocking
                      status: blocked
                      message: 'Cedente: Protestos encontrados'
                      detail:
                        field: protestos
                        actual: '3'
                        expected: '0'
                      data_sources:
                        - name: cenprot
                          fetched_at: '2026-07-06T09:00:00.000Z'
                          age_days: 3
                  sacados:
                    - id: c0a80001-0000-0000-0000-000000000002
                      cnpj_cpf: '98765432000188'
                      razao_social: SACADO SA
                      tipo: PJ
                      status: alerted
                      issues: []
                      titulos:
                        - id: c0a80001-0000-0000-0000-000000000003
                          numero: DOC-001
                          valor: 1234.56
                          data_vencimento: '2026-08-01'
                          nfe_chave: '35230612345678000195550010000000011000000011'
                          status: alerted
                          issues:
                            - rule_id: TITULO_NFE_DIVERGENCIA
                              rule_name: Divergência com NFe
                              category: alert
                              status: alerted
                              message: 'Título: valor diverge da NFe'
                              detail:
                                field: valor
                                actual: '1234.56'
                                expected: '1230.00'
                              data_sources:
                                - name: nfe
                                  fetched_at: '2026-07-09T12:01:00.000Z'
                                  age_days: 0
                summary:
                  total_titulos: 12
                  approved: 9
                  blocked: 2
                  alerted: 1
                  total_value: 100000
                  approved_value: 80000
                  blocked_value: 15000
                  alerted_value: 5000
                  sacados:
                    total: 5
                    with_issues: 2
                  cedente:
                    status: blocked
                engine_id: 0b3c6c7e-9d2a-4f1b-8e5d-2a1b3c4d5e6f
                engine_name: Motor Borderô
                timestamp: '2026-07-09T12:02:15.000Z'
                coverage:
                  - provider: rfb
                    requested: 6
                    succeeded: 5
                    failed_keys:
                      - '98765432000188'
                degraded_rules:
                  - rule_id: SACADO_SERASA
                    provider: serasa
                    titulos_affected: 2
        '400':
          description: Parâmetro filter inválido.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://docs.sherlocker.com.br/problems/validation_error
                title: Validation Error
                status: 400
                code: validation_error
                detail: Invalid filter value. Use "issues" or "all".
                instance: /v1?request_id=3166fb9a-384c-44b7-ab77-90aca3146e0a
        '401':
          description: Chave de API ausente, malformada, inválida ou revogada.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: Operação inexistente ou pertencente a outro workspace.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://docs.sherlocker.com.br/problems/not_found
                title: Not Found
                status: 404
                code: not_found
                detail: Operation not found
                instance: /v1?request_id=3166fb9a-384c-44b7-ab77-90aca3146e0a
        '409':
          description: >-
            A operação ainda não chegou a completed — o resultado só existe em
            completed. Faça polling do GET /operations/{id} e tente novamente.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              example:
                type: https://docs.sherlocker.com.br/problems/conflict
                title: Conflict
                status: 409
                code: conflict
                detail: 'Operation has not completed yet. Current status: processing'
                instance: /v1?request_id=3166fb9a-384c-44b7-ab77-90aca3146e0a
components:
  schemas:
    OperationResult:
      type: object
      description: >-
        Resultado hierárquico da operação: árvore cedente → sacados → títulos,
        com issues por nó.
      required:
        - operation_id
        - cedente
        - summary
      properties:
        operation_id:
          type: string
          format: uuid
          description: UUID da operação.
        cedente:
          $ref: '#/components/schemas/ResultCedente'
        summary:
          $ref: '#/components/schemas/ResultSummary'
        engine_id:
          type: string
          description: Engine de borderô usada na operação.
        engine_name:
          type: string
          description: Nome da engine.
          example: Motor Borderô
        timestamp:
          type: string
          format: date-time
          description: Timestamp ISO 8601 do resultado.
        coverage:
          type: array
          items:
            $ref: '#/components/schemas/CoverageEntry'
          description: 'Cobertura por provider: requested, succeeded e failed_keys.'
        degraded_rules:
          type: array
          items:
            $ref: '#/components/schemas/DegradedRule'
          description: Regras não avaliadas por fonte indisponível.
        execution_plan:
          type: array
          items:
            type: object
          description: Presente apenas com ?include=execution_plan. Hoje sempre [].
    Problem:
      type: object
      required:
        - type
        - title
        - status
        - code
      description: >-
        Erro no formato RFC 7807 (application/problem+json). Use o campo code
        para tratamento programático; type é apenas identificador.
      properties:
        type:
          type: string
          description: >-
            URI que identifica o tipo do problema
            (https://docs.sherlocker.com.br/problems/<code>).
        title:
          type: string
          description: Resumo curto do tipo do problema.
        status:
          type: integer
          description: Status HTTP desta ocorrência.
        code:
          type: string
          description: >-
            Código estável para tratamento programático (ex.:
            insufficient_tokens).
        detail:
          type: string
          description: Explicação legível específica desta ocorrência.
        instance:
          type: string
          description: Identificador da ocorrência (/v1?request_id=<request_id>).
        errors:
          type: array
          description: >-
            Erros de validação por campo (file, xmls, cedente_cnpj). Presente
            apenas em validation_error (400).
          items:
            type: object
            properties:
              field:
                type: string
              message:
                type: string
        required:
          type: number
          description: Tokens necessários. Presente apenas em insufficient_tokens (402).
        balance:
          type: number
          description: Saldo atual de tokens. Presente apenas em insufficient_tokens (402).
        request_access_url:
          type: string
          description: Onde solicitar acesso. Presente apenas em feature_not_enabled (403).
    ResultCedente:
      type: object
      description: Nó raiz da árvore do resultado.
      properties:
        id:
          type: string
          format: uuid
          description: Identificador do cedente no resultado.
        cnpj:
          type: string
          description: CNPJ do cedente.
          example: '12345678000195'
        razao_social:
          type: string
          description: Razão social do cedente.
          example: CEDENTE LTDA
        status:
          type: string
          enum:
            - approved
            - blocked
            - alerted
          description: >-
            Status consolidado do cedente: o pior entre as issues próprias e os
            sacados (worst-of).
        issues:
          type: array
          items:
            $ref: '#/components/schemas/Issue'
          description: Violações de regra do próprio cedente.
        sacados:
          type: array
          items:
            $ref: '#/components/schemas/ResultSacado'
          description: >-
            Sacados do borderô. Com filter=issues (padrão), sacados sem
            problemas são podados.
    ResultSummary:
      type: object
      description: >-
        Resumo do dataset completo. Não muda com o parâmetro filter. O verdict
        interno incompleto aparece como alerted, com o motivo em degraded_rules.
      properties:
        total_titulos:
          type: number
          description: Total de títulos do borderô.
          example: 12
        approved:
          type: number
          description: Títulos aprovados.
          example: 9
        blocked:
          type: number
          description: Títulos bloqueados.
          example: 2
        alerted:
          type: number
          description: >-
            Títulos em alerta, incluindo os com análise incompleta (fonte
            indisponível).
          example: 1
        total_value:
          type: number
          description: Valor monetário total do borderô.
          example: 100000
        approved_value:
          type: number
          description: Valor monetário dos títulos aprovados.
          example: 80000
        blocked_value:
          type: number
          description: Valor monetário dos títulos bloqueados.
          example: 15000
        alerted_value:
          type: number
          description: Valor monetário dos títulos em alerta.
          example: 5000
        sacados:
          type: object
          properties:
            total:
              type: number
              description: Total de sacados únicos do borderô.
              example: 5
            with_issues:
              type: number
              description: Sacados com pelo menos um problema.
              example: 2
        cedente:
          type: object
          properties:
            status:
              type: string
              enum:
                - approved
                - blocked
                - alerted
              description: Status consolidado do cedente.
    CoverageEntry:
      type: object
      description: Cobertura de um provider de dados na operação.
      properties:
        provider:
          type: string
          description: Identificador do provider consultado.
          example: rfb
        requested:
          type: number
          description: Consultas solicitadas ao provider.
          example: 6
        succeeded:
          type: number
          description: Consultas bem-sucedidas.
          example: 5
        failed_keys:
          type: array
          items:
            type: string
          description: Documentos cujas consultas falharam.
          example:
            - '98765432000188'
    DegradedRule:
      type: object
      description: >-
        Regra que não pôde ser avaliada porque a fonte de dados ficou
        indisponível. Não vira issue: os títulos afetados contam como alerted no
        summary.
      properties:
        rule_id:
          type: string
          description: Identificador da regra degradada.
          example: SACADO_SERASA
        provider:
          type: string
          description: Provider indisponível.
          example: serasa
        titulos_affected:
          type: number
          description: Quantidade de títulos afetados.
          example: 2
    Issue:
      type: object
      description: >-
        Uma violação de regra anexada a um nó da árvore (cedente, sacado ou
        título).
      properties:
        rule_id:
          type: string
          description: 'Identificador estável da regra violada (ex.: SACADO_PROTESTOS).'
          example: SACADO_PROTESTOS
        rule_name:
          type: string
          description: Nome legível da regra.
          example: Protestos
        category:
          type: string
          enum:
            - blocking
            - alert
          description: >-
            Categoria da regra: blocking (impeditiva) ou alert (ponto de
            atenção).
        status:
          type: string
          enum:
            - blocked
            - alerted
          description: Efeito da violação no nó.
        message:
          type: string
          description: Mensagem legível da violação.
          example: 'Sacado: Protestos encontrados'
        detail:
          type: object
          description: Detalhe estruturado da violação.
          properties:
            field:
              type: string
              example: protestos
            actual:
              type: string
              example: '3'
            expected:
              type: string
              example: '0'
        data_sources:
          type: array
          description: Fontes de dados que embasaram a violação.
          items:
            type: object
            properties:
              name:
                type: string
                example: cenprot
              fetched_at:
                type: string
                format: date-time
                nullable: true
              age_days:
                type: number
                example: 3
    ResultSacado:
      type: object
      description: Nó de sacado na árvore do resultado.
      properties:
        id:
          type: string
          format: uuid
          description: Identificador do sacado no resultado.
        cnpj_cpf:
          type: string
          description: Documento do sacado (CNPJ ou CPF).
          example: '98765432000188'
        razao_social:
          type: string
          description: Razão social (PJ) ou nome (PF) do sacado.
          example: SACADO SA
        tipo:
          type: string
          enum:
            - PJ
            - PF
          description: Tipo do sacado.
        status:
          type: string
          enum:
            - approved
            - blocked
            - alerted
          description: >-
            Status consolidado do sacado: o pior entre as issues próprias e os
            títulos (worst-of).
        issues:
          type: array
          items:
            $ref: '#/components/schemas/Issue'
          description: Violações de regra do próprio sacado.
        titulos:
          type: array
          items:
            $ref: '#/components/schemas/ResultTitulo'
          description: >-
            Títulos do sacado. Com filter=issues (padrão), títulos aprovados são
            podados.
    ResultTitulo:
      type: object
      description: Nó de título na árvore do resultado.
      properties:
        id:
          type: string
          format: uuid
          description: Identificador do título no resultado.
        numero:
          type: string
          description: >-
            Identificador do título no arquivo remessa (campo seu número do CNAB
            400).
          example: DOC-001
        valor:
          type: number
          description: Valor do título.
          example: 1234.56
        data_vencimento:
          type: string
          format: date
          description: Data de vencimento do título (YYYY-MM-DD).
        nfe_chave:
          type: string
          nullable: true
          description: >-
            Chave da NFe vinculada ao título; null se o título não traz chave.
            Problemas de NFe aparecem como issues do título.
        status:
          type: string
          enum:
            - approved
            - blocked
            - alerted
          description: Status consolidado do título, derivado das suas issues (worst-of).
        issues:
          type: array
          items:
            $ref: '#/components/schemas/Issue'
          description: Violações de regra do título.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Chave de API do workspace (prefixo slhk_), enviada no header:
        Authorization: Bearer slhk_sua_chave_aqui

````