|
1 | 1 | import { ApiProperty } from '@nestjs/swagger'; |
2 | 2 |
|
3 | 3 | /** |
4 | | - * Informações sobre ancestral comum na análise genealógica |
| 4 | + * Dados dos pais retornados pela IA. |
5 | 5 | */ |
6 | | -export class AncestralComumDto { |
7 | | - @ApiProperty({ example: '123e4567-e89b-12d3-a456-426614174000', description: 'ID do ancestral comum' }) |
8 | | - idBufalo: string; |
| 6 | +export class PaisDto { |
| 7 | + @ApiProperty({ example: '123e4567-e89b-12d3-a456-426614174000', description: 'ID do pai', nullable: true }) |
| 8 | + paiId: string | null; |
9 | 9 |
|
10 | | - @ApiProperty({ example: 'Potente', description: 'Nome do ancestral' }) |
11 | | - nome: string; |
| 10 | + @ApiProperty({ example: '234e5678-e89b-12d3-a456-426614174001', description: 'ID da mãe', nullable: true }) |
| 11 | + maeId: string | null; |
| 12 | +} |
| 13 | + |
| 14 | +/** |
| 15 | + * Resumo agregado retornado pela IA (quantidades de ancestrais/descendentes). |
| 16 | + */ |
| 17 | +export class ResumoGenealogicoDto { |
| 18 | + @ApiProperty({ example: 10, description: 'Total de ancestrais identificados' }) |
| 19 | + totalAncestrais: number; |
12 | 20 |
|
13 | | - @ApiProperty({ example: 2, description: 'Gerações até o pai' }) |
14 | | - geracoesAtePai: number; |
| 21 | + @ApiProperty({ example: 4, description: 'Total de descendentes identificados' }) |
| 22 | + totalDescendentes: number; |
15 | 23 |
|
16 | | - @ApiProperty({ example: 3, description: 'Gerações até a mãe' }) |
17 | | - geracoesAteMae: number; |
| 24 | + @ApiProperty({ example: 3, description: 'Número de gerações de ancestrais retornadas' }) |
| 25 | + geracoesAncestrais: number; |
18 | 26 |
|
19 | | - @ApiProperty({ example: 3.125, description: 'Contribuição para consanguinidade em %' }) |
20 | | - contribuicaoConsanguinidade: number; |
| 27 | + @ApiProperty({ example: 2, description: 'Número de gerações de descendentes retornadas' }) |
| 28 | + geracoesDescendentes: number; |
21 | 29 | } |
22 | 30 |
|
23 | 31 | /** |
24 | | - * Resposta da análise genealógica completa de um búfalo |
| 32 | + * Resposta da análise genealógica completa de um búfalo, alinhada ao payload atual da IA. |
25 | 33 | */ |
26 | 34 | export class AnaliseGenealogicaDto { |
27 | 35 | @ApiProperty({ example: '123e4567-e89b-12d3-a456-426614174000', description: 'ID do búfalo analisado' }) |
28 | 36 | idBufalo: string; |
29 | 37 |
|
30 | | - @ApiProperty({ example: 'Valente', description: 'Nome do búfalo' }) |
31 | | - nome?: string; |
| 38 | + @ApiProperty({ example: 'M', enum: ['M', 'F'], description: 'Sexo do búfalo' }) |
| 39 | + sexo: string; |
32 | 40 |
|
33 | | - @ApiProperty({ example: 3.125, description: 'Coeficiente de consanguinidade em %' }) |
| 41 | + @ApiProperty({ example: 3.12, description: 'Coeficiente de consanguinidade em %' }) |
34 | 42 | consanguinidade: number; |
35 | 43 |
|
36 | | - @ApiProperty({ example: 'BAIXO', enum: ['BAIXO', 'MODERADO', 'ALTO', 'CRÍTICO'], description: 'Nível de risco genético' }) |
| 44 | + @ApiProperty({ example: 'Baixo', enum: ['Baixo', 'Moderado', 'Alto', 'Extremo'], description: 'Nível de risco genético' }) |
37 | 45 | riscoGenetico: string; |
38 | 46 |
|
39 | | - @ApiProperty({ example: 4, description: 'Número de gerações analisadas' }) |
40 | | - geracoesAnalisadas: number; |
| 47 | + @ApiProperty({ example: 'Consanguinidade < 3.125% - Risco baixo', description: 'Descrição textual do risco' }) |
| 48 | + descricaoRisco: string; |
41 | 49 |
|
42 | | - @ApiProperty({ example: 6, description: 'Total de ancestrais identificados' }) |
43 | | - totalAncestrais: number; |
| 50 | + @ApiProperty({ example: false, description: 'Indica se o animal é fundador (sem pais cadastrados)' }) |
| 51 | + eFundador: boolean; |
| 52 | + |
| 53 | + @ApiProperty({ type: PaisDto, description: 'Pais conhecidos do búfalo' }) |
| 54 | + pais: PaisDto; |
44 | 55 |
|
45 | | - @ApiProperty({ type: [AncestralComumDto], description: 'Lista de ancestrais comuns identificados' }) |
46 | | - ancestraisComuns: AncestralComumDto[]; |
| 56 | + @ApiProperty({ |
| 57 | + example: { geracao_1: ['pai-id', 'mae-id'], geracao_2: ['avo1', 'avo2'] }, |
| 58 | + description: 'Ancestrais organizados por geração', |
| 59 | + type: Object, |
| 60 | + }) |
| 61 | + ancestrais: Record<string, string[]>; |
47 | 62 |
|
48 | 63 | @ApiProperty({ |
49 | | - example: 'Animal com consanguinidade baixa. Adequado para reprodução sem restrições significativas.', |
50 | | - description: 'Recomendações baseadas na análise', |
| 64 | + example: { geracao_1: ['filho1', 'filho2'] }, |
| 65 | + description: 'Descendentes organizados por geração', |
| 66 | + type: Object, |
51 | 67 | }) |
52 | | - recomendacoes: string; |
| 68 | + descendentes: Record<string, string[]>; |
| 69 | + |
| 70 | + @ApiProperty({ type: ResumoGenealogicoDto, description: 'Resumo agregado de ancestrais e descendentes' }) |
| 71 | + resumo: ResumoGenealogicoDto; |
53 | 72 | } |
54 | 73 |
|
55 | 74 | /** |
|
0 commit comments