# Citation Source Fidelity — Verificação Semântica de Citações

> Validador de fidelidade semântica de citações. Dado um documento (TCC, dissertação, artigo, parecer jurídico, matéria jornalística) e as fontes originais em uploads/sources/, verifica se cada citação direta e cada paráfrase reflete fielmente o que a fonte realmente diz. Detecta distorção, paráfrase superficial, atribuição cruzada e citações cuja passagem-fonte não existe. Produz relatório com veredito por citação e explicação textual da divergência. Idiomas: pt-BR e en.



Tags: citacoes, fact-check, fidelidade, validador, academico, juridico, jornalismo, pt-BR, en


## Example Prompts

- Conferir se as paráfrases do meu TCC refletem fielmente as fontes originais
- Auditar citações de um parecer jurídico contra os acórdãos citados
- Fact-check de uma matéria jornalística com base nos relatórios linkados
- Verificar se alguma citação do artigo distorce o autor original
- Localizar citações cuja passagem-fonte não existe na página indicada

URL: https://rakenne.app/skills/citation-source-fidelity/index.md

Try this skill: https://rakenne.app/a/?skill=citation-source-fidelity



## Overview

Validador **semântico** de citações: dado um documento (TCC, dissertação, artigo, parecer jurídico, matéria jornalística, due diligence) e as fontes originais em `uploads/sources/` (PDF ou Markdown), verifica se cada citação direta e cada paráfrase reflete fielmente o que a fonte realmente diz. Complementa skills estruturais como `br-abnt-citacao-cross-check` com a próxima camada de revisão — não basta a citação existir na bibliografia; o que se atribui ao autor precisa de fato estar lá, com o sentido que o autor lhe deu.

Idiomas suportados: **pt-BR** e **en**. Não cobre tradução cruzada (citação em pt vs. fonte em en) — a v1 reporta esses casos como `traducao-cruzada-fora-de-escopo`.

## Vereditos atribuídos

Cinco vereditos cobrem o universo de respostas possíveis:

| Veredito | Quando aplicar |
|----------|----------------|
| `fiel` | Citação direta bate com a fonte (ignorando whitespace, aspas tipográficas, travessões e diacríticos). Para paráfrase: o conteúdo da passagem-fonte sustenta a afirmação atribuída sem alteração material. |
| `parcialmente-fiel` | Direta com omissão **não-marcada** (faltou `[...]`), troca tipográfica, ou paráfrase com ponto preservado mas modalidade, ênfase ou escopo alterados. |
| `distorcida` | Passagem-fonte não sustenta a afirmação: troca de polaridade, atribuição cruzada, inserção de qualificadores, cherry-picking, desvio de escopo material, desvio temporal, ou desvio de função discursiva (hipótese vendida como fato). |
| `fonte-nao-encontrada` | Fonte foi fornecida, mas a passagem citada não existe na página indicada nem em ±2 páginas adjacentes. Sugere erro de paginação ou citação fabricada. |
| `fonte-nao-fornecida` | Nenhum arquivo em `uploads/sources/` casa com a chave da citação. Sem material para comparar. |

## O que esta skill não detecta

- Plágio invertido (texto não-citado que copia uma fonte).
- Falsidade da própria fonte (a fonte mente, mas a citação reproduz fielmente).
- Tradução incorreta entre idiomas.
- Mau uso de citação por contexto institucional (inflar bibliografia, etc.).

## Example Conversation

