Plano — Ajuste dos ADRs com base no projeto legado
Objetivo
Incorporar aos ADRs os campos e conceitos validados no projeto legado (_legacy), mantendo coerência com o modelo hierárquico e de escopo já definido.
Mapeamento legado → ADR
1. Church → OrganizationalUnit (ADR-0002, ADR-0005)
| Legado (ChurchModel) | ADR (OrganizationalUnit) | Observação |
|---|---|---|
| name | name | Mantido |
| code | code | Novo — identificador curto (3 chars) |
| fone1, fone2 | phone_primary, phone_secondary | Novo |
| Novo | ||
| address | address | Novo |
| group | group | Novo — grupo/região |
| pastor | pastor_id | Novo — referência User |
| secretary | secretary_id | Novo — referência User |
| churchStatus | status | Mapear: active, inactive, pending |
| dateFundation | foundation_date | Novo |
ChurchThin: name, code, uid, churchStatus → modelo enxuto para referência.
2. User (ADR-0005)
| Legado (EbdIbeUserModel) | ADR (User) | Observação |
|---|---|---|
| name | name | Mantido |
| aliasName | alias_name | Novo — nome social/apelido |
| Mantido | ||
| uid | id | Mantido |
| churchMember | unit_id (implícito) | churchMember.code → unit_id |
| userStatus | status | Expandir enum |
| statusDate | status_date | Novo |
| churchRoles | roles[] | Novo — lista de RoleAssignment |
| ministry_id | ministry_id | Já no ADR |
UserStatus (legado): active, inactive, blocked, suspended, pending, banned, none
→ Status no ADR: ACTIVE, INACTIVE, BLOCKED, SUSPENDED, PENDING, BANNED
RoleAssignment (novo conceito): role_id, role_status (approved, rejected, declared, pending), last_action_date
3. ChurchRole → Role (ADR-0003, ADR-0005)
Legado tem 17 papéis com oprLevel (0=maior poder). Mapeamento para ADR:
| Legado | ADR Role | Nível |
|---|---|---|
| superAdmin | MINISTRY_ADMIN | 0 |
| ministerialEbdSupervisor, presidentPastor, assistantMinisterialPastor | (ministerial) | 1 |
| localSecretary, ebdSuperintendent, assistantLocalPastor, localPastor | CHURCH_ADMIN / SUPERINTENDENT | 2-3 |
| ebdSecretary | SECRETARY | 4 |
| ebdTeacher | TEACHER | 5 |
| ebdAssistent, churchLider | MONITOR | 6 |
| ebdStudent, member, churchWorker | STUDENT | 7 |
| none | — | — |
AccessType (legado): read, insertUpdate, delete → incluir no ADR-0003.
4. EbdClassModel → ClassGroup + Lesson (ADR-0005)
ClassGroup (definição da classe):
| Legado | ADR ClassGroup | Observação |
|---|---|---|
| ebdClassType | age_group | Enum: NURSERY, KINDERGARTEN, GARDEN, JUNIORS, TEENAGERS, YOUNG_ADULTS, LEVITES, BAPTISM, EVANGELISM, INTEGRATION, WORKERS, COUPLES, ADULTS, MASTERS |
| name | name | Mantido |
| classOrder | display_order | Ordem de exibição |
Lesson (ocorrência de aula em data específica):
| Legado (EbdClassModel em contexto de EBD) | ADR Lesson | Observação |
|---|---|---|
| classProfessor | teacher_id | Mantido |
| classAssistent | monitor_id | Novo |
| totalStudent | (agregado de Attendance) | Ou campo redundante para compatibilidade |
| totalVisitors | idem | attendance_category: VISITOR |
| totalLiders | idem | attendance_category: LEADER |
| totalWorkers | idem | attendance_category: WORKER |
| totalPastor | idem | attendance_category: PASTOR |
| lessonBookPublisher | material.publisher | Via material_id |
| textbook | material.edition/name | Via material_id |
| lessonName | theme | Mantido |
| ebdClassStatus | lesson_status | CREATED, IN_PROGRESS, CONCLUDED, CLOSED, NOT_HELD_TODAY, NOT_EXISTS |
| observation | observation | Novo em Lesson |
5. EbdModel → EbdSession (nova entidade ou extensão de Lesson)
O legado trata "EBD do dia" como entidade agregadora. Opções:
A) Nova entidade EbdSession: uma ocorrência de EBD para unit_id em uma data. Contém: status, type, replace_cause, weather, totals, observation. Lessons pertencem a EbdSession.
B) Lesson vira "LessonSession" e temos EbdSession como container de várias LessonSessions.
Decisão: Criar EbdSession no ADR-0005 como entidade agregadora.
| Legado (EbdModel) | ADR EbdSession |
|---|---|
| ebdDate | date |
| ebdChurchCode | unit_id |
| ebdChurchName | (derivado) |
| ebdStatus | status: CREATED, IN_PROGRESS, CONCLUDED, CLOSED |
| ebdType | type: FULL_CLASS, REGULAR_CLASS, UNIQUE_CLASS, ONLINE_CLASS, CANCELED, REPLACED_BY_EVENT, REPLACED_BY_CULT |
| ebdReplaceCause | replace_cause (quando type anormal) |
| weatherData | weather_type, temperature |
| totalStudent, etc. | totals (agregados) |
| observation | observation |
| ebdPrincipals | principals[] (user_ids) |
| ebdClasses | lessons[] (subcoleção ou referências) |
6. Material (ADR-0005)
| Legado | ADR Material |
|---|---|
| lessonBookPublisher | publisher: CPAD, EBENEZER, OTHERS, DO_NOT_USE |
| textbook | name ou edition |
| lessonName | (em Lesson.theme) |
7. Attendance (ADR-0004, ADR-0005)
Legado usa contagem agregada. ADR-0004 define presença individual (QR, etc.).
Decisão: Manter Attendance individual. Adicionar category: STUDENT, VISITOR, LEADER, WORKER, PASTOR — para compatibilidade com contagem legada e relatórios.
Arquivos a alterar
- ADR-0002 — Adicionar campos em OrganizationalUnit (code, phone, email, address, pastor_id, secretary_id, foundation_date)
- ADR-0005 — Expandir entidades com todos os campos; adicionar EbdSession; enums (ClassAgeGroup, LessonStatus, EbdSessionType, etc.)
- ADR-0003 — Expandir roles; adicionar RoleStatus, AccessType, níveis de operação
- ADR-0004 — Adicionar attendance_category; nota sobre entrada manual (compatibilidade)
Ordem de execução
- ADR-0005 (domínio — base)
- ADR-0002 (organizacional — complementa OrganizationalUnit)
- ADR-0003 (acesso — papéis e permissões)
- ADR-0004 (presença — category apenas)