Pular para o conteúdo
Challenge 18
Live
PRODUTOFRILA DOCX Original

Documento de Requisitos de Software

Especificação técnica formal de requisitos funcionais, não funcionais e regras de negócio do produto Frila.

Equipe BlendOps
Cauê Carneiro, Fabrício Tosta, João Paulo, Júlia Clovandi, Matheus Silva
Data
Versão
v2.0
Contexto
FrilaChallenge 18 (Apple Developer Academy)
Auditoria
Cauê Carneiro95737cb1

Histórico de Versões

VersãoDataAutoresDescrição da Mudança
v1.0.014/09/2026Cauê Carneiro, Fabrício Tosta, João Paulo, Júlia Clovandi, Matheus SilvaCriação inicial. Deriva as regras de negócio, requisitos e casos de uso do Documento de Visão v1.0.0 e dos documentos 00 a 04 revisados em setembro/2026.
v1.1.018/09/2026Cauê Carneiro, Fabrício Tosta, João Paulo, Júlia Clovandi, Matheus SilvaSeção 6.1 completa: diagrama de casos de uso em três vistas, tabela de atores, UC01 a UC08 revisados (despacho sem ampliar raio, turnos sobrepostos barrados, fluxos alternativos que faltavam) e UC09 a UC16 novos, cobrindo os RFs que não tinham caso de uso. Matriz de rastreabilidade e numeração das figuras atualizadas.
v1.2.022/09/2026Cauê Carneiro, Fabrício Tosta, João Paulo, Júlia Clovandi, Matheus SilvaAplica as respostas do quadro 03 de pendências (21 e 22/09): plataforma horizontal e sem campanha política; despacho por proximidade (até 15 km), sem raio configurável e sem levas, com teto de notificações (RN23); check-in geolocalizado a 200 m com confirmação manual (RN22); avaliação só com presença verificada e nova definição de taxa de comparecimento; aval herdado retirado (RF17 e UC12); Painel como feature web do gestor e Equipe Frila só por e-mail; denúncia e bloqueio (RF26 e UC17); explicação do despacho (RF27); turnos sobrepostos (RN21) e modo seleção (RN24) viram regra; stack decidida (Swift/SwiftUI, Kotlin, Supabase, FCM, SwiftData); entidade Dispositivo e contrato da API em Documentos/API/openapi.yaml; metas de tempo de publicação e de número de toques retiradas até haver medição no piloto.
v1.3.022/09/2026Cauê Carneiro, Fabrício Tosta, João Paulo, Júlia Clovandi, Matheus SilvaAplica as respostas das pendências para codar (22/09): um app só, com um perfil por conta (RN25); entrada por código no e-mail, sem senha e sem SMS, com telefone obrigatório e sem verificação (RF01, UC09 e UC10); botão “disponível agora” retirado (RF03 e UC09); entidade Usuario com o perfil da conta e SessaoUsuario sem troca de perfil.
v1.4.030/09/2026Cauê Carneiro, Fabrício Tosta, João Paulo, Júlia Clovandi, Matheus SilvaRevisão de consistência para a entrega parcial de 02/10, contra o contrato da API 0.2.27, as decisões de produto de 28/09, o Escopo do MVP e o código: v1.0 só iOS, com Android e web na v1.2; região administrativa na vaga e no estabelecimento (RN02, RF02, RF04); cancelamento que dá à vaga uma posição nova (RN12, RF14, UC08); suspensão com cancelamento em cascata (RN13); check-in de 60 minutos antes até o fim, check-out sem limite de distância e falta para quem termina o turno sem check-in (RN22, RF13, UC05); maioridade pela data de nascimento e aceite dos termos (RF01, UC09); lembrete sem telefone nem endereço na tela de bloqueio e “estou a caminho” na v1.1 (RF12); um voto por lado na avaliação (RF15, UC06); taxa de comparecimento só do profissional (RF16); equipe de confiança só pelo administrador e com turno cumprido (RF18, UC11); exclusão sem falta (RF25, UC16); vaga ocultada pela Equipe Frila (RF26, UC17); decisões de 30/09: o bloqueio também esconde o perfil (RF26, UC17) e fraude e documento falso chegam pelo motivo “outro” da denúncia (RN13); entidades, classes, pacotes e estrutura de pastas conferidos com o banco e o app; regras vinculadas alinhadas ao Diagrama de Casos de Uso; contrato em api/openapi.yaml.

Glossário

Termo / SiglaDefiniçãoContexto de Uso
RFRequisito Funcional. Algo que o sistema deve fazer do ponto de vista do usuário.Seção 3
RNFRequisito Não Funcional. Qualidade que o sistema deve ter (desempenho, segurança, acessibilidade).Seção 4
RNRegra de Negócio. Restrição ou comportamento obrigatório definido pelo produto.Seção 2
UCUse Case (Caso de Uso). Interação entre ator e sistema para atingir um objetivo.Seção 6.1
AtorQuem interage com o sistema para atingir um objetivo: pessoa ou papel, nunca o próprio sistema.Seção 6.1
«include» / «extend»Relações entre casos de uso. «include»: o caso incluído sempre acontece dentro do outro. «extend»: o caso acontece só sob uma condição, a partir de um ponto do outro.Seção 6.1
DERDiagrama Entidade-Relacionamento. Representação visual do banco de dados.Seção 6.2
Frila / turno avulsoUma única jornada de trabalho contratada de forma pontual, sem vínculo continuado. É a unidade de trabalho do sistema.Todo o documento
VagaRegistro publicado pelo contratante descrevendo um turno a ser coberto: função, data, horário, endereço, valor, número de posições, o que está incluso e quem recebe o profissional no local.Seções 2, 3 e 6
PosiçãoCada unidade preenchível de uma vaga. Uma vaga de 4 garçons tem 4 posições.Seções 3 e 6
Despacho ativoEnvio da vaga por notificação, de uma vez, aos profissionais elegíveis: com a função, disponíveis no horário e a até 15 km do local, mais a equipe de confiança do estabelecimento. Não há ordem de envio nem levas.Seções 2, 3 e 6
ElegibilidadeConjunto de critérios que define quem recebe a notificação de uma vaga específica (RN05).Seções 2, 3 e 6
Equipe de confiançaProfissionais que o estabelecimento marcou para receber a notificação das suas vagas mesmo além de 15 km, sem exclusividade de tempo.Seções 3 e 6
Taxa de comparecimentoTurnos com presença divididos por turnos confirmados. Presença é check-in geolocalizado ou manual confirmado pelo contratante; falta é não aparecer ou cancelar com menos de 24 horas. Não entram na conta: candidatura não escolhida, cancelamento com mais de 24 horas e turno não verificado.Seções 2, 3 e 6
Turno não verificadoTurno com check-in manual que o contratante não confirmou. Não conta a favor nem contra na taxa de comparecimento.Seções 2, 3 e 6
Reputação bináriaResposta única (“chamaria de novo?” ou “trabalharia de novo?”), exibida com o denominador e nunca como média de 1 a 5.Seções 2, 3 e 6
Modo urgência / modo seleçãoDois comportamentos de preenchimento: no primeiro, o primeiro candidato elegível que aceita fica com a posição; no segundo, o contratante escolhe entre os candidatos. O modo seleção só vale para vaga que começa em mais de 24 horas.Seções 2, 3 e 6
Janela críticaAntecedência em que, com a posição ainda vaga, o contratante recebe um alerta por notificação. O padrão é 3 horas antes do início, ajustável na publicação.Seções 2, 3 e 6
PainelFeature da versão web do Frila, no perfil de contratante: dashboard do gestor para acompanhar vagas, contratados e turnos. Não é ferramenta interna do Frila.Seções 3 e 6
PerfilTipo da conta: profissional, para quem trabalha no turno, ou contratante, para quem publica pelo estabelecimento. É escolhido no cadastro e não muda (RN25).Seções 1, 2 e 3
Equipe FrilaPessoas do time Frila que respondem, por e-mail, suporte, denúncias, contestações e pedidos de revisão do despacho, e podem ocultar vaga com conteúdo impróprio até revisá-la. Não acompanham turnos.Seções 3 e 6
[H]Hipótese não confirmada em campo. Marca herdada da documentação de pesquisa do projeto.Todo o documento

1. Introdução e Visão Geral

1.1 Propósito do Documento

Este documento especifica os requisitos funcionais, os requisitos não funcionais, as regras de negócio e os casos de uso do sistema Frila, servindo de referência para o time de desenvolvimento, para os testes e para a validação com as partes interessadas. O posicionamento de mercado, as personas e a justificativa de cada escolha estão no Documento de Visão v1.3.0, que este documento complementa e não repete.

Uma ressalva de leitura: o Frila ainda não passou por validação de campo. Desde 22/09 há código, o backend no Supabase e o app iOS, com builds internos no TestFlight, e o comportamento da API está no contrato (api/openapi.yaml, versão 0.2.27). As regras e os requisitos aqui derivam de evidência pública sobre o mercado e das falhas observadas nos concorrentes, mas as premissas de comportamento do usuário no Distrito Federal permanecem hipóteses, marcadas com [H]. Requisitos que dependem diretamente de uma hipótese trazem a marca no próprio texto, para que a revisão posterior saiba onde mexer.

1.2 Escopo

Objetivo do Produto

Permitir que um contratante publique um turno avulso e o preencha em poucas horas com um profissional em quem possa confiar, ainda que as duas partes nunca tenham trabalhado juntas. O sistema resolve isso levando a vaga ativamente até quem pode aceitá-la e dando a cada lado um sinal verificável sobre o outro antes da decisão.

Público-alvo

Qualquer negócio que precise cobrir um turno avulso, de qualquer setor: bares, restaurantes, cafeterias, buffets, produtoras de evento, varejo, logística, serviços domésticos e outros. Food service e eventos são o foco da divulgação inicial. Do outro lado, os profissionais que trabalham por turno avulso. Praça inicial: Distrito Federal.

Plataformas

Um aplicativo só, com dois perfis, o do profissional e o do contratante, que publica pelo estabelecimento, em iOS nativo (Swift e SwiftUI), Android nativo (Kotlin) e versão web. Cada conta tem um perfil só (RN25). O Painel é uma feature da versão web, no perfil de contratante, usada pelo gestor. O backend é o Supabase, onde ficam as regras que precisam valer igual nos três clientes. A v1.0, na App Store em 13/11/2026, é só iOS; Android e web, com o Painel, entram na v1.2, no 1º trimestre de 2027 (Escopo do MVP).

Fora do Escopo

Processamento, custódia ou repasse de pagamento. O valor é combinado e pago diretamente entre as partes, e o sistema apenas registra o que foi acordado. Também estão fora: contratação em regime CLT e processo seletivo, emissão de contrato ou nota fiscal, chat interno, avaliação por nota de 1 a 5, feed ou rede social, aval de quem trabalhou com o profissional fora da plataforma, atendimento ao vivo ou plantão da equipe Frila, operação fora do DF antes da consolidação local e qualquer cobrança dentro do aplicativo enquanto o modelo de monetização não estiver definido. Vaga remota faz parte do escopo do produto, mas fica para depois do MVP: na primeira versão, toda vaga é presencial.

1.3 Visão Geral do Documento

Este documento está organizado da seguinte forma: a Seção 2 define as Regras de Negócio, que originam os requisitos; a Seção 3 especifica os Requisitos Funcionais, com prioridade, critério de aceitação, estimativa e matriz de impacto por esforço; a Seção 4 descreve os Requisitos Não Funcionais; a Seção 5 lista o Escopo Não Contemplado; a Seção 6 apresenta os diagramas de casos de uso, de banco de dados, de classes e de arquitetura; e a Seção 7 reúne a matriz de rastreabilidade completa.

2. Regras de Negócio

2.1 Regras Obrigatórias

