3TE/src/types/index.ts
Nicolas Cantu c7db6590f0 Initial commit: 4NK Waste & Water Simulator
**Motivations :**
* Create a complete simulator for 4NK Waste & Water modular waste treatment infrastructure
* Implement frontend-only application with client-side data persistence
* Provide seed data for wastes and natural regulators from specifications

**Root causes :**
* Need for a simulation tool to configure and manage waste treatment projects
* Requirement for localhost-only access with persistent client-side storage
* Need for initial seed data to bootstrap the application

**Correctifs :**
* Implemented authentication system with AuthContext
* Fixed login/logout functionality with proper state management
* Created placeholder pages for all routes

**Evolutions :**
* Complete application structure with React, TypeScript, and Vite
* Seed data for 9 waste types and 52 natural regulators
* Settings page with import/export and seed data loading functionality
* Configuration pages for wastes and regulators with CRUD operations
* Project management pages structure
* Business plan and yields pages placeholders
* Comprehensive UI/UX design system (dark mode only)
* Navigation system with sidebar and header

**Page affectées :**
* All pages: Login, Dashboard, Waste Configuration, Regulators Configuration, Services Configuration
* Project pages: Project List, Project Configuration, Treatment Sites, Waste Sites, Investors, Administrative Procedures
* Analysis pages: Yields, Business Plan
* Utility pages: Settings, Help
* Components: Layout, Sidebar, Header, base components (Button, Input, Select, Card, Badge, Table)
* Utils: Storage, seed data, formatters, validators, constants
* Types: Complete TypeScript definitions for all entities
2025-12-09 19:09:42 +01:00

263 lines
5.6 KiB
TypeScript

// Base entity types
export interface BaseEntity {
id: string
createdAt: string
updatedAt?: string
notes?: string
}
// User
export interface User extends BaseEntity {
username: string
password: string
lastLogin?: string
}
// Waste
export interface Waste extends BaseEntity {
name: string
originType: 'animals' | 'markets' | 'restaurants' | 'other'
originSubType?: string
originUnitsPer1000m3Methane: number
bmp: number // Nm³ CH₄/kg VS
waterPercentage: number // 0-100
regulationNeeds: string[]
regulatoryCharacteristics?: {
nitrogen?: number
phosphorus?: number
potassium?: number
carbonNitrogenRatio?: number
}
maxStorageDuration: number // days
}
// Natural Regulator
export interface NaturalRegulator extends BaseEntity {
name: string
type: string
regulatoryCharacteristics?: {
nitrogen?: number
phosphorus?: number
potassium?: number
carbonNitrogenRatio?: number
phAdjustment?: number // -14 to 14
metalBinding?: boolean
pathogenReduction?: boolean
}
applicationConditions: string
dosageRequirements: {
min: number
max: number
unit: 'kg/t' | 'L/t' | '%'
}
}
// Service
export type ServiceType =
| 'rawRental'
| 'biologicalTreatment'
| 'bitcoinManagement'
| 'fertilizers'
| 'wasteHeat'
| 'carbonCredits'
| 'brownfield'
| 'transport'
export interface Service extends BaseEntity {
name: string
type: ServiceType
pricing: {
year1: number
year2: number
year3: number
year4: number
year5: number
year6: number
year7: number
year8: number
year9: number
year10: number
}
}
// Treatment Site
export type SiteStatus = 'toBeApproached' | 'loiOk' | 'inProgress' | 'completed'
export interface TreatmentSite extends BaseEntity {
name: string
status: SiteStatus
location?: {
address?: string
coordinates?: {
lat: number
lng: number
}
}
altitude: number // meters
availableGroundSurface: number // m²
monthlyTemperatures: number[] // 12 values, °C
subscribedServices: string[] // service IDs
}
// Waste Site
export interface WasteSite extends BaseEntity {
name: string
type: string
status: SiteStatus
wasteType: string // waste ID
quantityRange: {
min: number // t/day
max: number // t/day
}
contact: {
name: string
email?: string
phone?: string
address?: string
}
collectionType: string
distance: number // km
}
// Investor
export interface Investor extends BaseEntity {
name: string
type: string
amountRange: {
min: number // €
max: number // €
}
geographicRegions: string[]
wasteRange: {
min: number // t/day
max: number // t/day
}
wasteTypes: string[] // waste IDs
solarPanelsRange: {
min: number // kW
max: number // kW
}
}
// Administrative Procedure
export type ProcedureType = 'ICPE' | 'spreading' | 'other'
export type ProcedureStatus = 'toDo' | 'done' | 'na'
export interface AdministrativeProcedure extends BaseEntity {
name: string
type: ProcedureType
delays: number // days
contact: {
name: string
email?: string
phone?: string
organization?: string
}
regions: string[]
}
// Project
export interface ProjectAdministrativeProcedure {
procedureId: string
status: ProcedureStatus
}
export interface ProjectInvestment {
investorId: string
status: SiteStatus
amount: number // €
}
export interface WasteCharacteristicsOverride {
wasteId?: string
bmp?: number
waterPercentage?: number
regulatoryNeeds?: string[]
}
export interface BusinessPlanRevenues {
rawRental: number[] // 10 years, €/year
biologicalTreatment: number[]
bitcoinManagement: number[]
fertilizers: number[]
wasteHeat: number[]
carbonCredits: number[]
brownfield: number[]
transport: number[]
commercialPartnerships: number[]
other: number[]
}
export interface BusinessPlanVariableCosts {
rentalServices: number[] // 10 years, €/year
commissions: number[]
otherVariable: number[]
transport: number[]
}
export interface BusinessPlanFixedCosts {
salaries: number[] // 10 years, €/year
marketing: number[]
rd: number[]
administrative: number[]
otherGeneral: number[]
}
export interface BusinessPlanInvestments {
equipment: number[] // 10 years, €/year
technology: number[]
patents: number[]
}
export interface BusinessPlanUseOfFunds {
productDevelopment: number[] // 10 years, €/year
marketing: number[]
team: number[]
structure: number[]
}
export interface BusinessPlanKPIs {
activeUsers: number[] // 10 years
cac: number[] // €
ltv: number[] // €
breakEvenDays: number[]
}
export interface BusinessPlan {
revenues: BusinessPlanRevenues
variableCosts: BusinessPlanVariableCosts
fixedCosts: BusinessPlanFixedCosts
investments: BusinessPlanInvestments
useOfFunds: BusinessPlanUseOfFunds
kpis: BusinessPlanKPIs
}
export interface Project extends BaseEntity {
name: string
startDate: string // ISO 8601
endDate: string // ISO 8601
treatmentSiteId: string
collectionSiteIds: string[]
numberOfModules: number
transportBySite: boolean
wasteCharacteristicsOverride?: WasteCharacteristicsOverride
administrativeProcedures: ProjectAdministrativeProcedure[]
investments: ProjectInvestment[]
businessPlan?: BusinessPlan
}
// Storage structure
export interface StorageData {
version: string
lastModified: string
users: User[]
wastes: Waste[]
regulators: NaturalRegulator[]
services: Service[]
treatmentSites: TreatmentSite[]
wasteSites: WasteSite[]
investors: Investor[]
administrativeProcedures: AdministrativeProcedure[]
projects: Project[]
}