> **You:** Terminei meu TCC e quero fazer uma revisão de fidelidade — quero ter certeza de que minhas paráfrases não estão distorcendo nenhum dos autores que citei. O texto está em `output/tcc.md` e subi as fontes em `uploads/sources/`.
>
> **Agent:** Vou rodar a tool `extract_citation_loci` no documento para listar todas as citações com a chave-fonte (`<sobrenome>-<ano>`) e o trecho direto precedente, quando houver. Depois cruzo com os arquivos em `uploads/sources/`.
>
> *(reads `output/tcc.md`, runs `extract_citation_loci`)*
>
> Resultado da extração:
>
> - **18 citações** detectadas (5 diretas, 13 paráfrases).
> - **7 chaves-fonte distintas**: `severino-2017`, `silva-2020`, `marconi-lakatos-2017`, `gil-2017`, `bourdieu-1989`, `moreira-2019`, `cohen-swerdlik-2010`.
>
> Cruzando com `uploads/sources/`:
>
> - 5 fontes encontradas (`severino-2017.pdf`, `silva-2020.pdf`, `marconi-lakatos-2017.pdf`, `gil-2017.pdf`, `bourdieu-1989.pdf`).
> - 2 fontes faltando: **moreira-2019** (linha 41) e **cohen-swerdlik-2010** (linha 88). Você consegue subir?
>
> **You:** O Moreira eu consultei online e não tenho o PDF — pode marcar como sem fonte. O Cohen & Swerdlik eu subo agora.
>
> *(user uploads `cohen-swerdlik-2010.pdf`)*
>
> **Agent:** Recebido. Vou rodar `extract_reading_order` nos 6 PDFs e processar cada citação. Começo pelas diretas (verdade-base objetiva), depois passo para as paráfrases.
>
> *(verifies each direct quote with `verify_direct_quote_in_source`, then reads source pages to judge each paraphrase)*
>
> Concluído. **18 citações analisadas**, **5 não-conformidades** identificadas:
>
> 1. **`distorcida` — linha 87** (`Silva, 2020`): você escreve *"Silva (2020) demonstra que amostras pequenas e não-probabilísticas produzem padrões generalizáveis"*. Na fonte (cap. 4), Silva diz que essas amostras *"sugerem padrões que precisam ser confirmados em pesquisas posteriores"*. Três distorções sobrepostas: (a) `sugerem` → `demonstra` (modalidade — hipótese vira fato); (b) omissão do qualificador "que precisam ser confirmados" (desvio de função discursiva); (c) "padrões" generalizados para "generalizáveis" (desvio de escopo).
>
> 2. **`distorcida` — linha 142** (`Severino, 2017`): você escreve *"todos os pesquisadores experientes revisam primeiro a estrutura argumentativa"*. Na fonte (p. 50): *"Alguns pesquisadores experientes preferem revisar a estrutura argumentativa antes de cuidar do estilo; outros invertem a ordem. Não há prescrição universal."* O qualificador "todos" não está na fonte — Severino diz explicitamente o oposto.
>
> 3. **`distorcida` — linha 198** (`Marconi; Lakatos, 2017`): você atribui a M&L a frase *"Não há observação inocente: toda descrição é, ao mesmo tempo, uma construção do objeto..."*. Na fonte (p. 145), essa passagem é uma **citação literal de Bourdieu (1989)** reproduzida por M&L para discussão. Atribuição cruzada.
>
> 4. **`parcialmente-fiel` — linha 220** (`Gil, 2017`): você escreve *"Gil (2017) afirma que toda revisão de literatura deve identificar lacunas no campo"*. A fonte (p. 51) lista quatro funções da revisão — identificar lacunas é uma delas, não a única função. Não é distorção, mas a paráfrase omite o contexto. Sugestão: *"Gil (2017) inclui a identificação de lacunas entre as funções da revisão de literatura"*.
>
> 5. **`fonte-nao-fornecida` — linha 41** (`Moreira, 2019`): sem PDF/MD em `uploads/sources/`. Cita como "boa-fé interpretativa em pesquisa qualitativa". Verifique se essa expressão consta na fonte antes de submeter.
>
> Quer que eu escreva o relatório completo em `output/citation-fidelity-report.md`?
>
> **You:** Sim. E sobre a #3 (Marconi e Lakatos / Bourdieu): como devo corrigir?
>
> **Agent:** Vou escrever o relatório primeiro.
>
> *(writes `output/citation-fidelity-report.md`)*
>
> Para a #3 você tem três opções:
>
> 1. **Citar Bourdieu diretamente** (preferida se você tem ou consegue acessar a obra original): `(BOURDIEU, 1989, p. 27)` e adicionar a referência à lista.
> 2. **Usar a expressão apud** (NBR 10520:2023 §6.1.2): `(BOURDIEU, 1989 apud MARCONI; LAKATOS, 2017, p. 145)` — só M&L precisa estar na lista.
> 3. **Reescrever a paráfrase** atribuindo corretamente a citação no corpo da frase: *"Marconi e Lakatos (2017, p. 145) reproduzem Bourdieu para discutir a reflexividade na observação..."* — assim Bourdieu não é apresentado como fala de M&L.
>
> Recomendo a opção 1 se possível, pois apud reflete leitura indireta e o leitor pode preferir saber se você foi à fonte primária. Qual prefere?