#RegraContexto / Justificativa
RN01O sistema NÃO DEVE descontar comissão ou taxa do valor pago ao profissional pelo turno: o valor anunciado na vaga é o valor integral que ele recebe.Em todos os concorrentes pesquisados, e independentemente do modelo de cobrança, as piores avaliações vêm do lado de quem trabalha. O modelo de moedas do GetNinjas acumula relatos de gasto sem retorno. É a única definição fechada do modelo de receita.
RN02Uma vaga NÃO DEVE ser publicada sem função, data, horário de início e fim, endereço e região administrativa do local, valor por posição, número de posições, o que está incluso (refeição, transporte e material próprio) e o nome de quem recebe o profissional no local.O profissional precisa decidir com informação completa antes de aceitar. Avaliações dos concorrentes relatam chegada ao local “sem muita informação”, e aceite sem tempo de deslocamento. Refeição, transporte e material mudam o valor real de uma diária: sem esses campos, dois anúncios com o mesmo valor não são comparáveis.
RN03O valor NÃO DEVE ser negociável dentro do fluxo de candidatura: o que está no anúncio é o que vale.Candidatura sem formulário e sem negociação é o que torna possível preencher um turno a tempo. Negociação reintroduz o funil que o produto existe para eliminar.
RN04O sistema DEVE despachar ativamente toda vaga publicada aos profissionais elegíveis, por notificação, e NUNCA apenas expô-la em um mural à espera de ser encontrada.É o mecanismo central do produto e a resposta ao padrão “cadastro não é liquidez”, presente em praticamente todo concorrente com número verificável.
RN05O sistema NÃO DEVE notificar profissional inelegível para a vaga: sem a função, indisponível no horário, a mais de 15 km do local (salvo quem é da equipe de confiança do estabelecimento), com perfil suspenso, com bloqueio entre as partes ou com turno confirmado sobreposto.Um marketplace que manda tudo para todo mundo treina o usuário a ignorar notificação, e aí o canal morre. A notificação é o produto. A distância de 15 km é parâmetro do sistema, a ajustar com dado do piloto [H]; a vaga continua visível para todo o DF na lista.
RN06Nenhuma notificação, prioridade ou posição na lista de vagas DEVE poder ser comprada, patrocinada ou promovida. A taxa de comparecimento aparece no perfil e NÃO altera quem recebe a notificação.Qualquer venda de prioridade reintroduz o leilão de trabalho que o projeto rejeita. A taxa de comparecimento serve para o contratante decidir, não para filtrar quem fica sabendo da vaga.
RN07A avaliação DEVE ser binária e bidirecional, só entre quem trabalhou junto pelo Frila, e liberada somente após o fim previsto de um turno com presença verificada (RN22). Quem não compareceu não é avaliado. O sistema NÃO DEVE exibir média de 1 a 5.Nota média com poucas avaliações não informa nada; “sete de sete chamariam de novo” informa. A avaliação nos dois sentidos corrige a assimetria observada no setor, em que só o contratante avalia. A falta já pesa na taxa de comparecimento e não pesa duas vezes.
RN08A reputação exibida DEVE sempre mostrar o denominador (ex.: “7 de 7”) e o número de turnos considerados.Um percentual sem denominador esconde amostra pequena e produz falsa confiança.
RN09O sistema NÃO DEVE processar, custodiar ou repassar pagamento. O valor acordado é registrado; o pagamento é combinado diretamente entre as partes.Decisão de escopo da versão 1. Pagamento retido ou atrasado é a queixa recorrente em Switch, Closeer e eFreela; assumir a custódia sem operação madura repetiria o problema.
RN10O contato direto entre as partes SÓ DEVE ser liberado após a confirmação da posição e fica visível até 7 dias depois do fim do turno. A tela de aceite avisa que telefone e WhatsApp serão mostrados à outra parte; quem não quiser compartilhar não aceita a vaga.Antes da confirmação não há compromisso, e liberar contato transforma a plataforma em lista de telefones. Depois dela, o contato é necessário para combinar detalhes e o pagamento. A base legal é a execução do contrato (LGPD, art. 7º, V), e o prazo de 7 dias limita a exposição do dado.
RN11O sistema DEVE registrar o check-in, o check-out e o valor acordado do turno, e disponibilizar esse registro aos dois lados.Hoje tudo isso vive em conversa de WhatsApp e memória. O registro geolocalizado é o que vale: o Frila não arbitra divergência, e quem discordar registra isso na avaliação. É também a base da taxa de comparecimento.
RN12Todo cancelamento DEVE registrar autor, momento, antecedência e motivo. Cancelada antes do início, a posição fica no histórico e a vaga DEVE ganhar uma posição nova, aberta, com nova notificação imediata. Depois do início, só a reabertura por atraso reabre (RF13); cancelar a vaga inteira não reabre, e a outra parte é avisada de que o turno ficou descoberto.Uma posição cancelada e não reaberta é um turno que falha em silêncio. Guardar a cancelada, em vez de devolvê-la a aberta, é o que preserva o registro de quem cancelou e por quê. A antecedência separa o cancelamento que não conta (mais de 24 horas) da falta (menos de 24 horas).
RN13O sistema NÃO DEVE suspender ou bloquear um perfil sem motivo registrado e sem canal de contestação com resposta em até 5 dias úteis. A suspensão só acontece por denúncia grave confirmada (assédio, fraude ou documento falso) e cancela na hora os turnos futuros da conta, com registro, aviso à contraparte e reabertura das posições; cancelamento nunca suspende, só afeta a taxa de comparecimento. Fraude e documento falso chegam pelo motivo “outro” da denúncia, com o relato, e a Equipe Frila apura.Punição percebida como injusta é queixa recorrente: bloqueio por duas desistências, inclusive com dois dias de antecedência, e punição por falta a uma vaga que havia sumido do aplicativo.
RN14O cadastro mínimo do profissional NÃO DEVE exigir mais do que o necessário para receber a primeira notificação de vaga; a verificação de identidade é progressiva.Cadastro travado antes de qualquer trabalho é uma barreira documentada nos concorrentes: selfie que não centraliza, documento que não sobe, e recusa explícita por desconfiança.
RN15Dados pessoais e documentos de identificação NÃO DEVEM aparecer em log nem ser usados fora da finalidade declarada ao titular.LGPD, e resposta direta à desconfiança registrada: “não acho seguro adicionar minha foto segurando meus documentos”.
RN16O sistema NÃO DEVE criar subordinação, exclusividade ou escala obrigatória: o profissional escolhe o que aceita e recusar vaga NÃO DEVE gerar penalidade.Mitigação do risco de caracterização de vínculo empregatício, hoje em discussão no Tema 1.291 do STF e no PLP 12/2024. Recusar é diferente de aceitar e não comparecer.
RN17O sistema DEVE permitir ao contratante exportar o relatório consolidado de turnos realizados com data, horários auditados, valor acordado e profissional alocado.Garante suporte ao fechamento contábil e à conciliação financeira de quem contrata, e à prestação de contas de produções de grande porte.
RN18Valores monetários DEVEM ser armazenados em centavos, como inteiro, em reais (BRL), e horários DEVEM ser gravados em UTC e exibidos no fuso America/Sao_Paulo.Evita erro de arredondamento em dinheiro e ambiguidade de horário em turno que vira a madrugada.
RN19Uma posição NÃO DEVE ser confirmada para mais de um profissional, mesmo sob candidaturas simultâneas.Confirmação dupla produz pessoa que se desloca sem ter trabalho, o tipo de falha que destrói confiança de uma vez só.
RN20O cadastro DEVE ser restrito a maiores de 18 anos.Exigência legal para trabalho em bares, eventos com venda de bebida alcoólica e trabalho noturno.
RN21Um profissional NÃO DEVE ter dois turnos confirmados que se sobreponham no tempo. A regra é garantida no banco de dados, e não só na tela.Sem ela, o profissional aceita de boa-fé dois turnos no mesmo horário e falta a um, derrubando a própria taxa de comparecimento por falha do sistema (decisão D1).
RN22O check-in e o check-out DEVEM ser geolocalizados, com a localização lida só no momento do toque; o app envia só a distância até o endereço da vaga, nunca a coordenada. O check-in vale como geolocalizado a até 200 m; o check-out registra a distância, sem limite. Se a geolocalização falhar ou passar de 200 m, o check-in manual SÓ conta como presença depois de confirmado pelo contratante; sem confirmação, o turno fica “não verificado” e não conta a favor nem contra na taxa de comparecimento. Turno que termina sem check-in nenhum conta como falta.Ler a localização só no toque respeita a regra de não rastrear o profissional (RN16) e o pedido de permissão da App Store. Os 200 m cobrem o erro comum de GPS em área urbana [H]. A confirmação manual resolve subsolo, sinal ruim e permissão negada sem inventar presença.
RN23O sistema NÃO DEVE enviar ao mesmo profissional mais de uma notificação de vaga a cada 30 minutos. Vagas próximas no tempo são agrupadas numa única notificação; vaga do modo urgência que começa em menos de 2 horas fura o agrupamento, mas conta no teto.Com vários estabelecimentos publicando ao mesmo tempo, notificar cada vaga separadamente vira spam, e o profissional desliga as notificações. O teto protege o canal que é o produto.
RN24O modo seleção SÓ PODE ser escolhido para vaga que começa em mais de 24 horas. Se o contratante não escolher até 24 horas antes do início, a vaga fecha automaticamente: as posições ainda abertas são canceladas, as candidaturas pendentes expiram, e candidatos e estabelecimento são avisados; o profissional pode retirar a candidatura sem penalidade enquanto não for escolhido.Sem prazo, a posição fica presa esperando uma escolha que pode não vir, e o profissional deixa de aceitar outras vagas. Vaga para menos de 24 horas é urgência por natureza.
RN25Cada conta DEVE ter um único perfil, profissional ou contratante, escolhido no cadastro e sem troca depois. Para usar o outro perfil, a pessoa cria outra conta, com outro e-mail; o mesmo telefone pode aparecer nas duas.Mantém separados a reputação, o histórico e as permissões de cada lado, e cada conta vê só as telas do próprio perfil. A regra é garantida no banco, que grava o perfil no cadastro e recusa a troca.

3. Requisitos Funcionais

3.1 Lista de Requisitos Funcionais

