Files
RedatorSD/schema-sd.json
T

182 lines
8.3 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "schema-sd.json",
"title": "Solicitação de Demanda (SD) — RMDS / SES-MG",
"$comment": "Contrato de saída: o redator (LLM) devolve a SD SEMPRE neste formato. O app renderiza o documento a partir dele e roda o validador de código sobre ele. Versão 1.0.0.",
"type": "object",
"required": ["cabecalho", "objetivo", "contexto", "entregaveis", "enquadramento_tr", "validacao"],
"properties": {
"cabecalho": {
"type": "object",
"required": ["projeto", "numero_sd", "versao", "data_abertura", "periodo_execucao", "itens_tr", "total_ust", "total_ust_extenso", "prazo_execucao_semanas", "quantidade_entregaveis"],
"properties": {
"titulo": { "type": "string", "description": "Título da SD (nome do produto/resultado)" },
"projeto": { "type": "string", "description": "Nome do projeto real DESTA demanda — campo mais copiado por engano" },
"numero_sd": { "type": "string", "description": "Sequencial, ex.: SD-26" },
"versao": { "type": "string", "description": "V1, V2..." },
"data_abertura": { "type": "string", "format": "date", "description": "DD/MM/AAAA no render; ISO aqui" },
"periodo_execucao": {
"type": "object",
"required": ["inicio", "fim"],
"properties": {
"inicio": { "type": "string", "format": "date", "description": "Data inicial do primeiro entregável" },
"fim": { "type": "string", "format": "date", "description": "Data final do último entregável" }
}
},
"itens_tr": {
"type": "array",
"items": { "enum": ["I-02", "I-03", "I-04", "I-05"] },
"minItems": 1,
"description": "Todos os itens que a SD cruza"
},
"total_ust": { "type": "integer", "description": "Soma dos entregáveis — CALCULADO PELO APP, o LLM apenas propõe" },
"total_ust_extenso": { "type": "string", "description": "Número por extenso" },
"prazo_execucao_semanas": { "type": "integer", "description": "Duração de CALENDÁRIO, não soma das semanas quando há paralelismo" },
"quantidade_entregaveis": { "type": "integer" }
}
},
"objetivo": {
"type": "string",
"description": "Dois a quatro períodos. O que a SD formaliza e qual resultado permite alcançar. Não repete o contexto."
},
"contexto": {
"type": "array",
"minItems": 3,
"maxItems": 5,
"items": { "type": "string" },
"description": "Parágrafos na ordem: (1) problema de gestão, (2) insumo disponível e por que não basta, (3) o que a demanda entrega, (4) achado/resultado quando houver, (5) desdobramento. Números reais e verificáveis."
},
"entregaveis": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["n", "nome", "tipo", "item_tr", "semanas", "timebox_h", "ust", "periodo", "resumo", "atividades", "artefatos", "criterios_aceite"],
"properties": {
"n": { "type": "integer", "description": "Posição no quadro" },
"nome": { "type": "string", "description": "Nome do artefato final, ex.: 'Painel de fila cirúrgica publicado'" },
"tipo": { "enum": ["Descoberta", "Design", "Arquitetura", "Construção"] },
"item_tr": { "enum": ["I-02", "I-03", "I-04", "I-05"] },
"semanas": { "type": "integer", "minimum": 2, "maximum": 4 },
"timebox_h": { "enum": [40, 80], "description": "Derivado de regras-sd.json por tipo × item" },
"ust": { "type": "integer", "description": "timebox_h × semanas — RECALCULADO PELO APP" },
"periodo": {
"type": "object",
"required": ["inicio", "fim"],
"properties": {
"inicio": { "type": "string", "format": "date" },
"fim": { "type": "string", "format": "date" }
}
},
"depende_de": {
"type": "array",
"items": { "type": "integer" },
"description": "n dos entregáveis dos quais este depende (encadeamento → períodos não podem sobrepor)"
},
"paralelo_com": {
"type": "array",
"items": { "type": "integer" },
"description": "n dos entregáveis paralelos (exige nota_paralelismo e times distintos)"
},
"nota_paralelismo": { "type": "string", "description": "Obrigatória quando paralelo_com não é vazio" },
"resumo": { "type": "string", "description": "Três linhas: o que o entregável fez e o que produziu" },
"atividades": {
"type": "array",
"minItems": 6,
"maxItems": 9,
"items": { "type": "string" },
"description": "Blocos de trabalho concretos, explicáveis em uma frase"
},
"artefatos": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["nome", "confirmado_pelo_usuario"],
"properties": {
"nome": { "type": "string", "description": "Nome real do documento" },
"data": { "type": "string", "format": "date", "description": "Quando houver — deve ser <= periodo.fim do entregável" },
"confirmado_pelo_usuario": {
"type": "boolean",
"description": "TRAVA DE INTEGRIDADE: o LLM sugere TIPOS de artefato; nomes concretos só entram informados/confirmados pelo usuário. false = pendência bloqueante para exportação."
}
}
}
},
"criterios_aceite": {
"type": "array",
"minItems": 2,
"items": { "type": "string" },
"description": "Condições verificáveis por terceiro olhando o artefato — nunca 'funcionando adequadamente', 'bem construído', 'documentação completa'"
}
}
}
},
"subtotais_por_item": {
"type": "array",
"description": "Obrigatório quando itens_tr tem mais de um item — é assim que se controla saldo de pool. CALCULADO PELO APP.",
"items": {
"type": "object",
"required": ["item_tr", "ust"],
"properties": {
"item_tr": { "enum": ["I-02", "I-03", "I-04", "I-05"] },
"ust": { "type": "integer" }
}
}
},
"enquadramento_tr": {
"type": "array",
"minItems": 1,
"description": "Uma entrada por item cruzado (Seção 5 repetida por item)",
"items": {
"type": "object",
"required": ["item_tr", "titulo_literal", "descricao_item", "aderencia", "entregaveis_n"],
"properties": {
"item_tr": { "enum": ["I-02", "I-03", "I-04", "I-05"] },
"titulo_literal": { "type": "string", "description": "Exatamente como em regras-sd.json / TR" },
"descricao_item": { "type": "string", "description": "Transcrição do escopo do item conforme o TR" },
"aderencia": {
"type": "array",
"minItems": 3,
"maxItems": 5,
"items": { "type": "string" },
"description": "Um bullet por componente ENTREGUE, no vocabulário do item. Não citar componente que a SD não tem."
},
"entregaveis_n": {
"type": "array",
"items": { "type": "integer" },
"description": "Quais entregáveis do quadro pertencem a este item"
}
}
}
},
"validacao": {
"type": "array",
"description": "Resultado do checklist (IDs de regras-sd.json). Itens 'codigo' são preenchidos pelo validador do app; itens 'julgamento' pela passada de revisão do LLM; itens 'usuario' pela confirmação explícita.",
"items": {
"type": "object",
"required": ["id", "status"],
"properties": {
"id": { "type": "string", "description": "Ex.: CAL-02" },
"status": { "enum": ["ok", "alerta", "falha", "pendente"] },
"observacao": { "type": "string", "description": "Obrigatória quando status != ok" }
}
}
},
"pendencias": {
"type": "array",
"items": { "type": "string" },
"description": "O que ainda precisa de decisão humana antes do envio (ex.: repactuação de prazo, confirmação de artefato)"
}
}
}