Skip to content

Grupos & Escalas

Visão Geral

O módulo de Grupos gerencia grupos ministeriais da igreja (células, ministérios, departamentos) e suas escalas de voluntários. Cada grupo pode ter membros com posições específicas, registrar atividades e criar escalas mensais com detecção automática de conflitos.

Models

Group

Namespace: App\Domain\Group\Models\Group

Usa ULID como chave pública, SoftDeletes e Auditable.

CampoTipoDescrição
ulidstringIdentificador público
nomestringNome do grupo
descricaotextDescrição (nullable)
group_type_idFKTipo do grupo
leader_idFK membersLíder do grupo (nullable)
congregation_idFKCongregação vinculada (nullable)
data_criacaodateData de criação do grupo
is_activebooleanGrupo ativo ou arquivado

Relationships:

  • groupType() — belongsTo GroupType
  • leader() — belongsTo Member
  • congregation() — belongsTo Congregation
  • members() — belongsToMany Member via group_members
  • groupMembers() — hasMany GroupMember
  • positions() — hasMany GroupPosition
  • activities() — hasMany GroupActivity
  • schedules() — hasMany Schedule

GroupType

Namespace: App\Domain\Group\Models\GroupType

Usa ULID, SoftDeletes e Auditable.

CampoTipoDescrição
ulidstringIdentificador público
nomestringNome do tipo (ex: Célula, Ministério)
is_activebooleanTipo ativo
sort_orderintegerOrdem de exibição

Relationships:

  • groups() — hasMany Group

GroupMember

Namespace: App\Domain\Group\Models\GroupMember

Tabela pivot group_members.

CampoTipoDescrição
group_idFKGrupo
member_idFKMembro

Relationships:

  • group() — belongsTo Group
  • member() — belongsTo Member

GroupActivity

Namespace: App\Domain\Group\Models\GroupActivity

CampoTipoDescrição
group_idFKGrupo vinculado
titulostringTítulo da atividade
descricaotextDescrição (nullable)
data_atividadedateData da atividade
participantes_countintegerTotal de participantes (calculado automaticamente)
visitantes_countintegerTotal de visitantes (preenchido manualmente)

Relationships:

  • group() — belongsTo Group
  • attendances() — hasMany GroupActivityAttendance

Veja tambem: Insights de Engajamento — presenca individual registrada pelo lider via lista de checkbox


GroupPosition

Namespace: App\Domain\Group\Models\GroupPosition

Define posições/funções dentro de um grupo (ex: Ministro de Louvor, Sonoplasta).

CampoTipoDescrição
group_idFKGrupo vinculado
nomestringNome da posição

Relationships:

  • group() — belongsTo Group
  • scheduleItems() — hasMany ScheduleItem

Schedule

Namespace: App\Domain\Group\Models\Schedule

Representa uma escala para um grupo em uma data específica.

CampoTipoDescrição
group_idFKGrupo da escala
data_eventodateData do evento/escala
horariostringHorário (nullable)
observacaotextObservações (nullable)

Relationships:

  • group() — belongsTo Group
  • items() — hasMany ScheduleItem
  • members() — hasManyThrough Member via ScheduleItem

Scopes: byMonth(year, month), upcoming()


ScheduleItem

Namespace: App\Domain\Group\Models\ScheduleItem

Item de uma escala — associa um membro a uma posição.

CampoTipoDescrição
schedule_idFKEscala vinculada
member_idFKVoluntário escalado
position_idFKPosição na escala

Relationships:

  • schedule() — belongsTo Schedule
  • member() — belongsTo Member
  • position() — belongsTo GroupPosition

Actions

ActionDescrição
CreateGroupActionCria grupo com tipo e líder
UpdateGroupActionAtualiza dados do grupo
DeleteGroupActionSoft delete do grupo
AddGroupMemberActionAdiciona membro ao grupo
RemoveGroupMemberActionRemove membro do grupo
ManageGroupPositionsActionSincroniza posições do grupo
CreateGroupActivityActionRegistra atividade do grupo
UpdateGroupActivityActionAtualiza atividade
DeleteGroupActivityActionRemove atividade
CreateScheduleActionCria escala com itens
UpdateScheduleActionAtualiza escala e itens
DeleteScheduleActionRemove escala
SyncScheduleItemsActionSincroniza membros/posições de uma escala
CheckScheduleConflictsActionDetecta conflitos de escala entre grupos na mesma data

Endpoints

MétodoRotaControllerDescrição
GET/groupsGroupController@indexLista grupos
POST/groupsGroupController@storeCriar grupo
GET/groups/{ulid}GroupController@showDetalhes do grupo
PUT/groups/{ulid}GroupController@updateAtualizar grupo
DELETE/groups/{ulid}GroupController@destroyExcluir grupo
POST/groups/{ulid}/membersGroupController@addMemberAdicionar membro
DELETE/groups/{ulid}/members/{member}GroupController@removeMemberRemover membro
GET/groups/{ulid}/positionsGroupPositionController@indexListar posições
POST/groups/{ulid}/positions/syncGroupPositionController@syncSincronizar posições
GET/groups/{ulid}/activitiesGroupActivityController@indexListar atividades
POST/groups/{ulid}/activitiesGroupActivityController@storeCriar atividade
PUT/groups/{ulid}/activities/{activity}GroupActivityController@updateAtualizar atividade
DELETE/groups/{ulid}/activities/{activity}GroupActivityController@destroyRemover atividade
GET/groups/{ulid}/schedulesScheduleController@indexListar escalas
POST/groups/{ulid}/schedulesScheduleController@storeCriar escala
PUT/groups/{ulid}/schedules/{schedule}ScheduleController@updateAtualizar escala
DELETE/groups/{ulid}/schedules/{schedule}ScheduleController@destroyRemover escala
POST/groups/{ulid}/schedules/check-conflictsScheduleController@conflictsVerificar conflitos

Permissões

PermissãoQuem tem
group.viewadmin-igreja, secretario, admin-congregacao, lider-grupo
group.createadmin-igreja, secretario
group.editadmin-igreja, secretario, lider-grupo
group.deleteadmin-igreja

Escalas são gerenciadas por quem tem group.edit. A verificação de conflitos é disponível antes de salvar.

Feature Flags

FlagDescrição
volunteers_scheduleHabilita o módulo de Escalas de Voluntários