#Requisito FuncionalPrioridadeCritério de Aceitação
RF01O sistema deve permitir que o profissional se cadastre e entre com um código de uso único enviado ao e-mail, sem senha e sem SMS, informando dados mínimos: nome, telefone com WhatsApp e data de nascimento, e aceitando a versão vigente dos termos de uso e da política de privacidade.AltaUm profissional conclui o cadastro e fica apto a receber notificações de vaga sem enviar documento; o telefone é obrigatório, porque é o contato do turno (RN10), e o app confere só o formato, sem verificação por SMS; a maioridade é conferida pelo servidor, pela data de nascimento (RN20).
RF02O sistema deve permitir que o contratante cadastre o estabelecimento com nome (ou razão social), documento (CNPJ ou CPF), tipo de negócio, endereço, região administrativa do DF e ponto no mapa; quem cadastra fica como administrador.AltaUm contratante conclui o cadastro e publica a primeira vaga na mesma sessão, sem onboarding assistido; a conta dele é criada como em RF01, com código no e-mail, e tem o perfil de contratante (RN25).
RF03O sistema deve permitir que o profissional declare suas funções, seu ponto base e sua disponibilidade por dia e faixa de horário.AltaAlterações de função, ponto base e disponibilidade passam a valer na notificação seguinte, sem exigir novo login; não existe distância configurável pelo profissional.
RF04O sistema deve permitir que o contratante publique uma vaga com os campos obrigatórios de RN02 e, se quiser, traje exigido, participação no rateio dos 10% da taxa de serviço e observações.AltaA publicação pede só os campos de RN02, com o local e a região pré-preenchidos pelos do estabelecimento; o modo de preenchimento e a antecedência do alerta de vaga vazia (padrão de 3 horas) são escolhidos na publicação; a vaga é rejeitada com mensagem clara se algum campo obrigatório de RN02 faltar.
RF05O sistema deve permitir republicar uma vaga a partir de outra já publicada, alterando apenas data e horário.MédiaA republicação copia todos os campos da vaga de origem e pede só a nova data e o novo horário.
RF06O sistema deve notificar a vaga, de uma vez, aos profissionais elegíveis (RN05), respeitando o teto e o agrupamento de RN23.AltaA notificação é enviada ao provedor em até 30 segundos após a publicação; nenhum profissional inelegível a recebe; nenhum profissional recebe mais de uma notificação de vaga a cada 30 minutos, salvo a exceção de urgência de RN23.
RF07O sistema deve permitir que o profissional liste e filtre todas as vagas abertas do DF, por função, data e distância.MédiaA lista traz todas as vagas abertas, das mais próximas para as mais distantes; a vaga que já começou sai da lista, salvo a que tem posição reaberta por atraso; no lançamento, só há estabelecimentos do DF.
RF08O sistema deve permitir que o profissional se candidate a uma vaga a partir da notificação ou da lista, sem formulário.AltaO toque na notificação abre o detalhe da vaga, com o aviso de RN10; a candidatura sai sem formulário, sem carta de apresentação e sem negociação de valor; só se candidata quem tem a função da vaga.
RF09O sistema deve oferecer dois modos de preenchimento: urgência, em que o primeiro candidato elegível que aceita ocupa a posição, e seleção, em que o contratante escolhe entre os candidatos (RN24).AltaO modo é escolhido na publicação, e o seleção só aparece para vaga que começa em mais de 24 horas; em urgência, a posição é ocupada automaticamente pelo primeiro candidato elegível; em seleção, se ninguém for escolhido, a vaga fecha sozinha 24 horas antes do início, e os candidatos são avisados e liberados. O backend aceita os dois modos; na v1.0, o app publica só em urgência, e o modo seleção entra na v1.1.
RF10O sistema deve confirmar a posição e notificar os dois lados com função, local, horário, valor e identificação da contraparte.AltaA confirmação é enviada aos dois lados pelo provedor de push, na meta de RNF02; a posição some das vagas abertas; nenhuma posição é confirmada para dois profissionais (RN19).
RF11O sistema deve liberar o contato direto entre as partes (telefone e WhatsApp) somente após a confirmação, com aviso na tela de aceite (RN10).AltaO contato é inacessível antes da confirmação, fica disponível para ambos logo depois dela e some da tela 7 dias após o fim do turno; a tela de aceite avisa que o contato será mostrado à outra parte.
RF12O sistema deve enviar lembrete pré-turno para os dois lados, 24 horas e 3 horas antes do início.MédiaOs dois lembretes são entregues nos horários definidos e mostram função, horário e região administrativa, sem telefone nem endereço com número na tela de bloqueio (RN10, RN15); ao tocar, o app abre o turno com endereço e contato. Na v1.1, o profissional confirmado poderá avisar que está a caminho, de 3 horas antes até 15 minutos depois do início; o aviso aparece para o estabelecimento e não conta como presença.
RF13O sistema deve registrar o check-in e o check-out do profissional por geolocalização (RN22), com check-in manual confirmado pelo contratante quando a localização falhar.AltaO check-in vale de 60 minutos antes do início até o fim previsto; a até 200 m, grava a hora e a distância medida; fora disso, o check-in manual só vale com a confirmação do contratante, no app ou no Painel web; no horário de início sem check-in, o profissional recebe um lembrete; aos 15 minutos sem check-in, o contratante é alertado e decide esperar ou reabrir a vaga, e a posição nova aceita candidatura até 1 hora antes do fim previsto; ao passar o fim previsto sem check-out, os dois são avisados; se o turno termina sem check-in nenhum, conta falta para o profissional.
RF14O sistema deve permitir o cancelamento por qualquer das partes, com motivo e registro de antecedência, e reabrir a vaga com nova notificação imediata (RN12).AltaO cancelamento registra autor, momento, antecedência e motivo; antes do início, a vaga ganha uma posição nova, aberta, e a notificação sai em até 30 segundos; depois do início, a contraparte é avisada de que o turno ficou descoberto; o contratante pode cancelar a vaga inteira, sem falta para ninguém; cancelamento do profissional com menos de 24 horas conta como falta na taxa de comparecimento.
RF15O sistema deve solicitar a avaliação binária de cada lado após o fim previsto de um turno com presença verificada (RN07).AltaA avaliação só fica disponível após o horário de término e só para turno com check-in geolocalizado ou manual confirmado; cada lado responde “sim” ou “não” a uma única pergunta e vota uma vez por turno: pelo estabelecimento, vale a primeira resposta de qualquer membro; nenhuma nota de 1 a 5 é oferecida; quem não compareceu não é avaliado.
RF16O sistema deve exibir, no perfil de cada parte, a reputação binária com denominador e, no perfil do profissional, a taxa de comparecimento.AltaO perfil do profissional mostra “N de M chamariam de novo”, a taxa de comparecimento com os turnos considerados e os turnos realizados; o do estabelecimento mostra “N de M trabalhariam lá de novo”; perfis sem histórico são exibidos explicitamente como sem histórico, e não como nota zero.
RF17Retirado em 21/09/2026: o aval de quem trabalhou com o profissional fora da plataforma saiu do produto. O número fica reservado e não é reutilizado.——
RF18O sistema deve permitir que o estabelecimento mantenha uma equipe de confiança, que recebe a notificação das suas vagas mesmo além de 15 km.MédiaProfissionais da equipe com a função e disponíveis recebem a notificação das vagas do estabelecimento, independentemente da distância; não há exclusividade de tempo nem prioridade sobre os demais; só o administrador inclui ou remove, e só entra quem já cumpriu turno com presença verificada no estabelecimento.
RF19O sistema deve permitir montar uma escala de evento em lote, com múltiplas funções e posições, publicadas de uma vez e com antecedência.MédiaÉ possível publicar pelo menos 40 posições distribuídas em várias funções numa única operação, com acompanhamento do preenchimento por função.
RF20O sistema deve alertar o contratante, por notificação, quando uma posição segue vaga dentro da janela crítica, e oferecer ao gestor, na versão web, um Painel para acompanhar vagas, contratados e turnos.AltaToda posição aberta a 3 horas do início, ou na antecedência escolhida na publicação, gera alerta ao contratante no app; o Painel web mostra vagas, candidatos, confirmados, check-ins e turnos não verificados, e permite confirmar check-in manual, o que também é possível no app.
RF21O sistema deve permitir múltiplos usuários por estabelecimento, com papéis distintos (administrador e operador).MédiaUm novo usuário entra com a própria conta de contratante, sem compartilhar acesso; o histórico do estabelecimento permanece ao trocar de responsável.
RF22O sistema deve manter o histórico de turnos das duas partes e permitir sua exportação em CSV e PDF.MédiaO arquivo exportado contém data, função, horário registrado, valor acordado e contraparte de cada turno do período selecionado.
RF23O sistema deve oferecer um canal de suporte por e-mail, aberto a partir do turno, com prazo de resposta declarado.MédiaO app abre o e-mail já com os dados do turno; o prazo de resposta de até 5 dias úteis é mostrado ao usuário; não há atendimento ao vivo; em risco imediato, o app orienta o contato com as autoridades (190 e 180).
RF24O sistema deve permitir que um perfil suspenso consulte o motivo e abra contestação.AltaO motivo da suspensão é exibido ao titular; o botão “Contestar” envia a contestação à Equipe Frila, com resposta em até 5 dias úteis (RN13); se aceita, a conta volta na hora.
RF25O sistema deve permitir que o usuário exporte seus dados pessoais e exclua a conta de dentro do aplicativo, nos dois perfis.AltaO perfil sai do despacho e da busca na hora; os dados pessoais são apagados em até 15 dias; os turnos já realizados são anonimizados em vez de apagados, preservando o histórico da contraparte; os turnos futuros são cancelados sem contar falta; atende à diretriz 5.1.1(v) da App Store.
RF26O sistema deve permitir que qualquer usuário denuncie e bloqueie outro a partir do perfil ou do turno.AltaA denúncia registra o motivo (assédio, discriminação, risco à segurança ou outro) e chega à Equipe Frila, com resposta em até 5 dias úteis; o bloqueio é imediato e impede que as partes voltem a se cruzar em notificações, listas, candidaturas e no perfil público (decisão de 30/09; o perfil ainda aparece e passa a ser escondido numa próxima versão do contrato); a Equipe Frila pode ocultar vaga com conteúdo impróprio até revisá-la, sem cancelar turnos confirmados, e o estabelecimento vê que ela foi ocultada.
RF27O sistema deve explicar ao profissional por que ele recebe notificações de vagas e permitir pedir revisão.MédiaA tela “Por que recebo vagas” mostra os critérios (função, disponibilidade e distância de até 15 km); o botão “Contestar” gera um pedido de revisão respondido em até 5 dias úteis (LGPD, art. 20).

3.2 Tempo e Custo Estimados por RF

Estimativas em dias de trabalho de uma equipe de cinco pessoas, considerando sprint de duas semanas. Custo de desenvolvimento é R$ 0 por ser trabalho interno da equipe; onde há custo, ele é de infraestrutura ou de serviço externo. As estimativas foram feitas antes do código e são preliminares: devem ser revistas com o ritmo medido nas primeiras sprints. [H]

#Tempo EstimadoCusto Estimado
RF014 dias / 0,5 sprintR$ 0 (interno)
RF024 dias / 0,5 sprintR$ 0 (interno)
RF035 dias / 0,5 sprintR$ 0 (interno)
RF046 dias / 0,5 sprintR$ 0 (interno)
RF052 diasR$ 0 (interno)
RF0615 dias / 1,5 sprintR$ 0 (interno) + push e geolocalização em camada gratuita
RF075 dias / 0,5 sprintR$ 0 (interno) + serviço de mapa
RF083 diasR$ 0 (interno)
RF098 dias / 1 sprintR$ 0 (interno)
RF105 dias / 0,5 sprintR$ 0 (interno)
RF112 diasR$ 0 (interno)
RF123 diasR$ 0 (interno)
RF136 dias / 0,5 sprintR$ 0 (interno)
RF148 dias / 1 sprintR$ 0 (interno)
RF154 dias / 0,5 sprintR$ 0 (interno)
RF165 dias / 0,5 sprintR$ 0 (interno)
RF17—Retirado
RF186 dias / 0,5 sprintR$ 0 (interno)
RF1912 dias / 1,5 sprintR$ 0 (interno)
RF2010 dias / 1 sprintR$ 0 (interno)
RF216 dias / 0,5 sprintR$ 0 (interno)
RF226 dias / 0,5 sprintR$ 0 (interno)
RF232 diasR$ 0 (interno)
RF245 dias / 0,5 sprintR$ 0 (interno)
RF256 dias / 0,5 sprintR$ 0 (interno)
RF265 dias / 0,5 sprintR$ 0 (interno)
RF272 diasR$ 0 (interno)

3.3 Matriz Impacto × Esforço

Impacto ↓ \ Esforço →Esforço BaixoEsforço MédioEsforço Alto
Impacto AltoQuick wins, faça primeiro<br>RF04, RF08, RF10, RF11Planeje bem, vale o esforço<br>RF01, RF02, RF03, RF13, RF15, RF16, RF20, RF24, RF25, RF26Grande projeto, divida em partes<br>RF06, RF09, RF14
Impacto MédioSecundário<br>RF05, RF07, RF12, RF23, RF27Avalie<br>RF18, RF21, RF22Evite por ora<br>RF19
Impacto BaixoSe sobrar tempo<br>NenhumBaixa prioridade<br>NenhumDescarte ou adie<br>Nenhum

RF06 (despacho ativo) é o maior esforço da lista e também o coração do produto: sem ele o Frila vira mais um mural passivo, que é exatamente o modo de falha identificado em todos os concorrentes. RF19 (escala de evento em lote) tem impacto alto na estratégia de entrada pelo segmento de eventos, mas foi classificado como médio nesta matriz porque o ciclo básico precisa funcionar antes, e é candidato natural à segunda fase de construção. RF25 e RF26 estão entre os de impacto alto porque a App Store rejeita o app sem eles (diretrizes 5.1.1(v) e 1.2). O RF17 foi retirado e não aparece na matriz.

4. Requisitos Não Funcionais

4.1 Lista de Requisitos Não Funcionais

