This commit is contained in:
2025-07-22 14:26:05 -03:00
parent 2f7b880f48
commit 1a1d545544
12 changed files with 298 additions and 200 deletions

View File

@@ -2,73 +2,79 @@
### Relacionamentos
Toda compra é relacionada a empresa responsável, que é definida como o `tenant` da mesma. Essa relação é estabelecida com base no CNPJ presente na compra.
Toda compra é relacionada a empresa responsável, que é definida como o `org_id` da mesma. Essa relação é estabelecida com base no CNPJ presente na compra.
O gestor responsável pela ação também é relacionado à compra, com base no email presente na compra.
```json
{"id": "101", "sk": "0", "name": "EDUSEG", "cnpj": "15608435000190", "tenant": "100"}
{"id": "101", "sk": "author", "name": "Sérgio", "email": "sergio@somosbeta.com.br", "user_id": "123"}
{"id": "101", "sk": "slots", "status": "PENDING", "mode": "BATCH"}
{"id": "101", "sk": "slots#enrollment#9omWNKymwU5U4aeun6mWzZ", "status": "SUCCESS"}
{"id": "101", "sk": "slots#enrollment#12", "status": "ROLLBACK"}
{"id": "101", "sk": "0", "name": "EDUSEG", "cnpj": "15608435000190", "org_id": "100"}
{"id": "101", "sk": "AUTHOR", "name": "Sérgio", "email": "sergio@somosbeta.com.br", "user_id": "123"}
{"id": "101", "sk": "SLOT", "status": "PENDING", "mode": "BATCH"}
{"id": "101", "sk": "SLOT#ENROLLMENT#9omWNKymwU5U4aeun6mWzZ", "status": "SUCCESS"}
{"id": "101", "sk": "SLOT#ENROLLMENT#12", "status": "ROLLBACK"}
```
Quando o responsável é uma pessoa física (CPF).
```json
{"id": "20", "sk": "0", "name": "Sérgio", "email": "sergio@somosbeta.com.br", "cpf": "07879819908", "tenant": "123"}
{"id": "20", "sk": "slots", "status": "PENDING", "mode": "STANDALONE"}
{"id": "20", "sk": "slots#enrollment#1123", "status": "SUCCESS"}
{"id": "20", "sk": "0", "name": "Sérgio", "email": "sergio@somosbeta.com.br", "cpf": "07879819908", "org_id": "123"}
{"id": "20", "sk": "SLOT", "status": "PENDING", "mode": "STANDALONE"}
{"id": "20", "sk": "SLOT#ENROLLMENT#1123", "status": "SUCCESS"}
```
# Usuários
```json
{"id": "89ada056-141c-4c8a-b442-86ab799f0bb7", "sk": "0", "name": "Sérgio R Siqueira", "cpf": "07879819908", "email": "sergio@somosbeta.com.br", "email_verified": true, "emails": ["osergiosiqueira@gmail.com"]}
{"id": "89ada056-141c-4c8a-b442-86ab799f0bb7", "sk": "EMAIL#sergio@somosbeta.com.br", "email_verified": true, "email_primary": true, "mx_record_exists": true}
{"id": "89ada056-141c-4c8a-b442-86ab799f0bb7", "sk": "EMAIL#osergiosiqueira@gmail.com", "email_verified": false, "email_primary": false, "mx_record_exists": true}
```
# Matrículas
```json
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "0", "course": {"id": "10", "name": "pytest"}, "tenant": "100"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "metadata#course", "access_period": 360, "cert": {"exp_interval": 365}}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "tenant", "org_id": "100", "name": "EDUSEG"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "author", "user_id": "202", "name": "Tiago Maciel"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "konviva", "user_id": 122, "class_id": 123, "enrollment_id": 1239}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "started", "started_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "completed", "completed_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "failed", "failed_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "canceled", "canceled_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "archived", "archived_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "expired", "expired_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "linked_entities#order", "order_id": "101"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "0", "course": {"id": "10", "name": "pytest"}, "org_id": "100"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "METADATA#COURSE", "access_period": 360, "cert": {"exp_interval": 365}}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "TENANT", "org_id": "100", "name": "EDUSEG"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "AUTHOR", "user_id": "202", "name": "Tiago Maciel"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "KONVIVA", "user_id": 122, "class_id": 123, "enrollment_id": 1239}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "STARTED", "started_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "COMPLETED", "completed_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "FAILED", "failed_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "CANCELED", "canceled_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "ARCHIVED", "archived_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "EXPIRED", "expired_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "LINKED_ENTITIES#ORDER", "order_id": "101"}
```
### Vagas
### Vagas disponíveis
```json
{"id": "slots#org#100", "sk": "order#101#enrollment#faa8a547-bb9b-4103-bd8c-8fbe96b4056f", "course": {"name": "pytest"}}
{"id": "slots#org#100", "sk": "order#101#enrollment#afffbdde-fe58-4df7-b4d5-7553a571d32a", "course": {"name": "pytest"}}
{"id": "SLOT#ORG#100", "sk": "ORDER#101#ENROLLMENT#faa8a547-bb9b-4103-bd8c-8fbe96b4056f", "course": {"name": "pytest"}}
{"id": "SLOT#ORG#100", "sk": "ORDER#101#ENROLLMENT#afffbdde-fe58-4df7-b4d5-7553a571d32a", "course": {"name": "pytest"}}
```
### Emails/eventos agendados
Quando uma matrícula é criada, também é agendados emails/eventos.
- `reminder_no_access_3_days` se o usuário não acessar o curso 3 dias após a criação.
- `no_activity_7_days` 7 dias após a última atividade do usuário no curso.
- `access_period_reminder_30_days` 30 dias antes do perído de acesso ao curso terminar.
- `cert_expiration_reminder_30_days` se houver certificado, avisa 30 dias antes do certificado expirar.
- `course_archived` após o certificado expirar, a matrícula será marcada como **arquivada (ARCHIVED)**.
- `course_expired` se não houver certificado e o período de acesso for atingido, a matrícula será marcada com **expirada (EXPIRED)**.
- `REMINDER_NO_ACCESS_3_DAYS` se o usuário não acessar o curso 3 dias após a criação.
- `NO_ACTIVITY_7_DAYS` 7 dias após a última atividade do usuário no curso.
- `ACCESS_PERIOD_REMINDER_30_DAYS` 30 dias antes do perído de acesso ao curso terminar.
- `CERT_EXPIRATION_REMINDER_30_DAYS` se houver certificado, avisa 30 dias antes do certificado expirar.
- `COURSE_ARCHIVED` após o certificado expirar, a matrícula será marcada como **arquivada (ARCHIVED)**.
- `COURSE_EXPIRED` se não houver certificado e o período de acesso for atingido, a matrícula será marcada com **expirada (EXPIRED)**.
```json
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "schedules#reminder_no_access_3_days", "name": "Sérgio R Siqueira", "email": "osergiosiqueira@gmail.com", "ttl": 1874507093}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "schedules#course_expired", "name": "Sérgio R Siqueira", "email": "osergiosiqueira@gmail.com", "ttl": 1874507093}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "SCHEDULES#REMINDER_NO_ACCESS_3_DAYS", "name": "Sérgio R Siqueira", "email": "osergiosiqueira@gmail.com", "ttl": 1874507093}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "SCHEDULES#COURSE_EXPIRED", "name": "Sérgio R Siqueira", "email": "osergiosiqueira@gmail.com", "ttl": 1874507093}
```
Quando o status da matrícula for alterado para `COMPLETED`, os eventos `course_expired` e `access_period_reminder_30_days` serão removidos a adicionado o evento `course_archived`.
Quando o status da matrícula for alterado para `COMPLETED`, os eventos `COURSE_EXPIRED` e `ACCESS_PERIOD_REMINDER_30_DAYS` serão removidos a adicionado o evento `COURSE_ARCHIVED`.
```json
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "schedules#reminder_no_access_3_days", "name": "Sérgio R Siqueira", "email": "osergiosiqueira@gmail.com", "ttl": 1874507093}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "schedules#course_expired", "name": "Sérgio R Siqueira", "email": "osergiosiqueira@gmail.com", "ttl": 1874507093}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "SCHEDULES#REMINDER_NO_ACCESS_3_DAYS", "name": "Sérgio R Siqueira", "email": "osergiosiqueira@gmail.com", "ttl": 1874507093}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "SCHEDULES#COURSE_EXPIRED", "name": "Sérgio R Siqueira", "email": "osergiosiqueira@gmail.com", "ttl": 1874507093}
```
### Proteção contra duplicação
@@ -80,9 +86,9 @@ O gestor pode definir quantos dias antes do fim do acesso ao curso a proteção
Se um certificado for emitido para a matrícula, o período de proteção será recalculado conforme a validade do certificado.
```json
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "metadata#deduplication_window", "offset_days": 90}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "lock", "hash": "1e67e29464877783e49e07fb7d9dd372", "ttl": 1767625113}
{"id": "lock", "sk": "1e67e29464877783e49e07fb7d9dd372", "ttl": 1767625113}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "METADATA#DEDUPLICATION_WINDOW", "offset_days": 90}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "LOCK", "hash": "1e67e29464877783e49e07fb7d9dd372", "ttl": 1767625113}
{"id": "LOCK", "sk": "1e67e29464877783e49e07fb7d9dd372", "ttl": 1767625113}
```
### Política de cancelamento
@@ -93,8 +99,15 @@ Se houver `metadata#parent_slot`, deve ser devolvido.
```json
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "0"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "cancel_policy"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "metadata#parent_slot", "slot": {"id": "slots#org#123", "sk": "order#1221#enrollment#9omWNKymwU5U4aeun6mWzZ"}}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "CANCEL_POLICY"}
{"id": "9omWNKymwU5U4aeun6mWzZ", "sk": "METADATA#PARENT_SLOT", "slot": {"id": "SLOT#ORG#123", "sk": "ORDER#1221#ENROLLMENT#9omWNKymwU5U4aeun6mWzZ"}}
```
# Cursos
### Valores contratados
```json
{"id": "CUSTOM_PRICING#ORG#96e523b9-a404-4860-a737-edf412c3da52", "sk": "COURSE#439e9a43-ab92-469a-a849-b6e824370f80", "unit_price": 149, "created_at": "2025-04-06T11:07:32.762178-03:00"}
{"id": "CUSTOM_PRICING#ORG#96e523b9-a404-4860-a737-edf412c3da52", "sk": "COURSE#f10c3283-7722-41c6-ba5d-222f9f4f48af", "unit_price": 149, "created_at": "2025-04-06T11:07:32.762178-03:00"}
```