Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/danielpose1996-stack/ruedadeproyectos/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The Evaluation System in RuedaPro UNIPAZ provides a standardized, rubric-based assessment framework for engineering projects. Multiple evaluators can independently score projects across 9 comprehensive criteria, with automatic averaging to calculate final grades.

Evaluation Criteria

9-Point Rubric

Projects are assessed using a detailed rubric with 9 evaluation criteria:
Evaluates how clearly and precisely the problem is defined.Scoring Guide:
  • 1.0-2.9: Problem not clearly defined, lacks context and delimitation
  • 3.0-3.9: General description with limited context and partial delimitation
  • 4.0-4.4: Clear, contextualized, and delimited problem with technological need
  • 4.5-5.0: Highly precise formulation with rigorous delimitation and solid technical context
Assesses the importance and relevance of the project.Scoring Guide:
  • 1.0-2.9: Weak or non-existent arguments for project importance
  • 3.0-3.9: General justification with basic relevance arguments
  • 4.0-4.4: Clear justification with academic support and technological relevance
  • 4.5-5.0: Solid and convincing justification showing academic, technological, and social impact
Reviews the main goal’s formulation and alignment with the problem.Scoring Guide:
  • 1.0-2.9: Incorrectly formulated or unrelated to the problem
  • 3.0-3.9: Comprehensible but weak wording or partial alignment
  • 4.0-4.4: Clear, well-written, and aligned with the problem
  • 4.5-5.0: Precise, measurable, perfectly aligned with rigorous technical writing
Evaluates the specific goals’ quality and contribution to the general objective.Scoring Guide:
  • 1.0-2.9: Not presented or don’t contribute to general objective, inadequate verbs
  • 3.0-3.9: Present but with weaknesses in wording or logical sequence
  • 4.0-4.4: Clear, measurable, and coherent with general objective
  • 4.5-5.0: Well-structured, measurable, methodologically coherent, defines clear path
Assesses the literature review and background research.Scoring Guide:
  • 1.0-2.9: No background or irrelevant, without academic support
  • 3.0-3.9: Basic background with little depth or few sources
  • 4.0-4.4: Adequate review of previous relevant work
  • 4.5-5.0: Critical analysis of scientific and technological background with updated sources
Reviews the technical development approach.Scoring Guide:
  • 1.0-2.9: Does not define how the technological solution will be built
  • 3.0-3.9: Generally describes the development process
  • 4.0-4.4: Clear methodology with defined phases coherent to project type
  • 4.5-5.0: Rigorous, structured methodology aligned with standards (agile or traditional)
Evaluates the research approach and design.Scoring Guide:
  • 1.0-2.9: Does not identify approach or methodological design
  • 3.0-3.9: Basic approach with limited description
  • 4.0-4.4: Adequately defines approach, type, and research design
  • 4.5-5.0: Solid methodological foundation, coherent and fully justified
Assesses technical, economic, and operational feasibility.Scoring Guide:
  • 1.0-2.9: Does not analyze technical, economic, or operational feasibility
  • 3.0-3.9: Superficial viability analysis with little evidence
  • 4.0-4.4: Clear viability in technical and operational terms
  • 4.5-5.0: Comprehensive evaluation of technical, economic, operational, and temporal viability
Evaluates the quality and professionalism of the presentation.Scoring Guide:
  • 1.0-2.9: Disorganized, unclear exposition without logical structure
  • 3.0-3.9: Comprehensible but with order or clarity failures
  • 4.0-4.4: Clear, organized presentation with good argumentative structure
  • 4.5-5.0: Fluid, professional, well-structured presentation with topic mastery

Scoring Mechanism

Score Range

1.0 - 2.9

No cumpleDoes not meet requirements

3.0 - 3.9

Cumplimiento básicoBasic compliance

4.0 - 4.4

Buen nivelGood level

4.5 - 5.0

ExcelenteExcellent
Each criterion is scored independently on a scale from 1.0 to 5.0 with 0.1 precision:
evaluacionView.js:44
<input type="number" min="1" max="5" step="0.1" class="rubric-input" value="0.0">

Input Validation

The system automatically clamps scores to valid ranges:
evaluacionView.js:213-226
function updateFinalScore() {
    const inputs = document.querySelectorAll('.rubric-input');
    let sum = 0;
    let count = 0;
    inputs.forEach(i => {
        let val = parseFloat(i.value) || 0;
        if(val > 5) { val = 5; i.value = 5; } // Clamp max
        if(val < 0) { val = 0; i.value = 0; } // Clamp min
        sum += val;
        count++;
    });
    const avg = sum / count;
    document.getElementById('final-score').innerText = avg.toFixed(1);
}
Scores are clamped between 0.0 and 5.0, and the minimum submittable score is 1.0 per the validation logic.