#Requisito Não FuncionalCategoriaCritério de Aceitação
RNF01As telas principais devem carregar em menos de 2 segundos em conexão 4G.DesempenhoMedição em aparelho Android de entrada e em rede 4G real, com percentil 95 dentro do limite.
RNF02As notificações de vaga devem ser entregues ao provedor de push (APNs/FCM) de forma verificável, com reenvio automático em caso de falha e estado consultável.Confiabilidade99% das notificações aceitas pelo provedor (APNs/FCM) em até 60 segundos após o despacho, medido em janela móvel de 7 dias; toda falha registra motivo. A entrega no aparelho depende do sistema operacional: o Frila não usa notificação Time Sensitive nem pede isenção de economia de bateria.
RNF03A notificação de uma vaga deve ser enviada ao provedor de push em até 30 segundos após a publicação.DesempenhoMedição do intervalo entre o registro da vaga e o envio ao provedor de push, no percentil 95.
RNF04O aplicativo deve funcionar em Android 9 ou superior com 2 GB de memória, em iOS 17 ou superior (exigência do SwiftData), e nos navegadores modernos em versão desktop e móvel.CompatibilidadeExecução dos fluxos principais sem degradação em aparelho de referência de entrada e nas duas últimas versões dos navegadores suportados.
RNF05Uma sessão típica de consulta e candidatura deve consumir menos de 1 MB de dados.DesempenhoMedição do tráfego da sessão típica; imagens servidas comprimidas e sob demanda.
RNF06Turnos confirmados devem permanecer legíveis sem conexão por pelo menos 24 horas, e ações feitas offline devem ser enfileiradas e sincronizadas.Tolerância a falhasEm modo avião, endereço, horário, função, valor e contato do turno confirmado continuam visíveis; nenhuma ação enfileirada é perdida ao restabelecer a conexão.
RNF07Todo tráfego deve usar HTTPS, dados sensíveis devem ser criptografados em repouso e credenciais devem ficar no keychain do sistema.SegurançaNenhuma comunicação em texto claro; varredura de segurança sem achado crítico ou alto antes da publicação.
RNF08O tratamento de dados pessoais deve observar a LGPD, com minimização, finalidade declarada por tipo de dado e exclusão atendida em prazo definido.PrivacidadeBase legal e finalidade documentadas por campo coletado; exclusão de conta atendida em até 15 dias; canal do encarregado publicado; documento e dado pessoal ausentes de qualquer log.
RNF09O produto deve ser utilizável sem treinamento por público não familiarizado com aplicativos profissionais.UsabilidadeEm teste com usuários reais, um profissional de primeira viagem conclui uma candidatura e um contratante publica uma vaga, os dois sem ajuda. Metas de tempo e de número de toques só serão definidas depois de medidas no piloto.
RNF10O produto deve ser utilizável por pessoas com deficiência visual e motora.AcessibilidadeCompatível com VoiceOver e TalkBack em todos os fluxos principais; contraste conforme WCAG 2.1 nível AA; tipografia dinâmica até o maior tamanho sem quebra de layout.
RNF11O sistema deve suportar o universo da praça-piloto sem reescrita de arquitetura.EscalabilidadeTeste de carga simulando o DF, cerca de 30 mil estabelecimentos e a base de profissionais correspondente, mantendo RNF01 e RNF03.
RNF12O sistema deve estar disponível no horário de pico do setor.DisponibilidadeDisponibilidade mensal de 99,5%; nenhuma manutenção programada no horário de pico, de quinta a domingo, das 16h às 02h.
RNF13Publicação, despacho, candidatura, confirmação, execução, cancelamento e avaliação devem deixar registro consultável e exportável.AuditabilidadeTodo evento do ciclo do turno grava data, hora, autor e estado anterior; o histórico é exportável por período.
RNF14O sistema deve tratar concorrência sem perder candidatura nem produzir confirmação dupla.RobustezTeste de candidaturas simultâneas à mesma posição resulta em exatamente uma confirmação e em retorno claro para os demais candidatos.
RNF15A interface deve ser em português do Brasil, com moeda em reais e horários no fuso America/Sao_Paulo.LocalizaçãoNenhum texto não traduzido nas telas de uso; valores exibidos em reais; turnos que atravessam a meia-noite exibidos corretamente.
RNF16O produto não deve exibir publicidade nem promover perfis mediante pagamento.Integridade do produtoAusência de qualquer espaço publicitário e de mecanismo de promoção paga na notificação ou na lista de vagas (RN06).

4.2 Tempo e Custo Estimados por RNF

#Tempo EstimadoCusto Estimado
RNF01Contínuo, 3 dias por sprint de ajusteR$ 0 (interno)
RNF028 dias / 1 sprintR$ 0 (interno). FCM sem custo no volume previsto (no iOS, via APNs)
RNF03Incluído em RF06R$ 0 (interno)
RNF045 dias de adequação e testesR$ 0 (interno) + aparelhos de teste já disponíveis
RNF053 diasR$ 0 (interno) + serviço de otimização de imagem
RNF068 dias / 1 sprintR$ 0 (interno)
RNF076 dias / 0,5 sprintR$ 0 (interno) + certificado TLS gerenciado
RNF088 dias / 1 sprintR$ 0 (interno). Exige revisão jurídica externa
RNF09Contínuo, 2 rodadas de teste de usabilidadeR$ 0 (interno)
RNF107 dias / 1 sprintR$ 0 (interno)
RNF115 dias de teste de cargaCusto de infraestrutura durante o teste
RNF12Contínuo, na operaçãoPlano gratuito do Supabase no piloto; o custo recorrente depois dele ainda está em aberto
RNF136 dias / 0,5 sprintR$ 0 (interno) + armazenamento de histórico
RNF145 dias / 0,5 sprintR$ 0 (interno)
RNF152 diasR$ 0 (interno)
RNF16Sem custo de implementação, é decisão de produtoR$ 0

5. Escopo Não Contemplado

Funcionalidade / Recurso

Justificativa da Exclusão

Previsão

Processamento, custódia e repasse de pagamento (carteira, split, escrow)

Exige operação financeira madura, conformidade regulatória e capital de giro. Pagamento retido ou atrasado é a queixa recorrente em Switch, Closeer e eFreela, e assumir a custódia sem estrutura repetiria o problema que o produto quer evitar.

v2.0, condicionado à validação

Cobrança dentro do aplicativo e qualquer modelo de monetização

O modelo de receita está deliberadamente em aberto até a validação de campo. Toda conta de receita depende de um preço que ainda não existe.

Indefinido

Contratação em regime CLT, processo seletivo e banco de currículos

Outro negócio, com outro ciclo, outro comprador e outro tempo de decisão. Currículo e processo seletivo não cabem num turno que começa em duas horas.

Nunca

Emissão de contrato, recibo ou nota fiscal

Depende da definição do modelo de intermediação e de revisão jurídica sobre vínculo. O registro do turno cobre a necessidade imediata de comprovação.

v2.0

Chat interno entre as partes

Na v1 o contato é liberado por WhatsApp ou e-mail após a confirmação, que é onde as pessoas já estão. Construir um canal paralelo adiciona superfície de produto sem resolver nada novo.

v2.0, se a validação indicar necessidade

Avaliação por nota de 1 a 5 e comentários abertos

Média com poucas avaliações não informa nada, e comentário aberto abre frente de moderação. A reputação binária com denominador é a aposta central do produto.

Nunca

Feed, seguidores, perfil público e qualquer camada social

O Frila não é rede social profissional. Não há conteúdo, não há audiência e não há motivo para alguém voltar ao app fora do ciclo do turno.

Nunca

Vagas remotas (design, programação, redação e similares)

Entram no escopo do produto, mas não no MVP. Sem presença no local não há check-in, notificação por distância nem presença verificada para liberar a avaliação: a vaga remota precisa de um fluxo próprio.

Depois do MVP

Aval de quem trabalhou com o profissional fora da plataforma

Retirado em 21/09/2026. Só avalia quem trabalhou junto pelo Frila: um atestado externo é fácil de forjar e não tem turno registrado por trás.

Nunca

Atendimento ao vivo e plantão da equipe Frila

O acompanhamento dos turnos é do gestor do contratante, pelo Painel. A equipe Frila só responde e-mail, em até 5 dias úteis.

Não previsto

Notificação Time Sensitive no iOS e pedido de isenção de economia de bateria no Android

Decisão de 21/09/2026. As metas de notificação passam a ser medidas no provedor de push (RNF02 e RNF03).

Indefinido

Operação fora do Distrito Federal

A estratégia é territorial e sequencial: dominar o DF antes de abrir qualquer outra praça. Densidade é difícil de construir e fácil de perder.

Depois da consolidação no DF

Verificação de antecedentes criminais

Custo por consulta relevante, impacto direto na barreira de entrada do profissional e implicações de discriminação que exigem análise jurídica.

Indefinido

Seguro de acidentes pessoais para o profissional

Praticado por pelo menos um concorrente e possivelmente relevante, mas depende de parceria e de um modelo de receita que ainda não existe.

Indefinido

Geolocalização em tempo real do profissional a caminho do turno

Custo de bateria e de privacidade alto demais para o benefício, e tensiona a regra que evita caracterizar subordinação (RN16). O check-in lê a localização só no toque (RN22).

Nunca na forma contínua

Integrações com PDV, sistema de ponto e folha de pagamento

O público-alvo primário são operações pequenas, cuja infraestrutura de software costuma ser o celular de quem está no salão.

Indefinido

6. Diagramas

6.1 Diagrama de Casos de Uso

Dezesseis casos de uso ativos cobrem os vinte e seis requisitos funcionais ativos: nenhum RF fica sem caso de uso na matriz da Seção 7.1. O UC12 e o RF17 foram retirados em 21/09/2026, junto com o aval herdado, e os números ficam reservados. Um único desenho com todos eles e quatro atores vira um emaranhado de linhas, então o diagrama é apresentado em três vistas, cada uma respondendo a uma pergunta. Um caso de uso pode aparecer em mais de uma vista.

O despacho (UC02) não tem ator primário. Ele é incluído pela publicação (UC01) e pela reabertura (UC08), e o agrupamento das notificações, os lembretes, os alertas de atraso e de vaga vazia, o fechamento automático do modo seleção e o pedido de avaliação são disparados pelo agendador do sistema. Desenhar o próprio sistema como ator colocaria o Frila do lado de fora do Frila.

Figura 1 — Ciclo do turno: da publicação à avaliação (UC01 a UC08)

Figura 2 — Cadastro, perfil e confiança (UC09 a UC11 e UC13)

Figura 3 — Suporte e direitos de quem usa (UC14 a UC17)

Atores

Ator

Quem é

Casos de Uso

Profissional

Quem executa turnos avulsos: garçom, bartender, cozinheiro, recepcionista, promotor e outras funções operacionais. Maior de 18 anos.

UC03, UC05, UC06, UC08, UC09, UC13, UC14, UC15, UC16, UC17

Contratante

Usuário de um estabelecimento que publica turnos: bar, restaurante, buffet, produtora, loja, residência ou outro negócio. Age com papel de administrador ou de operador do estabelecimento (RF21) e, como gestor, acompanha vagas e turnos pelo Painel.

UC01, UC04, UC05, UC06, UC07, UC08, UC10, UC11, UC13, UC14, UC15, UC16, UC17

Equipe Frila

Pessoa da equipe Frila que responde, por e-mail, suporte, denúncias, contestações e pedidos de revisão do despacho, e pode ocultar vaga com conteúdo impróprio até revisá-la. Não acompanha turnos nem intervém neles.

UC09, UC14, UC15, UC17

Usuário

Generalização de Profissional e Contratante, usada onde os dois têm o mesmo direito.

UC14, UC15, UC16, UC17

Descrição dos Casos de Uso

UC01: Publicar vaga

Ator(es)

Contratante (administrador ou operador do estabelecimento)

Pré-condição

O contratante está autenticado e o estabelecimento tem cadastro completo (UC10).

Fluxo Principal

  1. O contratante escolhe publicar uma vaga.
  1. O sistema apresenta o formulário com os campos obrigatórios de RN02 (função, data, horário de início e fim, endereço e região administrativa, valor por posição, número de posições, o que está incluso e quem recebe no local), os opcionais (traje exigido, participação no rateio dos 10% e observações), o modo de preenchimento (urgência ou seleção) e a antecedência do alerta de vaga vazia, com padrão de 3 horas.
  1. O contratante preenche os campos. O endereço e a região são pré-preenchidos com os do estabelecimento.
  1. O sistema valida a obrigatoriedade dos campos conforme RN02.
  1. O contratante confirma a publicação.
  1. O sistema registra a vaga, cria uma posição por unidade solicitada e inclui UC02.

