academe-kit 0.10.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -10793,6 +10793,77 @@ interface paths {
10793
10793
  patch?: never;
10794
10794
  trace?: never;
10795
10795
  };
10796
+ "/reports/students-journey-status/{id}": {
10797
+ parameters: {
10798
+ query?: never;
10799
+ header?: never;
10800
+ path?: never;
10801
+ cookie?: never;
10802
+ };
10803
+ /**
10804
+ * Status de jornada dos alunos por bimestre (cards de /students)
10805
+ * @description Recorta os alunos ativos da escola em 4 categorias mutuamente exclusivas
10806
+ * (notStarted, inJourney, inReview, completed) considerando os challenges
10807
+ * do bimestre alvo. Cada aluno cai na categoria mais avançada que alcançou.
10808
+ */
10809
+ get: {
10810
+ parameters: {
10811
+ query?: {
10812
+ /** @description UUID do educational_model_period, OU a string literal `"all"` para considerar todos os bimestres. Omitido = corrente. */
10813
+ periodId?: string;
10814
+ /** @description Quando presente, restringe o cálculo a UM challenge específico dentro do recorte temporal. */
10815
+ challengeId?: string;
10816
+ };
10817
+ header?: never;
10818
+ path: {
10819
+ /** @description UUID da instituição */
10820
+ id: string;
10821
+ };
10822
+ cookie?: never;
10823
+ };
10824
+ requestBody?: never;
10825
+ responses: {
10826
+ /** @description Status agregado */
10827
+ 200: {
10828
+ headers: {
10829
+ [name: string]: unknown;
10830
+ };
10831
+ content: {
10832
+ "application/json": {
10833
+ /** @example success */
10834
+ status?: string;
10835
+ data?: components["schemas"]["StudentsJourneyStatusResponse"];
10836
+ };
10837
+ };
10838
+ };
10839
+ 400: {
10840
+ headers: {
10841
+ [name: string]: unknown;
10842
+ };
10843
+ content?: never;
10844
+ };
10845
+ 401: {
10846
+ headers: {
10847
+ [name: string]: unknown;
10848
+ };
10849
+ content?: never;
10850
+ };
10851
+ 500: {
10852
+ headers: {
10853
+ [name: string]: unknown;
10854
+ };
10855
+ content?: never;
10856
+ };
10857
+ };
10858
+ };
10859
+ put?: never;
10860
+ post?: never;
10861
+ delete?: never;
10862
+ options?: never;
10863
+ head?: never;
10864
+ patch?: never;
10865
+ trace?: never;
10866
+ };
10796
10867
  "/roles": {
10797
10868
  parameters: {
10798
10869
  query?: never;
@@ -11777,7 +11848,13 @@ interface paths {
11777
11848
  userId?: string;
11778
11849
  groupId?: string;
11779
11850
  institutionId?: string;
11851
+ institutionClassroomId?: string;
11852
+ serieId?: string;
11780
11853
  status?: "submitted" | "ai_evaluated" | "approved" | "rejected";
11854
+ /** @description Busca por nome ou e-mail do aluno */
11855
+ search?: string;
11856
+ /** @description UUID de um educational_model_period. Recorta as submissões cuja data de envio (submittedAt) cai no intervalo [start, end] do período. Omitido = todos os períodos. */
11857
+ periodId?: string;
11781
11858
  /** @description Page number */
11782
11859
  page?: components["parameters"]["page"];
11783
11860
  /** @description Items per page */
@@ -11798,7 +11875,16 @@ interface paths {
11798
11875
  "application/json": {
11799
11876
  /** @example success */
11800
11877
  status?: string;
11801
- data?: components["schemas"]["Submission"][];
11878
+ data?: (components["schemas"]["Submission"] & {
11879
+ /** @description Período letivo cujo intervalo contém a data de envio (submittedAt). Null quando a escola não tem períodos ou o envio caiu fora de qualquer período. */
11880
+ period?: {
11881
+ id?: string;
11882
+ /** @description 0-based (0 = 1º período) */
11883
+ index?: number;
11884
+ /** @example 1º Bimestre */
11885
+ label?: string;
11886
+ } | null;
11887
+ })[];
11802
11888
  meta?: components["schemas"]["PaginationMeta"] & {
11803
11889
  /**
11804
11890
  * @description Contagem por status, ignorando o filtro `status`. Útil para
@@ -11814,6 +11900,14 @@ interface paths {
11814
11900
  /** @example 2 */
11815
11901
  rejected?: number;
11816
11902
  };
11903
+ /** @description Períodos letivos da escola (ORDER BY start ASC) para o dropdown de filtro. */
11904
+ periods?: {
11905
+ id?: string;
11906
+ index?: number;
11907
+ /** @example 1º Bimestre */
11908
+ label?: string;
11909
+ isCurrent?: boolean;
11910
+ }[];
11817
11911
  };
11818
11912
  };
11819
11913
  };
@@ -14762,6 +14856,9 @@ interface components {
14762
14856
  createdAt: string;
14763
14857
  /** Format: date-time */
14764
14858
  updatedAt: string;
14859
+ organization?: components["schemas"]["Organization"] | null;
14860
+ address?: components["schemas"]["Address"] | null;
14861
+ institutionReward?: Record<string, never> | null;
14765
14862
  };
14766
14863
  Organization: {
14767
14864
  /** Format: uuid */
@@ -16554,10 +16651,36 @@ interface components {
16554
16651
  courses?: components["schemas"]["EncourageJourneyCourse"][];
16555
16652
  };
16556
16653
  EncourageSubmissions: {
16654
+ /** @description Total de alunos ativos da escola (denominador para % concluído) */
16557
16655
  total?: number;
16558
- evaluated?: number;
16656
+ /** @description Última submissão por (aluno, challenge do bimestre corrente) com teacher_score preenchido */
16657
+ finalized?: number;
16658
+ /** @description Última submissão por (aluno, challenge do bimestre corrente) ainda SEM teacher_score */
16559
16659
  awaitingTeacher?: number;
16560
- awaitingAi?: number;
16660
+ };
16661
+ StudentsJourneyStatusSummary: {
16662
+ /** @description Alunos sem step concluído nos challenges do recorte */
16663
+ notStarted?: number;
16664
+ /** @description Tem step concluído mas sem submissão */
16665
+ inJourney?: number;
16666
+ /** @description Submissão pendente de avaliação (teacher_score nulo) */
16667
+ inReview?: number;
16668
+ /** @description Submissão já avaliada (teacher_score preenchido) */
16669
+ completed?: number;
16670
+ };
16671
+ StudentsJourneyStatusScope: {
16672
+ /** @description UUID do bimestre alvo; null quando allPeriods */
16673
+ periodId?: string | null;
16674
+ /** @description UUID do challenge alvo; null quando todos do recorte */
16675
+ challengeId?: string | null;
16676
+ /** @description Quantidade de challenges no recorte */
16677
+ challengesCount?: number;
16678
+ /** @description Total de alunos ativos da escola — fecha com a soma dos 4 status */
16679
+ totalStudents?: number;
16680
+ };
16681
+ StudentsJourneyStatusResponse: {
16682
+ summary?: components["schemas"]["StudentsJourneyStatusSummary"];
16683
+ scope?: components["schemas"]["StudentsJourneyStatusScope"];
16561
16684
  };
16562
16685
  EncourageClassPerformance: {
16563
16686
  /** Format: uuid */
@@ -20273,6 +20396,73 @@ declare function createReportService(apiClient: AcademeApiClient): {
20273
20396
  } | undefined;
20274
20397
  };
20275
20398
  }, `${string}/${string}`>>;
20399
+ /**
20400
+ * Status de jornada dos alunos para os summary cards da rota /students.
20401
+ *
20402
+ * @param id UUID da instituição.
20403
+ * @param params.periodId UUID do bimestre, ou `"all"` para todos os bimestres
20404
+ * do ano letivo. Omitido = bimestre corrente.
20405
+ * @param params.challengeId UUID de UM challenge específico para restringir o
20406
+ * cálculo dentro do recorte temporal.
20407
+ */
20408
+ getStudentsJourneyStatusByInstitution(id: string, params?: {
20409
+ periodId?: string;
20410
+ challengeId?: string;
20411
+ }): Promise<openapi_fetch.FetchResponse<{
20412
+ parameters: {
20413
+ query?: {
20414
+ periodId?: string;
20415
+ challengeId?: string;
20416
+ };
20417
+ header?: never;
20418
+ path: {
20419
+ id: string;
20420
+ };
20421
+ cookie?: never;
20422
+ };
20423
+ requestBody?: never;
20424
+ responses: {
20425
+ 200: {
20426
+ headers: {
20427
+ [name: string]: unknown;
20428
+ };
20429
+ content: {
20430
+ "application/json": {
20431
+ status?: string;
20432
+ data?: components["schemas"]["StudentsJourneyStatusResponse"];
20433
+ };
20434
+ };
20435
+ };
20436
+ 400: {
20437
+ headers: {
20438
+ [name: string]: unknown;
20439
+ };
20440
+ content?: never;
20441
+ };
20442
+ 401: {
20443
+ headers: {
20444
+ [name: string]: unknown;
20445
+ };
20446
+ content?: never;
20447
+ };
20448
+ 500: {
20449
+ headers: {
20450
+ [name: string]: unknown;
20451
+ };
20452
+ content?: never;
20453
+ };
20454
+ };
20455
+ }, {
20456
+ params: {
20457
+ path: {
20458
+ id: string;
20459
+ };
20460
+ query: {
20461
+ periodId?: string;
20462
+ challengeId?: string;
20463
+ } | undefined;
20464
+ };
20465
+ }, `${string}/${string}`>>;
20276
20466
  };
20277
20467
  type ReportService = ReturnType<typeof createReportService>;
20278
20468
 
@@ -26197,7 +26387,11 @@ declare function createSubmissionService(apiClient: AcademeApiClient): {
26197
26387
  userId?: string;
26198
26388
  groupId?: string;
26199
26389
  institutionId?: string;
26390
+ institutionClassroomId?: string;
26391
+ serieId?: string;
26200
26392
  status?: "submitted" | "ai_evaluated" | "approved" | "rejected";
26393
+ search?: string;
26394
+ periodId?: string;
26201
26395
  page?: components["parameters"]["page"];
26202
26396
  limit?: components["parameters"]["limit"];
26203
26397
  };
@@ -26214,7 +26408,13 @@ declare function createSubmissionService(apiClient: AcademeApiClient): {
26214
26408
  content: {
26215
26409
  "application/json": {
26216
26410
  status?: string;
26217
- data?: components["schemas"]["Submission"][];
26411
+ data?: (components["schemas"]["Submission"] & {
26412
+ period?: {
26413
+ id?: string;
26414
+ index?: number;
26415
+ label?: string;
26416
+ } | null;
26417
+ })[];
26218
26418
  meta?: components["schemas"]["PaginationMeta"] & {
26219
26419
  statusCounts?: {
26220
26420
  submitted?: number;
@@ -26222,6 +26422,12 @@ declare function createSubmissionService(apiClient: AcademeApiClient): {
26222
26422
  approved?: number;
26223
26423
  rejected?: number;
26224
26424
  };
26425
+ periods?: {
26426
+ id?: string;
26427
+ index?: number;
26428
+ label?: string;
26429
+ isCurrent?: boolean;
26430
+ }[];
26225
26431
  };
26226
26432
  };
26227
26433
  };
@@ -26235,7 +26441,11 @@ declare function createSubmissionService(apiClient: AcademeApiClient): {
26235
26441
  userId?: string;
26236
26442
  groupId?: string;
26237
26443
  institutionId?: string;
26444
+ institutionClassroomId?: string;
26445
+ serieId?: string;
26238
26446
  status?: "submitted" | "ai_evaluated" | "approved" | "rejected";
26447
+ search?: string;
26448
+ periodId?: string;
26239
26449
  page?: components["parameters"]["page"];
26240
26450
  limit?: components["parameters"]["limit"];
26241
26451
  } | undefined;
@@ -26532,6 +26742,242 @@ declare function createSubmissionService(apiClient: AcademeApiClient): {
26532
26742
  };
26533
26743
  type SubmissionService = ReturnType<typeof createSubmissionService>;
26534
26744
 
26745
+ type JourneyView = components["schemas"]["JourneyView"];
26746
+ /**
26747
+ * Service do agregado `user-challenge-progress` — o caminho oficial para os
26748
+ * clientes (web/mobile) montarem a jornada e o progresso do usuário. Espelha
26749
+ * app-academe-v2/src/services/academe/user-progress.service.ts.
26750
+ */
26751
+ declare function createUserProgressService(apiClient: AcademeApiClient): {
26752
+ /**
26753
+ * Jornada pré-computada do usuário (status, progress, color, icon,
26754
+ * isUpcoming, série) — base de renderização direta da tela de jornada.
26755
+ */
26756
+ getJourney(serieId?: string): Promise<JourneyView>;
26757
+ /**
26758
+ * Visão step-by-step do progresso do usuário em um desafio. Cada step traz
26759
+ * `myStartedAt`, `myCompletedAt` e (em desafios em grupo) os agregados do
26760
+ * grupo.
26761
+ */
26762
+ getChallengeProgress(challengeId: string): Promise<openapi_fetch.FetchResponse<{
26763
+ parameters: {
26764
+ query?: never;
26765
+ header?: never;
26766
+ path: {
26767
+ id: components["parameters"]["id"];
26768
+ };
26769
+ cookie?: never;
26770
+ };
26771
+ requestBody?: never;
26772
+ responses: {
26773
+ 200: {
26774
+ headers: {
26775
+ [name: string]: unknown;
26776
+ };
26777
+ content: {
26778
+ "application/json": {
26779
+ status?: string;
26780
+ data?: {
26781
+ challengeStepId?: string;
26782
+ stepName?: string;
26783
+ index?: number;
26784
+ totalMembers?: number;
26785
+ completedMembers?: number;
26786
+ groupCompleted?: boolean;
26787
+ myStartedAt?: string | null;
26788
+ myCompletedAt?: string | null;
26789
+ }[];
26790
+ };
26791
+ };
26792
+ };
26793
+ 401: components["responses"]["Unauthorized"];
26794
+ 404: components["responses"]["NotFound"];
26795
+ };
26796
+ }, {
26797
+ params: {
26798
+ path: {
26799
+ id: string;
26800
+ };
26801
+ };
26802
+ }, `${string}/${string}`>>;
26803
+ /**
26804
+ * Avança um tick na jornada do usuário no desafio, agnóstico do tipo da
26805
+ * etapa. Cada chamada executa UMA ação:
26806
+ * - Sem progresso na etapa atual → action='started'
26807
+ * - Etapa iniciada (sem completedAt) → action='completed'
26808
+ * - Todas as etapas concluídas → action='finished' (no-op)
26809
+ *
26810
+ * Caminho oficial para clientes (web/mobile). Não usar os endpoints
26811
+ * internos `/steps/{stepId}/start` ou `/steps/{stepId}/complete`.
26812
+ */
26813
+ advance(challengeId: string): Promise<openapi_fetch.FetchResponse<{
26814
+ parameters: {
26815
+ query?: never;
26816
+ header?: never;
26817
+ path: {
26818
+ id: components["parameters"]["id"];
26819
+ };
26820
+ cookie?: never;
26821
+ };
26822
+ requestBody?: never;
26823
+ responses: {
26824
+ 200: {
26825
+ headers: {
26826
+ [name: string]: unknown;
26827
+ };
26828
+ content: {
26829
+ "application/json": {
26830
+ status?: string;
26831
+ data?: {
26832
+ action?: "started" | "completed" | "finished";
26833
+ challengeId?: string;
26834
+ currentStep?: {
26835
+ id?: string;
26836
+ index?: number;
26837
+ name?: string;
26838
+ startedAt?: string | null;
26839
+ completedAt?: string | null;
26840
+ } | null;
26841
+ nextStep?: {
26842
+ id?: string;
26843
+ index?: number;
26844
+ name?: string;
26845
+ startedAt?: string | null;
26846
+ } | null;
26847
+ };
26848
+ };
26849
+ };
26850
+ };
26851
+ 401: components["responses"]["Unauthorized"];
26852
+ 404: components["responses"]["NotFound"];
26853
+ };
26854
+ }, {
26855
+ params: {
26856
+ path: {
26857
+ id: string;
26858
+ };
26859
+ };
26860
+ }, `${string}/${string}`>>;
26861
+ /**
26862
+ * Status de conclusão do grupo numa etapa. Em desafios em grupo: retorna a
26863
+ * agregação (`canAdvance=true` quando todos concluíram). Em desafios
26864
+ * individuais: retorna o status do próprio usuário.
26865
+ */
26866
+ getStepGroupStatus(stepId: string): Promise<openapi_fetch.FetchResponse<{
26867
+ parameters: {
26868
+ query?: never;
26869
+ header?: never;
26870
+ path: {
26871
+ stepId: string;
26872
+ };
26873
+ cookie?: never;
26874
+ };
26875
+ requestBody?: never;
26876
+ responses: {
26877
+ 200: {
26878
+ headers: {
26879
+ [name: string]: unknown;
26880
+ };
26881
+ content: {
26882
+ "application/json": {
26883
+ status?: string;
26884
+ data?: {
26885
+ isGroupChallenge?: boolean;
26886
+ totalMembers?: number;
26887
+ completedMembers?: number;
26888
+ canAdvance?: boolean;
26889
+ };
26890
+ };
26891
+ };
26892
+ };
26893
+ 401: components["responses"]["Unauthorized"];
26894
+ 404: components["responses"]["NotFound"];
26895
+ };
26896
+ }, {
26897
+ params: {
26898
+ path: {
26899
+ stepId: string;
26900
+ };
26901
+ };
26902
+ }, `${string}/${string}`>>;
26903
+ /**
26904
+ * Progresso agregado do usuário em um módulo (ou no curso inteiro quando
26905
+ * `moduleId` é omitido). Usado pelos steps do tipo `course` da jornada.
26906
+ */
26907
+ getCourseProgress(courseId: string, moduleId?: string | null): Promise<openapi_fetch.FetchResponse<{
26908
+ parameters: {
26909
+ query?: never;
26910
+ header?: never;
26911
+ path: {
26912
+ courseId: string;
26913
+ moduleId: string;
26914
+ };
26915
+ cookie?: never;
26916
+ };
26917
+ requestBody?: never;
26918
+ responses: {
26919
+ 200: {
26920
+ headers: {
26921
+ [name: string]: unknown;
26922
+ };
26923
+ content: {
26924
+ "application/json": {
26925
+ status?: string;
26926
+ data?: components["schemas"]["UsersCourseLogProgress"];
26927
+ };
26928
+ };
26929
+ };
26930
+ 401: components["responses"]["Unauthorized"];
26931
+ 404: components["responses"]["NotFound"];
26932
+ };
26933
+ }, {
26934
+ params: {
26935
+ path: {
26936
+ courseId: string;
26937
+ moduleId: string;
26938
+ };
26939
+ };
26940
+ }, `${string}/${string}`>>;
26941
+ /**
26942
+ * [Interno] Força o início de uma etapa específica (idempotente). Clientes
26943
+ * devem preferir `advance`; mantido para casos pontuais (ex.: iniciar a
26944
+ * próxima etapa após concluir um curso aberto a partir da jornada).
26945
+ */
26946
+ start(stepId: string): Promise<openapi_fetch.FetchResponse<{
26947
+ parameters: {
26948
+ query?: never;
26949
+ header?: never;
26950
+ path: {
26951
+ stepId: string;
26952
+ };
26953
+ cookie?: never;
26954
+ };
26955
+ requestBody?: never;
26956
+ responses: {
26957
+ 201: {
26958
+ headers: {
26959
+ [name: string]: unknown;
26960
+ };
26961
+ content: {
26962
+ "application/json": {
26963
+ status?: string;
26964
+ data?: components["schemas"]["UserChallengeProgress"];
26965
+ };
26966
+ };
26967
+ };
26968
+ 401: components["responses"]["Unauthorized"];
26969
+ 404: components["responses"]["NotFound"];
26970
+ };
26971
+ }, {
26972
+ params: {
26973
+ path: {
26974
+ stepId: string;
26975
+ };
26976
+ };
26977
+ }, `${string}/${string}`>>;
26978
+ };
26979
+ type UserProgressService = ReturnType<typeof createUserProgressService>;
26980
+
26535
26981
  type AcademeApiClient = ReturnType<typeof openapi_fetch__default<paths>>;
26536
26982
  declare function createAcademeApiClient(baseUrl: string): AcademeApiClient;
26537
26983
  interface AcademeServices {
@@ -26556,6 +27002,7 @@ interface AcademeServices {
26556
27002
  challenge: ChallengeService;
26557
27003
  step: StepService;
26558
27004
  submission: SubmissionService;
27005
+ userProgress: UserProgressService;
26559
27006
  }
26560
27007
 
26561
27008
  type AcademeKeycloakContextProps = {