Evaluation Interface

Evaluation Header

When a docente starts an evaluation, they see:
evaluacionView.js:10-22
<div class="eval-header">
    <div class="eval-info">
        <h2>Sistema IoT para Invernaderos Inteligentes</h2>
        <p><strong>Categoría:</strong> <span class="badge badge-info">Desarrollo</span></p>
        <p><strong>Integrantes:</strong> Ana López, Luis Perez</p>
        <p><strong>Evaluador:</strong> Prof. Carlos Martínez</p>
        <p><strong>Periodo:</strong> 2026-1</p>
    </div>
    <div class="timer-box">
        <p>Tiempo Restante</p>
        <div class="time" id="eval-timer">15:00</div>
    </div>
</div>
Key Features:
  • Project name and category
  • Student team members
  • Current evaluator name
  • Academic period
  • 15-minute countdown timer

Countdown Timer

A 15-minute timer helps evaluators manage their time:
evaluacionView.js:189-204
clearInterval(evalTimerInterval);
let timeRemaining = 15 * 60; // 15 mins in seconds
const timerEl = document.getElementById('eval-timer');

evalTimerInterval = setInterval(() => {
    timeRemaining--;
    if(timeRemaining < 0) {
        clearInterval(evalTimerInterval);
        timerEl.style.color = "var(--status-danger)";
        return;
    }
    let m = Math.floor(timeRemaining / 60);
    let s = timeRemaining % 60;
    timerEl.innerText = `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;
}, 1000);
The timer is informational only - evaluators can still submit after time expires. However, the timer turns red when it reaches zero to signal the recommended time limit.

Real-Time Score Calculation

Automatic Average

The final score updates automatically as evaluators enter criterion scores:
evaluacionView.js:207-211
const inputs = document.querySelectorAll('.rubric-input');
inputs.forEach(input => {
    input.addEventListener('input', updateFinalScore);
});
The final score is the arithmetic mean of all 9 criteria: Final Score=i=19Criterioni9\text{Final Score} = \frac{\sum_{i=1}^{9} \text{Criterion}_i}{9}

Score Display

evaluacionView.js:121-129
<div class="final-score-box">
    <div>
        <h3>Calificación Final</h3>
        <p>Promedio automático de los criterios evaluados</p>
    </div>
    <div class="score-display" id="final-score">0.0</div>
    <button class="btn btn-primary" onclick="showConfirmModal()">
        <i class="fa-solid fa-paper-plane"></i> Enviar calificación
    </button>
</div>

Observations and Feedback

Feedback Text Area

Evaluators can provide written feedback:
evaluacionView.js:117-119
<label>Observaciones y Retroalimentación:</label>
<textarea class="observations" placeholder="Escriba aquí los comentarios, sugerencias de mejora y observaciones generales sobre el proyecto..."></textarea>
Observations Include:
  • Strengths and areas for improvement
  • Specific suggestions for enhancement
  • General comments on project quality
  • Constructive criticism
This text is stored in the evaluaciones.observaciones field and can be reviewed later by students and administrators.

Submission Process

Evaluation Workflow

1

Complete Rubric

Evaluator scores all 9 criteria (minimum 1.0 per criterion)
evaluacionView.js:232-236
if (finalScore < 1.0) {
    alert("Debe calificar todos los criterios. El puntaje mínimo es 1.0");
    return;
}
2

Add Observations

Optional but recommended feedback text
3

Click Submit

Evaluator clicks “Enviar calificación” button
4

Confirmation Modal

System displays confirmation dialog:
evaluacionView.js:238-251
<div class="modal-overlay active" id="confirm-modal">
    <div class="modal-content">
        <i class="fa-solid fa-triangle-exclamation modal-icon"></i>
        <h3>Confirmar Envío</h3>
        <p>¿Está seguro de enviar esta calificación? Una vez enviada <strong>no podrá modificarse</strong>.</p>
        <div class="modal-actions">
            <button onclick="closeModal()">Cancelar</button>
            <button onclick="submitEvaluation()">Sí, enviar</button>
        </div>
    </div>
</div>
5

Database Insertion

System stores evaluation data:
evaluacionView.js:273-296
// Collect rubric data
const rubricData = [];
inputs.forEach((input, index) => {
    rubricData.push({
        criterioIndex: index + 1,
        puntaje: parseFloat(input.value) || 0
    });
});

const finalScore = parseFloat(document.getElementById('final-score').innerText);
const observaciones = document.querySelector('.observations').value.trim();

// Insert evaluation record
const { error: evalErr } = await supabaseClient
    .from('evaluaciones')
    .insert([{
        proyecto_id: currentEvaluationProjectId,
        evaluador_id: currentProfile.id,
        puntaje_final: finalScore,
        observaciones: observaciones,
        rubrica_detalle: rubricData
    }]);
6

Check Completion Status

System checks if ALL assigned evaluators have submitted evaluations
evaluacionView.js:300-318
// Count assigned evaluators
const { data: assignedData } = await supabaseClient
    .from('proyecto_evaluadores')
    .select('evaluador_id', { count: 'exact' })
    .eq('proyecto_id', currentEvaluationProjectId);
const totalEvaluators = assignedData.length;

// Count completed evaluations
const { data: evalsData } = await supabaseClient
    .from('evaluaciones')
    .select('evaluador_id', { count: 'exact' })
    .eq('proyecto_id', currentEvaluationProjectId);
const totalEvaluated = evalsData.length;
7

Update Project Status

If all evaluators have submitted, project status changes to “Evaluado”:
evaluacionView.js:320-327
if (totalEvaluated >= totalEvaluators && totalEvaluators > 0) {
    const { error: updErr } = await supabaseClient
        .from('proyectos')
        .update({ estado: 'Evaluado' })
        .eq('id', currentEvaluationProjectId);
}
8

Success Confirmation

Evaluator sees success message and returns to dashboard
evaluacionView.js:329-334
clearInterval(evalTimerInterval);
closeModal();
currentEvaluationProjectId = null;
alert("¡Evaluación enviada con éxito!");
navigateTo('dashboard-docente');
Important: Once an evaluation is submitted, it cannot be modified. This ensures fairness and prevents score manipulation after submission.

Multiple Evaluators

Independent Evaluations

Each assigned evaluator:
  • Completes the rubric independently
  • Cannot see other evaluators’ scores
  • Submits their own observations
  • Has their submission stored separately

Final Score Calculation

When a project has multiple evaluators, the final project score is calculated as: Project Final Score=j=1nEvaluatorjScoren\text{Project Final Score} = \frac{\sum_{j=1}^{n} \text{Evaluator}_j\text{Score}}{n} Where nn is the number of evaluators who have submitted evaluations.
resultsView.js:96-100
let avgScore = 0;
if (p.evaluaciones && p.evaluaciones.length > 0) {
    const totalScore = p.evaluaciones.reduce((acc, curr) => acc + parseFloat(curr.puntaje_final || 0), 0);
    avgScore = parseFloat((totalScore / p.evaluaciones.length).toFixed(1));
}
This averaging system ensures fair grading even if evaluators have slightly different scoring tendencies.

Evaluation Data Structure

Database Schema

evaluaciones table:
FieldTypeDescription
idUUIDUnique evaluation identifier
proyecto_idUUIDForeign key to proyectos table
evaluador_idUUIDForeign key to perfiles table (docente)
puntaje_finalFloatAverage score (1.0-5.0)
observacionesTextEvaluator’s written feedback
rubrica_detalleJSONBArray of criterion scores
created_atTimestampSubmission timestamp
rubrica_detalle structure:
[
  { "criterioIndex": 1, "puntaje": 4.5 },
  { "criterioIndex": 2, "puntaje": 4.2 },
  { "criterioIndex": 3, "puntaje": 4.0 },
  { "criterioIndex": 4, "puntaje": 4.3 },
  { "criterioIndex": 5, "puntaje": 3.8 },
  { "criterioIndex": 6, "puntaje": 4.1 },
  { "criterioIndex": 7, "puntaje": 3.9 },
  { "criterioIndex": 8, "puntaje": 4.4 },
  { "criterioIndex": 9, "puntaje": 4.6 }
]
This structure preserves individual criterion scores for potential detailed analysis.

Error Handling

Validation Errors

If final score is below 1.0:
"Debe calificar todos los criterios. El puntaje mínimo es 1.0"
If user is not authenticated or project ID is missing:
"Error de sesión o proyecto no seleccionado."
If evaluation insertion fails:
"Ocurrió un error al enviar la calificación."
Error details are logged to console for debugging.

Best Practices

Fair Evaluation

  • Read full rubric descriptors before scoring
  • Use the full 1.0-5.0 scale range
  • Be consistent across criteria
  • Provide constructive feedback

Detailed Feedback

  • Write specific, actionable observations
  • Highlight both strengths and improvements
  • Reference specific project aspects
  • Keep feedback professional and constructive

Project Management

See how projects are created and assigned to evaluators

Results Gallery

View how evaluated projects appear in public rankings