Fluxo Alternativo

2a. A vaga começa em menos de 24 horas: o modo seleção não é oferecido, e a vaga é publicada em modo urgência; se o pedido chegar com seleção, o servidor o recusa (RN24).

3a. O contratante opta por republicar uma vaga anterior: o sistema pré-preenche todos os campos e solicita apenas a nova data e o novo horário (RF05).

3b. O contratante monta a escala de um evento: informa várias funções, cada uma com seu número de posições, e o sistema publica tudo numa única operação, acompanhando o preenchimento por função (RF19).

4a. Algum campo obrigatório está ausente ou inválido: o sistema indica o campo e impede a publicação.

Pós-condição

Vaga publicada, posições criadas com estado aberto e despacho iniciado.

Regras Relacionadas

RN02, RN03, RN04, RN18, RN24

Critério de Aceitação (BDD)

Dado que sou um contratante autenticado com estabelecimento cadastrado, quando preencho os campos obrigatórios e confirmo, então a vaga é publicada e a notificação aos profissionais elegíveis é disparada.

UC02: Despachar vaga aos profissionais elegíveis

Ator(es)

Nenhum ator primário. Incluído por UC01 e UC08; o agrupamento das notificações e o reenvio de falhas são feitos pelo agendador do sistema.

Pré-condição

Existe ao menos uma posição aberta na vaga.

Fluxo Principal

  1. O sistema seleciona os profissionais elegíveis (RN05): função compatível, disponibilidade no horário, até 15 km entre o ponto base e o local, perfil ativo, nenhum bloqueio entre as partes e nenhum turno confirmado que se sobreponha ao da vaga.
  1. O sistema inclui os profissionais da equipe de confiança do estabelecimento que tenham a função e estejam disponíveis, mesmo além de 15 km (UC11).
  1. Para cada elegível, o sistema aplica o teto de RN23: se ele não recebeu notificação de vaga nos últimos 30 minutos, a notificação sai agora; se recebeu, a vaga entra na próxima notificação agrupada.
  1. O sistema envia as notificações de uma vez, sem ordem entre os elegíveis, e registra o envio e o estado de entrega de cada uma.
  1. A vaga fica visível na lista de todo o DF enquanto houver posição aberta.

Fluxo Alternativo

1a. Não há nenhum elegível: a vaga segue visível na lista do DF, e o contratante é avisado de que ninguém próximo e disponível foi encontrado.

3a. A vaga é do modo urgência e começa em menos de 2 horas: ela fura o agrupamento e sai na hora, mas conta no teto do profissional (RN23).

4a. O profissional ignora ou recusa a notificação: nada é registrado contra ele (RN16), e ele segue elegível para as próximas vagas.

4b. A entrega da notificação falha: o sistema reenvia e registra o motivo (RNF02).

5a. A posição entra na janela crítica ainda aberta: o contratante recebe o alerta de vaga vazia (RF20).

Pós-condição

Profissionais elegíveis notificados, com registro de envio e de entrega.

Regras Relacionadas

RN04, RN05, RN06, RN16, RN23

Critério de Aceitação (BDD)

Dado que uma vaga foi publicada com posições abertas, quando o despacho é executado, então apenas profissionais elegíveis são notificados, em até 30 segundos e sem ordem entre eles, nenhum inelegível recebe a notificação e nenhum profissional recebe mais de uma notificação de vaga a cada 30 minutos.

UC03: Candidatar-se a uma posição

Ator(es)

Profissional

Pré-condição

O profissional está autenticado, tem perfil ativo e recebeu a notificação (UC02) ou encontrou a vaga na lista do DF (RF07).

Fluxo Principal

  1. O profissional toca na notificação, que abre o detalhe da vaga, ou abre a vaga na lista.
  1. O sistema exibe função, endereço, data, horário, valor, o que está incluso e o perfil do contratante com reputação e denominador.
  1. O profissional se candidata, sem formulário. A tela avisa que, se ele for confirmado, telefone e WhatsApp serão mostrados ao estabelecimento (RN10).
  1. O sistema registra a candidatura e a submete a UC04.

Fluxo Alternativo

3a. A posição já foi preenchida enquanto o profissional visualizava: o sistema informa o encerramento e oferece outras vagas próximas.

3b. O profissional já tem turno confirmado que se sobrepõe a este: o sistema impede a candidatura e mostra o turno em conflito. A regra é garantida no banco de dados, e não só na tela (RN21).

3c. O perfil está suspenso: o sistema mostra o motivo e o caminho para contestar (UC15).

3d. Há bloqueio entre o profissional e o estabelecimento: a vaga não aparece para ele, nem na notificação nem na lista (RF26).

3e. O profissional não tem a função da vaga, ou ainda não completou o perfil: a candidatura é recusada, e o app leva à tela de funções.

Pós-condição

Candidatura registrada e submetida ao fluxo de confirmação.

Regras Relacionadas

RN03, RN05, RN08, RN10, RN21

Critério de Aceitação (BDD)

Dado que recebi a notificação de uma vaga elegível, quando toco em candidatar-me, então a candidatura é registrada sem formulário e sem negociação de valor.

UC04: Confirmar profissional na posição

Ator(es)

Contratante no modo seleção. No modo urgência, a confirmação é automática.

Pré-condição

Existe ao menos uma candidatura válida para a posição.

Fluxo Principal

  1. No modo urgência, o sistema confirma automaticamente o primeiro candidato elegível que aceita.
  1. No modo seleção, o sistema apresenta os candidatos ao contratante com reputação, denominador e taxa de comparecimento, e o contratante escolhe.
  1. O sistema marca a posição como confirmada e garante que nenhuma outra confirmação ocorra para ela; quando todas as posições estão ocupadas, a vaga passa a preenchida.
  1. O sistema notifica os dois lados com função, local, horário, valor e identificação da contraparte.
  1. O sistema libera o contato direto entre as partes, visível até 7 dias depois do fim do turno (RN10).

Fluxo Alternativo

2a. No modo seleção, o contratante não escolhe até 24 horas antes do início: a vaga fecha automaticamente, as posições ainda abertas são canceladas, as candidaturas pendentes expiram, e candidatos e estabelecimento são avisados (RN24).

2b. O profissional retira a candidatura antes de ser escolhido: a retirada não gera penalidade, e ele segue livre para outras vagas (RN24).

2c. No modo seleção, a escolha ocupa a última posição aberta: as candidaturas ainda pendentes são recusadas, com aviso.

3a. Duas confirmações chegam simultaneamente: o sistema confirma exatamente uma, e a outra recebe a resposta de posição já ocupada.

Pós-condição

Posição preenchida, ambas as partes notificadas e contato liberado.

Regras Relacionadas

RN08, RN10, RN19, RN24

Critério de Aceitação (BDD)

Dado que há candidaturas para uma posição, quando a confirmação ocorre, então os dois lados recebem a notificação com os dados completos do turno, o contato é liberado e a posição deixa de aparecer entre as vagas abertas.

UC05: Registrar a execução do turno

Ator(es)

Profissional e Contratante

Pré-condição

Existe uma posição confirmada cujo horário de início se aproxima.

Fluxo Principal

  1. O sistema envia o lembrete pré-turno para os dois lados, 24 horas e 3 horas antes do início, com função, horário e região administrativa; o endereço e o contato ficam dentro do app, e não na tela de bloqueio (RF12).
  1. Ao chegar, o profissional faz o check-in, a partir de 60 minutos antes do início. O app lê a localização só nesse toque, calcula a distância até o endereço da vaga e envia só ela; o servidor registra como geolocalizado o check-in a até 200 m (RN22).
  1. O sistema grava a hora e a distância medida e avisa o contratante.
  1. Ao terminar, o profissional faz o check-out da mesma forma; a distância é registrada, sem limite.
  1. O sistema grava início, fim e valor acordado, e disponibiliza o registro aos dois.

Fluxo Alternativo

1a. (v1.1) De 3 horas antes até 15 minutos depois do início, o profissional confirmado avisa que está a caminho: o estabelecimento vê a hora do aviso, que não conta como presença nem substitui o check-in.

2a. A geolocalização falha (sem sinal, permissão negada, GPS impreciso ou a mais de 200 m): o profissional faz check-in manual, e o contratante confirma com um toque, no app ou no Painel web. Sem confirmação, o turno fica “não verificado” e não conta a favor nem contra na taxa de comparecimento.

2b. Chega o horário de início sem check-in: o profissional recebe um lembrete.

2c. Passam 15 minutos do início sem check-in: o contratante é alertado e decide esperar ou reabrir a vaga. Se reabrir, conta como falta do profissional, e a posição segue para UC08.

2d. O turno termina sem check-in nenhum, e o contratante não reabriu a vaga: o sistema cancela a posição com falta do profissional, e o turno fica “não verificado”.

4a. O fim previsto passa sem check-out: os dois lados recebem uma notificação. O que acontece com o valor fica entre as partes; o sistema não calcula hora extra.

4b. O contratante discorda do registro: vale o registro geolocalizado. O Frila não arbitra, e o contratante pode registrar a discordância na avaliação (UC06).

Pós-condição

Turno registrado com horários, distância medida e valor, e avaliação liberada após o término previsto quando a presença foi verificada.

Regras Relacionadas

RN09, RN11, RN18, RN22

Critério de Aceitação (BDD)

Dado que um turno confirmado começou, quando faço check-in a até 200 m do endereço, então o sistema grava a hora e a distância, avisa o contratante e disponibiliza o registro para consulta e exportação pelos dois (UC13).

UC06: Avaliar após o turno

Ator(es)

Profissional e Contratante

Pré-condição

O horário de término previsto do turno já passou, e a presença foi verificada: check-in geolocalizado ou manual confirmado pelo contratante (RN22).

Fluxo Principal

  1. O sistema solicita a avaliação a cada lado.
  1. Cada um responde a uma única pergunta: “Você chamaria essa pessoa de novo?” para o contratante, “Você trabalharia nesse local de novo?” para o profissional.
  1. O sistema registra a resposta e atualiza a reputação da contraparte.
  1. O sistema recalcula a taxa de comparecimento a partir dos registros de UC05.

Fluxo Alternativo

2a. Uma das partes não responde: a reputação da outra não é alterada, e o denominador exibido considera apenas as respostas efetivamente dadas.

2b. Outro membro do estabelecimento já respondeu: vale a resposta gravada, um voto por lado do turno, e o app mostra que a casa já avaliou.

3a. O turno foi cancelado antes de começar ou o profissional não compareceu: nenhuma avaliação é solicitada. A falta conta só na taxa de comparecimento, para não pesar duas vezes.

3b. O turno ficou “não verificado”: nenhuma avaliação é solicitada, e o turno não entra na taxa de comparecimento.

Pós-condição

Reputação dos dois lados atualizada; taxa de comparecimento do profissional recalculada.

Regras Relacionadas

RN07, RN08, RN22

Critério de Aceitação (BDD)

Dado que um turno com presença verificada terminou, quando ambas as partes respondem à pergunta binária, então a reputação de cada uma é atualizada e passa a ser exibida com o denominador, sem que nenhuma média de 1 a 5 seja apresentada.

UC07: Acompanhar vagas e turnos pelo Painel

Ator(es)

Contratante, como gestor do estabelecimento, na versão web. O alerta de vaga vazia e a confirmação de check-in manual também existem no app.

Pré-condição

O contratante está autenticado, e o estabelecimento tem vagas publicadas ou turnos confirmados.

Fluxo Principal

  1. O gestor abre o Painel na versão web do Frila, com a conta de contratante.
  1. O sistema mostra as vagas abertas, os candidatos, os profissionais confirmados, os check-ins do dia e os turnos não verificados.
  1. As posições ainda vagas dentro da janela crítica aparecem destacadas, com o tempo que falta para o início.
  1. O gestor confirma check-ins manuais pendentes, escolhe candidatos do modo seleção (UC04) ou cancela e reabre posições (UC08).
  1. O sistema registra cada ação no turno.

Fluxo Alternativo

3a. Uma posição entra na janela crítica ainda vaga: o contratante recebe um alerta por notificação, 3 horas antes do início ou na antecedência escolhida na publicação (RF20).

