diff --git a/supabase/functions/analyze-essay/index.ts b/supabase/functions/analyze-essay/index.ts
index fb4cf34..e609d54 100644
--- a/supabase/functions/analyze-essay/index.ts
+++ b/supabase/functions/analyze-essay/index.ts
@@ -27,6 +27,28 @@ interface EssayAnalysisResponse {
vocabulary: number;
grammar: number;
};
+ competencies: {
+ language_domain: {
+ value: number;
+ justification: string;
+ };
+ proposal_comprehension: {
+ value: number;
+ justification: string;
+ };
+ argument_selection: {
+ value: number;
+ justification: string;
+ };
+ linguistic_mechanisms: {
+ value: number;
+ justification: string;
+ };
+ intervention_proposal: {
+ value: number;
+ justification: string;
+ };
+ };
}
interface EssayType {
@@ -175,6 +197,69 @@ Forneça uma análise detalhada considerando:
7. Pontos a melhorar
8. Sugestões específicas para aprimoramento
+Essas são as competências do ENEM para você analisar a redação:
+- Competência 1: Domínio da língua
+- Competência 2: Compreensão da proposta
+- Competência 3: Seleção de argumentos
+- Competência 4: Mecanismos linguísticos
+- Competência 5: Proposta de intervenção
+
+## Competência 1: Demonstrar domínio da modalidade escrita formal da Língua Portuguesa
+
+| Nota | Grade de Correção | Características |
+|------|------------------|-----------------|
+| 200 pontos | Demonstra excelente domínio da modalidade escrita formal da Língua Portuguesa e de escolha de registro. Desvios gramaticais ou de convenções da escrita serão aceitos somente como excepcionalidade e quando não caracterizem reincidência. | • Ausência de marcas de oralidade e de registro informal
• Precisão vocabular
• Obediência às regras gramaticais
• Não apresenta ou apresenta pouquíssimos desvios gramaticais leves e de convenções da escrita |
+| 160 pontos | Demonstra bom domínio da modalidade escrita formal da Língua Portuguesa e de escolha de registro, com poucos desvios gramaticais e de convenções da escrita. | • Poucos desvios gramaticais leves
• Desvios de pontuação que não comprometem o sentido
• Desvios de ortografia e acentuação que não comprometem o sentido |
+| 120 pontos | Demonstra domínio mediano da modalidade escrita formal da Língua Portuguesa e de escolha de registro, com alguns desvios gramaticais e de convenções da escrita. | • Alguns desvios gramaticais graves
• Problemas de concordância
• Problemas de regência
• Problemas de estrutura sintática
• Marcas de oralidade |
+| 80 pontos | Demonstra domínio insuficiente da modalidade escrita formal da Língua Portuguesa, com muitos desvios gramaticais, de escolha de registro e de convenções da escrita. | • Grande quantidade de desvios graves
• Períodos incompletos
• Graves problemas de pontuação
• Desvios graves de grafia e acentuação
• Presença de gíria |
+| 40 pontos | Demonstra domínio precário da modalidade escrita formal da Língua Portuguesa, de forma sistemática, com diversificados e frequentes desvios gramaticais. | • Graves e frequentes desvios gramaticais
• Presença de gírias e marcas de oralidade
• Desestruturação sintática em excesso |
+| 0 ponto | Demonstra desconhecimento da modalidade escrita formal da Língua Portuguesa. | • Excesso de desvios que impossibilitam a compreensão |
+
+## Competência 2: Compreender a proposta de redação e aplicar conceitos das várias áreas de conhecimento
+
+| Nota | Grade de Correção | Características |
+|------|------------------|-----------------|
+| 200 pontos | Desenvolve o tema por meio de argumentação consistente, a partir de um repertório sociocultural produtivo, e apresenta excelente domínio do texto dissertativo-argumentativo. | • Tema muito bem desenvolvido
• Estrutura completa (introdução, argumentos, conclusão)
• Argumentos originais, além dos textos motivadores |
+| 160 pontos | Desenvolve o tema por meio de argumentação consistente e apresenta bom domínio do texto dissertativo-argumentativo. | • Desenvolve bem o tema
• Boa argumentação
• Não se limita aos textos motivadores |
+| 120 pontos | Desenvolve o tema por meio de argumentação previsível e apresenta domínio mediano do texto dissertativo-argumentativo. | • Abordagem superficial
• Argumentação previsível
• Reproduz ideias do senso comum |
+| 80 pontos | Desenvolve o tema recorrendo à cópia de trechos dos textos motivadores ou apresenta domínio insuficiente do texto dissertativo-argumentativo. | • Tendência ao tangenciamento
• Argumentação falha
• Cópia dos textos motivadores |
+| 40 pontos | Apresenta o assunto, tangenciando o tema, ou demonstra domínio precário do texto dissertativo-argumentativo. | • Tangencia o tema
• Ausência de argumentação
• Pode apresentar texto narrativo |
+| 0 ponto | Fuga ao tema/não atendimento à estrutura dissertativo-argumentativa. | • Desenvolve outro tema
• Usa outra estrutura textual |
+
+## Competência 3: Selecionar, relacionar, organizar e interpretar informações, fatos, opiniões e argumentos
+
+| Nota | Grade de Correção | Características |
+|------|------------------|-----------------|
+| 200 pontos | Apresenta informações, fatos e opiniões relacionados ao tema proposto, de forma consistente e organizada, configurando autoria. | • Seleciona e organiza informações consistentemente
• Explicita tese clara
• Argumentos comprovam a tese |
+| 160 pontos | Apresenta informações, fatos e opiniões relacionados ao tema, de forma organizada, com indícios de autoria. | • Organização consistente
• Argumentos previsíveis mas próprios |
+| 120 pontos | Apresenta informações, fatos e opiniões relacionados ao tema, limitados aos argumentos dos textos motivadores. | • Organização pouco consistente
• Informações aleatórias
• Argumentos pouco convincentes |
+| 80 pontos | Apresenta informações, fatos e opiniões relacionados ao tema, mas desorganizados ou contraditórios. | • Argumentos pouco articulados
• Reprodução dos textos motivadores |
+| 40 pontos | Apresenta informações, fatos e opiniões pouco relacionados ao tema ou incoerentes. | • Sem defesa de ponto de vista
• Informações desarticuladas |
+| 0 ponto | Apresenta informações, fatos e opiniões não relacionados ao tema. | • Informações incoerentes
• Sem ponto de vista |
+
+## Competência 4: Demonstrar conhecimento dos mecanismos linguísticos necessários para a construção da argumentação
+
+| Nota | Grade de Correção | Características |
+|------|------------------|-----------------|
+| 200 pontos | Articula bem as partes do texto e apresenta repertório diversificado de recursos coesivos. | • Articulação muito boa
• Pleno domínio dos recursos coesivos |
+| 160 pontos | Articula as partes do texto com poucas inadequações e apresenta repertório diversificado de recursos coesivos. | • Boa articulação
• Poucos desvios nos conectores
• Algumas repetições desnecessárias |
+| 120 pontos | Articula as partes do texto, de forma mediana, com inadequações. | • Algumas inadequações nos recursos coesivos
• Frases fragmentadas ocasionais
• Problemas de paragrafação |
+| 80 pontos | Articula as partes do texto, de forma insuficiente, com muitas inadequações. | • Muitas inadequações
• Frases fragmentadas frequentes
• Problemas de estrutura |
+| 40 pontos | Articula as partes do texto de forma precária. | • Graves problemas de articulação
• Períodos muito longos ou fragmentados
• Ausência de conectores |
+| 0 ponto | Apresenta informações desconexas. | • Não se configura como texto |
+
+## Competência 5: Elaborar proposta de intervenção para o problema abordado
+
+| Nota | Grade de Correção | Características |
+|------|------------------|-----------------|
+| 200 pontos | Elabora muito bem proposta de intervenção, detalhada, relacionada ao tema. | • Proposta detalhada (o que fazer, como fazer, meios e participantes) |
+| 160 pontos | Elabora bem proposta de intervenção relacionada ao tema. | • Proposta relacionada mas não totalmente detalhada |
+| 120 pontos | Elabora, de forma mediana, proposta de intervenção relacionada ao tema. | • Proposta relacionada mas sem detalhamento |
+| 80 pontos | Elabora, de forma insuficiente, proposta de intervenção. | • Proposta não atende totalmente à discussão |
+| 40 pontos | Apresenta proposta de intervenção vaga, precária ou relacionada apenas ao assunto. | • Proposta vaga ou não configurada adequadamente |
+| 0 ponto | Não apresenta proposta de intervenção ou apresenta proposta não relacionada ao tema. | • Ausência de proposta
• Proposta foge ao tema |
+
+
Responda em formato JSON seguindo exatamente esta estrutura:
{
"overall_score": number, // 0 a 100
@@ -192,6 +277,28 @@ Responda em formato JSON seguindo exatamente esta estrutura:
"cohesion": number, // 0 a 100 - Coesão
"vocabulary": number, // 0 a 100 - Vocabulário
"grammar": number // 0 a 100 - Gramática e ortografia
+ },
+ "competencies": {
+ "language_domain": {
+ value: number, // 0 a 200 - Competência 1
+ justification: string // Justificativa para a pontuação
+ },
+ "proposal_comprehension": {
+ value: number, // 0 a 200 - Competência 2
+ justification: string // Justificativa para a pontuação
+ },
+ "argument_selection": {
+ value: number, // 0 a 200 - Competência 3
+ justification: string // Justificativa para a pontuação
+ },
+ "linguistic_mechanisms": {
+ value: number, // 0 a 200 - Competência 4
+ justification: string // Justificativa para a pontuação
+ },
+ "intervention_proposal": {
+ value: number, // 0 a 200 - Competência 5
+ justification: string // Justificativa para a pontuação
+ }
}
}`
@@ -219,7 +326,7 @@ Responda em formato JSON seguindo exatamente esta estrutura:
schema: {
type: "object",
additionalProperties: false,
- required: ["overall_score", "suggestions", "feedback", "strengths", "improvements", "criteria_scores"],
+ required: ["overall_score", "suggestions", "feedback", "strengths", "improvements", "criteria_scores", "competencies"],
properties: {
overall_score: {
type: "number",
@@ -290,6 +397,93 @@ Responda em formato JSON seguindo exatamente esta estrutura:
description: "Gramática e ortografia (0-100)"
}
}
+ },
+ competencies: {
+ type: "object",
+ additionalProperties: false,
+ required: [
+ "language_domain",
+ "proposal_comprehension",
+ "argument_selection",
+ "linguistic_mechanisms",
+ "intervention_proposal"
+ ],
+ properties: {
+ language_domain: {
+ type: "object",
+ additionalProperties: false,
+ required: ["value", "justification"],
+ properties: {
+ value: {
+ type: "number",
+ description: "Pontuação da competência (0-200)"
+ },
+ justification: {
+ type: "string",
+ description: "Justificativa para a pontuação"
+ }
+ }
+ },
+ proposal_comprehension: {
+ type: "object",
+ additionalProperties: false,
+ required: ["value", "justification"],
+ properties: {
+ value: {
+ type: "number",
+ description: "Pontuação da competência (0-200)" },
+ justification: {
+ type: "string",
+ description: "Justificativa para a pontuação"
+ }
+ }
+ },
+ argument_selection: {
+ type: "object",
+ additionalProperties: false,
+ required: ["value", "justification"],
+ properties: {
+ value: {
+ type: "number",
+ description: "Pontuação da competência (0-200)"
+ },
+ justification: {
+ type: "string",
+ description: "Justificativa para a pontuação"
+ }
+ }
+ },
+ linguistic_mechanisms: {
+ type: "object",
+ additionalProperties: false,
+ required: ["value", "justification"],
+ properties: {
+ value: {
+ type: "number",
+ description: "Pontuação da competência (0-200)"
+ },
+ justification: {
+ type: "string",
+ description: "Justificativa para a pontuação"
+ }
+ }
+ },
+ intervention_proposal: {
+ type: "object",
+ additionalProperties: false,
+ required: ["value", "justification"],
+ properties: {
+ value: {
+ type: "number",
+ description: "Pontuação da competência (0-200)"
+ },
+ justification: {
+ type: "string",
+ description: "Justificativa para a pontuação"
+ }
+ }
+ }
+ }
}
}
}
diff --git a/supabase/migrations/20240328000001_add_competencies_to_essay_analyses.sql b/supabase/migrations/20240328000001_add_competencies_to_essay_analyses.sql
new file mode 100644
index 0000000..7e03be2
--- /dev/null
+++ b/supabase/migrations/20240328000001_add_competencies_to_essay_analyses.sql
@@ -0,0 +1,52 @@
+-- Adiciona campos de competências na tabela essay_analyses
+ALTER TABLE essay_analyses
+ADD COLUMN language_domain_value INTEGER,
+ADD COLUMN language_domain_justification TEXT,
+
+ADD COLUMN proposal_comprehension_value INTEGER,
+ADD COLUMN proposal_comprehension_justification TEXT,
+
+ADD COLUMN argument_selection_value INTEGER,
+ADD COLUMN argument_selection_justification TEXT,
+
+ADD COLUMN linguistic_mechanisms_value INTEGER,
+ADD COLUMN linguistic_mechanisms_justification TEXT,
+
+ADD COLUMN intervention_proposal_value INTEGER,
+ADD COLUMN intervention_proposal_justification TEXT;
+
+-- Adiciona restrições para garantir que os valores estejam entre 0 e 200
+ALTER TABLE essay_analyses
+ADD CONSTRAINT check_competency_values
+CHECK (
+ language_domain_value BETWEEN 0 AND 200 AND
+ proposal_comprehension_value BETWEEN 0 AND 200 AND
+ argument_selection_value BETWEEN 0 AND 200 AND
+ linguistic_mechanisms_value BETWEEN 0 AND 200 AND
+ intervention_proposal_value BETWEEN 0 AND 200
+);
+
+-- Atualiza as políticas de segurança para incluir os novos campos
+ALTER POLICY "Estudantes podem ver suas próprias análises" ON essay_analyses
+ USING (
+ essay_id IN (
+ SELECT id FROM student_essays
+ WHERE student_id = auth.uid()
+ )
+ );
+
+-- Comentários para documentação
+COMMENT ON COLUMN essay_analyses.language_domain_value IS 'Valor da competência de domínio da língua (0-200)';
+COMMENT ON COLUMN essay_analyses.language_domain_justification IS 'Justificativa para a nota de domínio da língua';
+
+COMMENT ON COLUMN essay_analyses.proposal_comprehension_value IS 'Valor da competência de compreensão da proposta (0-200)';
+COMMENT ON COLUMN essay_analyses.proposal_comprehension_justification IS 'Justificativa para a nota de compreensão da proposta';
+
+COMMENT ON COLUMN essay_analyses.argument_selection_value IS 'Valor da competência de seleção de argumentos (0-200)';
+COMMENT ON COLUMN essay_analyses.argument_selection_justification IS 'Justificativa para a nota de seleção de argumentos';
+
+COMMENT ON COLUMN essay_analyses.linguistic_mechanisms_value IS 'Valor da competência de mecanismos linguísticos (0-200)';
+COMMENT ON COLUMN essay_analyses.linguistic_mechanisms_justification IS 'Justificativa para a nota de mecanismos linguísticos';
+
+COMMENT ON COLUMN essay_analyses.intervention_proposal_value IS 'Valor da competência de proposta de intervenção (0-200)';
+COMMENT ON COLUMN essay_analyses.intervention_proposal_justification IS 'Justificativa para a nota de proposta de intervenção';
\ No newline at end of file
diff --git a/supabase/migrations/20240328000001_add_competencies_to_essay_analyses_rollback.sql b/supabase/migrations/20240328000001_add_competencies_to_essay_analyses_rollback.sql
new file mode 100644
index 0000000..5c669f5
--- /dev/null
+++ b/supabase/migrations/20240328000001_add_competencies_to_essay_analyses_rollback.sql
@@ -0,0 +1,20 @@
+-- Remove a restrição de verificação dos valores
+ALTER TABLE essay_analyses
+DROP CONSTRAINT IF EXISTS check_competency_values;
+
+-- Remove os campos de competências
+ALTER TABLE essay_analyses
+DROP COLUMN IF EXISTS language_domain_value,
+DROP COLUMN IF EXISTS language_domain_justification,
+
+DROP COLUMN IF EXISTS proposal_comprehension_value,
+DROP COLUMN IF EXISTS proposal_comprehension_justification,
+
+DROP COLUMN IF EXISTS argument_selection_value,
+DROP COLUMN IF EXISTS argument_selection_justification,
+
+DROP COLUMN IF EXISTS linguistic_mechanisms_value,
+DROP COLUMN IF EXISTS linguistic_mechanisms_justification,
+
+DROP COLUMN IF EXISTS intervention_proposal_value,
+DROP COLUMN IF EXISTS intervention_proposal_justification;
\ No newline at end of file