{
  "id": "service-internshipgradecalculator",
  "title": "Service — InternshipGradeCalculator",
  "description": "Contrato técnico das notas de supervisor, relatório, apresentação e resultado consolidado.",
  "type": "technical-reference",
  "status": "planned",
  "visibility": "public",
  "tags": [
    "sge/services",
    "sge/avaliacao",
    "sge/calculos"
  ],
  "related": [
    "migration-11-internship-types",
    "migration-18-supervisor-evaluations"
  ],
  "sourceRefs": [],
  "authors": [],
  "updated": null,
  "diagram": null,
  "body": "Serviço puro que recebe o snapshot de regras do tipo, os dez conceitos da avaliação aprovada e as notas lançadas pelo orientador. Retorna as contribuições e, quando completas, a nota consolidada.\n\n## Fórmulas\n\n```text\nsupervisor_grade = round(sum(valor(conceito_1..10)) / 10, 1)\nconsolidated_grade = round(supervisor_grade + report_grade + presentation_grade, 1)\n```\n\nCada valor de conceito já está na escala do peso do supervisor. Relatório e apresentação também são informados diretamente entre zero e seu peso. Peso zero produz contribuição zero e remove a obrigatoriedade. O serviço retorna consolidação nula enquanto faltar contribuição de peso positivo.\n\n## Erros de domínio\n\n- pesos ausentes, negativos ou cuja soma não seja 10;\n- mapa de conceitos incompleto, fora da ordem/limite aprovado ou com chave desconhecida;\n- avaliação com menos ou mais de dez critérios;\n- nota de orientador negativa, com mais de uma casa ou acima do peso;\n- tentativa de calcular supervisor a partir de avaliação não aprovada.\n\nNão existe nota mínima configurada. O serviço não decide aprovação acadêmica enquanto essa regra não estiver declarada no snapshot do tipo.\n\n## Referências\n\n- [Migration 11 — internship_types](doc:migration-11-internship-types)\n- [Migration 18 — supervisor_evaluations](doc:migration-18-supervisor-evaluations)",
  "sections": [
    {
      "id": "formulas",
      "level": 2,
      "title": "Fórmulas",
      "text": "Cada valor de conceito já está na escala do peso do supervisor. Relatório e apresentação também são informados diretamente entre zero e seu peso. Peso zero produz contribuição zero e remove a obrigatoriedade. O serviço retorna consolidação nula enquanto faltar contribuição de peso positivo.",
      "line": 3
    },
    {
      "id": "erros-de-dominio",
      "level": 2,
      "title": "Erros de domínio",
      "text": "- pesos ausentes, negativos ou cuja soma não seja 10; - mapa de conceitos incompleto, fora da ordem/limite aprovado ou com chave desconhecida; - avaliação com menos ou mais de dez critérios; - nota de orientador negativa, com mais de uma casa ou acima do peso; - tentativa de calcular supervisor a partir de avaliação não aprovada.  Não existe nota mínima configurada. O serviço não decide aprovação acadêmica enquanto essa regra não estiver declarada no snapshot do tipo.",
      "line": 12
    },
    {
      "id": "referencias",
      "level": 2,
      "title": "Referências",
      "text": "- [Migration 11 — internship_types](doc:migration-11-internship-types) - [Migration 18 — supervisor_evaluations](doc:migration-18-supervisor-evaluations)",
      "line": 22
    }
  ],
  "sourcePath": "content/service-internshipgradecalculator.md",
  "visuals": [],
  "apiVersion": 1
}