4a. O gestor está no celular: o alerta de vaga vazia e a confirmação de check-in manual estão no app, sem precisar do Painel.

Pós-condição

Vagas e turnos acompanhados pelo próprio estabelecimento, sem participação da equipe Frila.

Regras Relacionadas

RN12, RN22, RN24

Critério de Aceitação (BDD)

Dado que uma posição continua vaga a 3 horas do início, quando o prazo é atingido, então o contratante recebe o alerta no app, e a posição aparece destacada no Painel web com o tempo que falta para o início.

UC08: Cancelar e reabrir posição

Ator(es)

Profissional ou Contratante

Pré-condição

Existe uma posição confirmada ainda não executada, ou um não comparecimento em que o contratante decidiu reabrir a vaga (UC05).

Fluxo Principal

  1. A parte solicita o cancelamento e informa o motivo.
  1. O sistema registra autor, momento, antecedência e motivo.
  1. O sistema notifica a contraparte.
  1. O sistema mantém a posição cancelada no histórico, cria na mesma vaga uma posição nova, aberta, e inclui UC02 imediatamente.
  1. O sistema contabiliza o evento no histórico da parte que cancelou: cancelamento do profissional com mais de 24 horas não entra na taxa de comparecimento; com menos de 24 horas, ou não comparecimento, conta como falta.

Fluxo Alternativo

1a. O contratante cancela a vaga inteira: as posições abertas e confirmadas são canceladas com o motivo, os profissionais confirmados são avisados, e ninguém recebe falta.

4a. O cancelamento acontece depois do início: não há reabertura, e a outra parte é avisada de que o turno ficou descoberto.

4b. Reabertura por atraso (UC05, 2c): conta falta para o profissional, e a posição nova aceita candidatura até 1 hora antes do fim previsto, pelo valor integral (RN01).

5a. Uma parte cancela com frequência: o sistema não suspende nem bloqueia; o efeito é só na taxa de comparecimento, exibida no perfil (RN13).

Pós-condição

Cancelamento registrado, posição reaberta quando cabível e histórico atualizado.

Regras Relacionadas

RN12, RN13, RN16

Critério de Aceitação (BDD)

Dado que uma posição confirmada é cancelada antes do início do turno, quando o motivo é informado, então a contraparte é notificada, a vaga ganha uma posição nova, aberta, e uma nova notificação é disparada em até 30 segundos.

UC09: Cadastrar-se e manter o perfil profissional

Ator(es)

Profissional

Pré-condição

Não existe conta com o mesmo e-mail. O telefone pode se repetir em outra conta (RN25).

Fluxo Principal

  1. O profissional informa o e-mail e digita o código de uso único que chega nele. Não há senha nem SMS.
  1. O profissional escolhe o perfil de profissional, que fica fixo na conta (RN25), informa nome, telefone com WhatsApp e data de nascimento e aceita a versão vigente dos termos e da política de privacidade. O servidor confere a maioridade pela data de nascimento; do telefone, só o formato.
  1. O profissional declara suas funções, o ponto base e a disponibilidade por dia e faixa de horário. Não há distância para configurar: a notificação vai para quem está a até 15 km do local (RN05).
  1. O sistema ativa o perfil, que passa a receber notificações de vaga.
  1. A qualquer momento, o profissional altera funções, ponto base ou disponibilidade, e a mudança vale na notificação seguinte, sem novo login.

Fluxo Alternativo

2a. A data de nascimento indica menos de 18 anos: o cadastro é recusado, e nada além do necessário para registrar a recusa é guardado (RN20).

2b. A pessoa já tem conta de contratante: para trabalhar em turnos, cria outra conta, com outro e-mail; o telefone pode ser o mesmo (RN25).

3a. O profissional sai antes de declarar funções e ponto base: o cadastro fica salvo, mas o perfil não recebe notificação até completá-los.

5a. O sistema pede verificação de identidade: ela é progressiva e acontece depois da primeira notificação, nunca como barreira de entrada. O documento não aparece em log (RN14, RN15).

5b. O profissional abre “Por que recebo vagas”: o sistema explica os critérios (função, disponibilidade e distância de até 15 km) e oferece o botão “Contestar”, que envia um pedido de revisão à Equipe Frila, respondido em até 5 dias úteis (RF27).

Pós-condição

Perfil ativo e apto a receber notificações de vaga, sem nenhuma cobrança no cadastro.

Regras Relacionadas

RN01, RN05, RN14, RN15, RN20, RN25

Critério de Aceitação (BDD)

Dado que tenho 18 anos ou mais, quando entro com o código enviado ao meu e-mail e informo nome, telefone, funções, ponto base e disponibilidade, então fico apto a receber notificações de vaga sem enviar documento e sem pagar nada.

UC10: Cadastrar o estabelecimento e gerenciar seus usuários

Ator(es)

Contratante com papel de administrador do estabelecimento

Pré-condição

O responsável tem 18 anos ou mais e uma conta de contratante (RN25), criada com código no e-mail.

Fluxo Principal

  1. O contratante informa nome ou razão social, documento (CNPJ ou CPF), tipo de negócio, endereço e região administrativa do DF.
  1. O sistema valida o documento e localiza o endereço no mapa.
  1. O sistema cria o estabelecimento, com quem cadastrou como administrador.
  1. (v1.2, RF21) O administrador convida outros usuários pelo e-mail e atribui a cada um o papel de administrador ou de operador do estabelecimento.
  1. O convidado aceita com a própria conta de contratante, sem compartilhar acesso. Uma conta de profissional não pode aceitar o convite (RN25).

Fluxo Alternativo

2a. O endereço não é localizado com precisão: o sistema pede que o contratante confirme o ponto no mapa.

4a. O administrador remove um usuário: o acesso é revogado na hora, e o histórico do estabelecimento permanece.

4b. O responsável muda: a administração é transferida, e vagas, turnos e reputação continuam com o estabelecimento.

Pós-condição

Estabelecimento apto a publicar vagas (UC01), com usuários e papéis registrados.

Regras Relacionadas

RN15, RN20, RN25

Critério de Aceitação (BDD)

Dado que cadastrei o estabelecimento, quando convido um gerente como operador, então ele passa a publicar e acompanhar vagas com a própria conta, sem compartilhar acesso, e o histórico permanece com o estabelecimento se eu sair.

UC11: Manter a equipe de confiança

Ator(es)

Contratante com papel de administrador do estabelecimento

Pré-condição

O profissional tem perfil ativo no Frila e ao menos um turno com presença verificada no estabelecimento.

Fluxo Principal

  1. O administrador abre o perfil de um profissional a partir do histórico de turnos do estabelecimento (UC13).
  1. O administrador adiciona o profissional à equipe de confiança do estabelecimento.
  1. O sistema registra a inclusão, e o profissional passa a receber a notificação das próximas vagas do estabelecimento para as quais tiver a função e estiver disponível, mesmo além de 15 km (UC02).
  1. O administrador pode remover o profissional da equipe a qualquer momento.

Fluxo Alternativo

2a. O profissional não tem turno com presença verificada na casa: a inclusão é recusada, e o motivo é explicado.

2b. Quem tenta incluir ou remover é operador: a ação é recusada, porque é do administrador (RF21).

3a. O profissional da equipe não tem a função ou não está disponível: ele não é notificado. A equipe dispensa só o limite de distância, nunca os outros critérios de elegibilidade (RN05).

3b. O profissional recusa vagas da equipe: não há penalidade nem remoção automática (RN16).

3c. A equipe não tem prioridade de tempo: a notificação sai para ela e para os demais elegíveis ao mesmo tempo.

Pós-condição

Equipe atualizada, valendo a partir da próxima vaga.

Regras Relacionadas

RN05, RN06, RN16, RN23

Critério de Aceitação (BDD)

Dado que um profissional está na equipe de confiança do meu estabelecimento, tem a função e está disponível, quando publico uma vaga a mais de 15 km dele, então ele recebe a notificação ao mesmo tempo que os demais elegíveis.

UC12: Retirado

Situação

Retirado em 21/09/2026, junto com o RF17. O aval de quem trabalhou com o profissional fora da plataforma saiu do produto: só avalia quem trabalhou junto pelo Frila (RN07). O número fica reservado e não é reutilizado.

UC13: Consultar e exportar o histórico de turnos

Ator(es)

Profissional e Contratante

Pré-condição

Existe ao menos um turno registrado em UC05.

Fluxo Principal

  1. O usuário escolhe o período.
  1. O sistema lista os turnos com data, função, horários registrados, valor acordado e contraparte.
  1. O usuário pede a exportação em CSV ou PDF.
  1. O sistema gera o arquivo e o disponibiliza para download ou envio por e-mail.

Fluxo Alternativo

1a. O período não tem turnos: o sistema informa e não gera arquivo vazio.

2a. Um turno ficou “não verificado”: ele aparece marcado assim, sem entrar na taxa de comparecimento.

Pós-condição

Arquivo gerado com os turnos do período. O valor é o acordado e registrado, nunca um pagamento processado pelo Frila.

Regras Relacionadas

RN09, RN11, RN17, RN18

Critério de Aceitação (BDD)

Dado que tenho turnos registrados no mês, quando exporto o período, então o arquivo traz data, função, horários auditados, valor acordado e contraparte de cada turno, pronto para o fechamento contábil.

UC14: Acionar suporte durante o turno

Ator(es)

Usuário (Profissional ou Contratante), atendido pela Equipe Frila por e-mail

Pré-condição

Existe um turno confirmado em andamento ou prestes a começar.

Fluxo Principal

  1. O usuário aciona o suporte a partir da tela do turno.
  1. O app abre o e-mail do suporte já com os dados do turno, e o usuário escolhe o motivo (endereço, atraso, conduta, segurança ou outro) e descreve o caso.
  1. O app mostra o prazo de resposta declarado: até 5 dias úteis.
  1. A Equipe Frila responde por e-mail.

Fluxo Alternativo

2a. O motivo é de segurança: além do e-mail, o app mostra atalhos para ligar para o 190 (Polícia) e o 180 (Central de Atendimento à Mulher).

2b. O caso é assédio, discriminação ou risco: o app oferece também denunciar e bloquear a outra parte (UC17).

4a. Não há atendimento ao vivo: questões práticas do turno em andamento são combinadas direto com a outra parte, pelo contato liberado (RN10).

Pós-condição

E-mail enviado com os dados do turno e respondido no prazo declarado.

Regras Relacionadas

RN10, RN11, RN15

Critério de Aceitação (BDD)

Dado que estou num turno confirmado, quando aciono o suporte, então o e-mail abre já com os dados do turno, e eu vejo o prazo de resposta de até 5 dias úteis.

UC15: Consultar e contestar suspensão

Ator(es)

Usuário suspenso (Profissional ou Contratante), atendido pela Equipe Frila por e-mail

Pré-condição

O perfil foi suspenso por denúncia grave confirmada, com motivo registrado (UC17).

Fluxo Principal

  1. Ao entrar, o usuário vê o motivo e a data da suspensão.
  1. O usuário toca em “Contestar” e escreve o motivo, com evidência se quiser.
  1. O sistema envia a contestação à Equipe Frila e informa o prazo de resposta: até 5 dias úteis.
  1. A Equipe Frila apura e decide, registrando o fundamento.
  1. O sistema comunica a decisão. Se a contestação for aceita, a conta volta na hora.

Fluxo Alternativo

4a. O prazo vence sem decisão: o usuário é avisado do atraso.

5a. A suspensão é mantida: o usuário recebe o fundamento por escrito.

Pós-condição

Contestação decidida, com fundamento registrado.

Regras Relacionadas

RN13, RN15, RN16

Critério de Aceitação (BDD)

Dado que meu perfil foi suspenso, quando abro o aplicativo, então vejo o motivo registrado e consigo contestar, com resposta em até 5 dias úteis.

UC16: Exportar dados pessoais e excluir a conta

Ator(es)

Usuário (Profissional ou Contratante)

Pré-condição

O usuário está autenticado.

