Cada renovacao que sai do orgao vira ciclo observado (protocolo -> emissao); a mediana por orgao/tipo estica o prazo de inicio de renovacao quando o orgao esta comprovadamente mais lento que o catalogo. O catalogo e piso legal: os 120 dias da LO nunca encolhem. Campos aditivos effectiveLeadDays/observed no upcoming e nos alertas; GET /compliance/lead-times; seed deterministico. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
import { JwtAuthGuard } from '@clubpetrodev/authmodule';
|
|
import { MappedExceptionFilter } from '@clubpetrodev/nestjs-mapped-exception';
|
|
import {
|
|
Controller,
|
|
Get,
|
|
HttpStatus,
|
|
Query,
|
|
UseFilters,
|
|
UseGuards,
|
|
UseInterceptors,
|
|
} from '@nestjs/common';
|
|
import { ApiBearerAuth, ApiResponse, ApiTags } from '@nestjs/swagger';
|
|
|
|
import { FiltersInterceptor } from '../../interceptors/filters.interceptor';
|
|
import { TenantDto, TenantWithStoreDto } from '../common/dto/tenant.dto';
|
|
import { ComplianceService } from './compliance.service';
|
|
import {
|
|
ComplianceSummaryResponseDto,
|
|
UpcomingExpirationDto,
|
|
} from './dto/response/compliance.dto';
|
|
import { LeadTimesResponseDto } from './dto/response/leadTime.dto';
|
|
import { GetUpcomingDto } from './dto/request/getUpcoming.dto';
|
|
import { LeadTimeService } from './leadTime.service';
|
|
|
|
@ApiTags('Conformidade')
|
|
@Controller('compliance')
|
|
@UseFilters(MappedExceptionFilter)
|
|
@UseInterceptors(FiltersInterceptor)
|
|
@UseGuards(JwtAuthGuard)
|
|
export class ComplianceController {
|
|
constructor(
|
|
private readonly service: ComplianceService,
|
|
private readonly leadTimeService: LeadTimeService,
|
|
) {}
|
|
|
|
@Get('summary')
|
|
@ApiBearerAuth()
|
|
@ApiResponse({ status: HttpStatus.OK, type: ComplianceSummaryResponseDto })
|
|
async getSummary(@Query() filters: TenantWithStoreDto) {
|
|
return this.service.getSummary(filters);
|
|
}
|
|
|
|
@Get('upcoming')
|
|
@ApiBearerAuth()
|
|
@ApiResponse({ status: HttpStatus.OK, type: [UpcomingExpirationDto] })
|
|
async getUpcoming(@Query() filters: GetUpcomingDto) {
|
|
return this.service.getUpcoming({
|
|
programId: filters.programId,
|
|
storeId: filters.storeId,
|
|
days: filters.days ?? 90,
|
|
});
|
|
}
|
|
|
|
@Get('lead-times')
|
|
@ApiBearerAuth()
|
|
@ApiResponse({ status: HttpStatus.OK, type: LeadTimesResponseDto })
|
|
async getLeadTimes(
|
|
@Query() filters: TenantDto,
|
|
): Promise<LeadTimesResponseDto> {
|
|
return { data: await this.leadTimeService.getLeadTimes(filters.programId) };
|
|
}
|
|
}
|