// 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[] }