Fluxo Principal

  1. O usuário abre as configurações de privacidade da conta.
  1. O usuário pede a exportação, e o sistema gera um arquivo com seus dados pessoais.
  1. O usuário pede a exclusão da conta dentro do aplicativo e confirma.
  1. O sistema registra a solicitação, encerra as sessões e tira o perfil do despacho e da busca na hora.
  1. Em até 15 dias, os dados pessoais são apagados, e os turnos já realizados são anonimizados, preservando o histórico da contraparte.

Fluxo Alternativo

3a. O usuário tem turnos confirmados no futuro: o sistema avisa que a exclusão os cancela e, confirmada a exclusão, cancela cada posição com o motivo “exclusão de conta”, sem contar falta, e a vaga ganha uma posição nova (UC02).

3b. O usuário é o único administrador de um estabelecimento com outros usuários: o sistema pede que ele transfira a administração antes (UC10).

3c. O usuário é o único membro de um estabelecimento: as vagas abertas são canceladas, as candidaturas pendentes são retiradas e os profissionais são avisados; um turno já em andamento segue até o fim.

Pós-condição

Conta excluída; histórico da contraparte preservado de forma anônima.

Regras Relacionadas

RN15

Critério de Aceitação (BDD)

Dado que quero sair do Frila, quando peço a exclusão dentro do aplicativo, então a conta deixa de aparecer na hora e é excluída em até 15 dias, sem precisar de e-mail ou site externo, como exige a diretriz 5.1.1(v) da App Store.

UC17: Denunciar e bloquear

Ator(es)

Usuário (Profissional ou Contratante); a denúncia é respondida pela Equipe Frila por e-mail

Pré-condição

O usuário está autenticado e vê o perfil ou o turno da outra parte.

Fluxo Principal

  1. O usuário toca em “Denunciar” no perfil ou no turno da outra parte.
  1. O usuário escolhe o motivo (assédio, discriminação, risco à segurança ou outro) e descreve o caso.
  1. O sistema registra a denúncia, envia à Equipe Frila e mostra o prazo de resposta: até 5 dias úteis.
  1. O sistema oferece bloquear a outra parte.
  1. A Equipe Frila apura e responde por e-mail.

Fluxo Alternativo

1a. O usuário só quer bloquear: toca em “Bloquear”, e o bloqueio vale na hora, sem denúncia.

4a. Com o bloqueio, as partes não voltam a se cruzar: o profissional não recebe notificação nem vê vagas do estabelecimento, o estabelecimento não recebe candidatura dele, e o perfil de um deixa de aparecer para o outro (decisão de 30/09, a implementar).

5a. A denúncia grave é confirmada (assédio, ou fraude e documento falso, que chegam pelo motivo “outro”): o perfil denunciado é suspenso, com motivo registrado e direito de contestar (UC15); os turnos futuros dele são cancelados, a contraparte é avisada e as posições são reabertas (RN13).

5b. Há risco imediato: o app mostra atalhos para o 190 e o 180, sem esperar a resposta da Equipe Frila.

5c. A denúncia é sobre uma vaga com conteúdo impróprio: a Equipe Frila pode ocultá-la até revisar, sem cancelar turnos confirmados; a vaga sai da lista e do despacho, e o estabelecimento vê que ela foi ocultada.

Pós-condição

Denúncia registrada e respondida no prazo, e bloqueio em vigor quando pedido.

Regras Relacionadas

RN05, RN13, RN15

Critério de Aceitação (BDD)

Dado que sofri assédio num turno, quando denuncio e bloqueio a outra parte, então a denúncia chega à Equipe Frila com prazo de resposta de até 5 dias úteis, e a outra parte deixa de aparecer para mim, e eu para ela, em notificações, listas, candidaturas e no perfil, na hora. É o mecanismo que a diretriz 1.2 da App Store exige.

6.2 Diagrama de Banco de Dados (DER)

O eixo do modelo é uma cadeia só — vaga → posição → turno → avaliação —, o ciclo de vida de uma unidade de trabalho da publicação à reputação. Despacho, notificação e candidatura penduram-se nela como o registro de quem foi chamado e quem respondeu. As vistas abaixo são do mesmo esquema: separá-las evita o emaranhado de linhas que um único desenho com dezoito entidades produz.

Figura 4 — O ciclo de uma vaga: da publicação à avaliação

Figura 5 — Cada conta com um perfil só (RN25)

Figura 6 — O que decide quem recebe a notificação

Figura 7 — Os estados de uma posição e as transições válidas

A tabela descreve as dezoito entidades de domínio. O banco implementado, nas migrações de frila-backend, tem também a tabela associativa profissional_funcao, duas tabelas de operação (entrada_demonstracao e pedido_de_exclusao) e tabelas auxiliares num schema que a API não expõe; a Modelagem de Banco de Dados lista todas.

Descrição das Entidades Principais

Entidade

Descrição

Atributos Principais

Relacionamentos

Usuario

Conta de acesso, com um perfil só, profissional ou contratante (RN25). A entrada é por código no e-mail, a credencial fica no Supabase Auth e o id é o mesmo da conta de autenticação. O e-mail é único entre as contas não anonimizadas; o telefone, não.

id, perfil, nome, telefone, email, nascimento, estado, termos_versao, termos_aceite_em, demonstracao, criado_em, anonimizado_em

1:1 com Profissional, na conta de profissional; N:N com Estabelecimento via MembroEstabelecimento, na conta de contratante

Profissional

Perfil de quem executa turnos.

id, usuario_id, perfil, ponto_base, taxa_comparecimento, turnos_realizados, aval_positivas, aval_total

1:1 com Usuario; N:N com Funcao; 1:N com Disponibilidade e Candidatura; alvo de Avaliacao

Estabelecimento

Contratante de qualquer setor: bar, restaurante, buffet, produtora, loja, residência ou outro negócio.

id, nome, documento, tipo, endereco, regiao_administrativa, ponto, aval_positivas, aval_total, criado_em

1:N com Vaga e EquipeConfianca; N:N com Usuario via MembroEstabelecimento

MembroEstabelecimento

Vínculo entre um usuário e um estabelecimento, com papel.

id, usuario_id, estabelecimento_id, papel, criado_em

N:1 com Usuario; N:1 com Estabelecimento

Funcao

Catálogo de funções operacionais (garçom, bartender, chapeiro, montador, repositor…).

id, nome, categoria, ativo

N:N com Profissional; 1:N com Vaga

Vaga

Turno publicado por um estabelecimento.

id, estabelecimento_id, publicado_por, funcao_id, inicio_em, fim_em, local, regiao_administrativa, ponto, valor_centavos, posicoes, inclui_refeicao, inclui_transporte, exige_material_proprio, responsavel_local, traje, participa_rateio, observacoes, modo, alerta_antecedencia, estado, rodada_despacho, publicado_em, chave_cliente

N:1 com Estabelecimento e Funcao; 1:N com Posicao e Despacho

Posicao

Unidade preenchível de uma vaga. Uma vaga de 4 garçons tem 4 posições.

id, vaga_id, estado, profissional_id, confirmado_em, falta, reaberta_por_atraso_de, inicio_em, fim_em

N:1 com Vaga; 1:N com Candidatura; 1:1 com Turno

Disponibilidade

Janelas em que o profissional aceita trabalhar.

id, profissional_id, dia_semana, hora_inicio, hora_fim

N:1 com Profissional

Despacho

Registro de cada vaga enviada a um profissional elegível, uma vez por rodada; a reabertura por atraso abre rodada nova.

id, vaga_id, profissional_id, notificacao_id, rodada, criado_em

N:1 com Vaga, Profissional e Notificacao

Notificacao

Cada aviso enviado a uma conta, de profissional ou de membro do estabelecimento, com um de 18 tipos. Só os avisos de vaga, com uma ou mais vagas agrupadas, contam no teto de RN23.

id, usuario_id, tipo, referencia_id, profissional_id, rodada, enviada_em, urgente, estado_entrega, entregue_em, motivo_falha

N:1 com Usuario; 1:N com Despacho

Candidatura

Manifestação de interesse de um profissional por uma posição.

id, posicao_id, profissional_id, criada_em, estado

N:1 com Posicao; N:1 com Profissional

Turno

Execução efetiva de uma posição confirmada.

id, posicao_id, checkin_em, checkin_tipo, checkin_distancia_m, checkin_confirmado_em, checkout_em, checkout_distancia_m, a_caminho_em, verificacao, valor_acordado_centavos

1:1 com Posicao; 1:N com Avaliacao

Avaliacao

Resposta binária de um lado sobre o outro, após turno com presença verificada: uma por turno e por lado.

id, turno_id, autor_id, alvo_tipo, alvo_id, resposta, criada_em

N:1 com Turno

EquipeConfianca

Profissionais que recebem as vagas do estabelecimento mesmo além de 15 km.

estabelecimento_id e profissional_id (chave composta), adicionado_em

N:1 com Estabelecimento; N:1 com Profissional

Evento

Agrupamento de vagas de um mesmo evento, para escala em lote.

id, estabelecimento_id, nome, data, local

N:1 com Estabelecimento; 1:N com Vaga

Ocorrencia

Registro de cancelamento, suspensão, contestação, suporte, denúncia ou pedido de revisão do despacho.

id, tipo, turno_id, posicao_id, usuario_id, estabelecimento_id, autor_id, motivo, relato, criada_em, resultado, resolvido_em, chave_cliente

N:1 com Posicao, Turno, Usuario e Estabelecimento

Bloqueio

Bloqueio entre duas partes: impede que voltem a se cruzar.

id, autor_id, bloqueado_id, criado_em

N:1 com Usuario (autor e bloqueado)

Dispositivo

Token de push (FCM) de cada aparelho do usuário. Sem ele, a notificação não tem destino.

id, usuario_id, token_fcm, plataforma, atualizado_em

N:1 com Usuario

6.3 Diagrama de Classes

A regra de dependência vale em toda seta: o domínio é alvo de todas e origem de nenhuma. Quando precisa falar com o mundo, declara um protocolo e espera que alguém o implemente — é o que permite testar despacho, elegibilidade e reputação sem rede, sem interface e sem simulador. As regras que precisam valer igual nos três clientes são garantidas no backend (Seção 6.4): DespachoService, NotificacaoService e ElegibilidadeSpec são a especificação dessas funções e não têm classe no app. O domínio do app cuida das regras de tela, e o Diagrama de Classe mostra a correspondência entre o desenho e os nomes do código em frila-frontend/iOS.

Figura 8 — A regra de dependência entre as camadas

Figura 9 — Camada de domínio: entidades e serviços

Figura 10 — Portas e implementações: produção e teste

Figura 11 — Camada de apresentação

Descrição das Classes Principais

Classe

Responsabilidade

Atributos Principais

Métodos Principais

Vaga

Representar o turno publicado e seu estado.

id: UUID, funcao: Funcao, periodo: Periodo, local: Local, valor: Dinheiro, inclusos: Inclusos, responsavelLocal: String, modo: ModoPreenchimento, alertaAntecedencia: TimeInterval, posicoes: [Posicao]

posicoesAbertas(): [Posicao], estaNaJanelaCritica(): Bool, aceitaModoSelecao(): Bool, encerrar(): Void

Posicao

Controlar o preenchimento de uma unidade da vaga.

id: UUID, estado: EstadoPosicao, profissional: Profissional?, candidaturas: [Candidatura]

confirmar(_: Profissional) -> ResultadoConfirmacao, reabrir(motivo: String) -> Ocorrencia

Profissional

Guardar perfil, elegibilidade e reputação de quem executa.

id: UUID, funcoes: [Funcao], pontoBase: Coordenada, disponibilidades: [Disponibilidade], reputacao: Reputacao

— (quem decide a elegibilidade é o backend)

Estabelecimento

Representar o contratante e sua equipe.

id: UUID, nome: String, endereco: Local, membros: [Membro], equipeConfianca: [Profissional]

publicar(_: Vaga) throws, incluirNaEquipe(_: Profissional): Void

Turno

Registrar o check-in, o check-out e a presença.

id: UUID, posicao: Posicao, checkin: RegistroDePresenca?, checkout: RegistroDePresenca?, verificacao: Verificacao, valorAcordado: Dinheiro

registrarCheckin(distanciaMetros: Double?, em: Date): Void, confirmarCheckinManual(por: Ator): Void, registrarCheckout(distanciaMetros: Double?, em: Date): Void, temPresencaVerificada(): Bool