## Sample Output Excerpt

Trecho de um relatório `output/citation-fidelity-report.md` gerado após rodar a skill no fixture de regressão (`assets/fixture-artigo.md`: artigo sintético com 10 citações plantadas — 6 fiéis, 3 distorcidas em modalidades diferentes, 1 sem fonte fornecida).

---

# Citation Fidelity — relatório

**Documento**: `output/fixture-artigo.md`
**Data**: 2026-05-10
**Idioma detectado**: pt-BR
**Fontes consultadas**: 4 (`severino-2017.md`, `silva-2020.md`, `marconi-lakatos-2017.md`, `gil-2017.md`)
**Fontes ausentes**: 1 (`moreira-2019`)

## Resumo executivo

- Citações analisadas: **10**
- `fiel`: **6** (60%)
- `parcialmente-fiel`: **0**
- `distorcida`: **3** (30%)
- `fonte-nao-encontrada`: **0**
- `fonte-nao-fornecida`: **1** (10%)

## Tabela por citação

| ID | Linha | Citação | Fonte | Página | Veredito | Trecho-fonte | Explicação |
|----|-------|---------|-------|--------|----------|--------------|------------|
| c01 | 20 | `Severino (2017, p. 42)` | severino-2017 | 42 | `fiel` | "A pesquisa científica é um processo metódico..." (literal, score 1.0) | Direta literal bate com a fonte. |
| c02 | 22 | `(SILVA, 2020)` | silva-2020 | — | `fiel` | Cap. 3 sobre triangulação metodológica | Paráfrase preserva a cautela do original ("aplicada com critério"). |
| c03 | 24 | `Silva (2020)` | silva-2020 | — | `fiel` | "nenhum estudo isolado pode estabelecer validade de construto..." (literal, score 1.0) | Direta literal bate com a fonte. |
| c04 | 28 | `(MARCONI; LAKATOS, 2017, p. 110)` | marconi-lakatos-2017 | 110 | `fiel` | Tipologia da pesquisa (natureza, abordagem, objetivos, procedimentos) | Paráfrase enumera fielmente as 4 dimensões. |
| c05 | 30 | `Gil (2017, p. 26)` | gil-2017 | 26 | `fiel` | Critérios do problema bem formulado | Paráfrase preserva os 4 critérios. |
| c06 | 34 | `(SEVERINO, 2017, p. 50)` | severino-2017 | 50 | `fiel` | "A redação do trabalho acadêmico exige clareza..." (literal, score 1.0) | Direta literal bate com a fonte. |
| c07 | 38 | `Silva (2020)` | silva-2020 | — | **`distorcida`** | "amostras pequenas e não-probabilísticas sugerem padrões que precisam ser confirmados" | Três distorções: (a) `sugerem` → `demonstra` (§4.1 modalidade); (b) supressão de "precisam ser confirmados" (§4.8 função discursiva); (c) "padrões" → "padrões generalizáveis" (§4.6 escopo). |
| c08 | 40 | `Severino (2017, p. 50)` | severino-2017 | 50 | **`distorcida`** | "Alguns pesquisadores experientes preferem... outros invertem a ordem. Não há prescrição universal." | §4.2 qualificador inserido: "alguns" universalizado para "todos os pesquisadores". A fonte afirma explicitamente o oposto ("não há prescrição universal"). |
| c09 | 42 | `Marconi e Lakatos (2017, p. 145)` | marconi-lakatos-2017 | 145 | **`distorcida`** | A passagem é citação literal de Bourdieu (1989, p. 27) reproduzida por M&L | §4.3 atribuição cruzada: a fala é de Bourdieu, não de M&L. Corrija com citação direta ou expressão apud. |
| c10 | 46 | `Moreira (2019, p. 17)` | — | 17 | `fonte-nao-fornecida` | — | Arquivo `moreira-2019.{pdf,md}` ausente em `uploads/sources/`. |

