Add daily AI health score calculation (0-100) for both operating and reserve funds. Scores include trajectory tracking, factor analysis, recommendations, and data readiness checks. Dashboard displays graphical RingProgress gauges with color-coded scores, trend indicators, and expandable detail popovers. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
85 lines
3.3 KiB
TypeScript
85 lines
3.3 KiB
TypeScript
import { Module, MiddlewareConsumer, NestModule } from '@nestjs/common';
|
|
import { APP_GUARD } from '@nestjs/core';
|
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
import { AppController } from './app.controller';
|
|
import { DatabaseModule } from './database/database.module';
|
|
import { TenantMiddleware } from './database/tenant.middleware';
|
|
import { WriteAccessGuard } from './common/guards/write-access.guard';
|
|
import { AuthModule } from './modules/auth/auth.module';
|
|
import { OrganizationsModule } from './modules/organizations/organizations.module';
|
|
import { UsersModule } from './modules/users/users.module';
|
|
import { AccountsModule } from './modules/accounts/accounts.module';
|
|
import { FiscalPeriodsModule } from './modules/fiscal-periods/fiscal-periods.module';
|
|
import { JournalEntriesModule } from './modules/journal-entries/journal-entries.module';
|
|
import { BudgetsModule } from './modules/budgets/budgets.module';
|
|
import { UnitsModule } from './modules/units/units.module';
|
|
import { InvoicesModule } from './modules/invoices/invoices.module';
|
|
import { PaymentsModule } from './modules/payments/payments.module';
|
|
import { VendorsModule } from './modules/vendors/vendors.module';
|
|
import { ReserveComponentsModule } from './modules/reserve-components/reserve-components.module';
|
|
import { InvestmentsModule } from './modules/investments/investments.module';
|
|
import { CapitalProjectsModule } from './modules/capital-projects/capital-projects.module';
|
|
import { ReportsModule } from './modules/reports/reports.module';
|
|
import { AssessmentGroupsModule } from './modules/assessment-groups/assessment-groups.module';
|
|
import { ProjectsModule } from './modules/projects/projects.module';
|
|
import { MonthlyActualsModule } from './modules/monthly-actuals/monthly-actuals.module';
|
|
import { AttachmentsModule } from './modules/attachments/attachments.module';
|
|
import { InvestmentPlanningModule } from './modules/investment-planning/investment-planning.module';
|
|
import { HealthScoresModule } from './modules/health-scores/health-scores.module';
|
|
import { ScheduleModule } from '@nestjs/schedule';
|
|
|
|
@Module({
|
|
imports: [
|
|
ConfigModule.forRoot({
|
|
isGlobal: true,
|
|
}),
|
|
TypeOrmModule.forRootAsync({
|
|
imports: [ConfigModule],
|
|
inject: [ConfigService],
|
|
useFactory: (configService: ConfigService) => ({
|
|
type: 'postgres',
|
|
url: configService.get<string>('DATABASE_URL'),
|
|
autoLoadEntities: true,
|
|
synchronize: false,
|
|
logging: false,
|
|
}),
|
|
}),
|
|
DatabaseModule,
|
|
AuthModule,
|
|
OrganizationsModule,
|
|
UsersModule,
|
|
AccountsModule,
|
|
FiscalPeriodsModule,
|
|
JournalEntriesModule,
|
|
BudgetsModule,
|
|
UnitsModule,
|
|
InvoicesModule,
|
|
PaymentsModule,
|
|
VendorsModule,
|
|
ReserveComponentsModule,
|
|
InvestmentsModule,
|
|
CapitalProjectsModule,
|
|
ReportsModule,
|
|
AssessmentGroupsModule,
|
|
ProjectsModule,
|
|
MonthlyActualsModule,
|
|
AttachmentsModule,
|
|
InvestmentPlanningModule,
|
|
HealthScoresModule,
|
|
ScheduleModule.forRoot(),
|
|
],
|
|
controllers: [AppController],
|
|
providers: [
|
|
{
|
|
provide: APP_GUARD,
|
|
useClass: WriteAccessGuard,
|
|
},
|
|
],
|
|
})
|
|
export class AppModule implements NestModule {
|
|
configure(consumer: MiddlewareConsumer) {
|
|
consumer.apply(TenantMiddleware).forRoutes('*');
|
|
}
|
|
}
|