Avaliacao

Guardar a resposta binária de um lado sobre o outro.

id: UUID, turno: Turno, autor: Ator, alvo: Ator, resposta: Bool

aplicar(): Void

Reputacao

Calcular e formatar o sinal de confiança exibido.

positivas: Int, total: Int, taxaComparecimento: Double?, turnosConsiderados: Int

descricao(): String, temHistorico(): Bool

DespachoService

Especificar a seleção dos elegíveis e a notificação de uma vez, com teto e agrupamento (RN23). Roda no backend, em privado.despachar_vaga.

vaga: Vaga, distanciaMaximaKm: Double (15), tetoIntervalo: TimeInterval (30 min)

elegiveis(): [Profissional], notificar() async

NotificacaoService

Especificar o agrupamento, o envio, o acompanhamento da entrega e o reenvio. Roda no backend, na Edge Function enviar-push.

provedor: NotificacaoPort, pendentes: [Notificacao]

agrupar(_: [Vaga], para: Profissional): Notificacao, enviar(_: Notificacao) async throws, confirmarEntrega(_: UUID): Void, reenviarFalhas() async

ElegibilidadeSpec

Especificar as regras de quem pode receber uma vaga. Roda no backend, em privado.elegiveis.

distanciaMaximaKm: Double, exigeFuncao: Bool, exigeDisponibilidade: Bool

satisfaz(_: Profissional, _: Vaga): Bool

VagaRepositorio

Persistir e consultar vagas, posições e candidaturas (protocolo; VagaRepositorioHTTP em produção e VagaRepositorioEmMemoria nos testes).

fonte: FonteDeDados

salvar(_: Vaga) async throws, abertas(ordenadasPorDistanciaDe: Coordenada, filtro: FiltroVagas) async -> [Vaga], confirmar(posicao: UUID, profissional: UUID) async -> ResultadoConfirmacao

PublicarVagaViewModel

Orquestrar a tela de publicação e validar RN02.

rascunho: RascunhoVaga, erros: [CampoInvalido], estado: EstadoTela

validar(): Bool, publicar() async, carregarDeVagaAnterior(_: UUID): Void

FeedVagasViewModel

Orquestrar a lista de vagas do DF e a candidatura do profissional.

vagas: [Vaga], filtro: FiltroVagas, estado: EstadoTela

carregar() async, candidatar(a: Posicao) async

AcompanhamentoViewModel

Orquestrar, no perfil de contratante, as vagas em alerta e a confirmação de check-in manual. O Painel do gestor é web.

emAlerta: [Posicao], checkinsPendentes: [Turno]

carregar() async, confirmarCheckin(_: Turno) async

SessaoUsuario

Guardar identidade, o perfil da conta, que é fixo (RN25), e as permissões. O token fica no Keychain, nunca no objeto.

usuario: Usuario, perfil: PerfilConta, idCredencial: String

encerrar(): Void

6.4 Arquitetura

A arquitetura foi decidida em 21/09/2026. Os aplicativos são nativos: Swift e SwiftUI no iOS, Kotlin no Android, e uma versão web; a v1.0 é só iOS, e Android e web entram na v1.2. O backend é o Supabase (Postgres com PostGIS, autenticação, Edge Functions, pg_cron, pg_net e fila pgmq), escolhido pelo plano gratuito de até 50 mil usuários ativos por mês; a migração será reavaliada a partir de certa rentabilidade. O código está na organização FrilaApp do GitHub: frila-backend (branch develop) e frila-frontend (pasta iOS/).

As regras que precisam valer igual nos três clientes ficam no backend e são escritas uma vez, como funções e restrições no banco: quem recebe a notificação (RN05 e RN23), a confirmação sem duplicidade (RN19), o turno sobreposto (RN21), o check-in a até 200 m (RN22) e o fechamento do modo seleção (RN24). O despacho roda fora da requisição: publicar grava, enfileira o despacho na pgmq e responde; depois do commit, o pg_net aciona a Edge Function despachar, o pg_cron roda os lembretes, os alertas e os prazos, e o push sai pela Edge Function enviar-push. Cada app mantém o próprio domínio para a tela e para os testes.

O contrato entre os apps e o backend foi escrito antes do código (decisão B16) e está em api/openapi.yaml, no repositório frila-docs (OpenAPI 3.1; primeira versão em 22/09/2026, versão 0.2.27 em 30/09/2026). Toda mudança passa primeiro por ele, depois pelo backend e só então chega ao app. Cada operação com regra de negócio é uma função RPC do Supabase; as recusas de regra voltam com código estável, como posicao_ja_preenchida (409) e inelegivel (422), e reenviar a mesma escrita devolve o mesmo resultado.

Dentro do aplicativo iOS, as camadas são quatro:

• Apresentação: telas em SwiftUI e view models por funcionalidade, sem regra de negócio.

• Domínio: entidades, objetos de valor, reputação exibida e as portas (protocolos) que as outras camadas implementam. Não importa SwiftUI, Supabase, SwiftData nem CoreLocation, e é testável sem rede e sem interface.

• Dados: repositórios, cliente do Supabase, cache local em SwiftData e fila de ações offline.

• Infraestrutura: notificação push (FCM, que entrega no iOS via APNs), geolocalização lida no toque, mapa, keychain e telemetria.

Dependências e Pacotes

Pacote / Lib

Finalidade

SwiftUI

Produção de telas nos aplicativos iOS

Swift Concurrency (async/await, actors)

Operações assíncronas e isolamento de estado na sincronização e na fila offline

CoreLocation

Leitura da localização no momento do check-in e do check-out, nunca em segundo plano (entra na Sprint 2)

MapKit

Exibição do local do turno e da distância até ele (Sprint 2)

UserNotifications

Recebimento e apresentação das notificações de vaga (Sprint 2)

Supabase Swift (supabase-swift)

Entrada por código no e-mail e chamada das funções RPC do backend; guarda a sessão no Keychain

MetricKit e OSLog

Relatório de falhas e telemetria sem dado pessoal

Keychain Services

Armazenamento de credenciais e token de sessão

Firebase Cloud Messaging (FCM)

Push de vaga no Android e no iOS (no iOS, via APNs); o SDK entra no app na Sprint 2

SwiftData

Cache local dos turnos confirmados e fila de ações offline (exige iOS 17)

Swift Testing

Testes de unidade das regras de domínio

XCTest (XCUITest)

Testes de interface dos fluxos principais

XcodeGen

Geração do projeto Xcode a partir do project.yml

Supabase (backend)

Postgres com PostGIS, autenticação, Edge Functions, pg_cron, pg_net e pgmq: persistência, regras críticas, despacho e envio de push; testes em pgTAP

Diagrama de arquitetura

Figura 12 — Contexto: atores e dependências externas

Figura 13 — Contêineres: o app iOS (Android e web na v1.2), o Supabase e o despacho em fila

Figura 14 — A estratégia decidida para iOS, Android e web: nativo em cada plataforma, regras críticas no backend

Figura 15 — As quatro camadas dentro do aplicativo

Figura 16 — Da publicação à confirmação, com os prazos de cada etapa

Módulo 1 (obrigatório)

Nome do Módulo

Frila (iOS), aplicativo do Profissional e do Estabelecimento, em frila-frontend/iOS; bundle ID com.frila.org.app

Padrão Arquitetural

MVVM com camada de domínio isolada (Clean Architecture enxuta)

Justificativa

MVVM é o padrão idiomático de SwiftUI e mantém as telas livres de regra de negócio. A camada de domínio separada é o ponto que importa neste produto: elegibilidade, presença e reputação sustentam a tese inteira e precisam ser testáveis sem interface, sem rede e sem simulador, inclusive porque vão mudar conforme a validação de campo corrigir as hipóteses. As regras que precisam valer igual no Android e na web moram no backend. O app é dividido em quatro módulos (FrilaDominio, FrilaDados, FrilaInfraestrutura e a apresentação) e no alvo que os compõe.

Linguagem / Framework

Swift e SwiftUI

frila-frontend/iOS/

├── project.yml # projeto gerado pelo XcodeGen

├── Sources/

│ ├── App/ # composição: liga as camadas e escolhe o ambiente

│ ├── Apresentacao/ # telas SwiftUI, view models, componentes e tokens

│ ├── Dominio/ # FrilaDominio: entidades, objetos de valor e portas

│ ├── Dados/ # FrilaDados: cliente Supabase, cache SwiftData e fila offline

│ └── Infraestrutura/ # FrilaInfraestrutura: Keychain, telemetria, conexão

├── Tests/

│ ├── Unitarios/ # Swift Testing

│ └── UI/ # XCUITest

├── Contrato/ # cópia do openapi.yaml, com a soma de verificação

├── Resources/ # assets, strings pt-BR, fixtures do contrato, manifesto de privacidade

└── Configurations/ # ambientes (Local, Dev, Beta e Prod)

7. Documentação de Apoio

7.1 Matriz de Rastreabilidade Completa

RF

Descrição Resumida

RN(s) Relacionadas

RNF(s) Relacionados

UC(s) Relacionados

RF01

Cadastro e entrada do profissional por código no e-mail

RN14, RN15, RN20, RN25

RNF07, RNF08, RNF09

UC09

RF02

Cadastro do estabelecimento

RN15, RN20, RN25

RNF07, RNF08

UC10

RF03

Funções, ponto base e disponibilidade do profissional

RN05

RNF09

UC09, UC02

RF04

Publicação de vaga

RN02, RN03, RN18, RN24

RNF01, RNF09

UC01

RF05

Republicação de vaga anterior

RN02

RNF01

UC01

RF06

Notificação da vaga aos elegíveis

RN04, RN05, RN06, RN23

RNF02, RNF03, RNF11

UC02

RF07

Lista de vagas do DF

RN05, RN06

RNF01, RNF05

UC03

RF08

Candidatura sem formulário

RN03, RN21

RNF09

UC03

RF09

Modo urgência e modo seleção

RN19, RN24

RNF14

UC01, UC04

RF10

Confirmação e notificação das partes

RN10, RN19, RN21

RNF02, RNF14

UC04

RF11

Liberação do canal de contato

RN10

RNF07, RNF08

UC04

RF12

Lembrete pré-turno (24 h e 3 h)

RN10, RN15

RNF02

UC05

RF13

Check-in e check-out geolocalizados

RN11, RN12, RN18, RN22

RNF06, RNF13

UC05, UC07

RF14

Cancelamento com reabertura

RN12, RN16

RNF03, RNF13

UC08

RF15

Avaliação binária bidirecional

RN07, RN22

RNF13

UC06

RF16

Exibição de reputação e comparecimento

RN07, RN08

RNF09, RNF10

UC03, UC04, UC06

RF17

Retirado (aval externo)

—

—

— (UC12 retirado)

RF18

Equipe de confiança

RN05, RN06, RN23

RNF03

UC11, UC02

RF19

Escala de evento em lote

RN02, RN18

RNF01, RNF11

UC01

RF20

Alerta de vaga vazia e Painel do gestor

RN12, RN22, RN24

RNF12, RNF13

UC07

RF21

Múltiplos usuários por estabelecimento

RN15, RN25

RNF07

UC10

RF22

Histórico e exportação de turnos

RN11, RN17

RNF13

UC13

RF23

Suporte por e-mail

RN10, RN15

RNF12

UC14

RF24

Consulta e contestação de suspensão

RN13, RN16

RNF13

UC15

RF25

Exportação e exclusão de dados pessoais

RN15

RNF08, RNF13

UC16

RF26

Denúncia e bloqueio

RN05, RN13, RN15

RNF08, RNF13

UC17

RF27

Explicação do despacho e pedido de revisão

RN05, RN06

RNF09

UC09

RN01 (sem desconto no valor do turno) e RN09 (não processar pagamento) não aparecem vinculadas a nenhum requisito porque são restrições de produto que valem sobre o sistema inteiro e determinam o que não existe. Elas são verificadas por ausência, já que nenhum fluxo pode introduzi-las, e não por um requisito específico que as implemente. A RN20 (maioridade) aparece em RF01 e RF02, mas vale para todo cadastro, dos dois perfis. O RF17 e o UC12 foram retirados em 21/09/2026 e seguem na tabela só para preservar a numeração.