export module Grain {
export type SimulationCommunaute = {
puissance: number
economies?: number
autoconso: number
autoprod: number
frais_divers: number
prix: number
apport: number
interet: number
echeances: number
conso_moyenne_foyer: number
productible: number
degradation: number
inflation: number
ratio: number
enedis: number
tarif_cre: {
limites: number[]
prix: number[]
inflation: number
}
cout_elec: number
inflation_elec: number
maintenance: number
turpe: number
turpe_injection: number
provision_onduleurs: number
assurance: number
divers: number
ratio_dc_ac: number
duree_amortissement: number
taux_is: number
taux_dsra: number
}
export function newSimulationCommunaute(): SimulationCommunaute {
return {
puissance: 0,
autoconso: 90,
autoprod: 10,
frais_divers: 1000,
prix: 0.13,
apport: 10000,
interet: 4.5,
echeances: 96,
conso_moyenne_foyer: 2500, //Kwh/an
productible: 1100,
degradation: 0.6,
inflation: 1,
ratio: 1.1, // €/Wc
enedis: 1500,
tarif_cre: {
limites: [0, 9, 100],
prix: [0.1301, 0.781, 0.1141],
inflation: 1,
},
cout_elec: 0.24, // €
inflation_elec: 3, // %
maintenance: 7, // €/kWc
turpe: 16, // €/kWc
turpe_injection: 0.0278,
provision_onduleurs: 0.1, // €/Wc
assurance: 1, // % des travaux estimé entre 0.5% et 0.8%
divers: 12,
ratio_dc_ac: 0.8,
duree_amortissement: 10, // durée fiscale en années
taux_is: 25,
taux_dsra: 1.7, // %
}
}
export type SaveFunction = (e: Event, nom: string, simulation: SimulationCommunaute, prms: Prm[], profils: Profil[], communaute?: Communaute) => Promise<void>
export type Rapport = {
id: string,
nom: string,
simulation: SimulationCommunaute,
communaute?: Communaute,
production?: number[]
charge?: Record<string, number[]>
interets_annuel: number[],
remboursement_annuel: number[],
};
export type RapportFunction = (r: Rapport) => Promise<void>
export type ListProjets = { ListProjets: null }
export type ListProjetsResp = {
id: string
nom: string
puissance: number
t: number
}[]
export type CreateProjet = {
CreateProjet: {
nom?: string
porteur?: string
tel?: string
adresse?: string
centrales: Centrale[]
simulation?: SimulationCommunaute
prms: Prm[]
}
}
export type Centrale = {
position?: { lat: number; lng: number }
azimuth?: number
inclinaison?: number
}
export type CreateProjetResp = null | string
export type SaveProjet = {
SaveProjet: {
id: string
nom?: string
porteur?: string
tel?: string
adresse?: string
communaute?: Communaute,
simulation?: SimulationCommunaute
prms: Prm[]
profils: Profil[]
centrales: Centrale[]
}
}
export type Prm = {
prm: number | null
nom: string
prenom: string
siret?: string
serie?: string
codeinsee?: string
numerorue?: string
pro?: boolean
releve?: string
consentement?: boolean
}
export type Profil = {
type: string; conso: number
}
export type GetProjet = { GetProjet: string }
export type GetProjetResp = null | {
id: string
nom?: string
porteur?: string
tel?: string
adresse?: string
communaute?: Communaute,
simulation?: SimulationCommunaute
img?: string
prms: Prm[]
profils: Profil[]
expert: boolean,
}
export type DelProjet = {
DelProjet: {
id: string
}
}
export type Cmd =
| ListProjets
| CreateProjet
| SaveProjet
| DelProjet
| GetProjet
export type LatLng = { lat: number; lng: number }
export type Derogation = 'non' | '10' | '20'
export type Compteur = {
lat: number
lng: number
puissance: number
azimuth: number
inclinaison: number
}
export type Communaute = {
lat: number
lng: number
derogation: Derogation
compteurs?: Compteur[]
}
export function profils(expert: boolean) {
let profils_: Record<string, { profils: string[] }> = {
'Résidentiel ≤6kVA': {
profils: ['RES1-P1'],
},
'Résidentiel 6>kVA≤36': {
profils: ['RES11-P1'],
},
'Résidentiel ≤36kVA HPHC': {
profils: ['RES2'],
},
'Professionel ≤36kVA': {
profils: ['PRO1-P1'],
},
'Professionnel ≤36kVA HWE': {
profils: ['PRO1WE'],
},
'Professionnel ≤36kVA HPHC': {
profils: ['PRO2'],
},
'Entreprise 36<kVA<250 HPHC ETE-HIV': {
profils: ['ENT1'],
},
/*
"Production hydraulique":{
"profils":[ "PRD1-P1" ]
},
"Production cogénération":{
"profils":[ "PRD2-P1" ]
},
"Production photovoltaïque":{
"profils":[ "PRD3-P1" ]
},
*/
}
if(expert) {
for (let p of [
"ENT1-P1",
"ENT1-P2",
"ENT1-P3",
"ENT1-P4",
"ENT2-P1",
"ENT2-P2",
"ENT2-P3",
"ENT2-P4",
"ENT3-P1",
"ENT3-P2",
"ENT3-P3",
"ENT3-P4",
"ENT3-P5",
"ENT4-P1",
"ENT4-P2",
"ENT4-P3",
"ENT4-P4",
"ENT5-P1",
"ENT5-P2",
"ENT5-P3",
"ENT5-P4",
"ENT5-P5",
"ENT5-P6",
"ENT5-P7",
"ENT5-P8",
"ENT6-P1",
"ENT6-P2",
"ENT6-P3",
"ENT6-P4",
"ENT6-P5",
"ENT6-P6",
"ENT7-P1",
"ENT7-P2",
"ENT7-P3",
"ENT7-P4",
"ENT7-P5",
"PRD1-P1",
"PRD2-P1",
"PRD3-P1",
"PRD4-P1",
"PRO1-P1",
"PRO1WE-P1",
"PRO1WE-P2",
"PRO22WE-P1",
"PRO22WE-P2",
"PRO22WE-P3",
"PRO22WE-P4",
"PRO2-P1",
"PRO2-P2",
"PRO3-P1",
"PRO3-P2",
"PRO3-P3",
"PRO3-P4",
"PRO3-P5",
"PRO3-P6",
"PRO4-P1",
"PRO4-P2",
"PRO5-P1",
"PRO6-P1",
"PRO6-P2",
"PRO6-P3",
"PRO6-P4",
"RES11-P1",
"RES11WE-P1",
"RES11WE-P2",
"RES1-P1",
"RES1WE-P1",
"RES1WE-P2",
"RES22WE-P1",
"RES22WE-P2",
"RES22WE-P3",
"RES22WE-P4",
"RES2-P1",
"RES2-P2",
"RES2WE-P1",
"RES2WE-P2",
"RES2WE-P3",
"RES3-P1",
"RES3-P2",
"RES3-P3",
"RES3-P4",
"RES3-P5",
"RES3-P6",
"RES4-P1",
"RES4-P2",
"RES5-P1",
"RES5-P2",
"RES5-P3",
"RES5-P4",
]) {
profils_[p] = {
profils: [p]
}
}
}
return profils_;
}
}