## Citações distorcidas — sugestões de correção

### c07 (Silva, 2020) — linha 38

> ~~Silva (2020) demonstra que amostras pequenas e não-probabilísticas produzem padrões generalizáveis em estudos exploratórios.~~
>
> **Sugestão**: Silva (2020) observa que, em estudos exploratórios, amostras pequenas e não-probabilísticas sugerem padrões que precisam ser confirmados em pesquisas posteriores.

### c08 (Severino, 2017) — linha 40

> ~~Conforme Severino (2017, p. 50), todos os pesquisadores experientes revisam primeiro a estrutura argumentativa e só depois cuidam do estilo.~~
>
> **Sugestão**: Severino (2017, p. 50) observa que alguns pesquisadores preferem revisar a estrutura argumentativa antes do estilo, embora não exista prescrição universal.

### c09 (Marconi & Lakatos, 2017) — linha 42

> ~~Marconi e Lakatos (2017, p. 145) afirmam: "Não há observação inocente..."~~
>
> **Sugestão (opção apud)**: "Não há observação inocente..." (BOURDIEU, 1989 apud MARCONI; LAKATOS, 2017, p. 145).

## Citações sem fonte

- `moreira-2019` (linha 46): suba `moreira-2019.pdf` em `uploads/sources/` e rode a skill novamente para verificar.

<!-- /excerpt -->

## Extension Tools

A skill registra **duas tools determinísticas** — sem chamadas externas, sem consulta a LLM. A decisão semântica sobre paráfrases é tomada pelo agente lendo a fonte; as tools entregam a base auditável.

### `extract_citation_loci`

Extrai todas as citações autor-data de um documento Markdown e devolve, para cada uma:

- `id` — identificador estável (`c001`, `c002`...) usado no relatório.
- `surname`, `year`, `page?` — campos brutos.
- `source_key` — slug normalizado (`<sobrenome>-<ano>`, com suporte a co-autoria e entidades coletivas) usado para casar com arquivos em `uploads/sources/`.
- `form` — `parenthetical` / `in-text` / `apud-original` / `apud-intermediary`.
- `raw`, `line` — texto bruto da chamada e linha no documento.
- `direct_quote?` — trecho entre aspas imediatamente antes **ou** depois da chamada (cobre tanto `"..." (Autor, ano)` quanto `Autor (ano) afirma: "..."`).

Heurísticas:

- Regex de citações parentéticas cobre forma canônica `(SILVA, 2020, p. 15)`, co-autoria `(MARCONI; LAKATOS, 2017)`, entidades coletivas `(BANCO CENTRAL, 2024)` e apud.
- Regex in-text captura `Severino (2017, p. 42)`, `Marconi e Lakatos (2017)`, `Smith and Jones (2020)`, `Souza et al. (2022)`.
- Stopwords em pt-BR e en evitam falsos-positivos como `Em (2020)` ou `According (2021)`.
- `precedingQuotedSnippet` olha 400 caracteres antes da chamada; `followingQuotedSnippet` olha até ~80 caracteres de conectivos antes da abertura de aspas (`define que`, `afirma:`, `argues that`).

### `verify_direct_quote_in_source`

