{
  "schema": "bia.vibe-benchmark-corpus/v1",
  "corpus_id": "full-stack-business-apps-ptbr-v1",
  "selection_policy": "all prompts run for every provider and repetition; no prompt may be removed after the plan is created",
  "prompts": [
    {
      "id": "crm-pipeline",
      "title": "CRM com pipeline e autorização",
      "prompt": "Crie um CRM full-stack responsivo para uma pequena agência. Usuários precisam entrar com email e senha. Existem dois papéis: gestor e vendedor. Cadastre empresas, contatos e oportunidades. Cada oportunidade pertence a uma empresa, tem responsável, valor, etapa (novo, qualificado, proposta, ganho ou perdido) e histórico de mudança de etapa. Mostre um pipeline em colunas com busca por empresa e filtro por responsável. Vendedor só pode alterar oportunidades próprias; gestor pode ver e alterar todas. Inclua dados de demonstração e uma tela de resumo com total aberto e valor ganho. Entregue o sistema executável e publicado.",
      "required_capabilities": [
        "authentication",
        "role_authorization",
        "relational_crud",
        "workflow_history",
        "responsive_ui"
      ],
      "acceptance_checks": [
        {
          "id": "auth-required",
          "type": "browser",
          "description": "visitante anônimo não acessa o pipeline"
        },
        {
          "id": "manager-sees-all",
          "type": "browser",
          "description": "gestor visualiza oportunidades de mais de um responsável"
        },
        {
          "id": "seller-scope-enforced",
          "type": "authorization",
          "description": "vendedor não altera oportunidade de outro vendedor por UI nem chamada direta"
        },
        {
          "id": "stage-history",
          "type": "data_integrity",
          "description": "mudança de etapa persiste e cria uma entrada de histórico"
        },
        {
          "id": "pipeline-filters",
          "type": "browser",
          "description": "busca e filtro por responsável alteram o conjunto visível"
        },
        {
          "id": "summary-derived",
          "type": "data_integrity",
          "description": "totais do resumo correspondem às oportunidades persistidas"
        }
      ]
    },
    {
      "id": "booking-conflict",
      "title": "Agenda com prevenção de conflito",
      "prompt": "Crie um sistema full-stack responsivo de agenda para um estúdio com login. Cadastre profissionais, serviços com duração e clientes. Permita criar, reagendar e cancelar agendamentos. Um profissional não pode ter dois agendamentos ativos em horários sobrepostos, inclusive quando duas requisições tentam reservar o mesmo horário. Mostre agenda diária e semanal, filtre por profissional e exiba estados confirmado, concluído e cancelado. Inclua dados de demonstração. Entregue o sistema executável e publicado.",
      "required_capabilities": [
        "authentication",
        "relational_crud",
        "concurrency_invariant",
        "calendar_ui",
        "responsive_ui"
      ],
      "acceptance_checks": [
        {
          "id": "auth-required",
          "type": "browser",
          "description": "visitante anônimo não acessa a agenda"
        },
        {
          "id": "create-booking",
          "type": "browser",
          "description": "agendamento válido aparece nas visões diária e semanal"
        },
        {
          "id": "overlap-rejected",
          "type": "data_integrity",
          "description": "horário sobreposto do mesmo profissional é recusado"
        },
        {
          "id": "concurrent-overlap-rejected",
          "type": "concurrency",
          "description": "duas reservas concorrentes para o mesmo slot persistem no máximo uma"
        },
        {
          "id": "reschedule-enforced",
          "type": "data_integrity",
          "description": "reagendamento também respeita a regra de conflito"
        },
        {
          "id": "cancel-releases-slot",
          "type": "data_integrity",
          "description": "cancelamento libera o horário para nova reserva"
        },
        {
          "id": "professional-filter",
          "type": "browser",
          "description": "filtro por profissional altera a agenda visível"
        }
      ]
    },
    {
      "id": "inventory-orders",
      "title": "Estoque e pedidos transacionais",
      "prompt": "Crie um sistema full-stack responsivo de estoque e pedidos para uma loja pequena. Tenha login, produtos com SKU único, preço e saldo, clientes e pedidos com vários itens. Confirmar um pedido deve baixar o estoque de todos os itens de forma atômica; estoque nunca pode ficar negativo. Cancelar pedido confirmado deve devolver o saldo exatamente uma vez. Mostre lista de baixo estoque, busca por SKU ou nome e total financeiro do pedido. Inclua dados de demonstração. Entregue o sistema executável e publicado.",
      "required_capabilities": [
        "authentication",
        "relational_crud",
        "transaction",
        "idempotency",
        "responsive_ui"
      ],
      "acceptance_checks": [
        {
          "id": "sku-unique",
          "type": "data_integrity",
          "description": "produto com SKU duplicado é recusado"
        },
        {
          "id": "order-total",
          "type": "data_integrity",
          "description": "total do pedido corresponde a preço vezes quantidade dos itens"
        },
        {
          "id": "atomic-stock-decrement",
          "type": "data_integrity",
          "description": "confirmação baixa todos os itens ou nenhum"
        },
        {
          "id": "negative-stock-rejected",
          "type": "concurrency",
          "description": "requisições concorrentes não tornam saldo negativo"
        },
        {
          "id": "cancel-restores-once",
          "type": "idempotency",
          "description": "cancelamento repetido devolve estoque uma única vez"
        },
        {
          "id": "low-stock-derived",
          "type": "browser",
          "description": "lista de baixo estoque reflete os saldos persistidos"
        },
        {
          "id": "product-search",
          "type": "browser",
          "description": "busca encontra produto por SKU e por nome"
        }
      ]
    },
    {
      "id": "expense-approval",
      "title": "Despesas com aprovação por papel",
      "prompt": "Crie um sistema full-stack responsivo de despesas para uma empresa. Usuários entram com email e senha e têm papel colaborador, aprovador ou financeiro. Colaborador cria despesa com categoria, valor, data, descrição e comprovante; só edita enquanto estiver em rascunho ou devolvida. Aprovador aprova ou devolve com motivo. Financeiro marca aprovada como paga. Registre uma trilha de cada transição com autor e horário. Cada papel vê apenas as ações permitidas e chamadas diretas também devem ser bloqueadas. Inclua dados de demonstração. Entregue o sistema executável e publicado.",
      "required_capabilities": [
        "authentication",
        "role_authorization",
        "state_machine",
        "audit_history",
        "file_upload"
      ],
      "acceptance_checks": [
        {
          "id": "role-actions",
          "type": "authorization",
          "description": "cada papel vê somente ações compatíveis com seu estado"
        },
        {
          "id": "direct-call-authorization",
          "type": "authorization",
          "description": "chamada direta de papel indevido é recusada"
        },
        {
          "id": "draft-edit-only",
          "type": "data_integrity",
          "description": "colaborador não edita uma despesa aprovada ou paga"
        },
        {
          "id": "return-requires-reason",
          "type": "validation",
          "description": "devolução sem motivo é recusada"
        },
        {
          "id": "payment-state-order",
          "type": "data_integrity",
          "description": "somente despesa aprovada pode virar paga"
        },
        {
          "id": "audit-every-transition",
          "type": "audit",
          "description": "cada transição persiste autor, horário, origem e destino"
        },
        {
          "id": "receipt-retrievable",
          "type": "browser",
          "description": "comprovante anexado pode ser recuperado por usuário autorizado"
        }
      ]
    },
    {
      "id": "support-inbox",
      "title": "Central de atendimento com SLA",
      "prompt": "Crie uma central full-stack responsiva de atendimento com login. Cadastre clientes e tickets com assunto, prioridade, responsável, status e mensagens em ordem cronológica. Um ticket novo começa aberto, pode ficar em atendimento, aguardando cliente, resolvido ou reaberto. Calcule o prazo de primeira resposta pela prioridade e destaque tickets vencidos. Permita busca por cliente ou assunto, filtros por responsável, prioridade e status, e uma caixa de entrada com estado vazio útil. Inclua dados de demonstração. Entregue o sistema executável e publicado.",
      "required_capabilities": [
        "authentication",
        "relational_crud",
        "state_machine",
        "derived_deadline",
        "responsive_ui"
      ],
      "acceptance_checks": [
        {
          "id": "new-ticket-state",
          "type": "data_integrity",
          "description": "ticket novo persiste no estado aberto"
        },
        {
          "id": "message-order",
          "type": "data_integrity",
          "description": "mensagens permanecem em ordem cronológica"
        },
        {
          "id": "invalid-transition-rejected",
          "type": "data_integrity",
          "description": "transição fora do fluxo permitido é recusada"
        },
        {
          "id": "sla-derived",
          "type": "data_integrity",
          "description": "prazo e vencimento mudam de acordo com a prioridade e resposta"
        },
        {
          "id": "inbox-filters",
          "type": "browser",
          "description": "busca e três filtros alteram o conjunto da caixa de entrada"
        },
        {
          "id": "empty-state",
          "type": "browser",
          "description": "filtro sem resultado exibe estado vazio com ação de recuperação"
        }
      ]
    },
    {
      "id": "content-portal",
      "title": "Portal de conteúdo público e privado",
      "prompt": "Crie um portal full-stack responsivo de conteúdo. Editores entram com email e senha para criar artigos em rascunho, agendado, publicado ou arquivado, com título, slug único, resumo, corpo, autor, categoria e imagem. Visitantes acessam apenas artigos publicados. A página pública precisa ter título e descrição próprios, URL pelo slug, dados estruturados de artigo, sitemap e paginação. Agendamento futuro não pode aparecer antes da hora. Inclua dados de demonstração. Entregue o sistema executável e publicado.",
      "required_capabilities": [
        "authentication",
        "public_private_routes",
        "scheduled_publication",
        "seo_metadata",
        "pagination"
      ],
      "acceptance_checks": [
        {
          "id": "draft-private",
          "type": "authorization",
          "description": "rascunho não é acessível na rota pública"
        },
        {
          "id": "scheduled-private-before-time",
          "type": "data_integrity",
          "description": "artigo agendado não aparece antes do horário"
        },
        {
          "id": "published-by-slug",
          "type": "http",
          "description": "artigo publicado responde em URL estável pelo slug"
        },
        {
          "id": "slug-unique",
          "type": "data_integrity",
          "description": "slug duplicado é recusado"
        },
        {
          "id": "article-metadata",
          "type": "seo",
          "description": "página publicada contém title, description e Article JSON-LD correspondentes"
        },
        {
          "id": "sitemap-public-only",
          "type": "seo",
          "description": "sitemap lista publicados e omite rascunhos, agendados futuros e arquivados"
        },
        {
          "id": "pagination-stable",
          "type": "browser",
          "description": "paginação não duplica nem perde artigos entre páginas"
        }
      ]
    }
  ]
}
