Skip to content

Schemas Zod

O pacote @neemias/schemas contém todos os schemas Zod compartilhados entre frontend e backend. Estes schemas são a fonte única da verdade para validação de dados, tipos TypeScript e geração da especificação OpenAPI.

Primitivas

PhoneEntry

Entrada de telefone com número e qualificador (ex.: "Celular", "WhatsApp").

CampoTipoRestrições
numberstringmin 1, max 20
qualifierstringmin 1, max 50

Address

Endereço residencial do aluno (dado LGPD — PII).

CampoTipoRestrições
streetstringmax 255, default ""
numberstringmax 20, default ""
complementstringmax 255, default ""
neighborhoodstringmax 255, default ""
citystringmax 255, default ""
statestringmax 2, default ""
zipstringmax 10, default ""

Constante auxiliar: EMPTY_ADDRESS — objeto Address com todos os campos vazios.

EncryptedPayload

Payload criptografado com AES-GCM para dados sensíveis em repouso.

CampoTipo
ciphertextstring
ivstring
keyVersionnumber (inteiro)

Entidades principais

Student

Aluno — entidade central do sistema. Contém campos PII (LGPD) e não-PII.

Campos PII (LGPD): displayName, photoRef, guardianName, guardianNameAlt, birthDate, phones, address, allergies, specialNeeds

CampoTipoRestrições
studentIdstringUUID
displayNamestringmin 1, max 140 — PII
photoRefstringdefault "" — PII (dado biométrico)
statusStudentStatusenum
guardianNamestringmin 1, max 200 — PII
guardianNameAltstring (opcional)max 200 — PII
birthDatestring (opcional)— PII
phonesPhoneEntry[]default [] — PII
addressAddressdefault EMPTY_ADDRESS — PII
classIdstring (opcional)UUID
nucleusParticipatesbooleandefault false
nucleusRegionNucleusRegion (opcional)enum
nucleusNamestring (opcional)max 200
allergiesstring (opcional)max 1000 — PII
specialNeedsstring (opcional)max 1000 — PII
familyMembershipStatusFamilyMembershipStatusdefault "DESCONHECIDO"
createdAtstringISO 8601 datetime
updatedAtstringISO 8601 datetime
createdBystringUUID
deletedAtstring (opcional)
deletedBystring (opcional)UUID

Class (Turma)

CampoTipoRestrições
classIdstringUUID
namestringmin 1, max 100
ageMinnumber (opcional)inteiro, 0–99
ageMaxnumber (opcional)inteiro, 0–99
statusenum"ACTIVE" | "DELETED"
createdAtstringISO 8601 datetime
updatedAtstringISO 8601 datetime

Nucleus (Núcleo)

CampoTipoRestrições
nucleusIdstringUUID
regionNucleusRegionenum
namestringmin 1, max 200
statusenum"ACTIVE" | "DELETED"
createdAtstringISO 8601 datetime
updatedAtstringISO 8601 datetime

ClassSlot

CampoTipoRestrições
slotIdstringUUID
dayOfWeeknumberinteiro, 0–6
startTimestringregex HH:MM
labelstringmin 1, max 100
sessionDatestring (opcional)
statusSlotStatusenum
createdAtstringISO 8601 datetime
updatedAtstringISO 8601 datetime

ClassSession

CampoTipoRestrições
sessionIdstringUUID
slotIdstringUUID
sessionDatestringregex YYYY-MM-DD
createdAtstringISO 8601 datetime

SessionOption (auxiliar de exibição)

CampoTipo
sessionIdstring (UUID)
slotIdstring (UUID)
labelstring
sessionDatestring
dayOfWeeknumber (0–6)
startTimestring

Eventos e auditoria

AttendanceEvent

Registro de chamada (presença/falta).

CampoTipoRestrições
eventIdstringUUID
studentIdstringUUID
classSessionIdstringUUID
actionTypeAttendanceActionTypeenum
actorIdstringUUID
actorRolestring
timestampstringISO 8601 datetime
syncStateSyncStatedefault "SYNCED"
isConflictLoserbooleandefault false
conflictSupersededBystring (opcional)UUID

StudentEvent

Evento de auditoria de alterações em alunos. Inclui criptografia opcional para dados sensíveis.

CampoTipoRestrições
eventIdstringUUID
studentIdstringUUID
eventTypeStudentEventTypeenum
actorIdstringUUID
actorRolestring
timestampstringISO 8601 datetime
changePayloadRecord<string, unknown>default {}
justificationstring (opcional)max 500
encryptedChangePayloadEncryptedPayload (opcional)
encryptedJustificationEncryptedPayload (opcional)
syncStateSyncStatedefault "SYNCED"
isConflictLoserbooleandefault false

UserEvent

Evento de auditoria de alterações em usuários.

CampoTipoRestrições
eventIdstringUUID
userIdstringUUID
eventTypeUserEventTypeenum
actorIdstringUUID
actorRolestring
timestampstringISO 8601 datetime
changePayloadRecord<string, unknown>default {}
encryptedChangePayloadEncryptedPayload (opcional)
syncStateSyncStatedefault "SYNCED"
isConflictLoserbooleandefault false

Sincronização offline

SyncQueueEntry

Entrada na fila de sincronização offline → online.

CampoTipoRestrições
queueIdstringUUID
eventIdstringUUID
entityTypeenum"ATTENDANCE_EVENT" | "STUDENT_EVENT" | "USER_EVENT"
actionTypestringmin 1
actorIdstringUUID
actorRolestring
enqueuedAtstringISO 8601 datetime
syncStateSyncStatedefault "PENDING"
retryCountnumberinteiro ≥ 0, default 0
failureCodestring (opcional)
failureReasonstring (opcional)
lastAttemptAtstring (opcional)ISO 8601 datetime

Autenticação e sessão

Session

Sessão autenticada do usuário.

CampoTipoRestrições
sessionIdstringUUID
userIdstringUUID
rolestring
issuedAtstringISO 8601 datetime
expiresAtstringISO 8601 datetime
stateenum"ACTIVE" | "EXPIRED" | "REVOKED"
lastValidatedAtstring (opcional)ISO 8601 datetime
backendRefreshTokenstring (opcional)
csrfTokenstring (opcional)
encryptedSessionSecretsEncryptedPayload (opcional)
backendAuthModeenum (opcional)"bearer" | "cookie"

LocalUser

Usuário armazenado localmente (IndexedDB) para operação offline.

CampoTipoRestrições
userIdstringUUID
usernamestringmin 1, max 100
emailstring (opcional)email
displayNamestringmin 1, max 140
passwordHashstring (opcional)
encryptedCredentialsEncryptedPayload (opcional)
cryptoKeyVersionnumber (opcional)inteiro
keyRotatedAtstring (opcional)ISO 8601 datetime
rolestring
statusUserStatusenum
createdAtstringISO 8601 datetime
createdBystring | nullUUID ou null
updatedAtstringISO 8601 datetime
deactivatedAtstring (opcional)ISO 8601 datetime
deactivatedBystring (opcional)UUID

Outros schemas

Role (papel dinâmico — v0.26.0+)

CampoTipoRestrições
namestringmin 1, max 50
displayNamestringmin 1, max 100
permissionsstring[]
isSystembooleandefault false
createdAtstringISO 8601 datetime
updatedAtstringISO 8601 datetime

LocaleResource

Recurso de internacionalização (i18n).

CampoTipoRestrições
localeCodestringmin 2, max 10
keystringmin 1
translatedTextstring

Fonte: packages/schemas/src/entities.ts

Distribuído sob licença MIT.