Verifica se um trecho citado aparece literalmente em um texto-fonte. Pipeline de normalização em três passos:

1. **Pré-processamento**:
   - `stripAbntMarkers` remove marcadores ABNT NBR 10520:2023 (`[...]`, `[sic]`, `[grifo nosso]`, `[grifo do autor]`, `[ênfase adicionada]`, `[tradução nossa]`) **antes** de comparar. A presença dos marcadores é registrada em `mismatches` como `marcadores_abnt_presentes`, não penalizada — uma omissão **marcada** é citação fiel, não infidelidade.
   - Normaliza whitespace, colapsa quebras de linha, e unifica aspas tipográficas (`"` `"`, `'` `'`) e travessões (`—`, `–`) para suas formas ASCII.
2. **Pass 1 — match exato** (preserva diacríticos, ignora caixa): `score = 1.0` → `fiel` definitivo.
3. **Pass 2 — match accent-insensitive**: registra `diacriticos_divergentes` em `mismatches`, `score = 0.95` → `fiel` com nota.
4. **Pass 3 — janela de sobreposição de palavras**: desliza uma janela do tamanho da citação sobre o texto da fonte e calcula `overlap / window_size`. `score ≥ 0.7` indica trecho reconhecível mas alterado (`parcialmente-fiel` ou `distorcida` dependendo do contexto); `score < 0.7` é tratado como ausente.

Retorno: `{ found, score, position, snippet, mismatches[] }`. A tabela completa de score → veredito está em `references/heuristicas-fidelidade.md` §3.

### Por que não há tool para "veredito automático de paráfrase"

Paráfrases exigem leitura de contexto: o autor está citando outro? o parágrafo seguinte qualifica a afirmação? a fonte é uma hipótese ou um fato estabelecido? Essas decisões são feitas pelo agente, com a fonte aberta, seguindo as heurísticas em `heuristicas-fidelidade.md` (modalidade, qualificador, atribuição cruzada, cherry-picking, polaridade, escopo, tempo, função discursiva). A skill explicitamente proíbe vereditos sobre paráfrases sem leitura da fonte — não há `verify_paraphrase` automático, e isso é intencional.

## Getting Started

1. **Suba o documento** a auditar em `output/` (ex.: `output/tcc.md`, `output/artigo.md`, `output/parecer.md`). Markdown é o formato recomendado — se você tem `.docx`, peça à skill `office-to-markdown` para converter antes.

2. **Suba as fontes citadas** em `uploads/sources/`, uma por obra. Aceitos: `.pdf` (preferível para fontes paginadas) e `.md` (para fontes já extraídas). Nomeie cada arquivo com o slug `<sobrenome>-<ano>`:

   - `silva-2020.pdf`
   - `marconi-lakatos-2017.pdf` (co-autoria)
   - `severino-2017a.pdf`, `severino-2017b.pdf` (letra distintiva ABNT)
   - `banco-central-do-brasil-2024.pdf` (entidade coletiva)

   Sufixos descritivos são aceitos: `silva-2020-direito-civil.pdf`.

3. **Inicie a sessão** pedindo: *"Verifique a fidelidade das citações em output/tcc.md contra as fontes em uploads/sources/."* A skill faz primeiro um inventário, alerta sobre fontes faltando e só então roda a análise.

4. **Revise o relatório** em `output/citation-fidelity-report.md`. Para cada distorção, a skill oferece sugestões de correção — mas **não corrige silenciosamente**. Você decide se aceita a sugestão, reformula, ou substitui por outra fonte.

5. **Re-execute** após cada correção: a skill é determinística e barata, use sem cerimônia até o relatório ficar limpo.

Funciona melhor depois de já ter passado pelo cross-check estrutural (`br-abnt-citacao-cross-check`) — primeiro confirme que todas as citações têm referência na lista, depois confirme que cada citação reflete a fonte. As duas skills se complementam: estrutura primeiro, semântica depois.



---

Back to [Skill Library](https://rakenne.app/skills/index.md)
