{"version":3,"sources":["./src/app/models/chartUtils.ts","./src/app/components/about/about.component.ts","./src/app/components/about/about.component.html","./src/app/components/calculator-intro/calculator-intro.component.ts","./src/app/components/calculator-intro/calculator-intro.component.html","./src/app/components/header/header.component.ts","./src/app/components/header/header.component.html","./src/app/models/aboutEntry.ts","./src/app/components/truck-input/truck-input.component.html","./src/app/components/truck-input/truck-input.component.ts","./src/app/models/faqEntry.ts","./src/app/components/home-content-box/home-content-box.component.ts","./src/app/components/home-content-box/home-content-box.component.html","./src/app/services/form-validation/form-validation.service.ts","./src/app/pipes/sanitize-html.pipe.ts","./src/app/pipes/tco-values.pipe.ts","./src/environments/environment.ts","./src/app/components/home/home.component.ts","./src/app/components/home/home.component.html","./src/app/pipes/to-fixed.pipe.ts","./src/app/components/contact/contact.component.ts","./src/app/components/contact/contact.component.html","./src/app/components/footer/footer.component.ts","./src/app/components/footer/footer.component.html","./src/app/components/faq/faq.component.ts","./src/app/components/faq/faq.component.html","./src/app/components/tco-results/tco-results.component.ts","./src/app/components/tco-results/tco-results.component.html","./src/app/models/tco.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/components/tco/tco.component.ts","./src/app/components/tco/tco.component.html","./src/app/components/assumptions/assumptions.component.ts","./src/app/components/assumptions/assumptions.component.html","./src/app/models/uteTariff.ts","./src/app/app.module.ts","./src/app/components/calculator-process/calculator-process.component.ts","./src/app/components/calculator-process/calculator-process.component.html","./src/app/models/collaboratorCard.ts","./src/app/models/mappingUtils.ts","./src/app/services/truck-form/truck-form.service.ts","./src/app/components/faq-entry/faq-entry.component.ts","./src/app/components/faq-entry/faq-entry.component.html","./src/app/pipes/truck-selection.pipe.ts","./src/app/services/pdf/pdf.service.ts","./src/app/models/scholarEntry.ts","./src/app/components/truck-select/truck-select.component.html","./src/app/components/truck-select/truck-select.component.ts","./src/app/components/results/results.component.ts","./src/app/components/results/results.component.html","./src/app/components/calc-intro-content-box/calc-intro-content-box.component.ts","./src/app/components/calc-intro-content-box/calc-intro-content-box.component.html","./src/app/models/truckModel.ts","./src/app/components/progress-bar/progress-bar.component.ts","./src/app/components/progress-bar/progress-bar.component.html","./src/app/app-routing.module.ts","./src/app/components/calculator/calculator.component.ts","./src/app/components/calculator/calculator.component.html","./src/main.ts","./$_lazy_route_resource lazy namespace object"],"names":[],"mappings":"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","file":"main.js","sourcesContent":["import {ChartDataset, ChartDatasetProperties, ChartType} from 'chart.js';\r\nimport {dashCaseToCamelCase} from '@angular/compiler/src/util';\r\n\r\ninterface SingleColorPallete {\r\n value: string;\r\n}\r\n\r\ninterface MultipleColorPallete {\r\n vehiclePrice: string;\r\n fuel: string;\r\n maintenance: string;\r\n insurance: string;\r\n patent: string;\r\n infrastructure: string;\r\n discounts: string;\r\n tco: string;\r\n}\r\n\r\nexport enum PalleteIds {\r\n DIESEL = 'dieselColors',\r\n ELECTRIC = 'electricColors',\r\n HYDROGEN = 'hydrogenColors',\r\n}\r\n\r\ntype ColorPallete = SingleColorPallete | MultipleColorPallete;\r\ntype ColorPalleteList = Record;\r\ntype ColorList = Record;\r\n\r\n\r\nconst tcoColorPalletes: ColorPalleteList = {\r\n dieselColors: {\r\n vehiclePrice: '#3B3838',\r\n fuel: '#767171',\r\n maintenance: '#AEAAAA',\r\n insurance: '#BFBFBF',\r\n patent: '#D9D9D9',\r\n infrastructure: '#000',\r\n discounts: '#111',\r\n tco: '#737373'\r\n },\r\n electricColors: {\r\n vehiclePrice: '#385623',\r\n fuel: '#4D7731',\r\n maintenance: '#63973F',\r\n insurance: '#A5D37B',\r\n patent: '#A6C34E',\r\n infrastructure: '#BBD076',\r\n discounts: '#111',\r\n tco: '#737373'\r\n },\r\n hydrogenColors: {\r\n vehiclePrice: '#073763',\r\n fuel: '#1F4E79',\r\n maintenance: '#25A0B6',\r\n insurance: '#2BBBD3',\r\n patent: '#7CD5E4',\r\n infrastructure: '#C8EEF4',\r\n discounts: '#111',\r\n tco: '#737373'\r\n }\r\n};\r\n\r\nconst categoryColorPalletes: ColorList = {\r\n dieselColors: {\r\n value: '#737373',\r\n },\r\n electricColors: {\r\n value: '#A6C34E'\r\n },\r\n hydrogenColors: {\r\n value: '#25A0B6'\r\n }\r\n};\r\n\r\nconst titleColors: ColorList = {\r\n dieselColors: {\r\n value: '#737373',\r\n },\r\n electricColors: {\r\n value: '#A6C34E'\r\n },\r\n hydrogenColors: {\r\n value: '#2D8BBA'\r\n }\r\n};\r\n\r\nexport const getTcoColorPallete = (palleteId: PalleteIds): MultipleColorPallete => tcoColorPalletes[palleteId];\r\n\r\nconst getSingleColor = (palleteId: PalleteIds, colorList: ColorList): string => colorList[palleteId].value;\r\n\r\nexport const getCategoryColor = (palleteId: PalleteIds): string => getSingleColor(palleteId, categoryColorPalletes);\r\nexport const getTitleColor = (palleteId: PalleteIds): string => getSingleColor(palleteId, titleColors);\r\n\r\nexport const getDataValue = (dataset: ChartDataset<'bar' | 'line' | 'scatter' | 'bubble' | 'pie' | 'doughnut' | 'polarArea' | 'radar'>,\r\n dataIndex: number): number => {\r\n const value = dataset.data[dataIndex];\r\n return Array.isArray(value) ? (value.length !== 2 ? -1 : value[1] - value[0]) : value as number;\r\n};\r\n","import {Component, OnInit, ViewEncapsulation} from '@angular/core';\r\nimport {AboutEntryImpl} from '../../models/aboutEntry';\r\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\r\nimport {CollaboratorCard} from '../../models/collaboratorCard';\r\nimport {ScholarEntry} from '../../models/scholarEntry';\r\n\r\n@Component({\r\n selector: 'app-about',\r\n templateUrl: './about.component.html',\r\n styleUrls: ['./about.component.scss'],\r\n encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class AboutComponent implements OnInit {\r\n\r\n supportersImgList: string[] = ['anii-logo.jpg', 'mirtrans.png', 'seg.png', 'emobility.png', 'sadar.png', 'moves.png', 'itpc.png',\r\n 'ancap.png', 'ute.jpg', 'mtop.png'];\r\n\r\n collaboratorCardList: CollaboratorCard[] = [\r\n new CollaboratorCard('walther.png', 'Dr. Walther Ploos van Amstel', 'AUAS Faculty of Technology', 'auas.png'),\r\n new CollaboratorCard('marc.jpg', 'Dr. Marc Torrell y su equipo', 'Investigadores del Instituto de Investigación en Energía de Cataluña', 'irec.jpg'),\r\n new CollaboratorCard('andres.jpg', 'Dr. Ing. Andrés Romero', 'Instituto de Energía Eléctrica de la Universidad Nacional de San Juan-CONICET', 'conicet.jpg'),\r\n new CollaboratorCard('marcio.jpg', 'Dr. Marcio D’ Agosto', 'Coordinador del Centro de transporte de carga del PET-COPPE de FRJ', 'coppe.png'),\r\n new CollaboratorCard('alvaro-marchant.jpg', 'Ing. Alvaro Marchant', 'Jefe de Innovación en el Desarrollo de la Distribución en CCU Chile', 'ccu.png')\r\n ];\r\n\r\n aboutEntryList: AboutEntryImpl[] = [\r\n new AboutEntryImpl(\r\n 'Contexto: importancia de la temática',\r\n `\r\n

\r\n Uruguay viene, desde hace un tiempo, desarrollando políticas que apuntan a una soberanía energética en el sector transporte, trayendo\r\n consigo una reducción de las emisiones a la atmósfera de gases de efecto invernadero (GEI) producto de la combustión de combustibles\r\n fósiles. En este sentido, el país se encuentra explorando la viabilidad del transporte eléctrico. Ya existen en el país varios pilotos\r\n y estudios en marcha acerca de la introducción de taxis, vehículos utilitarios livianos y ómnibus eléctricos, todos ellos con muy\r\n buenos resultados y buen potencial a futuro. No obstante, hasta el momento no se han realizado estudios en el país acerca de los\r\n desafíos de introducir camiones de carga eléctricos (con un peso > 2 Ton) funcionando con batería eléctrica o hidrógeno.\r\n

\r\n

\r\n El sector transporte de carga es clave para la productividad del país y es, además, importante dentro del total del transporte en\r\n materia de consumo de combustible y generación de emisiones de GEI. Partiendo del estado actual del transporte eléctrico de carga a\r\n nivel internacional, y utilizando una serie de herramientas cualitativas y cuantitativas, este proyecto tiene como objetivo evaluar\r\n los principales desafíos, facilitadores, y oportunidades (en términos de costo de vida, emisiones, e infraestructura) que la\r\n introducción del vehículo eléctrico de carga (a batería o con pila de combustible de hidrógeno) puede tener para el transporte de\r\n carga del Uruguay. Dicho estudio será realizado en los distintos segmentos de carga (liviano, mediano y pesado) y por su sector de\r\n actividad. Este es vital para generar información científica confiable a nivel país que permita la generación de políticas públicas\r\n que fomenten la penetración de este tipo de tecnologías que son ya una realidad a nivel mundial y que cobrarán mayor relevancia en el\r\n mediano y largo plazo, de forma de lograr un transporte de carga sustentable.\r\n

\r\n

\r\n Uruguay se presenta como un país con las condiciones ideales para el desarrollo de la movilidad eléctrica dada la disposición de su\r\n matriz eléctrica, su dependencia actual del precio del petróleo para el combustible y las cortas distancias que existen dentro del\r\n país, lo cual merma el miedo frente a las autonomías de los vehículos eléctricos. La energía renovable representó el 96% de la energía\r\n total generada en el año 2018. Además, desde el año 2013 la energía generada ha sido mayor a la demandada. Este exceso se encuentra\r\n entre el 5-9% de la energía total y es generalmente exportado a los países vecinos a precios bajos. Este exceso de energía que tiene\r\n el país podría ser explotado si hubiera un incremento en la demanda de energía eléctrica y este incremento podría venir de los\r\n vehículos eléctricos.\r\n

`\r\n ),\r\n new AboutEntryImpl(\r\n 'Objetivo y alcance del proyecto',\r\n `\r\n

\r\n Considerando las características específicas del sector transporte de carga, y el estado tecnológico y comercialde los vehículos de\r\n carga eléctricos a batería o con pila de combustible de hidrógeno, el objetivo principal deeste proyecto consiste en evaluar los\r\n principales desafíos, facilitadores y oportunidades que la introducción delvehículo eléctrico de carga (camiones eléctricos)\r\n puede tener para el transporte de carga del Uruguay, analizando en sus distintos segmentos de carga, sectores de\r\n actividad y tipo de operación. Para ello, seránecesario entender la situación internacional de la temática, su grado de\r\n desarrollo, así como las perspectivas delos distintos actores involucrados, de manera de analizar cómo podría cada uno de ellos\r\n acelerar la introducciónde esta tecnología en el país. El proyecto pretende mediante metodologías cuantitativas y cualitativas,\r\n generarinformación confiable para promover la tecnología eléctrica en los dadores de carga y transportistas, así comopromover una base\r\n para la generación de políticas públicas eficientes para este sector.\r\n

\r\n

El proyecto consiste en ocho actividades principales:

\r\n \r\n `),\r\n new AboutEntryImpl(\r\n 'Impactos esperados',\r\n `\r\n\r\n `\r\n ),\r\n new AboutEntryImpl(\r\n 'Apoyos y colaboraciones',\r\n `\r\n
` + this.createCollaboratorsImgList() + `\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
Colaboradores
\r\n
` + this.createAllCollaboratorCards() + `
\r\n`\r\n ),\r\n new AboutEntryImpl(\r\n 'Eventos',\r\n `\r\n
Kick off del proyecto
\r\n

Presentación y lanzamiento del proyecto con la exposición de Walther Ploos van Amstel, experto en logística urbana de cero emisiones.

\r\n\r\n\r\n
Seminario “Uruguay apuesta por los camiones eléctricos: experiencias nacionales y regionales”
\r\n

Evento que tuvo lugar el martes 13 de julio, donde se expusieron los resultados del “Informe técnico sobre Barreras y Oportunida desde la\r\ninserción del transporte de carga eléctrico en Uruguay” y posteriormente participaron ocho oradores: Santiago Guelfi, director de SADAR;\r\nGuillermo Novelli, director ejecutivo de Mobility Uruguay; Brian Lempert, director del Grupo Fiancar; Sebastián Baccino, director de GlobalEV;\r\nMarcio D’Agosto, profesor de la Universidad Federal de Río de Janeiro (Brasil); André Luiz Ferri, especialista en logística en AMBEV (Brasil);\r\nCarlos Serrano, Jefe de producto de Renting (Colombia) y Álvaro Marchant, Jefe de Innovación en CCU (Chile).

\r\n\r\nPresentaciones del seminario\r\n\r\n
Expocarga 2021: Presentación en Portal Movilidad 4.0
\r\n

Evento que tuvo lugar desde el 2 al 5 de diciembre en el Convention & Exhibition Center de Punta del Este. Se presentó en el forode\r\nMovilidad los resultados obtenidos del monitoreo de dos camiones eléctricos y enseñaron la herramienta TCO (Total Costo OfOwnership) para\r\nevaluar la inversión en camiones eléctricos. También se realizaron pruebas en vivo de la herramienta TCO paraque los presentes pudieran\r\nevaluar los costos de adquirir un camión eléctrico en comparación con un camión convencional a diésel.\r\n

\r\n

\r\nEl CINOI contó con un stand en el hall principal donde además presentó material de difusión sobre otros proyectos.\r\n

\r\n\r\nPresentación Foro Movilidad\r\n\r\n\r\n
Encuentro PLSU (Programa de Logística Sustentable Uruguay)
\r\n

El 14 de diciembre se realizó un encuentro con los participantes del PLSU, un proyecto liderado por el CINOI que buscabrindarcapacitación\r\na empresas y contratistas para lograr una mejora en el transporte de carga en Uruguay, con un enfoque sustentableque tienda a disminuir sus\r\nemisiones.\r\n

\r\n

En el evento, el equipo del proyecto presentó los resultados obtenidos del monitoreo de dos camiones eléctricos y una comparaciónde\r\ncostos con camiones del mercado uruguayo, utilizando la herramienta TCO (Total Costo Of Ownership).\r\n

\r\nPresentación en PLSU\r\n `\r\n ),\r\n new AboutEntryImpl(\r\n 'Documentos',\r\n `\r\n\r\n`\r\n ),\r\n new AboutEntryImpl(\r\n 'Investigadores',\r\n `\r\n\r\n`\r\n )];\r\n\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n private createImgTag(image: string): string {\r\n return `\"${image}\"`;\r\n }\r\n\r\n createCollaboratorsImgList(): string {\r\n let collaboratorsImgList = '';\r\n this.supportersImgList.forEach(img => collaboratorsImgList += this.createImgTag(img) + '\\n');\r\n return collaboratorsImgList;\r\n }\r\n\r\n private createCollaboratorCard(profileImg: string, name: string, brandName: string, brandImg: string): string {\r\n return `\r\n
\r\n\"${name}\"\r\n

${name}

\r\n

${brandName}

\r\n\"${brandImg}\"\r\n
`;\r\n }\r\n\r\n createAllCollaboratorCards(): string {\r\n let allCollaborators = '';\r\n this.collaboratorCardList.forEach(collaboratorCard => {\r\n allCollaborators += this.createCollaboratorCard(\r\n collaboratorCard.profileImg,\r\n collaboratorCard.name,\r\n collaboratorCard.brandName,\r\n collaboratorCard.brandImg);\r\n });\r\n return allCollaborators;\r\n }\r\n\r\n private createScholarEntry({name, title, role, imgUrl}: ScholarEntry): string {\r\n return `\r\n \"${name}\"\r\n
\r\n

${name}

\r\n

${title}

\r\n

${role}

\r\n
\r\n `;\r\n }\r\n\r\n safeHtml(html: string): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustHtml(html);\r\n }\r\n\r\n changeEntry(currentAboutEntry: AboutEntryImpl): void {\r\n currentAboutEntry.status = !currentAboutEntry.status;\r\n\r\n for (const aboutEntry of this.aboutEntryList) {\r\n if (aboutEntry !== currentAboutEntry) {\r\n aboutEntry.status = false;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","
\r\n

Sobre el proyecto

\r\n
\r\n \"truck\r\n

\"Transporte Eléctrico de Carga: Análisis de los desafíos para su introducción en Uruguay\"

\r\n
\r\n
    \r\n
  • \r\n

    {{aboutEntry.title}}

    \r\n

    \r\n
  • \r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {Router} from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-calculator-intro',\r\n templateUrl: './calculator-intro.component.html',\r\n styleUrls: ['./calculator-intro.component.scss']\r\n})\r\nexport class CalculatorIntroComponent implements OnInit {\r\n\r\n\r\n constructor(private router: Router) {\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n navigateTo(url: string): void {\r\n this.router.navigateByUrl(url);\r\n }\r\n\r\n}\r\n","
\r\n

Calculadora TCO

\r\n\r\n

Esta herramienta permite evaluar y comparar los costos de todo el ciclo de vida de\r\n camiones convencionales y eléctricos (a batería y celda de combustible de hidrógeno). Es una herramienta útil para\r\n cuantificar los costos totales de propiedad (TCO, por sus siglas en inglés: Total Cost of Ownership) ya que incluye\r\n los costos de adquisición, operación y de fin de ciclo de vida.

\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n Empezar\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {Router} from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss']\r\n})\r\nexport class HeaderComponent implements OnInit {\r\n\r\n constructor(private router: Router) {\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n compareRouterValue(comparisonString: string): boolean {\r\n return comparisonString === this.router.url;\r\n }\r\n}\r\n","
\r\n
\r\n \"logo\r\n \"logo\r\n
\r\n\r\n \r\n
\r\n","export interface AboutEntry {\r\n\r\n title: string;\r\n description: string;\r\n status: boolean;\r\n}\r\n\r\nexport class AboutEntryImpl implements AboutEntry{\r\n\r\n title: string;\r\n description: string;\r\n status = false;\r\n\r\n\r\n constructor(title: string, description: string) {\r\n this.title = title;\r\n this.description = description;\r\n }\r\n}\r\n","
\n \n \n
\n \n \n
\n
\n","import {Component, forwardRef, Input, OnInit} from '@angular/core';\nimport {ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {stringify} from '@angular/compiler/src/util';\n\n@Component({\n selector: 'app-truck-input[formControlName]',\n templateUrl: './truck-input.component.html',\n styleUrls: ['./truck-input.component.scss']\n})\nexport class TruckInputComponent {\n\n @Input() id ?: string;\n @Input() inputType = 'text';\n @Input() labelText ?: string;\n @Input() formControlName = '';\n @Input() optional = false;\n\n}\n","import {SafeHtml} from '@angular/platform-browser';\r\n\r\nexport interface FaqEntry {\r\n title: string;\r\n questionSet: QuestionEntry[];\r\n styles?: any;\r\n classes?: any;\r\n}\r\n\r\nexport interface QuestionEntry {\r\n title: string;\r\n subtitles: SubtitleEntryImpl[];\r\n}\r\n\r\ninterface SubtitleEntry {\r\n subtitle: string;\r\n content: string;\r\n classSwitch?: boolean;\r\n}\r\n\r\nexport class SubtitleEntryImpl implements SubtitleEntry {\r\n subtitle: string;\r\n content: string;\r\n classSwitch = false;\r\n\r\n constructor(subtitle: string, content: string) {\r\n this.subtitle = subtitle;\r\n this.content = content;\r\n }\r\n}\r\n","import {Component, Input, OnInit} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-home-content-box',\r\n templateUrl: './home-content-box.component.html',\r\n styleUrls: ['./home-content-box.component.scss']\r\n})\r\nexport class HomeContentBoxComponent implements OnInit {\r\n\r\n @Input() color ?: string;\r\n @Input() title ?: string;\r\n @Input() text ?: string;\r\n @Input() route ?: string;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n document.getElementById('hola');\r\n }\r\n\r\n}\r\n","
\r\n

{{title}}

\r\n

{{text}}

\r\n\r\n \"next\"\r\n \r\n
\r\n","import {Injectable} from '@angular/core';\r\nimport {FormGroup} from '@angular/forms';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FormValidationService {\r\n\r\n constructor() {\r\n }\r\n\r\n // Verify field validators in each field\r\n formIsValid(truckForm: FormGroup): boolean {\r\n for (const key of Object.keys(truckForm.controls)) {\r\n if (truckForm.get(key)?.errors != null) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n // Verify a particular field validator\r\n fieldIsValid(truckForm: FormGroup, field: string): boolean {\r\n return truckForm.get(field)?.errors === null;\r\n }\r\n\r\n // Is called when the html tag finds a unsatisfied validator condition\r\n // Returns corresponding error message\r\n getErrorMessage(truckForm: FormGroup, fieldName: string): string {\r\n if (truckForm.get(fieldName)?.hasError('required')) {\r\n return 'Campo obligatorio';\r\n } else if (truckForm.get(fieldName)?.hasError('pattern') || truckForm.get(fieldName)?.hasError('max')) {\r\n return 'Formato inválido';\r\n }\r\n\r\n return 'Unexpected call';\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\n\n@Pipe({\n name: 'sanitizeHtml'\n})\nexport class SanitizeHtmlPipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) {\n }\n\n transform(str: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(str);\n }\n\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {KeyValue} from '@angular/common';\nimport {getTcoKeyMapping, UnitlessMappingValue} from '../models/mappingUtils';\n\n@Pipe({\n name: 'tcoValues'\n})\nexport class TcoValuesPipe implements PipeTransform {\n\n transform(value: Array>, ...args: unknown[]): Array> {\n return value.filter(({value: val}) => typeof val === 'number').map(({key, value: val}) => {\n const tcoKeyMapping = getTcoKeyMapping(key);\n return {key, value: {mapping: tcoKeyMapping, value: val}};\n });\n }\n\n}\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\n","import {Component, OnInit} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-home',\r\n templateUrl: './home.component.html',\r\n styleUrls: ['./home.component.scss']\r\n})\r\nexport class HomeComponent implements OnInit {\r\n\r\n aboutText = 'Información general del proyecto';\r\n tcoText = 'Comparativa entre camión diesel y camión eléctrico';\r\n faqText = '12 preguntas que debes hacerte si estás considerando comprarte un camión eléctrico';\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n}\r\n","

Transporte de carga eléctrico

\r\n\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n

Esta página web pertenece al proyecto \"Transporte Eléctrico de carga: Análisis de los\r\n desafíos para su introducción en Uruguay\", financiado por el Fondo Sectorial de Energía (FSE) de la ANII\r\n

\r\n

Actualizado en marzo 2022

\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'toFixed'\n})\nexport class ToFixedPipe implements PipeTransform {\n\n transform(value: number, ...args: unknown[]): number {\n return +value.toFixed(2);\n }\n\n}\n","import {Component, OnInit} from '@angular/core';\n\n@Component({\n selector: 'app-contact',\n templateUrl: './contact.component.html',\n styleUrls: ['./contact.component.scss']\n})\nexport class ContactComponent {\n\n constructor() {\n }\n\n}\n","
\r\n

Contacto

\r\n
\r\n
\r\n cinoi@um.edu.uy\r\n
\r\n
\r\n Envíanos tus consultas y nuestro equipo se pondrá en contacto a la mayor brevedad posible.\r\n
\r\n
\r\n
\r\n
\"LATU\"
\r\n
\r\n \"pin\r\n

Próximamente en el Parque Tecnológico del LATU

\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss']\r\n})\r\nexport class FooterComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","\r\n\r\n\r\n\r\n
\r\n \"símbolo\r\n
\r\n

Transporte Eléctrico de Carga: Análisis de los desafíos para su introducción en Uruguay

\r\n

Proyecto financiado por el Fondo Sectorial de Energía (FSE) de la ANII

\r\n contacto\r\n
\r\n
\r\n
\r\n \"logo\r\n \"logo\r\n
\r\n","import {AfterViewChecked, AfterViewInit, Component, ElementRef, HostListener, OnInit, ViewEncapsulation} from '@angular/core';\r\nimport {FaqEntry, QuestionEntry, SubtitleEntryImpl} from '../../models/faqEntry';\r\nimport {Router} from '@angular/router';\r\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'app-faq',\r\n templateUrl: './faq.component.html',\r\n styleUrls: ['./faq.component.scss'],\r\n encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class FaqComponent implements AfterViewInit {\r\n\r\n questionSets: QuestionEntry[][] = [\r\n [\r\n {\r\n title: '¿Qué es la movilidad eléctrica?',\r\n subtitles: [\r\n new SubtitleEntryImpl(\r\n 'Movilidad eléctrica',\r\n `\r\n

\r\nLa movilidad eléctrica se refiere a una forma de transportar personas o bienes a través de un vehículo alimentado con\r\nelectricidad, sin motor de combustión. El vehículo puede ser un auto de pasajeros, autobuses, trenes y camiones y cuentan\r\ncon un medio para almacenar energía a bordo.\r\n

\r\n

\r\nSe consideran dos tecnologías principales de vehículos eléctricos: vehículos eléctricos de batería (BEV) y vehículos eléctricos\r\ncon celda de combustible (FCEV). Por un lado, los BEV funcionan completamente con electricidad y eliminan la necesidad de\r\ncombustibles fósiles. Por otro lado, los FCEV funcionan con hidrógeno que la pila de combustible convierte en electricidad.\r\nLas emisiones pueden ser potencialmente cero carbono dependiendo de la fuente de energía utilizada para obtener el\r\nhidrógeno o la energía eléctrica.\r\n

`\r\n ),\r\n new SubtitleEntryImpl(\r\n 'Importancia de la movilidad eléctrica',\r\n `\r\n

\r\nLa importancia de la electrificación del transporte de carga radica, principalmente, en el crecimiento del sector y los impactos\r\nnegativos que este crecimiento pueda tener sobre el medioambiente. A nivel mundial, el sector de transporte representa\r\ncerca del 64% del consumo mundial de petróleo y el 23% de las emisiones de CO2. Estas cifras, al igual que otros\r\ncontaminantes atmosféricos, se pueden reducir combinando vehículos eléctricos y matriz de generación de electricidad baja\r\nen carbono.\r\n

\r\n

\r\nEn América Latina los sectores de servicio mediano y pesado representan cerca del 30% de las emisiones de CO2 y sólo\r\nrepresentan el 5% de los vehículos que circulan. En Uruguay, según la publicación del Balance Energético Nacional (BEN), el\r\nsector transporte representa el 62% de las emisiones de los sectores generadores de emisiones CO2 por consumo de\r\ncombustible. Tanto en Uruguay como en Latinoamérica, el transporte de carga por calle es un sector que está creciendo\r\naceleradamente y es el responsable de una fracción mayoritaria del consumo de petróleo mundial y por lo tanto también el\r\nresponsable de una fracción significativa de las emisiones de CO2.\r\n

\r\n

\r\nTanto en Uruguay como en Latinoamérica, el transporte de carga por calle es un sector que está creciendo aceleradamente y\r\nes el responsable de una fracción mayoritaria del consumo de petróleo mundial y por lo tanto también el responsable de una\r\nfracción significativa de las emisiones de CO2.\r\n

\r\n

\r\nEs debido a esta situación y a la capacidad de los vehículos eléctricos de reducir las emisiones que la movilidad eléctrica es\r\nde gran relevancia hoy en día.\r\n

`\r\n ),\r\n new SubtitleEntryImpl(\r\n 'Tendencias y estado actual de la movilidad eléctrica en el mundo',\r\n `\r\n

\r\nRecientemente, el atractivo de los vehículos eléctricos, tanto para los gobiernos como para los usuarios, hizo que el mercado\r\nde vehículos eléctricos creciera en todo el mundo. Los ómnibus fueron el primer y más exitoso caso de electrificación en el\r\nmercado de vehículos pesados, pero la creciente demanda de camiones eléctricos está empujando a los fabricantes a ampliar\r\nlas líneas de productos.\r\n

\r\n

\r\nEn 2020, las matriculaciones de autos eléctricos aumentaron un 41%, mientras que las ventas mundiales de automóviles\r\ncayeron un 16%, siendo Europa y China los mercados más grandes. Cuando se trata de vehículos pesados (HDV), la\r\nmatriculación ha aumentado un 10% en 2020, alcanzando un stock global de 31.000 vehículos donde China domina el\r\nmercado sobre Europa y Estados Unidos. Aunque muchos estudios observan que la electrificación es menos factible en el\r\ntransporte de carga pesado debido a limitaciones técnicas, los fabricantes de camiones como Daimler, MAN, Renault, Scania\r\ny Volvo creen que el futuro del transporte será eléctrico.\r\n

\r\n

\r\nAmérica Latina tiene potencial para aprovechar la tendencia mundial, tanto desde la demanda como desde la oferta de\r\nproductos y servicios asociados. Por un lado, cuenta con una alta concentración de áreas urbanas, altas tasas de utilización\r\nde autobuses y uso de camiones para el transporte de carga y, por otro lado, cuenta con la mayor producción de cobre, las\r\nreservas de litio más grandes y, además, cuenta con recursos de energía renovable.\r\n

\r\n

\r\nEn cuanto al estado actual de los vehículos eléctricos a batería en el mundo y en la región, según la Agencia Internacional de\r\nEnergía (IEA) y los estándares europeos, la tecnología se encuentra en los niveles 8 y 9 de madurez en zonas líderes como\r\nChina y Europa. En la región de América Latina se tienen niveles 5, 6 y 7, lo cual indica que esta región está en proceso de\r\nmaduración y mejora continua.\r\n

\r\n

\r\nLos vehículos eléctricos a celda de combustible se sitúan con un grado de madurez 6 mayoritariamente en Europa y China, y\r\ncon un nivel de maduración 3 en América Latina, en base a los avances significativos como el desarrollo de instrumentos de\r\nplaneación nacional y el desarrollo de proyectos piloto. China cuenta actualmente con el 94% de buses FCEV y el 99% de\r\ncamiones FCEV del mundo.\r\n

\r\n
Niveles de maduración de tecnología
\r\n

Según el Programa de las Naciones Unidas para el Medio Ambiente (PNUMA)

\r\n
\"bloques
\r\n`\r\n ),\r\n new SubtitleEntryImpl(\r\n 'Tendencias y estado actual de la movilidad eléctrica en Uruguay',\r\n `\r\n

\r\nUruguay actualmente incentiva la movilidad eléctrica y la incorporación de energéticos alternativos con el objetivo de lograr\r\nla soberanía energética, disminuir las emisiones atmosféricas y la contaminación sonora.\r\n

\r\n

\r\nLas condiciones del país son favorables para el desarrollo del transporte eléctrico en cuanto a generación e infraestructura,\r\ny es por esta razón que se han desarrollado políticas que promueven la comercialización de esta tecnología. En cuanto a la\r\ngeneración de energía eléctrica, el 98% de la generación es a partir de fuentes renovables, destacando la eólica, hidro, solar\r\ny biomasa. Del total de la energía demandada, el 27% se utiliza para el sector de transporte.\r\n

\r\n

\r\nUruguay fue parte de los países que firmaron el Acuerdo de París y que luego lo ratificaron para afirmar su compromiso con\r\nel medio ambiente. En base a esto, el 3 de noviembre de 2017 en Uruguay se aprueba por decreto del poder ejecutivo número\r\n310 la Primera Contribución Determinada (CND) a dicho acuerdo. La tabla debajo muestra, en lo relativo al transporte, una\r\ncomparativa entre la situación actual y las principales medidas de mitigación en el sector transporte establecidas para\r\ncumplir los objetivos incondicionales de mitigación de la CDN.\r\n

\r\n\r\n

Comparativa entre objetivos incondicionales de mitigación de la CDN y situación actual

\r\n\r\n
\r\n
Sector Transporte
\r\n
CND incondicional
\r\n
Real
\r\n
Biocombustibles
\r\n
5% de mezcla de bioetanol en naftas y 5% de mezcla de biodiesel en gasoil
\r\n
10% de mezcla de etanol anhidro en naftas y 7% de biodiesel en gasoil
\r\n
Transporte público
\r\n
15 ómnibus y 150 taxis eléctricos en 2025
\r\n
33 ómnibus y 62 taxis eléctricos
\r\n
Vehículos utilitarios
\r\n
150 unidades a 2025
\r\n
120 utilitarios de empresas y 92 de UTE
\r\n
Ruta eléctrica
\r\n
Ruta eléctrica que cubra con sistemas de alimentación de vehículos eléctricos las rutas nacionales que\r\n unen Colonia-Montevideo-Chuy
\r\n
Actualmente Uruguay ya cuenta con la ruta eléctrica que une dichos puntos
\r\n
\r\n\r\n\r\n

A continuación, se muestra una línea del tiempo con las iniciativas que han desarrollado promoviendo la movilidad eléctrica.

\r\n\"timeline\"`\r\n ),\r\n new SubtitleEntryImpl(\r\n 'Referencias',\r\n `\r\n
    \r\n
  • P. de las N. U. para el M. A. PNUMA, “Movilidad eléctrica: Avances en América Latina y el Caribe,” 2020.
  • \r\n
  • “Why Electric trucks? Volvo Trucks.” https://www.volvotrucks.com/en-en/trucks/alternative-fuels/electric-trucks/faq.html (accessed Aug. 05, 2021).
  • \r\n
  • Smart Freight Centre, “Low Emission Fuels and Vehicles for Road Freight,” Amsterdam, 2020.
  • \r\n
  • G. Krishna, “Understanding and identifying barriers to electric vehicle adoption through thematic analysis,” Transp. Res. Interdiscip.\r\nPerspect., vol. 10, p. 100364, 2021, doi: 10.1016/j.trip.2021.100364.
  • \r\n
  • \r\nF. Gonzalez Venegas, M. Petit, and Y. Perez, “Active integration of electric vehicles into distribution grids: Barriers and frameworks\r\nfor flexibility services,” Renew. Sustain. Energy Rev., vol. 145, p. 111060, 2021, doi: 10.1016/j.rser.2021.111060.\r\n
  • \r\n
  • \r\nIEA International Energy Agency, “Global EV Outlook 2021 Accelerating ambitions despite the pandemic,” Paris, 2021. Accessed: May 10, 2021.\r\n[Online]. Available: https://www.iea.org/reports/global-ev-outlook-2021.\r\n
  • \r\n
  • “Balance Energético Nacional.” https://ben.miem.gub.uy/caracteristicas3.html (accessed Mar. 20, 2021).
  • \r\n
  • \r\nB. Nykvist and O. Olsson, “The feasibility of heavy battery electric trucks,” Joule, pp. 901–913, 2021, doi: 10.1016/j.joule.2021.03.007.\r\n
  • \r\n
  • \r\n“Movilidad eléctrica | MIEM,” 2020. https://www.miem.gub.uy/energia/movilidad-electrica (accessed May 26, 2021).\r\n
  • \r\n
\r\n`\r\n )]\r\n },\r\n {\r\n title: '¿Qué tipos de camiones hay?',\r\n subtitles: [\r\n new SubtitleEntryImpl(\r\n 'Camiones eléctricos y su viabilidad en Uruguay',\r\n `\r\n

\r\nUn camión eléctrico es un vehículo con uno o más motores eléctricos que se alimenta mediante baterías\r\n(cargadas a través de conexión a la red eléctrica) o directamente de celdas de combustible (hidrógeno).\r\n

\r\n

\r\nLos vehículos eléctricos de batería son un tipo de vehículo que no está equipado con un motor de combustión interna y sólo usa energía\r\nproveniente de baterías cargadas de una fuente externa de electricidad.\r\n

\r\n

\r\nLos vehículos tipo FCEV (vehículos eléctricos de pila de combustible) son vehículos basados en la tecnología de propulsión por hidrógeno.\r\nUtilizan la tecnología de las pilas de combustible, lo que significa que durante la reacción del hidrógeno con el oxígeno se produce la\r\nenergía eléctrica que alimenta el motor. El resultado de este proceso es el agua, que se expulsa al exterior del coche mediante un tubo de escape.\r\n

\r\n

\r\nLos camiones a batería son 100% viables en Uruguay, aunque la aplicación de estos dependerá de las necesidades de cada empresa y de la\r\noferta de camiones (ver Oferta de camiones en Uruguay). Por otro lado, los camiones con pila de combustible de hidrógeno aún se encuentran\r\nen etapa de investigación y desarrollo. El proyecto piloto H2U, liderado por el Ministerio de Industria, Energía y Minería (MIEM) y con\r\nparticipación de UTE y ANCAP, prevé una flota de camiones de hidrógeno que funcione por mínimo diez años para testear la tecnología.\r\nSin embargo, aún hay un camino largo por recorrer y el sector privado tendrá un rol clave dado que la inversión, el montaje de la planta,\r\nla provisión de la flota vehicular, el mantenimiento y la ejecución será a cargo de privados.\r\n(Novedades sobre el proyecto aquí)\r\n

\r\n`\r\n ),\r\n new SubtitleEntryImpl(\r\n 'Electrificación de sectores',\r\n `\r\n

\r\nHaciendo foco en los camiones eléctricos a batería, dado que son los únicos viables hasta el momento en Uruguay,\r\nexiste una problemática técnica respecto a electrificar todos los sectores del transporte de carga.\r\n

\r\n

\r\nEl rango o la autonomía del camión depende de la capacidad de la batería, que a su vez también afecta al tamaño de la batería. Aumentar el\r\ntamaño de la batería para extender el rango máximo está limitado por límites legales y económicos sobre el peso del camión. Además, el\r\ntiempo de carga aumentará y la capacidad de carga útil se reducirá con baterías más grandes. La capacidad útil es la cantidad de energía\r\nque el vehículo puede utilizar para propulsarse y es menor a la capacidad total dado que los fabricantes establecen márgenes para evitar\r\nque las baterías se agoten completamente hasta su último electrón porque puede dañarla o acortar su vida útil.\r\n

\r\n

\r\nLa capacidad de energía se mide mediante la capacidad de una batería (kWh) de entregar una potencia de salida establecida (en kilovatios)\r\ndurante un período de tiempo (en horas). Las consideraciones de rendimiento para las baterías se basan en las densidades de energía\r\nvolumétricas, la potencia específica, la durabilidad y el número de ciclos de descarga que puede soportar una batería antes de perder una\r\nimportante fracción de la capacidad. La mayoría de las baterías para camiones eléctricos utilizan una de las combinaciones químicas de\r\nion-litio disponibles comercialmente. Estas y otras combinaciones están actualmente en el centro de muchos esfuerzos de investigación para\r\nmejorar su rendimiento.\r\n

\r\n

\r\nHoy en día en Uruguay el transporte urbano de servicio mediano de carga es viable y ya hay aplicaciones en el país que lo demuestran.\r\nCuando se trata de servicios pesados (mayor a 15 toneladas), los camiones eléctricos podrían transportar aproximadamente un 40% menos de\r\nproductos que los camiones a combustión interna considerando el mismo rango de manejo debido al peso de la batería, lo que supone pérdidas\r\neconómicas importantes.\r\n

\r\n`\r\n ),\r\n new SubtitleEntryImpl(\r\n 'Referencias',\r\n `\r\n
    \r\n
  • \r\nB. Ślusarczyk, “Electromobility for sustainable transport in Poland,” Energy Transform. Towar. Sustain., pp. 199–218,\r\n2019, doi: 10.1016/B978-0-12-817688-7.00010-0.\r\n
  • \r\n
  • \r\nIEA International Energy Agency, “Global EV Outlook 2021 Accelerating ambitions despite the pandemic,” Paris, 2021.\r\nAccessed: May 10, 2021. [Online]. Available: https://www.iea.org/reports/global-ev-outlook-2021.\r\n
  • \r\n
  • Proyecto hidrógeno verde: https://www.gub.uy/ministerio-industria-energia-mineria/tematica/hidrogeno-verde
  • \r\n
  • \r\nShell and Deloitte, “Decarbonising Road Freight: Getting into gear,” 2021. Accessed: Apr. 29, 2021. [Online].\r\nAvailable: www.shell.com/DecarbonisingRoadFreight.\r\n
  • \r\n
\r\n`\r\n )]\r\n },\r\n {\r\n title: '¿Por qué usaría un camión eléctrico?',\r\n subtitles: [\r\n new SubtitleEntryImpl(\r\n 'Beneficios',\r\n `\r\n

Algunas de las razones por las cuales se debería considerar un camión eléctrico:

\r\n
    \r\n
    Disminuye el consumo de combustibles fósiles
    \r\n
  • \r\nal cambiar a camiones eléctricos a batería o a celda de combustible de hidrógeno se reduce el consumo de combustibles fósiles porque el\r\n98% de la energía utilizada para cargar el camión proviene de fuentes renovables en Uruguay y, por otro lado, el hidrógeno que se planea\r\nobtener en el proyecto H2U es hidrógeno verde (que sea de tipo verde indica que proviene de una fuente de energía renovable).\r\n
  • \r\n\r\n
    Disminuye la contaminación de gases de efecto invernadero (GEI)
    \r\n
  • \r\nEn la actualidad, los BEV brindan reducciones de emisiones de GEI durante el ciclo de vida de alrededor del 20-30% en relación con los\r\nvehículos de combustión interna convencionales en un promedio mundial y dicha reducción depende de las emisiones durante la generación de\r\nenergía.\r\n
  • \r\n\r\n
    Disminuye la contaminación sonora
    \r\n
  • \r\nel ruido de propulsión es considerablemente menor sin un motor de combustión. Esto\r\ntiene mayor impacto cuando los vehículos operan a baja velocidad, como lo hacen normalmente en áreas urbanas, donde la\r\ncontaminación acústica es la mayor preocupación. A bajas velocidades, los vehículos eléctricos pueden ser hasta 14 dB más\r\nsilenciosos que un vehículo de combustión equivalente, lo que los hace más agradables tanto para el operador como para el\r\nvecindario.\r\n
  • \r\n\r\n
    Menos gastos en mantenimiento y menos paradas por mantenimiento
    \r\n
  • \r\nAunque los vehículos eléctricos puros requieren algún mantenimiento programado para sus sistemas eléctricos, esto es mínimo en comparación\r\ncon el requerido para los camiones de diésel. Esto se debe a que un vehículo eléctrico puro tiene muchas menos partes móviles que un motor\r\nde combustión y no hay aceite o fluidos de transmisión que reemplazar. Los sistemas de frenos también duran más que los vehículos\r\nconvencionales, gracias a sus sistemas de frenado regenerativo. Estos sistemas utilizan el motor del vehículo eléctrico como generador para\r\nconvertir gran parte de la energía cinética perdida al desacelerar nuevamente en energía almacenada en la batería del vehículo.\r\n
  • \r\n\r\n
    Capacidad de entregar un par máximo a cero rpm
    \r\n
  • \r\nUna característica que es exclusiva de los camiones eléctricos es el par instantáneo o la capacidad de entregar un par máximo a cero\r\nrevoluciones por minuto (rpm). Esto permite a los camiones eléctricos remolcar y transportar una gran carga útil a velocidades mucho más\r\nbajas que los camiones convencionales. A cero rpm, un motor eléctrico puede convertir toda la electricidad en torque, sin ninguna fuerza\r\nelectromagnética (EMF) que lo frene.\r\n
  • \r\n\r\n
    Costos totales de propiedad (TCO)
    \r\n
  • \r\nUn estudio realizado en Uruguay que evalúa los costos totales de propiedad de camiones eléctricos a batería demuestra que se llegará a la\r\nparidad de costos en comparación a los camiones a diésel en 2026, o a más tardar, en 2027, considerando el escenario más desfavorable. Sin\r\nembargo, la evaluación de los costos totales se ven muy influenciados por los incentivos y beneficios que se obtengan en el momento de la\r\ncompra, así como del uso que se le da al camión. Si estás interesado en hacer un análisis comparativo del TCO de camiones eléctricos y\r\ndiésel, utiliza nuestra herramienta.\r\n
  • \r\n
\r\n`\r\n ),\r\n new SubtitleEntryImpl('Principales diferencias entre camiones eléctricos y camiones a combustión interna', `\r\n

\r\nLos vehículos con motor de combustión interna se distinguen por tener un energético a bordo que emite emisiones de escape a la atmósfera\r\nen el momento del uso, tener una gran cantidad de partes móviles y generar contaminación sonora. En esta clasificación se encuentran los\r\nvehículos de encendido positivo (o chispa) que utilizan gasolina, gas licuado de petróleo (GLP) o gas natural en forma comprimida (GNC) o\r\nlicuada (GNL), y los vehículos con motor de encendido por compresión que utiliza diésel o biodiésel (100% o una mezcla de los dos tipos de\r\ncombustibles).\r\n

\r\n

\r\nPor otro lado, los vehículos cero-emisiones se caracterizan por no emitir gases de escape de la fuente de energía en el punto de uso, tener\r\nescasas partes móviles y no emitir sonido. Cabe destacar que el término de cero-emisiones contempla la no emisión de otros contaminantes\r\nademás de los GEI. Sin embargo, no abarca las emisiones asociadas a la generación y distribución del energético ni a los procesos de\r\nfabricación de los vehículos.\r\n

\r\n

\r\nA continuación, se muestra una tabla comparativa elaborada por Shell y Deloitte donde se muestran las principales diferencias entre las\r\ntres tecnologías estudiadas.\r\n

\r\n
\r\n
Diésel
\r\n
Eléctrico a batería
\r\n
Eléctrico con celda de combustible
\r\n\r\n
Energético
\r\n
Diésel
\r\n
Batería
\r\n
Hidrógeno
\r\n\r\n
Tren motriz
\r\n
ICE
\r\n
Motor eléctrico
\r\n
Motor eléctrico
\r\n\r\n
Combustible de uso directo
\r\n
N/C
\r\n
No
\r\n
No
\r\n\r\n
Carbón-cero
\r\n
No
\r\n
\r\n
\r\n\r\n
Autonomía (km)
\r\n
>15000
\r\n
\r\n
~200
\r\n
~800 (planificado)
\r\n
\r\n
400-1200
\r\n\r\n
Peso del tren motriz (kton)
\r\n
~3
\r\n
\r\n
~2,2
\r\n
~4,9
\r\n
\r\n
~3,6
\r\n\r\n
Tiempo de recarga (h)
\r\n
0,3-0,4
\r\n
\r\n
>3
\r\n
>7
\r\n
\r\n
0,3-0,4
\r\n\r\n
TCO y costo inicial del camión
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
En/por encima de la paridad
\r\n
\r\n\r\n
\r\n
\r\n
Apenas por debajo de paridad
\r\n
\r\n\r\n
\r\n
\r\n
Debajo de paridad
\r\n
\r\n
\r\n

\r\nCabe destacar que la autonomía de 800 km para un camión eléctrico a batería fue puesta en virtud del Tesla Semi. Los tiempos de recarga\r\nfueron calculados con cargadores rápidos de 150kW. Si se usan cargadores lentos el tiempo puede aumentar hasta en siete veces. El peso del\r\ntren motriz incluye motor, sistema de enfriamiento, transmisión y combustible/baterías. Se suponen baterías de 270 kWh y 1100 kWh para BEV\r\n(correspondientes a las dos columnas que se muestran en la tabla), se supone un paquete de baterías de 250 kWh para FCEV, la densidad de\r\nenergía del paquete de baterías de 0,25 kWh/kg y el consumo de energía de 1,15 kWh/km con un 85% de uso de la batería. Finalmente, se asume\r\nque el motor eléctrico y la caja de cambios son 600 kg, y la pila de combustible eléctrica se asume que 470 kg.\r\n

\r\n `),\r\n new SubtitleEntryImpl('Referencias', `\r\n
    \r\n
  • \r\nIEA International Energy Agency, “Global EV Outlook 2021 Accelerating ambitions despite the pandemic,” Paris, 2021. Accessed: May 10,\r\n2021. [Online]. Available: https://www.iea.org/reports/global-ev-outlook-2021.\r\n
  • \r\n
  • “El País - Energía,” 2021. https://servicios.elpais.com.uy/suple/especiales/energia21.html (accessed May 27, 2021).
  • \r\n
  • \r\n“Medium and heavy-duty electrification trends | Geotab.” https://www.geotab.com/white-paper/heavy-duty-fleet- electrification-trends/\r\n(accessed Aug. 16, 2021).\r\n
  • \r\n
  • \r\nM. Tanco, L. Cat, and S. Garat, “A break-even analysis for battery electric trucks in Latin America,” J. Clean. Prod., vol. 228,\r\npp. 1354–1367, 2019, doi: 10.1016/j.jclepro.2019.04.168.\r\n
  • \r\n
\r\n`)\r\n ]\r\n },\r\n {\r\n title: '¿Cómo funcionan los camiones eléctricos?',\r\n subtitles: [new SubtitleEntryImpl('Funcionamiento de las tecnologías', `\r\n
\r\n
Camión eléctrico a batería
\r\n

\r\nUn camión eléctrico es un vehículo con uno o más motores eléctricos que se alimenta mediante baterías (cargadas a través de conexión a\r\nla red eléctrica) o directamente de celdas de combustible (hidrógeno). Los vehículos eléctricos de batería son un tipo de vehículo que no\r\nestá equipado con un motor de combustión interna y sólo usa energía proveniente de baterías cargadas de una fuente externa de electricidad.\r\n

\r\n

\r\nA continuación, se detallan los procesos que ocurren cuando se enciende un camión eléctrico:\r\n

\r\n
    \r\n
  1. Cuando el conductor gira parcialmente la llave, los iones y electrones de las baterías de alto voltaje están disponibles para alimentar el camión.
  2. \r\n
  3. Una vez que el conductor gira la llave por completo (como si \"arrancara\" el camión), el sistema de alto voltaje envía energía al tren motriz.
  4. \r\n
  5. \r\nAl presionarlo, el acelerador envía una señal de software al inversor, un interruptor que se abre y cierra rápidamente para convertir\r\nuna señal de corriente continua (CC) en corriente alterna (CA).\r\n
  6. \r\n
  7. \r\nLa energía de CA energiza el motor eléctrico y crea torque. La energía de rotación se alimenta al tren motriz eléctrico, lo que hace que\r\nlas ruedas giren y el vehículo se acelere.\r\n
  8. \r\n
  9. \r\nAdemás del frenado estándar, el camión se puede detener mediante la recuperación del freno, también conocido como frenado regenerativo\r\nen los vehículos eléctricos de pasajeros. Esto permite que las baterías se recarguen. La energía viaja desde los motores eléctricos hasta el\r\ninversor y regresa a las baterías.\r\n
  10. \r\n
\r\n\r\n

\r\nLos camiones a batería, a diferencia de los camiones diésel convencionales, tienen muchas baterías en todo el vehículo y tienen un\r\nsistema de control para optimizar su carga balanceada y su uso. Las baterías que se encuentran en el camión son de dos tipos:\r\n

\r\n

\r\nBaterías de alto voltaje: estas baterías le dan a un camión eléctrico su \"marcha\". Suelen estar ubicadas entre los rieles del marco y\r\nalimentan muchas partes del vehículo. Por ejemplo, estas baterías accionan de uno a tres motores eléctricos (según la configuración), así\r\ncomo un compresor de aire eléctrico, que proporciona presión de aire para los frenos neumáticos y el sistema de suspensión del camión.\r\n

\r\n

\r\nBaterías de bajo voltaje: las baterías de bajo voltaje, generalmente ubicadas debajo del capó de un camión eléctrico, alimentan componentes\r\nde bajo voltaje, como los controles en el tablero y varios sistemas integrados.\r\n

\r\n
\r\n\r\n
\r\n
Camión eléctrico con celda de hidrógeno
\r\n\r\n

Disposición de las celdas de combustible

\r\n
\r\n \"disposición\r\n

\r\n En los camiones eléctricos alimentados con hidrógeno el sistema de propulsión es accionado por celdas de combustible a bordo en donde\r\n la energía se convierte en electricidad a partir del hidrógeno. Adicionalmente, estos vehículos cuentan con una batería para los momentos\r\n en que se necesita energía adicional y cuando el vehículo necesita recuperar energía eléctrica de la energía de los frenos.\r\n

\r\n
\r\n\r\n

A continuación, se explica el fenómeno que ocurre en la celda de combustible a partir de la cual se obtiene energía para accionar\r\nal motor eléctrico:

\r\n\r\n
    \r\n
  1. las moléculas de hidrógeno, que se encuentran almacenadas como gas comprimido en los tanques a bordo del camión, primero ingresan al\r\nelectrodo de hidrógeno (llamado ánodo) de la celda de combustible.
  2. \r\n
  3. las moléculas de hidrógeno luego reaccionan con el catalizador que recubre el ánodo, liberando electrones para formar un ion de\r\nhidrógeno cargado positivamente.
  4. \r\n
  5. los iones cruzan el electrolito y llegan al oxígeno en el segundo electrodo (llamado cátodo).
  6. \r\n
  7. los electrones que no pueden pasar el electrolito fluyen hacia un circuito eléctrico, generando la energía del sistema de\r\npila de combustible.
  8. \r\n
  9. en el cátodo, el catalizador hace que los iones y electrones de hidrógeno se unan con el oxígeno del aire para formar vapor de agua,\r\nque es el único subproducto del proceso. El vapor de agua se descarga a través del tubo de escape junto con el nitrógeno que ingresó a la\r\npila de combustible en el aire
  10. \r\n
\r\n\r\n
\r\n
Funcionamiento de la celda de hidrógeno
\r\n \"funcionamiento\r\n
\r\n\r\n

La celda de combustible también alimenta un sistema de suministro de aire que se compone de un filtro de aire,\r\nun compresor de aire y humidificadores proporciona oxígeno a la celda y un sistema de gestión del agua y del calor que tiene circuitos\r\nseparados de agua y refrigerante usados para eliminar el calor residual y los productos de la reacción (agua). Además, a través de este\r\nsistema se puede transportar el calor a la cabina del vehículo y mejorar la eficiencia. En la siguiente figura se puede ver un esquema de\r\nlo explicado\r\nanteriormente.

\r\n\r\n\"figura\r\n\r\n

Las pilas de combustible suelen clasificarse según el tipo de electrolito utilizado. Los tipos típicos de electrolitos de celdas de\r\ncombustible incluyen:

\r\n\r\n
    \r\n
  • La membrana de intercambio de protones (\"PEM\")
  • \r\n
  • La celda de combustible alcalina (\"AFC\")
  • \r\n
  • La celda de combustible de ácido fosfórico (\"PAFC\")
  • \r\n
  • Las celdas de combustible de óxido sólido (\"SOFC\")
  • \r\n
  • El carbonato fundido pila de combustible (“MCFC”)
  • \r\n
\r\n\r\n

De estos, el PEM es el tipo más comercializado en la actualidad, debido a su baja temperatura de funcionamiento (50-100 ° C), su corto\r\ntiempo de inicio y la facilidad de uso de su oxidante (aire atmosférico).

\r\n
\r\n `), new SubtitleEntryImpl('Autonomía', `\r\n
\r\n
Camión eléctrico a batería
\r\n

A nivel internacional, numerosos fabricantes de camiones han anunciado nuevas líneas de camiones eléctricos. La mayoría de los modelos\r\nse encuentran en la etapa de creación de prototipos, pruebas en carretera o recién comenzaron a comercializarse. Debido a esto, los valores\r\nde la tabla que se muestra abajo se basan en los rendimientos declarados por los fabricantes. La mayoría de los modelos encontrados están\r\ndiseñados para aplicaciones de reparto urbano, con un rango de autonomía inferior a 300 km, para favorecer la capacidad de carga útil.

\r\n
\r\n\r\n
\r\n\"tabla\r\n
\r\n\r\n
\r\n
Camión eléctrico con celda de hidrógeno
\r\n

Existen algunos proyectos completados de camiones eléctricos de pila de combustible en Europa y Estados\r\nUnidos. Si bien es ciertamente demasiado pronto para obtener valores de rendimiento en un número sustancial\r\nde kilómetros, se dan algunas especificaciones para algunos de ellos, como se enumera en la tabla que se\r\nmuestra debajo. En comparación con los modelos eléctricos de batería descritos en la sección anterior, los\r\ncamiones FCEV están diseñados con una mayor autonomía, comprendida principalmente entre 200 y 400 km.

\r\n
\r\n\r\n
\r\n\"tabla\r\n
\r\n `), new SubtitleEntryImpl('Eficiencia de las tecnologías', `\r\n

En cuanto a eficiencia, el estudio realizado por Smart Freight Centre revela una comparación entre ambas tecnologías basada en las\r\npérdidas energéticas desde la obtención de la energía hasta su uso final. Este estudio se realizó para vehículos de pasajeros, pero se puede\r\ntrasladar los valores aproximados a camiones de carga dado que esencialmente la tecnología es la misma. En la figura que se muestra debajo,\r\nse observa en cada fase de producción y utilización, el porcentaje de eficiencia. En el caso del hidrógeno, las múltiples fases y procesos,\r\ny las bajas eficiencias de estos, hacen que la eficiencia global sea sensiblemente más baja, siendo 30% frente al 76% correspondiente a la\r\ntecnología de batería eléctrica.

\r\n\r\n
\"fases
\r\n `), new SubtitleEntryImpl('Impacto medioambiental de los camiones', `\r\n
\r\n
\r\n

Para evaluar el impacto medioambiental de los camiones eléctricos se debe tener en cuenta el ciclo de vida total del vehículo, incluidas\r\nlas materias primeras, la producción, el uso y su disposición. Un camión eléctrico (cualquiera de las dos tecnologías) produce cero\r\nemisiones en el tubo de escape sin embargo hay emisiones que se liberan durante la producción y durante la conducción (neumáticos, frenos,\r\ndesgaste de la carretera…). Sin embargo, aproximadamente el 90% del impacto ambiental del ciclo de vida de un camión diésel proviene del uso\r\ny los camiones que funcionan con electricidad de fuentes renovables tienen un impacto mucho menor.

\r\n

El ciclo de vida de un camión se puede descomponer en cuatro fases para su análisis.

\r\n
\r\n\"ciclo\r\n
\r\n\r\n
Producción
\r\n

Se deben tener en cuenta los materiales utilizados, los procesos a los que se someten los materiales y su respectivo uso de combustibles,\r\nemisiones y lugar en donde son producidos, entre otros. Las emisiones de GEI de la fabricación del sistema de pilas de combustible\r\nrepresentan aproximadamente la mitad de las emisiones de GEI del proceso de fabricación y eliminación de FCEV. Por otro lado, la fabricación\r\nde la batería representa las mayores emisiones de GEI del ciclo de vida de BEV dado que requiere extraer y refinar metales de tierras raras\r\ny consume mucha energía debido al alto calor y las condiciones estériles involucradas. En el proceso de producción de baterías, casi el 50%\r\nde las emisiones de GEI provienen del ensamblaje y fabricación de batería, mientras que la mitad restante proviene principalmente del\r\nproceso de extracción, refinación y procesamiento de materias primas.

\r\n\r\n
Operación
\r\n

El factor determinante del impacto medioambiental es el energético utilizado. Para calcular el impacto de dichos combustibles se\r\ndiferencian las operaciones involucradas en el Well-to-Tank (desde la obtención del energético hasta el almacenamiento) y aquellas que\r\nforman parte del alcance del Tank-to-Wheel (desde el almacenamiento hasta el uso). A continuación, se muestra un esquema de ambos análisis.\r\n

\r\n

En cuanto a los BEV, los resultados favorables se muestran cuando la energía es renovable dado que en este caso las pérdidas energéticas\r\nse dan únicamente en las estaciones eléctricas y en el abastecimiento, pero las emisiones de GEI son nulas. Por otro lado, el hidrógeno se\r\npuede generar con diversos métodos que condicionan el nivel de emisiones. El hidrógeno llamado “gris” se obtiene a partir de metano fósil en\r\nun proceso denominado Reformación de Metano con Vapor (SMR, por sus siglas en inglés). En este proceso las emisiones de GEI son altas y son\r\nliberadas al ambiente. En esta metodología, todas las fases hasta el almacenamiento generan emisiones. El hidrógeno “azul” se obtiene de la\r\nmisma forma que el gris con la diferencia que se capta el dióxido de carbono generado en el proceso SMR. De esta forma, las emisiones\r\ndisminuyen considerablemente. Por último, el hidrógeno verde se genera a partir de fuentes de energía renovables en donde las emisiones son\r\nnulas a lo largo de la trayectoria del combustible.

\r\n\r\n
Mantenimiento
\r\n

Debe tenerse en cuenta principalmente el cambio de neumáticos, dado que otras operaciones tales como el cambio de aceite, de baterías de\r\narranque y de pastillas de freno representan entre el 0 y 0,3% de las emisiones de esta fase.

\r\n\r\n
Recuperación o fin de ciclo de vida
\r\n

Los impactos ambientales negativos durante el proceso de eliminación provienen principalmente de la contaminación de materiales metálicos\r\ny el consumo de energía de reciclaje. Cabe señalar que los FCEV y BEV tienen la posibilidad de reducir la huella de carbono y disminuir los\r\nimpactos negativos en el medio ambiente si los materiales utilizados en la pila de combustible y la batería se reciclan correctamente.\r\nNormalmente, los FCEV tienen menos emisiones de GEI que los BEV durante el proceso de eliminación a pesar de que las tecnologías de\r\nreciclaje involucradas en los sistemas de pilas de combustible aún se encuentran en etapas tempranas.

\r\n

Hay tres métodos principales para darle fin a la vida útil de una batería en un BEV, que son la reutilización, el reciclaje y la\r\neliminación. La reutilización, o aplicación de segunda vida, se puede aplicar a la batería de iones de litio que retiene una parte de su\r\ncapacidad original después de ser retirada del vehículo. Esta batería se puede usar en aplicaciones de almacenamiento estacionario, pero\r\neventualmente la batería llegará al final de su vida útil y será necesario reciclarla o desecharla.

\r\n

Por otro lado, a medida que crece la industria de los vehículos eléctricos, el reciclaje de baterías también puede volverse más factible.\r\nAl reciclar baterías, los materiales para producir una batería nueva podrían resultar en reducciones en las emisiones de GEI de hasta un 50%\r\nen todo el proceso de producción de la batería.

\r\n `), new SubtitleEntryImpl('Referencias', `\r\n
    \r\n
  • B. Ślusarczyk, “Electromobility for sustainable transport in Poland,” Energy Transform. Towar. Sustain., pp. 199–218, 2019, doi:\r\n10.1016/B978-0-12-817688-7.00010-0.
  • \r\n
  • “Beyond The Batteries: How Electric Trucks Work | Freightliner Trucks.”\r\nhttps://freightliner.com/blog-and-newsletters/beyondthe-batteries-how-electric-trucks-work/ (accessed Aug. 18, 2021).
  • \r\n
  • “How does a hydrogen fuel cell electric truck work?”\r\nhttps://www.scania.com/group/en/home/newsroom/news/2020/howdoes-a-hydrogen-fuel-cell-electric-truck-work.html (accessed Aug. 18, 2021).
  • \r\n
  • Deloitte China and Ballard, “Fueling the Future of Mobility Hydrogen and fuel cell solutions for transportation,” Financ. Advis.,\r\nvol. 1, p. Volume 1, 2019.
  • \r\n
  • R. Sacchi, C. Bauer, and B. L. Cox, “Does Size Matter? The Influence of Size, Load Factor, Range Autonomy, and Application Type on the\r\nLife Cycle Assessment of Current and Future Medium? The Heavy-Duty Vehicles,” Environ. Sci. Technol., vol. 55, no. 8, pp. 5224–5235, 2021,\r\ndoi: 10.1021/acs.est.0c07773.
  • \r\n
  • Smart Freight Centre, “Low Emission Fuels and Vehicles for Road Freight,” Amsterdam, 2020.
  • \r\n
  • Why Electric trucks? Volvo Trucks.” https://www.volvotrucks.com/en-en/trucks/alternative-fuels/electric-trucks/faq.html\r\n(accessed Aug. 05, 2021).
  • \r\n
  • D. Burul, “Battery electric vs diesel driven,” own Rep. Scania, 2021, [Online]. Available:\r\nhttps://www.scania.com/group/en/home/newsroom/press-releases/press-release-detail-page.html/3999115-scania-publisheslife-cycle-assessment-of-battery-electric-vehicles.
  • \r\n
\r\n `)]\r\n },\r\n {\r\n title: '¿Qué tecnología me conviene?',\r\n subtitles: [new SubtitleEntryImpl('Uso de cada tecnología', `\r\n

Es imprescindible analizar las operaciones de la empresa para decidir qué tecnología es conveniente. Hasta el momento, a pesar de los\r\ngrandes esfuerzos y avances a nivel país con el hidrógeno, la única tecnología disponible en Uruguay es la eléctrica a batería.

\r\n

El criterio principal para determinar si el almacenamiento de energía a bordo debe ser celdas de hidrógeno o baterías es que el vehículo\r\nescogido alcance el rango operativo requerido sin la necesidad de recargar en el medio o que esté prevista una parada suficientemente larga.\r\nLas autonomías disponibles para camiones BEV en Uruguay se detallan en la sección de Modelos disponibles.

\r\n

Los camiones totalmente eléctricos a batería son ideales para transportar mercancías dentro y alrededor de las ciudades en rutas\r\npredefinidas que incluyen un regreso a la base de operaciones al final de la jornada laboral para cargarlas. La distribución, la\r\nconstrucción urbana y la recolección de basura son ejemplos de segmentos que han sido los primeros en adoptar camiones eléctricos a batería.\r\nPor contraparte, aún no son viables en el transporte de larga distancia, debido a la falta de infraestructura de carga, y las aplicaciones\r\nde transporte pesado en las industrias de la madera, la construcción y la minería. En estas aplicaciones el camión con celdas de hidrógeno\r\nestá en ventaja frente al eléctrico dado que la pila y los tanques juntos pesan mucho menos que una batería por lo que la carga útil es\r\ncorrespondientemente mayor. Además, facilita las operaciones porque tiene un tiempo de llenado de combustible muy parecido al diésel. Por\r\nejemplo, el camión XCIENT de Hyundai tiene un peso bruto de 36 toneladas puede recorrer 400 km entre recargas, lo que lleva entre 8 y 25\r\nminutos.

\r\n `), new SubtitleEntryImpl('Beneficios y desafíos', `\r\n

Principales beneficios:

\r\n
\r\n
\r\n
\"nube
\r\n
Emisiones
\r\n

Este tipo de vehículos no emiten contaminantes de escape, CO2, ni dióxido de nitrógeno (NO2), aunque la\r\nfabricación de baterías incide negativamente en la huella de carbono, lo cual es un desafío que permite continuar desarrollando y mejorando\r\nlos sistemas de producción.

\r\n
\r\n\r\n
\r\n
\"tick\"
\r\n
Sencillez
\r\n

El número de elementos del motor es menor, lo que conlleva un mantenimiento mucho más económico. Los motores\r\nson más simples y compactos, no necesitan circuito de refrigeración, y tampoco es necesario incorporar cambio de marchas, embrague o\r\nelementos que reduzcan el ruido del motor.

\r\n
\r\n\r\n
\r\n
\"emblema\"
\r\n
Fiabilidad
\r\n

Tener menos componentes y más sencillos hace que este tipo de vehículos tengan menos averías. Además, los\r\nvehículos eléctricos no sufren el desgaste inherente producido por las explosiones del motor, las vibraciones o la corrosión del\r\ncombustible.

\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\"símbolo
\r\n
Costo
\r\n

El costo de mantenimiento del vehículo y el costo de la electricidad requerida es mucho menor en comparación\r\ncon los costos de mantenimiento y combustible de los vehículos de combustión tradicionales. El costo de energía por kilómetro es\r\nsignificativamente menor en los vehículos eléctricos que en los vehículos tradicionales.

\r\n
\r\n\r\n
\r\n
\"eficiencia\"
\r\n
Eficiencia
\r\n

Los vehículos eléctricos son más eficientes que los vehículos tradicionales.

\r\n
\r\n\r\n
\r\n
\"confort\"
\r\n
Confort
\r\n

Viajar en vehículos eléctricos es más cómodo, debido a la ausencia de vibraciones o ruido del motor.

\r\n
\r\n
\r\n\r\n

La autonomía, la infraestructura del hidrógeno y el tiempo de carga y el tamaño y capacidad de la batería son los principales desafíos\r\nque tienen ambas tecnologías para implementarse ampliamente.

\r\n `), new SubtitleEntryImpl('TCO e importancia', `\r\n

El TCO (Total Cost of Ownership) es el Costo Total de Propiedad y, en el caso de camiones eléctricos, incluye tanto el gasto capital de\r\ncomprar el vehículo como todos los costos operativos durante la vida útil o el período de propiedad. La paridad de costos se produce si el\r\nTCO de la tecnología alternativa, eléctrico a batería (BEV) o a celda de combustible (FCEV), es el mismo o menor en comparación a la\r\ntecnología convencional.

\r\n

Si bien el concepto de TCO parece sencillo, la aplicación no es simple y los tomadores de decisiones pueden tener problemas con preguntas\r\nsobre qué elementos de costo incluir y cómo obtener datos confiables. Además, muchos elementos son muy inciertos o desconocidos, incluidos\r\nlos precios futuros del combustible y la electricidad, el uso futuro y la vida útil de los vehículos, el rendimiento y la confiabilidad de\r\nlas nuevas tecnologías, y los incentivos y las políticas fiscales existentes o pendientes.

\r\n

Si bien el TCO es una herramienta útil para el análisis, deben considerarse la disponibilidad de capital y las necesidades operativas de\r\nla flota. Si una nueva tecnología tiene un TCO más bajo, pero cuesta el doble, comprar la nueva tecnología puede significar renunciar a un\r\nsegundo reemplazo de vehículo necesario, por ejemplo.

\r\n

Del TCO se puede desprender un análisis de tiempo de recuperación o “payback”, que depende en gran medida del segmento y del mercado. Los\r\ncamiones eléctricos tienen un costo inicial más alto, pero también ofrecen nuevas oportunidades para que las empresas de transporte mejoren\r\nla productividad y abran nuevas áreas de negocio. Los bajos costos variables conducirán a una mayor rentabilidad cuanto más se use el\r\ncamión. Una vez amortizada la alta inversión inicial, los camiones eléctricos tienen bajos costos variables, lo que también tiene un impacto\r\npositivo en la rentabilidad.

\r\n

En el marco de este proyecto, se ha desarrollado una herramienta TCO para uso público en donde el usuario podrá conocer todos los costos\r\nde adquirir un camión eléctrico comparado con un camión convencional.

\r\n `), new SubtitleEntryImpl('Costos durante el ciclo de vida del camión', `\r\n
    \r\n
  • Adquisición
  • \r\n
  • Patente
  • \r\n
  • Seguro
  • \r\n
  • Batería extra (si corresponde)
  • \r\n
  • Mantenimiento
  • \r\n
  • Combustible (energía o hidrógeno)
  • \r\n
\r\n\r\n\r\n\r\n\r\n\r\n `), new SubtitleEntryImpl('Referencias', `\r\n
    \r\n
  • Transport & Environment, “Comparison of hydrogen and battery electric trucks,” no. June, pp. 1–14, 2020, [Online]. Available:\r\nhttps://www.transportenvironment.org/sites/te/files/publications/2020_06_TE_comparison_hydrogen_battery_electric_trucks_methodology.pdf.
  • \r\n
  • “Why Electric trucks? Volvo Trucks.” https://www.volvotrucks.com/en-en/trucks/alternative-fuels/electric-trucks/faq.html\r\n(accessed Aug. 05, 2021).
  • \r\n
  • “The Future Lies In : EV? or FCEV? – Hyundai Motor Group TECH.” https://tech.hyundaimotorgroup.com/article/the-future-liesin-ev-or-fcev/\r\n(accessed Sep. 10, 2021).
  • \r\n
  • J. A. Sanguesa, V. Torres-Sanz, P. Garrido, F. J. Martinez, and J. M. Marquez-Barja, “A Review on Electric Vehicles: Technologies and\r\nChallenges,” Smart Cities, vol. 4, no. 1, pp. 372–404, 2021, doi: 10.3390/smartcities4010022.
  • \r\n
  • “Medium- and Heavy-Duty Vehicle Electrification An Assessment of Technology and Knowledge Gaps Medium- and Heavy-Duty Vehicle\r\nElectrification,” no. December 2019, 2020.
  • \r\n
\r\n `)]\r\n }\r\n ],\r\n\r\n [\r\n {\r\n title: 'La batería del camión, ¿es un problema?',\r\n subtitles: [new SubtitleEntryImpl('Tipos de baterías', `\r\n

La mayoría de las baterías para camiones eléctricos utilizan una de las combinaciones químicas de ion-litio disponibles comercialmente.\r\nEstas y otras combinaciones están actualmente en el centro de muchos esfuerzos de investigación y están logrando cambios considerables en el\r\nrendimiento de la batería. Las principales combinaciones químicas difieren en el cátodo y son las siguientes:

\r\n\r\n
\r\n
Material del cátodo
\r\n
Densidad de energía (Wh/kg)
\r\n
Ciclos de carga y descarga
\r\n
óxido de litio-cobalto (LCO)
\r\n
150-200
\r\n
500-1000
\r\n
óxido de litio-manganeso (LMO)
\r\n
100-150
\r\n
300-700
\r\n
óxido de litio-níquelmanganeso-cobalto (LiNMC)
\r\n
150-220
\r\n
1000-2000
\r\n
fosfato de hierro-litio (LiFePO4)
\r\n
90-120
\r\n
1000-2000
\r\n
óxido de litio-níquel-cobaltoaluminio (LiNCA)
\r\n
200-260
\r\n
~500
\r\n
\r\n\r\n

Las baterías de ion-litio proporcionan altas densidades de energía. En la Tabla se pueden apreciar las propiedades energéticas de cada\r\nmaterial junto con la esperanza de vida de los ciclos de carga y descarga. Es a través de estos tipos de baterías, las emisiones de\r\nproducción, la densidad de energía y la esperanza de vida que se produce un compromiso entre la autonomía del vehículo y la vida útil de la\r\nbatería.

\r\n\r\n

Mirando hacia el futuro, se espera una gran mejoría en la densidad de energía y en el ciclo de vida de las baterías de ion-litio. Además,\r\nexiste también una posibilidad de utilizar nuevas combinaciones químicas como el titanato de litio, ion-sodio e ionaluminio, que podrían\r\ntener una densidad de energía y esperanza de vida superiores a las convencionales.

\r\n `), new SubtitleEntryImpl('Características de las baterías', `\r\n

\r\n
    \r\n
  • \r\n
    Capacidad
    \r\n

    La capacidad de la batería representa la cantidad máxima de energía que se puede extraer de la batería\r\nbajo ciertas condiciones específicas. Esta unidad puede expresarse en amperios hora (Ah) o en vatios hora (Wh), aunque esta última es la más\r\nutilizada por los vehículos eléctricos.

    \r\n
  • \r\n
  • \r\n
    Estado de carga
    \r\n

    Se refiere al nivel de la batería con respecto a su capacidad al 100%.

    \r\n
  • \r\n
  • \r\n
    Densidad de energía
    \r\n

    Es la energía que una batería puede suministrar por unidad de volumen (Wh/L). Obtener la mayor densidad de\r\nenergía posible es otro aspecto importante en el desarrollo de las baterías, es decir, que con el mismo tamaño y peso una batería es capaz\r\nde acumular una mayor cantidad de energía.

    \r\n
  • \r\n
  • \r\n
    Energía específica
    \r\n

    La energía que una batería puede proporcionar por unidad de masa (Wh/kg). Algunos autores también se\r\nrefieren a esta característica como densidad de energía, y se puede especificar en Wh/L o Wh/kg.

    \r\n
  • \r\n
  • \r\n
    Ciclos de carga
    \r\n

    Un ciclo de carga se completa cuando la batería se ha usado o cargado al 100%. También puede verse como\r\nel ciclo desde que se carga la batería la totalidad de su capacidad y posteriormente se utiliza la energía igual a la capacidad de la\r\nbatería.

    \r\n
  • \r\n
  • \r\n
    Vida útil
    \r\n

    Se mide en el número de ciclos de carga que puede contener una batería. El objetivo es obtener baterías\r\nque puedan soportar un mayor número de ciclos de carga y descarga.

    \r\n
  • \r\n
  • \r\n
    Resistencia interna
    \r\n

    Los componentes de las baterías no son conductores 100% perfectos, lo que significa que ofrecen cierta\r\nresistencia a la transmisión de electricidad. Durante el proceso de carga, parte de la energía se disipa en forma de calor (es decir,\r\npérdida térmica). El calor generado por unidad de tiempo es igual a la potencia perdida en la resistencia, por lo que la resistencia interna\r\ntendrá un mayor impacto en cargas de alta potencia. Por lo tanto, se perderá más energía durante los procesos de carga rápida en comparación\r\ncon los lentos. Por esto, es muy importante que las baterías puedan soportar una carga rápida y temperaturas más altas inducidas debido a la\r\nresistencia interna. Además, la disminución de esta resistencia puede reducir el tiempo de carga que se requiere, que es uno de los\r\ninconvenientes más importantes de este tipo de vehículos en la actualidad.

    \r\n
  • \r\n
  • \r\n
    Eficacia
    \r\n

    Es el porcentaje de potencia que ofrece la batería en relación con la energía cargada.

    \r\n
  • \r\n
\r\n `), new SubtitleEntryImpl('Tiempo de carga de las baterías', `\r\n

Los BEV almacenan energía en las baterías, medida en kWh, que luego es utilizada por el motor eléctrico. El factor determinante de la\r\nvelocidad de carga de las baterías de estos vehículos es la potencia eléctrica suministrada. Es medida en kW, e indica cuanta energía por\r\nunidad de tiempo se le está suministrando a la batería. A partir de estos dos datos, y con la siguiente fórmula, se puede estimar el tiempo\r\nde carga del vehículo:

\r\n
\"fórmula
\r\n

Por ejemplo, si se carga un camión BYD T6, que tiene una batería con capacidad para 120 kWh, con una potencia de 96 kW, se estima que se\r\ncargará de 0% a 100% en 1,25 horas.

\r\n

Esta fórmula se cumple aproximadamente entre el 20% y el 90% del estado de carga (State of Charge: SoC), mientras que fuera de estos\r\nvalores el tiempo es más prolongado.

\r\n `), new SubtitleEntryImpl('Variables que afectan la autonomía de las baterías', `\r\n

\r\n

    \r\n
  • \r\n
    Relación autonomía – peso de la batería
    \r\n

    En comparación con la carga útil de referencia, una carga útil baja mejora la autonomía de conducción entre un 32% y un 36% para\r\ncualquier tamaño de batería. Por el contrario, se observa una reducción menos sustancial del rango de conducción para camiones con carga\r\ncompleta, que oscila entre el 6% y el 13%.

    \r\n
  • \r\n\r\n
  • \r\n
    Efectos de la temperatura en la autonomía
    \r\n

    Las necesidades térmicas de los vehículos eléctricos pueden tener un impacto considerable en la autonomía de conducción, especialmente en\r\ncondiciones meteorológicas extremas. Un estudio realizado por el ICCT (International Council on Clean Transportation) compara dos\r\ntemperaturas extremas (-7°C y 35°C) con una temperatura de clima moderado de 15°C para tamaños de batería desde 300kWh hasta 1000kWh.

    \r\n
  • \r\n\r\n
  • \r\n
    Efectos de la temperatura en la autonomía
    \r\n

    Las necesidades térmicas de los vehículos eléctricos pueden tener un impacto considerable en la autonomía de conducción, especialmente en\r\ncondiciones meteorológicas extremas. Un estudio realizado por el ICCT (International Council on Clean Transportation) compara dos\r\ntemperaturas extremas (-7°C y 35°C) con una temperatura de clima moderado de 15°C para tamaños de batería desde 300kWh hasta 1000kWh.

    \r\n

    Los efectos en la autonomía es una consecuencia directa de la dependencia de las propiedades eléctricas de la batería de la temperatura y\r\ndel consumo de energía de la batería y los sistemas de gestión térmica de la cabina para mantener una temperatura de 20 ° C.

    \r\n

    Para tamaños de batería más grandes, el sistema de gestión de la batería (TMS: termal management system) de la batería requiere más\r\nenergía para mantener la temperatura de las celdas de la batería dentro del rango deseado, lo que resulta en un mayor impacto en el rango de\r\nconducción. Las condiciones climáticas cálidas y frías registran un impacto similar en el rango de conducción a pesar de que la diferencia\r\nde temperatura entre la temperatura ambiente y la temperatura establecida en la cabina para un escenario de clima frío es mayor. Esto se\r\ndebe principalmente a la diferencia en el coeficiente de rendimiento del circuito de acondicionamiento térmico de la batería.

    \r\n
    \r\n

    Ejemplos de % de reducción de la autonomía para distintas temperaturas:

    \r\n
      \r\n
    • Batería de 300kWh --- 3% para -7°C y 35°C
    • \r\n
    • Batería de 1000kWh --- 8% con 35°C y 9% con -7°C
    • \r\n
    \r\n
    \r\n
  • \r\n
\r\n `), new SubtitleEntryImpl('Costo de baterías y tendencias', `\r\n

Investigaciones del Laboratorio Nacional de Lawrance Berkeley, la Universidad de California-Los Ángeles y la Universidad de\r\nCalifornia-Berkeley muestran que los costos en las baterías de camiones han disminuido un 85% en la última década y que estos costos tienden\r\na seguir bajando. Esta tendencia de costos es la razón principal por la que la tecnología eléctrica de baterías tiene actualmente una\r\nventaja sobre la otra opción líder de cero emisiones, los camiones de celda de combustible de hidrógeno, que carecen de una amplia\r\ninfraestructura de reabastecimiento de combustible y enfrentan otros desafíos para la adopción a gran escala.

\r\n

Los precios internacionales de los paquetes de baterías son actualmente de 135 USD por kilovatio-hora (kWh), alcanzables para los\r\nfabricantes que producen camiones eléctricos a escala. Aun así, actualmente el precio un camión eléctrico es mayor al precio de un camión\r\ndiésel, pero los costos iniciales continuarán cayendo a medida que las baterías se vuelvan más económicas. Se espera que los precios\r\npromedio de las baterías alcancen los 60 USD/kWh entre 2025 y 2030. Esta disminución, junto con las mejoras en el diseño de los vehículos y\r\notras políticas habilitadoras, significa que los camiones eléctricos podrían ofrecer hasta un 50% menos de costo total de propiedad por\r\nmilla en comparación con los camiones diésel convencionales.

\r\n `), new SubtitleEntryImpl('Vida útil de las baterías', `\r\n

La depreciación de las baterías eléctricas tiene un impacto significativo en la depreciación física de los camiones eléctricos. La\r\ninvestigación de la confiabilidad de la batería de potencia implica la estimación del estado de carga (SOC) y la estimación del estado de\r\nsalud (SOH).

\r\n

El SOH es un índice que se puede calcular como:

\r\n
\"fórmula
\r\n

Donde Rt es la autonomía estimada en km del viaje número t y R0 es la autonomía estimada en km cuando el camión fue cargado por primera\r\nvez por el usuario.

\r\n
\r\n
\r\n

Los principales factores que afectan el SOH son:

\r\n
    \r\n
  • Tiempo
  • \r\n
  • Temperaturas elevadas
  • \r\n
  • Operar en niveles altos y bajos de batería
  • \r\n
  • Cargar el camión con alta intensidad
  • \r\n
  • Uso: los ciclos de la batería
  • \r\n
\r\n
\r\n
\r\n

Según las descripciones de los fabricantes y la literatura existente, una vez que las baterías para vehículos eléctricos alcanzaron el\r\n70-80% de su capacidad nominal, se considera que su función como baterías de primera vida para vehículos eléctricos ha llegado al final. La\r\nrazón principal es que este tipo de baterías reducirán el kilometraje y la velocidad. Se estima que esta degradación ocurre después de 5-8\r\naños de uso o equivalente a 160.000km de viaje. Sin embargo, las baterías de vehículos eléctricos retiradas, incluso con menor SOH, podrían\r\nreutilizarse en otras aplicaciones, como hogares residenciales o variación de energía en plantas fotovoltaicas a escala de red. Se estima\r\nque pueden funcionar otros 7 a 10 años en estas aplicaciones antes de llegar al final de su vida útil y sea necesario reciclarlas.

\r\n

Vale la pena mencionar que no todos los propietarios de vehículos eléctricos cambiarán sus baterías a pesar de que el rendimiento de la\r\nbatería cae por debajo del 70-80% de su capacidad original, ya que es posible que no necesiten la capacidad total para llegar a sus\r\ndestinos. Sin embargo, eventualmente, todas las baterías de EV deben ser reemplazadas.

\r\n `), new SubtitleEntryImpl('Disposición de las baterías', `\r\n

La promoción de la electromovilidad conlleva el ingreso al país de nuevas tecnologías de baterías, siendo la más utilizada en la\r\nactualidad la tecnología de ion de litio. Esto requiere de un marco regulatorio para el adecuado manejo de dichas baterías, una vez que\r\ncumplan su vida útil en el vehículo eléctrico.

\r\n

La adecuación de la normativa de baterías usadas actual (Decreto 373/003), la cual regula el manejo y disposición final de baterías\r\nplomo-ácido, es una de las iniciativas que el Proyecto MOVÉS realiza en conjunto con la Dirección Nacional de Medio Ambiente (DINAMA).

\r\n

En este sentido, ya fue elaborada una propuesta de reglamentación base, la cual se encuentra a la espera de revisiones para ser\r\naprobada.

\r\n

Uno de los puntos clave es la instrumentación de la responsabilidad extendida del importador/fabricante de la batería, luego de que esta\r\ncumplió su vida útil. En caso de no existir capacidades nacionales para una adecuación y segunda vida, o eventual reciclaje y disposición\r\nfinal, el importador/fabricante de la batería deberá asegurarse de que dicha valorización sea realizada en el exterior.

\r\n `), new SubtitleEntryImpl('Referencias', `\r\n
    \r\n
  • Basma, H., Beys, Y., Rodríguez, F., 2021. Battery electric tractor-trailers in the European Union: A vehicle technology analysis, ICCT\r\nWorking Paper
  • \r\n
  • European Environment Agency, 2018. Electric vehicles from life cycle and circular economy perspectives: TERM 2018: Transport and\r\nEnvironment Reporting Mechanism (TERM) report, EEA Report N°13/2018.
  • \r\n
  • Forbes, 2021. Cheap Batteries Could Soon Make Electric Freight Trucks 50% Cheaper To Own Than Diesel [WWW Document]. URL\r\nhttps://www.forbes.com/sites/energyinnovation/2021/03/16/plummeting-battery-prices-mean-electric-freight-truckscould-be-50-cheaper-to-own-than-diesel/?sh=2b711f14418c\r\n(accessed 10.27.21). diesel/?sh=2b711f14418c (accessed 10.27.21).
  • \r\n
  • Haram, M.H.S.M., Lee, J.W., Ramasamy, G., Ngu, E.E., Thiagarajah, S.P., Lee, Y.H., 2021. Feasibility of utilising second life EV\r\nbatteries: Applications, lifespan, economics, environmental impact, assessment, and challenges. Alexandria Eng. J. 60, 4517–4536.\r\nhttps://doi.org/10.1016/j.aej.2021.03.021
  • \r\n
  • Li, H., Chen, C., 2020. Research on Residual Value Evaluation of Battery Electric Vehicles Based on Replacement Cost Method. IOP Conf.\r\nSer. Earth Environ. Sci. 461. https://doi.org/10.1088/1755-1315/461/1/012027
  • \r\n
  • Proyecto MOVÉS, 2021. Reglamentación de baterías - Proyecto MOVÉS [WWW Document]. Reglam. baterías. URL\r\nhttps://moves.gub.uy/iniciativa/reglamentacion-de-baterias/ (accessed 12.28.21).
  • \r\n
  • What can 6,000 electric vehicles tell us about EV battery health? | Geotab [WWW Document], n.d. URL\r\nhttps://www.geotab.com/blog/ev-battery-health/ (accessed 10.5.21)
  • \r\n
\r\n `)]\r\n },\r\n {\r\n title: '¿Qué debo tener en cuenta si decido comprar un camión eléctrico a batería?',\r\n subtitles: [new SubtitleEntryImpl('Incentivos en Uruguay', `\r\n

Uruguay actualmente incentiva la movilidad eléctrica y la incorporación de energéticos alternativos con el objetivo de lograr la\r\nsoberanía energética, disminuir las emisiones atmosféricas y la contaminación sonora. Uruguay presenta condiciones favorables para el\r\ndesarrollo del transporte de carga con camiones eléctricos en cuanto a generación e infraestructura, y es por esta razón que se han\r\ndesarrollado políticas que promueven la comercialización de esta tecnología.

\r\n

A continuación, se listan las iniciativas que suponen beneficios económicos para empresas, producto de la incorporación del transporte\r\nutilitario eléctrico:

\r\n
    \r\n
  • \r\n
    Reducción del Impuesto Específico Interno (IMESI) (Decreto 246/012) para híbridos y eléctricos
    \r\n

    Transporte utilitario eléctrico: IMESI 2,3%, lo cual es menor que todos los otros utilitarios. Los\r\nvehículos eléctricos tributan entre un 75% y 95% menos de IMESI que los vehículos convencionales.

    \r\n
  • \r\n
  • \r\n
    Ley de Promoción de Inversiones (Decreto 02/12)
    \r\n

    La ley otorga beneficios a proyectos cuya inversión genere beneficios en diferentes sectores. En\r\nparticular, si la empresa presenta un proyecto donde hay inversión en vehículos utilitarios eléctricos, la misma se reduce desde un 30%\r\nhasta más de un 70% a través de la exoneración de IRAE (Impuesto a las Rentas de las Actividades Económicas). En los casos más auspiciosos\r\nel retorno del proyecto supera el 40%.

    \r\n
  • \r\n
  • \r\n
    Certificados de eficiencia energética
    \r\n

    Instrumento económico del MIEM (Ministerio de Industria, Energía y Minería) para premiar las medidas de\r\neficiencia energética realizadas. Beneficio económico: del 3% a 30% de la inversión.

    \r\n
  • \r\n
  • \r\n
    Exoneración de tasa global arancelaria (TGA) (Decreto 410/016)
    \r\n

    Transporte de mercancías solo con motor eléctrico: 0% TGA. Esto se debe a que Uruguay no tiene\r\nproducción nacional de vehículos eléctricos, por lo que se promovió la importación con la eliminación de los aranceles de importación\r\n(de 23% a 0%).

    \r\n
  • \r\n
  • \r\n
    Descuento comercial UTE
    \r\n

    Cambio de potencia contratada sin costo.\r\n

      \r\n
    • Tarifa en valle (00:00 a 7:00) al 50% en las estaciones de recarga de UTE.
    • \r\n
    • Tarifas mediano consumidor y tarifa doble residencial al 50% en horario fuera de punta (18 a 22).
    • \r\n

    \r\n
  • \r\n
  • \r\n
    Bonificación de seguros del BSE (Banco de Seguros del Estado) para camiones eléctricos
    \r\n

    15% de descuento en tarifa de eléctricos.

    \r\n
  • \r\n
  • \r\n
    Créditos verdes
    \r\n

    A través de MOVÉS, instituciones financieras como BBVA, Itaú y HSBC crearon los créditos verdes,\r\nespecíficos para la compra de vehículos eléctricos. Este incentivo busca reducir la barrera de compra a través de una mejora en las\r\ncondiciones de financiamiento de estos vehículos.

    \r\n
  • \r\n
\r\n `), new SubtitleEntryImpl('Infraestructura existente en Uruguay', `\r\n

En Uruguay los conectores estándar son los conectores Tipo 2. La norma que define los estándares con respecto a fichas, tomacorrientes,\r\nconectores del vehículo y conexiones de entrada del vehículo eléctrico (VE) en Uruguay es UNIT 1234:2020. Además, se utilizan las normas\r\nUNIT-IEC 61851-1:2017, enfocada en tipos de comunicación entre el SAVE y VE, y la norma UNITIEC 62196-1:2014, enfocada en tipos de\r\nconectores de VE. Sin embargo, dado que en Uruguay se importaron vehículos antes de que el estándar de conectores tomara vigencia, existe\r\nuna minoría de VEs que tienen otro tipo de conector.

\r\n

Uruguay fue el primer país latinoamericano en poseer un corredor de carga para VEs. Hoy en día (marzo, 2021) se tienen instalados 70\r\ncargadores en vía pública, uno de ellos siendo de corriente continua. Además, se tienen disponibles 220 cargadores CA y 6 CC en el\r\nterritorio uruguayo, cuya instalación se retrasó debido a la pandemia del COVID-19. Para informarse acerca de las ubicaciones de estaciones\r\nde carga, el estado de sus cargadores (ocupado/ disponible) y la potencia que son capaces de entregar se recomienda la aplicación UTE\r\nMueve.

\r\n `), new SubtitleEntryImpl('Infraestructura - cómo prepararse', `\r\n

El método más popular para cargar VEs es a través de un cable. Para lograr esto se instala un Sistema de Alimentación de Vehículos\r\nEléctricos (SAVE), también llamado estación de carga, entre la red eléctrica y el vehículo. Su función es gestionar la carga, con énfasis en\r\nla seguridad del usuario.

\r\n

El objetivo del SAVE es gestionar la carga del vehículo eléctrico, a partir de una comunicación entre ambos. Se encarga de proteger al\r\nusuario haciendo circular energía solo cuando el cargador está enchufado al vehículo y cuando no hay problemas de aislación. Además, protege\r\nal vehículo de tres maneras: detectando el SoC, haciendo pasar una corriente que sea soportada tanto por el cargador como por el vehículo y\r\ndetectando problemas de hardware. De esta manera se evitan daños a las baterías, cortocircuitos y posibles incendios.

\r\n

Esto significa que, si el cargador es de 100 kW, pero por el vehículo sólo pueden circular 50 kW, el SAVE hará circular solamente 50 kW.\r\nEn el caso inverso, en el que el vehículo pueda tomar hasta 100 kW, pero la estación de carga solo puede transmitir 50 kW, el vehículo\r\ntomará 50 kW.

\r\n

Integrados a un sistema de carga inteligente también pueden informar el SoC al sistema, para optimizar la carga de una flota de camiones\r\neléctricos, por ejemplo. Algunas de las operaciones que se podrían lograr con la carga inteligente son optimizar la secuencia en que se\r\ncargan los vehículos, controlar la potencia consumida y cargar en horarios en los cuales la tarifa es menor.

\r\n
Modos de carga
\r\n
\r\n
Tipo
\r\n
Potencia
\r\n
Modo
\r\n
Lenta (emergencia)
\r\n
2,2kW
\r\n
Schuko
\r\n
Estándar
\r\n
de 3,7 a 7,4 kW
\r\n
SAVE
\r\n
Semi rápida
\r\n
hasta 22 kW
\r\n
SAVE
\r\n
Rápida
\r\n
hasta 43 kW
\r\n
SAVE
\r\n
Ultra rápida
\r\n
120 kW
\r\n
SAVE
\r\n
\r\n\r\n

La carga lenta a 2,2kW la admiten únicamente algunos vehículos eléctricos de pasajeros.

\r\n `), new SubtitleEntryImpl('Tipos de cargadores', `\r\n
\r\n
Nombre
\r\n
Modo 3
\r\n
Modo 4
\r\n
\"cargador
\r\n
\"cargador
\r\n
Descripción
\r\n
Conexión entre VE y SAVE, el cual se encuentra conectado permanentemente a la red de suministro, con una función piloto de control que\r\nse extiende desde el SAVE hasta el VE.
\r\n
Conexión entre VE y SAVE de DC o AC con una función de piloto de control que se extiende desde el SAVE de DC al VE.
\r\n
Tipo de corriente
\r\n
CA
\r\n
CC
\r\n
Potencia (kW)
\r\n
8 - 44
\r\n
44+
\r\n
Costo de adquisición
\r\n
3000
\r\n
18000
\r\n
\r\n\r\n

Debido a que los camiones eléctricos a batería necesitan de mucha energía para ser cargados, los SAVE utilizados son los de modo 3 y\r\nmodo 4. La decisión entre un tipo o el otro depende de cuánto tiempo tenga disponible el vehículo para ser cargado. En operaciones de\r\nretorno a base se suele realizar la carga con un modo 3 durante la noche, mientras que, en operaciones más intensivas con menos tiempos\r\nmuertos, se utilizan los cargadores modo 4. Dado que los vehículos personales tienen limitada la potencia que pueden recibir, y por tanto\r\nno pueden aprovechar al máximo las ventajas de los de modo 4, estos son utilizados principalmente por VEs pesados, de larga distancia o con\r\nbaterías grandes.

\r\n

Otro comentario importante es que los precios mencionados en la tabla solo corresponden al costo de adquisición. Los de modo 4 tendrán el\r\nmayor costo adicional de entre los tres mencionados debido a su gran impacto en la red eléctrica (costo de operación) y a su mayor tamaño\r\n(costo de instalación).

\r\n

Además de haber diferentes tipos de SAVE se tienen diferentes tipos de conectores entre vehículo y SAVE. Estos están estandarizados y por\r\nlo tanto permiten una clasificación más estricta que en el caso anterior.

\r\n\r\n

Proveedores SAVE:\r\n\r\nHaga click aquí para ver la lista de proveedores SAVE en Uruguay.\r\n

\r\n `), new SubtitleEntryImpl('Referencias', `\r\n
    \r\n
  • Carga de vehículos - Movilidad Eléctrica - UTE. (n.d.). Retrieved March 19, 2021, from https://movilidad.ute.com.uy/carga.htm
  • \r\n
  • Hall, D., & Lutsey, N. (2019). Estimating the infrastructure needs and costs for the launch of zero-emission trucks. The International\r\nCouncil on Clean Transportation, August, 1–31. https://theicct.org/sites/default/files/publications/ICCT_EV_HDVs_Infrastructure_20190809.pdf
  • \r\n
  • Regis, N., Heinrich, M. T. E. E., Kelch, F., Magne, P., Emadi, A., Zhang, M., Huang, Q., Liu, S., Li, H., Khoury, J., Database, F. P.,\r\nO’Shaughnessy, E., Cutler, D., Ardani, K., Margolis, R., Li, N., Sun, Y., Yu, J., Li, J. C., … Wu, J. (2017). Electrification of the\r\nTransport System: Studies and Reports. Renewable and Sustainable Energy Reviews, 10(6), 1–49.
  • \r\n
  • UNIT-IEC. (2017). UNIT-IEC 61851-1:2017.
  • \r\n
  • UNIT. (2020). UNIT 1234:2020.
  • \r\n
\r\n `)]\r\n },\r\n {\r\n title: '¿Qué modelos de camiones a batería hay disponibles en Uruguay?',\r\n subtitles: [new SubtitleEntryImpl('Modelos en Uruguay', `\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n\"ícono\r\n\"ícono\r\nModelos de camiones eléctricos.pdf\r\n\r\n
\r\n `)]\r\n },\r\n {\r\n title: '¿Cómo mejoro la operativa diaria?',\r\n subtitles: [new SubtitleEntryImpl('Frenado regenerativo', `\r\n

Cualquier vehículo en movimiento tiene mucha energía cinética y cuando se aplican los frenos para desacelerar, toda esa energía debe ir a\r\nalguna parte. En los vehículos convencionales con motor de combustión interna, los frenos a través de la fricción convierten la energía\r\ncinética en calor que se disipa al ambiente. El frenado regenerativo utiliza al motor del vehículo eléctrico como generador para convertir\r\ngran parte de la energía cinética perdida al desacelerar en energía almacenada en la batería. Esta energía es utilizada posteriormente\r\ncuando se tiene que volver a acelerar.

\r\n

Es importante aclarar que el frenado regenerativo no es un potenciador de autonomía, es decir, no aumenta la autonomía y no hace que los\r\nvehículos sean más eficientes, sino que hace que sean menos ineficientes. La forma más eficiente de conducir sería a velocidad constante y\r\nnunca tocar el freno dado que al frenar se elimina energía y luego se requiere energía para volver a llegar a la velocidad. De esta forma,\r\nla mayor autonomía se obtiene nunca disminuyendo la velocidad, lo cual no puede ser real, ya que no se adapta a las operativas diarias. En\r\nestos casos el frenado regenerativo elimina la ineficiencia del frenado y hace que el proceso de frenar tenga menos desperdicios\r\nenergéticos.

\r\n `), new SubtitleEntryImpl('Capacitación de choferes', `\r\n

La forma en la que los vehículos eléctricos consumen energía ha sido estudiada en numerosos estudios debido al impacto que tiene tanto en\r\nla vida útil de la batería del vehículo como en el costo de operarlo.

\r\n

Si bien los camiones eléctricos son muy similares a los camiones a diésel convencionales en apariencia, el funcionamiento y la tecnología\r\nes muy distinta y amerita que los conductores reciban una capacitación. Dicha capacitación se recomienda que sea tanto teórica como\r\npráctica, a través de recorridos alrededor del camión y prácticas conduciendo. Además, se recomienda capacitación técnica básica enfocada en\r\ncómo trabajar con componentes que están a alta tensión. En ocasiones los proveedores ofrecen y obligan a los conductores a tener esta\r\ncapacitación.

\r\n

Los conductores pasan por un proceso de aprendizaje relativamente corto (pocas semanas) hasta que logran adaptarse y dominar la\r\ntecnología. Aprender a manejar de forma eficiente y eficaz las novedades del frenado regenerativo, la carga y la autonomía en el uso\r\ncotidiano de un vehículo eléctrico es esencial para lograr un comportamiento de conducción y experiencia del usuario optimizado.

\r\n\r\n

Algunos consejos para maximizar la autonomía son:

\r\n
    \r\n
  • No acelerar rápidamente porque se utiliza más corriente, lo cual reduce los kWh disponibles y a su vez reduce la autonomía
  • \r\n
  • Utilizar el frenado regenerativo cuando sea posible
  • \r\n
  • No usar el aire acondicionado cuando no sea necesario dado que, después de la aceleración, es el mayor consumidor de energía
  • \r\n
  • Durante la conducción, no mantener el pie en el pedal del freno durante un largo tiempo. Eso puede causar fenómeno de\r\nsobrecalentamiento, desgate y desperdicio de energía eléctrica
  • \r\n
\r\n\r\n
\r\n
\r\n
\r\n
Caso real
\r\n
\r\n\r\n
\r\n

Se muestra la curva de aprendizaje de conductor de un camión eléctrico modelo T6A que realiza distribución urbana. En 25 días logró\r\nllegar a un porcentaje alrededor del 25% y se mantuvo relativamente constante.

\r\n
\"gráfica
\r\n
\r\n
\r\n `), new SubtitleEntryImpl('Seguridad', `\r\n

Si bien los vehículos eléctricos tienen ciertas ventajas en materia de seguridad debido a que no llevan a bordo combustibles que son\r\ninflamables y tóxicos, es importante tener en cuenta las propiedades físicas y químicas de las baterías y cómo se comportan en distintos\r\nescenarios.

\r\n

Las baterías de litio son las más comunes en los vehículos eléctricos debido a su alta energía y densidad de potencia, combinada con la\r\nlongevidad de la batería y la autonomía alcanzable. Estas baterías contienen materiales reactivos extremadamente energéticos y electrolitos\r\norgánicos inflamables. Esto supone una serie de problemas de seguridad que no se encuentra en vehículos convencionales e introduce riesgos\r\nque deben comprenderse y gestionarse adecuadamente.

\r\n

Las baterías contienen los tres elementos necesarios para producir un incendio a través de una reacción química: fuente de\r\ncalor/ignición, oxígeno y material combustible.

\r\n

Las baterías tienen un rango de funcionamiento muy estrecho, si la celda se calienta debido a una carga rápida, una sobrecarga, un\r\ncortocircuito o una deformación mecánica, como un impacto o un calentamiento externo, el sistema de iones de litio está diseñado para\r\nventilar el gas para evitar la explosión.

\r\n

Si la temperatura alcanzara aproximadamente 150°C - 200°C, la batería se vuelve inestable y se puede dar lo que se conoce como fuga\r\ntérmica, un rápido aumento de temperatura interna que desencadena continuamente una variedad de descomposición y otras reacciones\r\nelectroquímicas exotérmicas asociadas. Las tasas de liberación de energía durante esta reacción aumentan con la temperatura, provocando\r\nfugas de electrolito, generación de calor, formación rápida de gas y humo, rotura de celda, incendio, desmontaje rápido y, en el peor de los\r\ncasos, explosión de gas como resultado de la combustión del electrolito y otros componentes combustibles después de la ruptura del\r\nconfinamiento de la batería.

\r\n

A pesar de que existen diversos riesgos vinculados al uso de baterías, también existen muchos riesgos cuando se utiliza unvvehículo a\r\ncombustión interna. Los proveedores de los vehículos eléctricos aseguran que cumplen con los mismos altos estándares de seguridad en choques\r\nque otros vehículos y ofrecen los mismos sistemas de seguridad que los modelos diésel. En ocasiones también se agregan escenarios de choque\r\nespecíficos para los vehículos eléctricos para verificar la resistencia a los choques de la instalación de la batería y otros componentes\r\neléctricos.

\r\n `), new SubtitleEntryImpl('Consideraciones sobre la carga de la batería', `\r\n

\r\n

    \r\n
  • No es recomendable que el estado de carga (SoC: State of Charge) de la batería esté por debajo de 20%
  • \r\n
  • La carga de una batería es más eficaz cuando su SoC es bajo. La aceptación de la carga disminuye cuando la batería alcanza un SoC del\r\n70% o más. Una batería completamente cargada ya no puede convertir la energía eléctrica en energía química y la carga debe reducirse para\r\nque se apague.
  • \r\n
  • Cargando una batería más allá del estado de carga completo convierte el exceso de energía en calor y gas y puede resultar en un depósito\r\nde materiales no deseados. Además, la sobrecarga prolongada causa daño permanente.
  • \r\n
  • Antes de iniciar la carga se debe inspeccionar que dentro del puerto de carga y el puerto del conector de carga del vehículo no haya\r\noxidación o corrosión. De haber oxidación o corrosión no se debe cargar dado que se puede ocasionar un cortocircuito o descarga\r\neléctrica.
  • \r\n
  • No se debe desconectar el cargador con manos húmedas dado que puede ocasionar lesiones personales.
  • \r\n
  • Cuando la temperatura ambiental es inferior a 0ºC, la duración de carga será más larga que el caso normal, la capacidad de carga es\r\nrelativamente baja.
  • \r\n
  • Si el vehículo no se utiliza durante un largo tiempo, para extender la vida útil de la batería de energía, se recomienda cargarla y\r\nconducir el vehículo una vez cada 3 meses.
  • \r\n
  • Se debe utilizar el cargador correcto para la química de la batería, la mayoría de los cargadores sirven para sólo un tipo de\r\nbatería.
  • \r\n
  • Un cargador de alto voltaje acorta el tiempo de carga, pero existen limitaciones en cuanto a la rapidez con la que se puede cargar una\r\nbatería. La carga ultrarrápida causa estrés.
  • \r\n
  • Se debe observar la temperatura de carga. Las baterías de plomo ácido deben permanecer tibias al tacto; Las baterías de níquel se\r\ncalentarán hacia el final de la carga, pero deben enfriarse cuando estén \"listas\". El ion de litio no debe elevarse más de 10ºC por encima\r\nde la temperatura ambiente cuando alcance la carga completa.
  • \r\n
\r\n `), new SubtitleEntryImpl('Costo de cargar la batería', `\r\n

La disponibilidad de tiempo para cargar el camión depende de las operaciones de cada empresa. Idealmente y debido a los costos de las\r\ntarifas eléctricas en Uruguay, se sugiere que la carga sea en la noche, donde las tarifas de energía eléctrica son las mínimas.

\r\n\r\n
\r\n
\r\n
\r\n
Ejemplo
\r\n
\r\n
\r\n

A modo de ejemplo, si la empresa tiene tarifa de mediano consumidor 1 y posee un camión BYD T45C01 con una capacidad de batería de\r\n100kWh, al cual carga en horario valle, el costo de cargar al camión será de:

\r\n

2,150$/kWh*105kWh=225,75$

\r\n

Con esta carga y un rendimiento de 2km/kWh se logra una autonomía de 210km.

\r\n
\r\n `), new SubtitleEntryImpl('¿Qué pasa si me quedo sin batería en la ruta', `\r\n

Los usuarios normalmente aprenden cómo funciona el camión y se sienten cómodos con la autonomía muy rápidamente. Si la carga de la\r\nbatería cae a cero mientras se conduce el camión, hay una cierta capacidad de reserva de energía disponible que ayudará al conductor a\r\nllegar a un lugar seguro.

\r\n `), new SubtitleEntryImpl('¿Es confiable tener la flota 100% eléctrica?', `\r\n

Para determinar si es confiable tener una flota 100% eléctrica se debe hacer un estudio de las distancias recorridas y los kilogramos\r\ntransportados históricamente, de forma de asegurarse de que las prestaciones de los camiones eléctricos sean suficientes. Los camiones\r\ntotalmente eléctricos son ideales para transportar mercancías dentro y alrededor de las ciudades en rutas predefinidas que incluyen un\r\nregreso a la base de operaciones al final de la jornada laboral para cargarlas. La distribución, la construcción urbana y la recolección de\r\nbasura (a menudo para las autoridades municipales) son ejemplos de segmentos que han sido los primeros en adoptar camiones eléctricos.

\r\n `), new SubtitleEntryImpl('Referencias', `\r\n
    \r\n
  • BU-401: How do Battery Chargers Work? - Battery University [WWW Document], 2021. URL\r\nhttps://batteryuniversity.com/article/bu-401-how-do-battery-chargers-work (accessed 12.29.21).
  • \r\n
  • Helmbrecht, M., Olaverri-Monreal, C., Bengler, K., Vilimek, R., Keinath, A., 2014. How electric vehicles affect driving behavioral\r\npatterns. IEEE Intell. Transp. Syst. Mag. 6, 22–32. https://doi.org/10.1109/MITS.2014.2315758
  • \r\n
  • Manual BYD T6A
  • \r\n
  • Run On Less: Maintenance, Training & Safety [WWW Document], 2021. URL https://runonless.com/bootcamp/maintenancetraining-safety/\r\n(accessed 12.4.21)
  • \r\n
  • Why Electric trucks? Volvo Trucks [WWW Document], n.d. URL\r\nhttps://www.volvotrucks.com/en-en/trucks/alternativefuels/electric-trucks/faq.html (accessed 8.5.21).
  • \r\n
\r\n `)]\r\n }\r\n ],\r\n\r\n [\r\n {\r\n title: '¿Cuándo va a ser viable el camión con celda de combustible de hidrógeno?',\r\n subtitles: [new SubtitleEntryImpl('Obtención y uso del hidrógeno', `\r\n

El hidrógeno es el elemento más abundante en el universo, pero no se forma naturalmente por sí solo. Se puede encontrar en agua,\r\ncombustibles fósiles o biomasa. Para extraer el hidrógeno, se pueden utilizar procesos como, por ejemplo, la electrólisis o el reformado de\r\nmetano con vapor.

\r\n

Como se mencionó en la pregunta 4, el hidrógeno se puede obtener de distintas fuentes. Si bien no existe una nomenclatura oficial, en la\r\nindustria se suele distinguir al hidrógeno según su origen con colores. Debajo se muestra la nomenclatura utilizada.

\r\n
\r\n\"colores\r\n
\r\n\r\n

El hidrógeno es un portador de energía que no se consume, sólo se utiliza. Como se mencionó anteriormente, una forma de obtención del\r\nhidrógeno es a partir de la electrólisis. Este es el proceso de obtención que interesa en Uruguay. Consiste en la división de la molécula de\r\nagua (H2O) en dos átomos de hidrógeno y un átomo de oxígeno mediante la adición de energía eléctrica. En específico, es de interés para la\r\ndescarbonización del transporte que la energía eléctrica utilizada sea renovable. El oxígeno que se produce se libera a la atmósfera y el\r\nhidrógeno se almacena en un tanque. Este hidrógeno se puede utilizar para llenar una celda de combustible de un vehículo. Cuando el vehículo\r\nse encuentra en funcionamiento, su celda de combustible toma el hidrógeno almacenado y oxígeno de la atmósfera y produce energía eléctrica\r\npara alimentar al motor eléctrico, agua y calor. La producción de hidrógeno mediante electrólisis requiere alrededor de 9 litros de agua por\r\nkg de hidrógeno, por lo que debe considerarse una fuente estable de este recurso, que Uruguay, a diferencia de otros países de la región,\r\nla tiene.

\r\n `), new SubtitleEntryImpl('Viabilidad del uso de hidrógeno como combustible en camiones eléctricos', `\r\n

Las pilas de combustible de hidrógeno usan desde la década de 1960 en naves espaciales. En la década de 1970, empresas como Rocketdyne\r\ninvestigaron posibles usos de transporte comercial para las pilas de combustible, incluidos trenes, barcos, autobuses y camiones y desde\r\n2011 se están creando prototipos de camiones con pila de combustible de hidrógeno. Hoy en día ya se utilizan autos y ómnibus que funcionan\r\ncon esta tecnología.

\r\n

La producción de hidrógeno es un tecnología madura, en el mundo actualmente se producen 100 millones de toneladas de hidrógeno y en su\r\nmayoría se destina a la industria. Por ejemplo, en Estados Unidos se producen anualmente más de 10 millones de toneladas de hidrógeno\r\ndestinado a las industrias química, de fertilizantes y alimentaria.

\r\n

Es claro que hay intereses en la producción de hidrógeno debido a la variedad de usos finales que pueden beneficiarse de su\r\ndisponibilidad. El hidrógeno para el transporte es sólo una pequeña parte de una economía de hidrógeno mucho mayor que se debe planificar.\r\nUna economía del hidrógeno requiere un enfoque regional en el suministro de hidrógeno como energía para múltiples usos. Una vez que la\r\nproducción de hidrógeno a escala está disponible, estos múltiples usos finales se vuelven económicamente viables. El desafío es lograr la\r\nproducción de hidrógeno a gran escala.

\r\n `), new SubtitleEntryImpl('Avances a nivel país', `\r\n

Actualmente se encuentra vigente el proyecto H2U que busca posicionar a Uruguay como productor y abastecedor de demandas locales y,\r\neventualmente, exportador de hidrógeno verde.

\r\n

ANCAP impulsa este proyecto como una continuación del proyecto VERNE. El nuevo proyecto tiene tres focos principales: hacer un piloto\r\npara transporte pesado de buses y camiones, producción de hidrógeno on-shore y producción de hidrógeno off-shore. Se busca la inversión de\r\nprivados para la generación de energía renovable dedicada a la producción de hidrógeno. De esta manera, el modelo de negocios va a ser\r\ntotalmente privado, debido a que las empresas deben aportar una flota vehicular de ómnibus y camiones y deberán mantener contratos de\r\ndemanda energética según sus necesidades. Se busca hacer un proyecto piloto con al menos diez ómnibus de nueve metros de largo o camiones de\r\n17 toneladas, donde la distancia mínima que recorra la flota sea 3500km por día. Los inversionistas privados deberán instalar una planta\r\npropia, aunque va a ser posible utilizar las instalaciones de ANCAP en la planta de Capurro. Además, estará vigente la Ley de Promoción de\r\nInversiones y se prevén apoyos públicos adicionales para fomentar las inversiones.

\r\n

Un foco grande del proyecto es crear una granja eólica off-shore. Las investigaciones hechas por ANCAP demuestran que existen dos zonas\r\nde aproximadamente 2000m2 cada una en donde las condiciones del viento y la profundidad son óptimas para la instalación de molinos. A partir\r\nde licitaciones, se conceden bloques del territorio marítimo uruguayo para la generación de energía y la producción de hidrógeno in\r\nsitu.

\r\n
\r\nLinks de interés:\r\nLanzamiento del proyecto H2U\r\ny\r\nNoticia\r\n
\r\n

Jorge Ferriero, director de Hidrógeno en ANCAP, y Fernando Schaich, fundador de SEG Ingeniería, participaron de una mesa redonda sobre\r\nhidrógeno, en donde analizaron el potencial que tiene Uruguay para el mercado del hidrógeno. Por un lado, Jorge sostuvo que Uruguay cuenta\r\ncon tres drivers para la producción de hidrógeno:

\r\n
    \r\n
  1. Ambiental: descarbonizar el mundo ya forma parte de la agenda social y de la agenda de los gobiernos.
  2. \r\n
  3. Los costos van a ir bajando a medida que se va escalando la producción
  4. \r\n
  5. Hay apetito de inversores en invertir en energías verdes como inversiones a largo plazo
  6. \r\n
\r\n

Además, Fernando Schaich, sostuvo que Uruguay presenta dos ventajas principales para la producción de hidrógeno verde:

\r\n
    \r\n
  1. Si bien cuando se compara con Chile o Brasil, Uruguay no es el mejor posicionado en generación de energía a partir de energía solar o\r\neólica, Uruguay tiene la ventaja de que tiene disponible ambas energías y que estas se complementan (generación baja de energía solar\r\ncoincide con generación alta de energía eólica y viceversa).
  2. \r\n
  3. Uruguay es un mercado seguro y con bajo riesgo y tasas, lo cual es muy buscado por inversores.
  4. \r\n
\r\n

Tanto Fernando Schaich como Jorge Ferreiro estuvieron de acuerdo en que hasta que se empieza a producir y utilizar hidrógeno puede pasar\r\nun período de tiempo de ocho a diez años.

\r\n
\r\n
\r\n
Uruguay llevó adelante una trayectoria destacada en la incorporación de energías renovables en su matriz de energía eléctrica,\r\nque nos permite dar un paso más y posicionarnos en el mundo como un actor capaz de dar respuesta a las nuevas demandas energéticas a nivel\r\nlocal y global. Para ello, vemos conveniente avanzar en el desarrollo del Hidrógeno Verde, que brinda la posibilidad dar respuesta a la\r\ndemanda de producciones más limpias y amigables con el medio ambiente, al tiempo que permitirá a largo plazo dar un nuevo destino a la\r\ncapacidad utilizable de generación eléctrica con la que cuenta el país
\r\n
\r\n
\r\n\"Omar\r\n
\r\n

Ing. Omar Paganini

\r\n

Ministro de Industria, Energía y Minería

\r\n
\r\n
\r\n `), new SubtitleEntryImpl('Infraestructura en Uruguay', `\r\n

En base a la pregunta anterior, actualmente no hay infraestructura ni de producción ni de distribución de hidrógeno en Uruguay. Sin\r\nembargo, en este aspecto se centra el proyecto H2U.

\r\n `), new SubtitleEntryImpl('Referencias', `\r\n
    \r\n
  • CHBC, 2018. CHBC Hydrogen FAQ 1–16.
  • \r\n
  • Development, D. of P.I. and R., n.d. Frequently Asked Questions Renewable Hydrogen.
  • \r\n
  • En Perspectiva, 2021. Hidrógeno verde: ¿Qué potencial tiene Uruguay en ese mercado? - YouTube [WWW Document]. URL\r\nhttps://www.youtube.com/watch?v=QISm8gbicRc (accessed 12.29.21).
  • \r\n
  • MIEM, 2021. Proyecto piloto H2U [WWW Document]. URL\r\nhttps://www.gub.uy/ministerio-industria-energiamineria/comunicacion/noticias/uruguay-lanza-proyecto-piloto-h2u-para-avanzar-hacia-produccion-hidrogeno\r\n(accessed 12.9.21).
  • \r\n
  • NACFE, 2020. Making Sense of Heavy-Duty Hydrogen Fuel.
  • \r\n
\r\n `)]\r\n },\r\n {\r\n title: '¿Qué debo tener en cuenta si decido comprar un camión a hidrógeno?',\r\n subtitles: [new SubtitleEntryImpl('Modelos en Uruguay', `\r\n

En Uruguay no hay oferta de camiones con celda de combustible de hidrógeno. Sin embargo, en la Pregunta 4 se listan los modelos de\r\ncamiones que existen mundialmente.

\r\n `), new SubtitleEntryImpl('Incentivos proyectados en Uruguay', `\r\n

Aún no existen políticas de incentivos para la compra de camiones con celda de combustible de hidrógeno. Sin embargo, estos camiones son\r\nclasificados como eléctricos porque funcionan con un motor eléctrico, por ende, los beneficios mencionados anteriormente para los camiones\r\neléctricos a batería deberían ser trasladables a estos camiones si no se indica lo contrario.

\r\n `), new SubtitleEntryImpl('Recarga de hidrógeno', `\r\n

El hidrógeno, al igual que los combustibles fósiles, se deberá cargar en estaciones de servicio que suministren hidrógeno, ya sean\r\npropias o públicas.

\r\n

El tiempo que se demora en llenar el tanque de combustible es una de las mayores ventajas que tiene el hidrógeno frente a las\r\nbaterías. La siguiente tabla muestra el estado actual de autos y ómnibus y las predicciones de camiones para 2030 y 2050.

\r\n
\r\n
Estado de vehículos particulares (2015)
\r\n
Estado de ómnibus (2017)
\r\n
Objetivo camiones pesados (2030)
\r\n
Objetivo camiones pesados (2050)
\r\n
Capacidad de tanque (kg)
\r\n
2-5
\r\n
32
\r\n
60
\r\n
60
\r\n
Autonomía (km)
\r\n
320-520
\r\n
480
\r\n
1200
\r\n
1200
\r\n
Tiempo de llenado de tanque (minutos)
\r\n
5-6
\r\n
22-24
\r\n
10
\r\n
6
\r\n
Tasa de llenado de tanque (kg/min)
\r\n
0,35
\r\n
1-1,5
\r\n
8
\r\n
10
\r\n
\r\n

Cabe destacar que, en las estaciones de carga, el nivel de presión de suministro de hidrógeno determina el tipo de vehículo que puede\r\nhacer uso de la estación. Mientras que los vehículos de particulares tienen tanques de hasta 700 bar, los camiones y ómnibus, que cuentan con\r\nmayor espacio disponible para los tanques, pueden operar con hidrógeno a 350 bar.

\r\n `), new SubtitleEntryImpl('Costo del hidrógeno y rendimiento', `\r\n

Hay mucha incertidumbre y es muy pronto para estimar el precio que verá el consumidor en una estación de hidrógeno en Uruguay. Este\r\nprecio depende de diversos factores y entre ellos el principal es el costo de producción. Actualmente, según un estudio realizado por IEA\r\n(International Energy Agency), producir el hidrógeno a partir de energías renovables tiene un costo desde 3USD a 8USD por kilogramo, mientras\r\nque producirlo a partir de gas natural cuesta entre 0,5 USD y 1,7 USD por kilogramo. En el mismo estudio se estima que aquellas zonas que\r\ntengan generación de energía mayoritariamente renovable verán una disminución del costo más pronto, alcanzando en 2030 entre 1,3 y\r\n3,5 USD por kg.

\r\n

En cuanto al consumo del hidrógeno, un camión de clase 8 (peso bruto inferior 15.000 kilogramos y transporte de cargas muy pesadas a\r\nlarga distancia) es entre 8,8 y 14,8 km por kg de hidrógeno.

\r\n `), new SubtitleEntryImpl('Referencias', `\r\n
    \r\n
  • Cunanan, C., Tran, M.-K., Lee, Y., Kwok, S., Leung, V., Fowler, M., 2021. A Review of Heavy-Duty Vehicle Powertrain Technologies: Diesel\r\nEngine Vehicles, Battery Electric Vehicles, and Hydrogen Fuel Cell Electric Vehicles. Clean Technol. 3, 474–489.\r\nhttps://doi.org/10.3390/cleantechnol3020028
  • \r\n
  • Global Hydrogen Review 2021, 2021. . Glob. Hydrog. Rev. 2021. https://doi.org/10.1787/39351842-en
  • \r\n
  • Hydrogen stations: FAQ - H2.LIVE [WWW Document], n.d. URL https://h2.live/en/faq/ (accessed 12.9.21).
  • \r\n
  • NACFE, 2020. Making Sense of Heavy-Duty Hydrogen Fuel.
  • \r\n
\r\n `)]\r\n },\r\n {\r\n title: '¿Cómo mejoro la operativa diaria?',\r\n subtitles: [new SubtitleEntryImpl('Seguridad', `\r\n

Cualquier combustible que se utilice para el transporte tiene que ser seguro, porque así lo determina el mercado que utiliza la\r\ntecnología. Es por este motivo que tanto los fabricantes de camiones como las empresas distribuidoras de hidrógeno ponen especial foco en la\r\nseguridad.

\r\n

Como se comentó anteriormente, el hidrógeno se ha utilizado de forma segura durante muchas décadas y como con cualquier otro combustible,\r\nexisten estándares internacionales para el manejo del combustible y para la mitigación de riesgos asociados (CHBC, 2018). EL hidrógeno es\r\ntan seguro como cualquier otro combustible y los tanques son sometidos a pruebas rigurosas que incluyen pruebas de choque, disparos y\r\nrequisitos de rendimientos. Además, los materiales utilizados para los tanques son de alta resistencia y son sometidos a más del doble de la\r\npresión máxima de servicio.

\r\n

Por otro lado, las estaciones de carga de combustible de hidrógeno que ya existen tienen sistemas de protección redundantes por lo que es\r\ninviable sobre presurizar el tanque en el momento de hacer la recarga.

\r\n

En cuanto al hidrógeno como combustible, éste presenta ciertas ventajas frente a otros combustibles fósiles. Entre ellos se encuentra que\r\nno es un gas tóxico, se disipa rápidamente a la atmósfera en caso de que el tanque tenga un fallo o una pérdida e irradia menos calor cuando\r\nse quema. Vinculado al último punto, como cualquier otro combustible, el hidrógeno debe entrar en contacto con un elemento oxidante (como el\r\naire) para reaccionar y liberar su energía química almacenada. En los tanques de hidrógeno, a diferencia a los tanques de los demás\r\ncombustibles fósiles, no hay presencia de ningún agente oxidante. De esta forma, si por algún motivo se tiene una perforación del tanque, el\r\nhidrógeno escapa y esta liberación evita que entre oxígeno y que pueda producir una explosión en el tanque. Además, el hidrógeno es 14 veces\r\nmenos denso que el aire por lo que tiende a subir rápidamente en la atmósfera, provocando que la explosión ocurra por encima del camión y no\r\npor debajo, como ocurre con los combustibles fósiles cuando hay pérdidas.

\r\n `), new SubtitleEntryImpl('Capacitación de personal', `\r\n

El entrenamiento tanto de los conductores como de los técnicos siempre se recomienda cuando se adoptan nuevas tecnologías. El\r\nentrenamiento debería incluir conocimientos del combustible, de las condiciones de operación, de los sistemas de seguridad, del uso de las\r\nestaciones de servicio, entre otras.

\r\n `), new SubtitleEntryImpl('Cuándo considerar una flota de camiones a hidrógeno', `\r\n

Ambas tecnologías de camiones eléctricos (a batería y a hidrógeno) son complementarias. Mientras que los camiones con batería eléctrica\r\nson ideales para operaciones con 150-250 km diarios, con retorno al centro de distribución para recargar la batería, la tecnología de celda\r\nde combustible de hidrógeno presenta la ventaja de que tiene un tiempo de llenado de tanque muy bajo en comparación a las horas de recarga\r\nde batería y una autonomía mayor, que hace posibles operaciones con muchos km diarios y no necesariamente con retorno a la base. Además,\r\ncomo se mencionó en apartados anteriores, las celdas de hidrógeno permiten transportar mayores cargas.

\r\n

Los puntos a tener en cuenta para considerar el uso de camiones fueron resumidos en el reporte realizado en 2020 por NACFE:

\r\n
\"poster
\r\n `), new SubtitleEntryImpl('Referencias', `\r\n
    \r\n
  • CHBC, 2018. CHBC Hydrogen FAQ 1–16.
  • \r\n
  • NACFE, 2020. Making Sense of Heavy-Duty Hydrogen Fuel.
  • \r\n
\r\n `)]\r\n }\r\n ]\r\n ];\r\n\r\n faqEntrySet: FaqEntry[] = [\r\n {\r\n title: 'Preguntas Generales',\r\n questionSet: this.questionSets[0],\r\n styles: {\r\n backgroundColor: '#073763',\r\n opacity: 0.76\r\n },\r\n classes: {\r\n counterClass: 'set-1'\r\n }\r\n },\r\n {\r\n title: 'Preguntas referidas a camiones a batería',\r\n questionSet: this.questionSets[1],\r\n styles: {\r\n backgroundColor: '#A6C34E',\r\n opacity: 0.41\r\n },\r\n classes: {\r\n counterClass: 'set-2'\r\n }\r\n },\r\n {\r\n title: 'Preguntas referidas a camiones a hidrógeno',\r\n questionSet: this.questionSets[2],\r\n styles: {\r\n backgroundColor: '#2D8BBA',\r\n opacity: 0.48\r\n },\r\n classes: {\r\n counterClass: 'set-3'\r\n }\r\n }\r\n ];\r\n\r\n constructor(private router: Router, private elementRef: ElementRef) {\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.bindScrollToAnchorTag();\r\n }\r\n\r\n // convertContentToSafeHtml(): void {\r\n // this.questionSets.map(qustionEntries => qustionEntries.map(questionEntry => {\r\n //\r\n // const subtitles = questionEntry.subtitles.map(subtitleEntryImpl => {\r\n //\r\n // if (typeof subtitleEntryImpl.subtitle !== 'string') {\r\n // return subtitleEntryImpl;\r\n // }\r\n //\r\n // return {...subtitleEntryImpl, subtitle: this.sanitizer.bypassSecurityTrustHtml(subtitleEntryImpl.subtitle)};\r\n // });\r\n //\r\n // return {...questionEntry, subtitles};\r\n // }));\r\n // }\r\n\r\n toggleSubtitlesListVisibility(currentTarget: EventTarget | null): void {\r\n\r\n if (!currentTarget) {\r\n return;\r\n }\r\n\r\n const header = currentTarget as HTMLElement;\r\n const subList = header.parentElement?.querySelector('.subtitles-list');\r\n\r\n if (!subList) {\r\n return;\r\n }\r\n\r\n subList.classList.toggle('hide-element');\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event: MouseEvent): void {\r\n if (!(event.target instanceof HTMLAnchorElement)) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const target = event.target as HTMLAnchorElement;\r\n this.router.navigateByUrl(target.pathname);\r\n }\r\n\r\n private bindScrollToAnchorTag(): void {\r\n // console.log(this.elementRef.nativeElement.shadowRoot?.querySelector('.content-container'));\r\n // console.log(this.elementRef.nativeElement.shadowRoot.querySelector('[data-truck-models-anchor-tag]'));\r\n // console.log(this.elementRef.nativeElement.shadowRoot.querySelector('.title-container'));\r\n // const shadowRoot = this.elementRef.nativeElement.shadowRoot;\r\n //\r\n // if (!shadowRoot) {\r\n // return;\r\n // }\r\n //\r\n // const anchorTag = shadowRoot.querySelector('[data-truck-models-anchor-tag]') as HTMLElement;\r\n const anchorTag = this.elementRef.nativeElement.shadowRoot.querySelector('[data-truck-models-anchor-tag]') as HTMLElement;\r\n\r\n if (!anchorTag) {\r\n return;\r\n }\r\n\r\n anchorTag.addEventListener(\r\n 'click', () => {\r\n this.scrollToTruckModels();\r\n });\r\n }\r\n\r\n // getScrollingElement(): string {\r\n // return `Oferta de camiones en Uruguay`;\r\n // }\r\n\r\n scrollToTruckModels(): void {\r\n\r\n const target = this.elementRef.nativeElement.shadowRoot.querySelector('[data-truck-models-in-uruguay]') as HTMLElement;\r\n\r\n if (!target) {\r\n return;\r\n }\r\n\r\n target.parentElement?.parentElement?.parentElement?.classList.remove('hide-element');\r\n\r\n target.parentElement?.classList.add('show-text');\r\n target.parentElement?.classList.remove('hide-text');\r\n\r\n target.scrollIntoView({behavior: 'smooth', block: 'center'});\r\n }\r\n}\r\n","
\r\n
\r\n

12 preguntas que deberías hacerte si estás considerando comprar un camión eléctrico

\r\n

...y las respuestas a tus preguntas!

\r\n
\r\n\r\n
\r\n
\r\n

{{faqEntry.questionSet.length}}

\r\n

{{faqEntry.title}}

\r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n \r\n\r\n
\r\n

{{faqEntry.title}}

\r\n
    \r\n
  1. \r\n

    {{questionEntry.title}}

    \r\n
      \r\n
    • \r\n
      {{subtitleEntry.subtitle}}
      \r\n
      \r\n
    • \r\n
    \r\n
  2. \r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n","import {AfterViewInit, Component, Input} from '@angular/core';\r\nimport Tco from '../../models/tco';\r\nimport {Chart} from 'chart.js';\r\n\r\n@Component({\r\n selector: 'app-tco-results',\r\n templateUrl: './tco-results.component.html',\r\n styleUrls: ['./tco-results.component.scss']\r\n})\r\nexport class TcoResultsComponent implements AfterViewInit {\r\n\r\n @Input() tco?: Tco;\r\n @Input() chartId?: string;\r\n @Input() tcoTitle?: string;\r\n\r\n private chart: Chart | null = null;\r\n\r\n constructor() {\r\n }\r\n\r\n // ngOnInit(): void {\r\n // console.log('hello world');\r\n // // this.chart = this.generateTCOChart();\r\n // // this.chart?.render();\r\n // console.log('chart created');\r\n // }\r\n\r\n ngAfterViewInit(): void {\r\n this.generateTCOChart();\r\n }\r\n\r\n private generateTCOChart(): void {\r\n\r\n if (typeof this.tco === 'undefined' || typeof this.chartId === 'undefined') {\r\n return;\r\n }\r\n\r\n this.chart = new Chart(this.chartId, {\r\n type: 'doughnut',\r\n data: {\r\n labels: ['Precio', 'Combustible', 'Mantenimiento', 'Batería extra', 'Seguro', 'Patente', 'Infraestructura'],\r\n datasets: [\r\n {\r\n label: 'Test',\r\n data: [this.tco.vehiclePrice, this.tco.fuel, this.tco.maintenance, this.tco.batteryResidualValue,\r\n this.tco.insurance, this.tco.patent, this.tco.infrastructure],\r\n backgroundColor: [\r\n 'rgb(255, 0, 0)',\r\n 'rgb(0, 255, 0)',\r\n 'rgb(0, 0, 255)',\r\n 'rgb(255, 0, 255)',\r\n 'rgb(255, 255, 0)',\r\n 'rgb(0, 255, 255)',\r\n '#eee'\r\n ]\r\n }\r\n ]\r\n },\r\n options: {\r\n responsive: true\r\n }\r\n });\r\n\r\n }\r\n\r\n // Preserve original property order\r\n originalOrder = (a: any, b: any): number => {\r\n return 0;\r\n }\r\n\r\n}\r\n","
\r\n

{{tcoTitle}}

\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
CampoPrecio
{{item.key}}{{item.value}}
Total{{tco?.getTCO()}}
\r\n
\r\n
\r\n","export default class Tco {\r\n\r\n constructor(public vehiclePrice: number, public discounts: number, public fuel: number, public maintenance: number,\r\n public residualValue: number, public batteryResidualValue: number, public insurance: number, public patent: number,\r\n public infrastructure: number, public annualFuelCosts: number[], public annualMaintenanceCosts: number[],\r\n public annualInsuranceCosts: number[], public annualPatentCosts: number[]) {\r\n }\r\n\r\n getTCO(): number {\r\n return this.getTCOWithoutDiscounts() - this.getDiscountsAndResidualValue();\r\n }\r\n\r\n getTCOWithoutDiscounts(): number {\r\n return this.vehiclePrice + this.fuel + this.maintenance + this.insurance + this.patent + this.infrastructure;\r\n }\r\n\r\n getTCOWithResidualValues(): number {\r\n return this.getTCOWithoutDiscounts() - this.getResidualValue();\r\n }\r\n\r\n getTCOWithDiscounts(): number {\r\n return this.getTCOWithoutDiscounts() - this.discounts;\r\n }\r\n\r\n getDiscountsAndResidualValue(): number {\r\n return this.discounts + this.getResidualValue();\r\n }\r\n\r\n getResidualValue(): number {\r\n return this.residualValue + this.batteryResidualValue;\r\n }\r\n}\r\n","import {Component, OnChanges} from '@angular/core';\r\nimport {Router} from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss']\r\n})\r\nexport class AppComponent {\r\n title = 'camiones-tco';\r\n\r\n constructor(private _route: Router) {\r\n }\r\n\r\n\r\n get route(): Router {\r\n return this._route;\r\n }\r\n\r\n onActivate(): void {\r\n let backgroundColor = '#FFF';\r\n if (['/calculadora', '/calculadora-intro'].includes(this._route.url)) {\r\n backgroundColor = '#E9EDF5';\r\n }\r\n\r\n document.body.style.backgroundColor = backgroundColor;\r\n }\r\n\r\n}\r\n\r\n// export function Required(target: object, propertyKey: string): void {\r\n// const getter = () => {\r\n// throw new Error(`Attribute ${propertyKey} is required`);\r\n// };\r\n//\r\n// const setter = (value: any) => {\r\n// Object.defineProperty(target, propertyKey, {\r\n// value,\r\n// writable: true,\r\n// configurable: true,\r\n// });\r\n// };\r\n//\r\n// Object.defineProperty(target, propertyKey, {\r\n// get: getter,\r\n// set: setter,\r\n// });\r\n// }\r\n","\r\n\r\n\r\n
\r\n\r\n\r\n\r\n","import {Component, OnChanges, OnInit} from '@angular/core';\r\nimport {TruckFormService} from '../../services/truck-form/truck-form.service';\r\nimport Tco from '../../models/tco';\r\nimport {\r\n ArcElement,\r\n BarController,\r\n BarElement,\r\n BubbleController,\r\n CategoryScale,\r\n Chart,\r\n DoughnutController,\r\n Filler,\r\n Legend,\r\n LinearScale,\r\n LineController,\r\n LineElement,\r\n LogarithmicScale,\r\n PieController,\r\n PointElement,\r\n PolarAreaController,\r\n RadarController,\r\n RadialLinearScale,\r\n ScatterController,\r\n TimeScale,\r\n TimeSeriesScale,\r\n Title,\r\n Tooltip\r\n} from 'chart.js';\r\nimport {UpdateMode} from '@angular/compiler-cli/src/ngtsc/typecheck/api';\r\n\r\nChart.register(\r\n ArcElement,\r\n LineElement,\r\n BarElement,\r\n PointElement,\r\n BarController,\r\n BubbleController,\r\n DoughnutController,\r\n LineController,\r\n PieController,\r\n PolarAreaController,\r\n RadarController,\r\n ScatterController,\r\n CategoryScale,\r\n LinearScale,\r\n LogarithmicScale,\r\n RadialLinearScale,\r\n TimeScale,\r\n TimeSeriesScale,\r\n Filler,\r\n Legend,\r\n Title,\r\n Tooltip\r\n);\r\n\r\n@Component({\r\n selector: 'app-tco',\r\n templateUrl: './tco.component.html',\r\n styleUrls: ['./tco.component.scss']\r\n})\r\nexport class TcoComponent implements OnInit {\r\n\r\n private _showComponent = false;\r\n private _dieselTco: Tco;\r\n private _electricTco: Tco;\r\n private _hydrogenTco: Tco;\r\n private tcoChart: Chart | null;\r\n\r\n\r\n get showComponent(): boolean {\r\n return this._showComponent;\r\n }\r\n\r\n get dieselTco(): Tco {\r\n return this._dieselTco;\r\n }\r\n\r\n get electricTco(): Tco {\r\n return this._electricTco;\r\n }\r\n\r\n get hydrogenTco(): Tco {\r\n return this._hydrogenTco;\r\n }\r\n\r\n\r\n constructor(private truckFormService: TruckFormService) {\r\n const initialTco = new Tco(0, 0, 0, 0, 0, 0, 0, 0,\r\n 0, [], [], [], []);\r\n this._dieselTco = initialTco;\r\n this._electricTco = initialTco;\r\n this._hydrogenTco = initialTco;\r\n this.tcoChart = null;\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.truckFormService.dieselTcoSourceMessage.subscribe(tco => {\r\n this._showComponent = true;\r\n this._dieselTco = tco;\r\n });\r\n this.truckFormService.electricTcoSourceMessage.subscribe(tco => this._electricTco = tco);\r\n this.truckFormService.hydrogenTcoSourceMessage.subscribe(tco => {\r\n this._hydrogenTco = tco;\r\n this.updateChart();\r\n });\r\n\r\n const initialData = [2, 1, 3];\r\n\r\n this.tcoChart = new Chart('tco-chart', {\r\n type: 'bar',\r\n data: {\r\n labels: ['Camión Diesel', 'Camión Eléctrico', 'Camión Hidrógeno'],\r\n datasets: [\r\n {\r\n label: 'Precio Vehículo',\r\n data: initialData,\r\n backgroundColor: 'rgb(255, 0, 0)'\r\n },\r\n {\r\n label: 'Combustible',\r\n data: initialData,\r\n backgroundColor: 'rgb(54, 162, 235)'\r\n },\r\n {\r\n label: 'Mantenimiento',\r\n data: initialData,\r\n backgroundColor: 'rgb(0, 255, 0)'\r\n },\r\n {\r\n label: 'Seguro',\r\n data: initialData,\r\n backgroundColor: 'rgb(255,255,0)'\r\n },\r\n {\r\n label: 'Patente',\r\n data: initialData,\r\n backgroundColor: '#add8e6'\r\n },\r\n {\r\n label: 'Estación de Carga',\r\n data: initialData,\r\n backgroundColor: 'rgb(128,128,128)'\r\n }\r\n ]\r\n },\r\n options: {\r\n indexAxis: 'y',\r\n plugins: {\r\n title: {\r\n display: true,\r\n text: 'Comparativa TCO'\r\n }\r\n },\r\n responsive: true,\r\n scales: {\r\n x: {\r\n stacked: true\r\n },\r\n y: {\r\n beginAtZero: true,\r\n stacked: true\r\n }\r\n }\r\n },\r\n });\r\n }\r\n\r\n updateChart(): void {\r\n if (this.tcoChart == null) {\r\n return;\r\n }\r\n this.tcoChart.data.datasets[0].data = [this._dieselTco.vehiclePrice, this._electricTco.vehiclePrice, this._hydrogenTco.vehiclePrice];\r\n this.tcoChart.data.datasets[1].data = [this._dieselTco.fuel, this._electricTco.fuel, this._hydrogenTco.fuel];\r\n this.tcoChart.data.datasets[2].data = [this._dieselTco.maintenance, this._electricTco.maintenance, this._hydrogenTco.maintenance];\r\n this.tcoChart.data.datasets[3].data = [this._dieselTco.insurance, this._electricTco.insurance, this._hydrogenTco.insurance];\r\n this.tcoChart.data.datasets[4].data = [this._dieselTco.patent, this._electricTco.patent, this._hydrogenTco.patent];\r\n this.tcoChart.data.datasets[5].data = [this._dieselTco.infrastructure, this._electricTco.infrastructure,\r\n this._hydrogenTco.infrastructure];\r\n this.tcoChart.update();\r\n }\r\n}\r\n","\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n
    \r\n
  • \r\n

    TCO Diesel

    \r\n

    {{this.dieselTco.getTCO()}}

    \r\n
  • \r\n
  • \r\n

    TCO Eléctrico

    \r\n

    {{this.electricTco.getTCO()}}

    \r\n
  • \r\n
  • \r\n

    TCO Hidrógeno

    \r\n

    {{this.hydrogenTco.getTCO()}}

    \r\n
  • \r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {FormBuilder, FormGroup, Validators} from '@angular/forms';\r\nimport {TruckFormService} from '../../services/truck-form/truck-form.service';\r\nimport {FormValidationService} from '../../services/form-validation/form-validation.service';\r\nimport {Router} from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-assumptions',\r\n templateUrl: './assumptions.component.html',\r\n styleUrls: ['./assumptions.component.scss']\r\n})\r\nexport class AssumptionsComponent implements OnInit {\r\n\r\n assumptionsForm: FormGroup;\r\n\r\n constructor(private formBuilder: FormBuilder, private truckFormService: TruckFormService,\r\n private formValidationService: FormValidationService, private router: Router) {\r\n this.assumptionsForm = this.loadAssumptionsForm();\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n loadAssumptionsForm(): FormGroup {\r\n return this.truckFormService.assumptionsForm === null ?\r\n this.assumptionsForm = this.formBuilder.group({\r\n inflation: [9, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n discountRate: [8, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n hUpgradeRate: [1, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n dLifespan: [15, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n eLifespan: [15, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n hLifespan: [12, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n investment: [true],\r\n majorInvestment: [{value: 123000, disabled: true}, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n hInfrastructureCost: [2.62, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]]\r\n }) : this.assumptionsForm = this.truckFormService.assumptionsForm;\r\n }\r\n\r\n submitForm(): void {\r\n this.truckFormService.saveAssumptionsForm(this.assumptionsForm);\r\n this.truckFormService.calculateTCO();\r\n this.router.navigateByUrl('/resultados');\r\n }\r\n\r\n getErrorMessage(fieldName: string): string {\r\n return this.formValidationService.getErrorMessage(this.assumptionsForm, fieldName);\r\n }\r\n\r\n changeInvestment(): void {\r\n if (!this.assumptionsForm.get('investment')?.value) {\r\n this.assumptionsForm.get('majorInvestment')?.enable();\r\n return;\r\n }\r\n\r\n this.assumptionsForm.get('majorInvestment')?.disable();\r\n // if (!this.assumptionsForm.get('investment')?.value) {\r\n //\r\n // return;\r\n // }\r\n //\r\n // this.assumptionsForm.removeControl('majorInvestment');\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n

Ajustar los supuestos

\r\n\r\n \r\n

Inflación

\r\n
\r\n \r\n \r\n %\r\n \r\n {{getErrorMessage('inflation')}}\r\n \r\n \r\n
\r\n \r\n\r\n \r\n
\r\n

Tasa descuento

\r\n

Coste de capital que determina el valor actual de un pago futuro

\r\n
\r\n \r\n \r\n %\r\n \r\n {{getErrorMessage('discountRate')}}\r\n \r\n \r\n\r\n \r\n
\r\n

Tasa de mejora hidrógeno

\r\n

Porcentaje de mejora anual en la tecnología que impacta en los costos

\r\n
\r\n \r\n \r\n %\r\n \r\n {{getErrorMessage('hUpgradeRate')}}\r\n \r\n \r\n\r\n \r\n

Vidas útiles de los camiones

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Diesel

\r\n \r\n \r\n años\r\n \r\n {{getErrorMessage('dLifespan')}}\r\n \r\n \r\n

Eléctrico

\r\n \r\n \r\n años\r\n \r\n {{getErrorMessage('eLifespan')}}\r\n \r\n \r\n

Hidrógeno

\r\n \r\n \r\n años\r\n \r\n {{getErrorMessage('hLifespan')}}\r\n \r\n \r\n\r\n \r\n

Descuento COMAP

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n

Inversión mayor

\r\n \r\n \r\n USD\r\n \r\n {{getErrorMessage('majorInvestment')}}\r\n \r\n \r\n\r\n\r\n \r\n

Costo infraestructura hidrógeno

\r\n \r\n \r\n USD/kg\r\n \r\n {{getErrorMessage('hInfrastructureCost')}}\r\n \r\n \r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n","import {UteTariffInterface} from './uteTariffInterface';\r\nimport {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UteTariff implements UteTariffInterface{\r\n rs = [9.357, 0, 0];\r\n gs = [6.897, 0, 0];\r\n mc1 = [2.15, 4.732, 10.765];\r\n mc2 = [2.057, 4.281, 7.565];\r\n mc3 = [2.045, 4.27, 6.745];\r\n gc1 = [2.078, 3.753, 11.29];\r\n gc2 = [2.048, 3.537, 8.122];\r\n\r\n private static getIndex(chargingSchedule: string): number {\r\n return chargingSchedule === 'valley' ? 0 : chargingSchedule === 'flat' ? 1 : 2;\r\n }\r\n\r\n\r\n getEnergyCost(uteTariff: string, chargingSchedule: string): number {\r\n return this[uteTariff as keyof UteTariffInterface][UteTariff.getIndex(chargingSchedule)];\r\n }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {BrowserModule} from '@angular/platform-browser';\r\nimport {AppRoutingModule} from './app-routing.module';\r\n\r\nimport {AppComponent} from './app.component';\r\nimport {CalculatorComponent} from './components/calculator/calculator.component';\r\nimport {BrowserAnimationsModule} from '@angular/platform-browser/animations';\r\nimport {MatFormFieldModule} from '@angular/material/form-field';\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport {MatSelectModule} from '@angular/material/select';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatCheckboxModule} from '@angular/material/checkbox';\r\nimport {TcoComponent} from './components/tco/tco.component';\r\nimport {HeaderComponent} from './components/header/header.component';\r\nimport {MatToolbarModule} from '@angular/material/toolbar';\r\nimport { FooterComponent } from './components/footer/footer.component';\r\nimport { HomeComponent } from './components/home/home.component';\r\nimport { AssumptionsComponent } from './components/assumptions/assumptions.component';\r\nimport { ProgressBarComponent } from './components/progress-bar/progress-bar.component';\r\nimport { ResultsComponent } from './components/results/results.component';\r\nimport { TcoResultsComponent } from './components/tco-results/tco-results.component';\r\nimport {MatTabsModule} from '@angular/material/tabs';\r\nimport { TruckSelectComponent } from './components/truck-select/truck-select.component';\r\nimport { FaqComponent } from './components/faq/faq.component';\r\nimport { HomeContentBoxComponent } from './components/home-content-box/home-content-box.component';\r\nimport { AboutComponent } from './components/about/about.component';\r\nimport { CalculatorIntroComponent } from './components/calculator-intro/calculator-intro.component';\r\nimport { CalcIntroContentBoxComponent } from './components/calc-intro-content-box/calc-intro-content-box.component';\r\nimport { FaqEntryComponent } from './components/faq-entry/faq-entry.component';\r\nimport { CalculatorProcessComponent } from './components/calculator-process/calculator-process.component';\r\nimport { TruckInputComponent } from './components/truck-input/truck-input.component';\r\nimport {PdfMakeWrapper} from 'pdfmake-wrapper';\r\nimport * as pdfFonts from 'pdfmake/build/vfs_fonts';\r\nimport { TruckSelection } from './pipes/truck-selection.pipe';\nimport { TcoValuesPipe } from './pipes/tco-values.pipe';\nimport { ToFixedPipe } from './pipes/to-fixed.pipe';\nimport { ContactComponent } from './components/contact/contact.component';\nimport { SanitizeHtmlPipe } from './pipes/sanitize-html.pipe';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n CalculatorComponent,\r\n TcoComponent,\r\n HeaderComponent,\r\n FooterComponent,\r\n HomeComponent,\r\n AssumptionsComponent,\r\n ProgressBarComponent,\r\n ResultsComponent,\r\n TcoResultsComponent,\r\n TruckSelectComponent,\r\n FaqComponent,\r\n HomeContentBoxComponent,\r\n AboutComponent,\r\n CalculatorIntroComponent,\r\n CalcIntroContentBoxComponent,\r\n FaqEntryComponent,\r\n CalculatorProcessComponent,\r\n TruckInputComponent,\r\n TruckSelection,\r\n TcoValuesPipe,\r\n ToFixedPipe,\r\n ContactComponent,\r\n SanitizeHtmlPipe\r\n ],\r\n imports: [\r\n BrowserModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n BrowserAnimationsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatToolbarModule,\r\n AppRoutingModule,\r\n MatTabsModule\r\n ],\r\n providers: [],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule {\r\n}\r\n\r\nPdfMakeWrapper.setFonts(pdfFonts);\r\n","import {Component, Input, OnInit} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-calculator-process',\r\n templateUrl: './calculator-process.component.html',\r\n styleUrls: ['./calculator-process.component.scss']\r\n})\r\nexport class CalculatorProcessComponent implements OnInit{\r\n\r\n @Input() imgUrl ?: string;\r\n @Input() imgAlt ?: string;\r\n @Input() title ?: string;\r\n @Input() isActive = false;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.imgAlt = this.imgAlt ?? this.title;\r\n }\r\n}\r\n","
\r\n \r\n

{{title}}

\r\n
\r\n\r\n","export class CollaboratorCard {\r\n profileImg: string;\r\n name: string;\r\n brandName: string;\r\n brandImg: string;\r\n\r\n\r\n constructor(profileImg: string, name: string, brandName: string, brandImg: string) {\r\n this.profileImg = profileImg;\r\n this.name = name;\r\n this.brandName = brandName;\r\n this.brandImg = brandImg;\r\n }\r\n}\r\n","class MappingValue {\r\n constructor(public label: string, public unit: string = '',\r\n public mapValue: (val: T) => any = (val) => typeof val === 'number' ? +val.toFixed(2) : val,\r\n public getUnit: (val: T) => string = () => unit) {\r\n }\r\n}\r\n\r\nexport class UnitlessMappingValue extends MappingValue {\r\n constructor(public label: string, public mapValue: (val: T) => any = (val) => typeof val === 'number' ? +val.toFixed(2) : val) {\r\n super(label, '', mapValue);\r\n }\r\n}\r\n\r\nconst percentageMapping = (val: number): number => 100 * val;\r\nconst negativeMapping = (val: number): number => -val.toFixed(2);\r\n\r\ntype FormMapper = Record>;\r\ntype TcoMapper = Record;\r\n\r\nconst formMappings: { [key: string]: string } = {\r\n dieselForm: 'Camión diésel',\r\n electricForm: 'Camión eléctrico',\r\n hydrogenForm: 'Camión a hidrógeno',\r\n assumptionsForm: 'Supuestos'\r\n};\r\n\r\n\r\nconst dieselFormMapping: FormMapper = {\r\n grossWeight: new MappingValue('Peso bruto', 'ton'),\r\n tare: new MappingValue('tara', 'ton'),\r\n vehicleChange: new MappingValue('Cambio de flota', 'años'),\r\n dailyDistance: new MappingValue('Kilómetros diarios', 'km/día'),\r\n performance: new MappingValue('Rendimiento', 'km/lt'),\r\n averageSpeed: new MappingValue('Velocidad media', 'km/h'),\r\n transport: new MappingValue('Transporte'),\r\n operatingDays: new MappingValue('Días operativos', 'días'),\r\n gasCost: new MappingValue('Costo gasoil', '$/lt'),\r\n maintenanceCost: new MappingValue('Costo mantenimiento', 'USD/año'),\r\n insuranceCost: new MappingValue('Costo seguro', '$/año'),\r\n truckPrice: new MappingValue('Precio camión', 'USD'),\r\n};\r\n\r\nconst electricFormMapping: FormMapper = {\r\n eGrossWeight: new MappingValue('Peso bruto', 'ton'),\r\n eTare: new MappingValue('Tara', 'ton'),\r\n battery: new MappingValue('Batería', 'kWh'),\r\n uteFare: new MappingValue('Tarifa UTE'),\r\n consumedPower: new MappingValue('Potencia contratada', 'kW'),\r\n chargingSchedule: new MappingValue('Horario carga'),\r\n chargingTime: new MappingValue('Horas de carga necesarias', 'horas'),\r\n eInsuranceCost: new MappingValue('Costo seguro', '$/año'),\r\n eTruckPrice: new MappingValue('Precio camión', 'USD'),\r\n discounts: new MappingValue('Descuento COMAP', 'USD', val => val === 0 ? 'No participa' : +val.toFixed(2), val => val === 0 ? '' : 'USD'),\r\n};\r\n\r\nconst hydrogenFormMapping: FormMapper = {\r\n hGrossWeight: new MappingValue('Peso bruto', 'ton'),\r\n hTare: new MappingValue('Tara', 'ton'),\r\n tankSize: new MappingValue('Tamaño tanque', 'kg'),\r\n cellPower: new MappingValue('Potencia de celda', 'kW'),\r\n hydrogenCost: new MappingValue('Costo hidrógeno', 'USD/kg'),\r\n hInsuranceCost: new MappingValue('Costo seguro', '$/año'),\r\n hTruckPrice: new MappingValue('Precio camión', 'USD'),\r\n pesoDollarConv: new MappingValue('Dólar estadounidense', '$/USD'),\r\n discounts: new MappingValue('Descuento COMAP', 'USD', val => val === 0 ? 'No participa' : +val.toFixed(2), val => val === 0 ? '' : 'USD'),\r\n};\r\n\r\nconst assumptionsMapping: FormMapper = {\r\n inflation: new MappingValue('Inflación', '%', percentageMapping),\r\n discountRate: new MappingValue('Tasa de descuento', '%', percentageMapping),\r\n gasoil: new MappingValue('Gasoil S50', '%', percentageMapping),\r\n electricity: new MappingValue('Electricidad', '%', percentageMapping),\r\n hUpgradeRate: new MappingValue('Tasa de mejora del hidrógeno', '%', percentageMapping),\r\n dLifespan: new MappingValue('Vida útil diésel', 'años'),\r\n eLifespan: new MappingValue('Vida útil eléctrico', 'años'),\r\n batteryTimeWarranty: new MappingValue('Garantía batería', 'años'),\r\n batteryDistanceWarranty: new MappingValue('Garantía batería', 'km'),\r\n batteryNumberOfCycles: new MappingValue('Ciclos totales de batería'),\r\n chargingStationCostPerKW: new MappingValue('Puesto de carga costo kW', 'USD'),\r\n hLifespan: new MappingValue('Vida útil hidrógeno', 'años'),\r\n hInfrastructureCost: new MappingValue('Costo infraestructura de hidrógeno', 'USD/kg'),\r\n};\r\n\r\nconst tcoMapping: TcoMapper = {\r\n vehiclePrice: new UnitlessMappingValue('Precio'),\r\n discounts: new UnitlessMappingValue('Descuentos', negativeMapping),\r\n fuel: new UnitlessMappingValue('Combustible'),\r\n maintenance: new UnitlessMappingValue('Mantenimiento'),\r\n residualValue: new UnitlessMappingValue('Valor residual', negativeMapping),\r\n batteryResidualValue: new UnitlessMappingValue('Valor residual batería', negativeMapping),\r\n insurance: new UnitlessMappingValue('Seguro'),\r\n patent: new UnitlessMappingValue('Patente'),\r\n infrastructure: new UnitlessMappingValue('Infraestructura'),\r\n};\r\n\r\nconst getFormMapping = (formName: string): FormMapper => {\r\n if (formName.includes('diesel')) {\r\n return dieselFormMapping;\r\n }\r\n\r\n if (formName.includes('electric')) {\r\n return electricFormMapping;\r\n }\r\n\r\n if (formName.includes('hydrogen')) {\r\n return hydrogenFormMapping;\r\n }\r\n\r\n return assumptionsMapping;\r\n};\r\n\r\nexport const getValue = (formName: string,\r\n formKey: string): MappingValue => getFormMapping(formName)[formKey] ?? new MappingValue(formKey);\r\nexport const getFormTitle = (formName: string): string => formMappings[formName];\r\n\r\nexport const getTcoKeyMapping = (key: string): UnitlessMappingValue => tcoMapping[key] ?? new UnitlessMappingValue(key);\r\n","import {Injectable} from '@angular/core';\r\nimport {FormGroup} from '@angular/forms';\r\nimport {PerformanceMatrix} from '../../models/performanceMatrix';\r\nimport {TaxesMatrix} from '../../models/taxesMatrix';\r\nimport {TruckDataMatrix} from '../../models/truckDataMatrix';\r\nimport {UteTariff} from '../../models/uteTariff';\r\nimport Tco from '../../models/tco';\r\nimport {Observable, Subject} from 'rxjs';\r\nimport {Router} from '@angular/router';\r\nimport FormsWrapper from '../../models/formsWrapper';\r\nimport TcoList from '../../models/tcoList';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TruckFormService {\r\n\r\n // FormGroup variables\r\n truckFormGroup: FormGroup = new FormGroup({});\r\n dieselForm: FormGroup | null = null;\r\n electricForm: FormGroup | null = null;\r\n hydrogenForm: FormGroup | null = null;\r\n assumptionsForm: FormGroup | null = null;\r\n\r\n formsWrapper: FormsWrapper = {\r\n dieselForm: null,\r\n electricForm: null,\r\n hydrogenForm: null,\r\n assumptionsForm: null\r\n };\r\n\r\n // Form selection booleans\r\n dieselFormSelected = false;\r\n electricFormSelected = false;\r\n hydrogenFormSelected = false;\r\n\r\n // TCO variables\r\n dieselTCO: Tco | null = null;\r\n electricTCO: Tco | null = null;\r\n hydrogenTCO: Tco | null = null;\r\n\r\n constructor(private uteTariff: UteTariff) {\r\n }\r\n\r\n // Diesel theoretical performance\r\n private performanceMatrix: PerformanceMatrix = {\r\n payload: [25, 5.5, 2.5, 0],\r\n urban: [50.8362921918007, 26.0952441462196, 17.6, 0],\r\n regional: [41.3168079096045, 22.3045, 15.9, 0],\r\n longDistance: [37.1851271186441, 20.5943213636364, 14.9, 0]\r\n };\r\n\r\n // Hydrogen theoretical performance\r\n private hPerformanceMatrix: PerformanceMatrix = {\r\n payload: [20, 10, 0],\r\n urban: [5, 2.53, 0],\r\n regional: [5, 2.53, 0],\r\n longDistance: [4.1, 1.95, 0]\r\n };\r\n\r\n // Average speed in km/h\r\n private averageSpeedMatrix: TruckDataMatrix = {\r\n urban: 20,\r\n regional: 40,\r\n longDistance: 80\r\n };\r\n\r\n private maintenanceCostMatrix: TruckDataMatrix = {\r\n urban: 0.00115,\r\n regional: 0.00172,\r\n longDistance: 0.0025\r\n };\r\n\r\n // pos0 -> diesel, pos1 -> electric, pos2 -> hydrogen\r\n private taxesMatrix: TaxesMatrix = {\r\n tga: [0.15, 0, 0],\r\n consularFee: [0.05, 0.05, 0.05]\r\n };\r\n\r\n // Cell power in kW\r\n private cellPowerMatrix: TruckDataMatrix = {\r\n urban: 30,\r\n regional: 100,\r\n longDistance: 230\r\n };\r\n\r\n private ratioDiscountMatrix = [[0.5, 0.25], [0.3778, 0.3]];\r\n\r\n private dieselTcoSource = new Subject();\r\n private _dieselTcoSourceMessage = this.dieselTcoSource.asObservable();\r\n\r\n private electricTcoSource = new Subject();\r\n private _electricTcoSourceMessage = this.electricTcoSource.asObservable();\r\n\r\n private hydrogenTcoSource = new Subject();\r\n private _hydrogenTcoSourceMessage = this.hydrogenTcoSource.asObservable();\r\n\r\n static getNumberValue(truckForm: FormGroup | null, key: string): number {\r\n return truckForm ? parseFloat(truckForm.get(key)?.value) : -1;\r\n }\r\n\r\n\r\n get dieselTcoSourceMessage(): Observable {\r\n return this._dieselTcoSourceMessage;\r\n }\r\n\r\n get electricTcoSourceMessage(): Observable {\r\n return this._electricTcoSourceMessage;\r\n }\r\n\r\n get hydrogenTcoSourceMessage(): Observable {\r\n return this._hydrogenTcoSourceMessage;\r\n }\r\n\r\n saveDieselForm(truckFormGroup: FormGroup): void {\r\n this.dieselForm = truckFormGroup;\r\n }\r\n\r\n saveElectricForm(truckFormGroup: FormGroup): void {\r\n this.electricForm = truckFormGroup;\r\n }\r\n\r\n saveHydrogenForm(truckFormGroup: FormGroup): void {\r\n this.hydrogenForm = truckFormGroup;\r\n }\r\n\r\n setFormBooleans(dieselFormBoolean: boolean, electricFormBoolean: boolean, hydrogenFormBoolean: boolean): void {\r\n this.dieselFormSelected = dieselFormBoolean;\r\n this.electricFormSelected = electricFormBoolean;\r\n this.hydrogenFormSelected = hydrogenFormBoolean;\r\n }\r\n\r\n saveAssumptionsForm(assumptionsForm: FormGroup): void {\r\n this.assumptionsForm = assumptionsForm;\r\n }\r\n\r\n loadTcos(): TcoList {\r\n return {dieselTCO: this.dieselTCO, electricTCO: this.electricTCO, hydrogenTCO: this.hydrogenTCO};\r\n }\r\n\r\n calculateTCO(): void {\r\n const truckForm = this.toTruckForm();\r\n\r\n if (!truckForm || !truckForm.dieselForm) {\r\n return;\r\n }\r\n\r\n this.formsWrapper = truckForm;\r\n\r\n const dieselTCO = this.calculateDieselTCO(truckForm);\r\n this.dieselTCO = dieselTCO;\r\n\r\n\r\n if (this.electricFormSelected && truckForm.electricForm) {\r\n const electricTCO = this.calculateElectricTCO(truckForm, this.dieselTCO.annualMaintenanceCosts, this.dieselTCO.maintenance);\r\n this.electricTCO = electricTCO;\r\n }\r\n\r\n if (this.hydrogenFormSelected && truckForm.hydrogenForm) {\r\n const hydrogenTCO = this.calculateHydrogenTCO(truckForm, this.dieselTCO.annualMaintenanceCosts, this.dieselTCO.maintenance);\r\n this.hydrogenTCO = hydrogenTCO;\r\n }\r\n }\r\n\r\n private toTruckForm(): FormsWrapper | null {\r\n\r\n if (!this.assumptionsForm || !this.dieselForm) {\r\n return null;\r\n }\r\n\r\n const formsWrapper: FormsWrapper = {\r\n dieselForm: null,\r\n electricForm: null,\r\n hydrogenForm: null,\r\n assumptionsForm: null\r\n };\r\n\r\n const averageSpeed = this.getFormValue(this.dieselForm, 'averageSpeed');\r\n const performance = this.getFormValue(this.dieselForm, 'performance');\r\n if (this.dieselFormSelected) {\r\n const maintenanceCost = this.getFormValue(this.dieselForm, 'maintenanceCost');\r\n const insuranceCost = this.getFormValue(this.dieselForm, 'insuranceCost',\r\n [this.dieselForm.get('truckPrice')?.value, 0.017]);\r\n formsWrapper.dieselForm = {...this.dieselForm.value, performance, averageSpeed, maintenanceCost, insuranceCost};\r\n }\r\n\r\n if (this.electricFormSelected && this.electricForm) {\r\n const battery = this.getFormValue(this.electricForm, 'battery', [averageSpeed ?? 'regional', performance ?? 4.5]);\r\n const eTruckPrice = this.getFormValue(this.electricForm, 'eTruckPrice', [battery]);\r\n const eInsuranceCost = this.getFormValue(this.electricForm, 'eInsuranceCost', [eTruckPrice, 0.01]);\r\n // Electric truck COMAP discount\r\n let discounts = 0;\r\n if (this.electricForm.get('comapDiscountSwitch')?.value) {\r\n const cif = this.getCIF(this.dieselForm.get('truckPrice')?.value ?? 90000, battery);\r\n const originalValue = this.electricForm?.get('eTruckPrice')?.value ?? cif;\r\n discounts = this.getCOMAPDiscount(originalValue);\r\n }\r\n formsWrapper.electricForm = {...this.electricForm.value, battery, eInsuranceCost, eTruckPrice, discounts};\r\n }\r\n\r\n if (this.hydrogenFormSelected && this.hydrogenForm) {\r\n const tankSize = this.getFormValue(this.hydrogenForm, 'tankSize');\r\n const cellPower = this.getFormValue(this.hydrogenForm, 'cellPower');\r\n const hTruckPrice = this.getFormValue(this.hydrogenForm, 'hTruckPrice', [tankSize, cellPower]);\r\n const hInsuranceCost = this.getFormValue(this.hydrogenForm, 'hInsuranceCost', [hTruckPrice, 0.012]);\r\n let discounts = 0;\r\n // Hydrogen Truck COMAP discount\r\n if (this.hydrogenForm?.get('hComapDiscountSwitch')?.value) {\r\n discounts = this.getCOMAPDiscount(hTruckPrice);\r\n }\r\n formsWrapper.hydrogenForm = {...this.hydrogenForm.value, tankSize, cellPower, hInsuranceCost, hTruckPrice, discounts};\r\n }\r\n\r\n formsWrapper.assumptionsForm = {...this.assumptionsForm.value};\r\n Object.keys(formsWrapper.assumptionsForm).forEach(key => {\r\n if (['inflation', 'discountRate', 'hUpgradeRate', 'gasoil', 'electricity'].includes(key)) {\r\n formsWrapper.assumptionsForm[key] *= 0.01;\r\n }\r\n });\r\n\r\n return formsWrapper;\r\n\r\n // return {\r\n // // Truck\r\n // grossWeight: TruckFormService.getNumberValue(this.dieselForm, 'grossWeight'),\r\n // tare: TruckFormService.getNumberValue(this.dieselForm, 'tare'),\r\n // vehicleChange: TruckFormService.getNumberValue(this.dieselForm, 'vehicleChange'),\r\n // // Trajectory\r\n // distanceTraveled: TruckFormService.getNumberValue(this.dieselForm, 'distanceTraveled'),\r\n // performance,\r\n // averageSpeed,\r\n // transport: this.dieselForm.get('transport')?.value,\r\n // operatingDays: TruckFormService.getNumberValue(this.dieselForm, 'operatingDays'),\r\n // // Gas Cost\r\n // gasCost: TruckFormService.getNumberValue(this.dieselForm, 'gasCost'),\r\n // maintenanceCost: maintenanceCostVal,\r\n // insuranceCost: insuranceCostVal,\r\n // // truckPrice: TruckFormService.getNumberValue(this.truckFormGroup, 'truckPrice'),\r\n // truckPrice: this.dieselForm?.get('truckPrice')?.value,\r\n // lifespan: TruckFormService.getNumberValue(this.assumptionsForm, 'dLifespan'),\r\n // // Truck\r\n // eGrossWeight: TruckFormService.getNumberValue(this.electricForm, 'eGrossWeight'),\r\n // eTare: TruckFormService.getNumberValue(this.electricForm, 'eTare'),\r\n // battery: batteryVal,\r\n // // Electricity\r\n // uteFare: this.truckFormGroup.get('uteFare')?.value,\r\n // hiredPower: TruckFormService.getNumberValue(this.electricForm, 'hiredPower'),\r\n // chargingSchedule: this.electricForm?.get('chargingSchedule')?.value,\r\n // chargingTime: TruckFormService.getNumberValue(this.electricForm, 'chargingTime'),\r\n // // Economy\r\n // eInsuranceCost: eInsuranceCostVal,\r\n // eTruckPrice: eTruckPriceVal,\r\n // eLifespan: TruckFormService.getNumberValue(this.assumptionsForm, 'eLifespan'),\r\n // // Truck\r\n // hGrossWeight: TruckFormService.getNumberValue(this.hydrogenForm, 'hGrossWeight'),\r\n // hTare: TruckFormService.getNumberValue(this.hydrogenForm, 'hTare'),\r\n // tankSize: tankSizeVal,\r\n // cellPower: cellPowerVal,\r\n // // Economy\r\n // hydrogenCost: TruckFormService.getNumberValue(this.hydrogenForm, 'hydrogenCost'),\r\n // hInsuranceCost: hInsuranceCostVal,\r\n // hTruckPrice: hTruckPriceVal,\r\n // hLifespan: TruckFormService.getNumberValue(this.assumptionsForm, 'hLifespan'),\r\n // hInfrastructureCost: TruckFormService.getNumberValue(this.assumptionsForm, 'hInfrastructureCost'),\r\n // hUpgradeRate: 0.01 * TruckFormService.getNumberValue(this.assumptionsForm, 'hUpgradeRate'),\r\n // // Additional Data\r\n // pesoDollarConv: TruckFormService.getNumberValue(this.hydrogenForm, 'pesoDollarConv'),\r\n // inflation: 0.01 * this.assumptionsForm.get('inflation')?.value,\r\n // discountRate: 0.01 * this.assumptionsForm.get('discountRate')?.value\r\n // };\r\n }\r\n\r\n private getFormValue(truckFormGroup: FormGroup | null, key: string, necessaryValues?: number[]): number {\r\n return truckFormGroup ? (truckFormGroup.get(key)?.value ?\r\n truckFormGroup.get(key)?.value : this.getDefaultValue(key, necessaryValues)) : -1;\r\n }\r\n\r\n private getDefaultValue(key: string, necessaryValues?: number[]): number {\r\n if (!this.dieselForm) {\r\n return -1;\r\n }\r\n\r\n if (key === 'performance') {\r\n return 100 / this.calculatePerformance(\r\n this.dieselForm.get('grossWeight')?.value,\r\n this.dieselForm.get('tare')?.value,\r\n this.dieselForm.get('transport')?.value,\r\n this.performanceMatrix);\r\n }\r\n\r\n if (key === 'averageSpeed') {\r\n return this.calculateAverageSpeed(this.dieselForm.get('transport')?.value);\r\n }\r\n\r\n if (key === 'maintenanceCost') {\r\n return this.calculateMaintenanceCost(\r\n this.dieselForm.get('transport')?.value,\r\n this.dieselForm.get('dailyDistance')?.value,\r\n this.dieselForm.get('operatingDays')?.value,\r\n this.dieselForm.get('truckPrice')?.value\r\n );\r\n }\r\n\r\n if (key === 'insuranceCost' || key === 'eInsuranceCost' || key === 'hInsuranceCost') {\r\n return this.calculateInsuranceCost(\r\n necessaryValues ? necessaryValues[0] : 0,\r\n necessaryValues ? necessaryValues[1] : 0,\r\n this.assumptionsForm?.get('pesoDollarConv')?.value ?? 44);\r\n }\r\n\r\n if (key === 'battery') {\r\n return this.calculateBattery(\r\n this.dieselForm.get('dailyDistance')?.value,\r\n necessaryValues ? necessaryValues[0] : 0,\r\n necessaryValues ? necessaryValues[1] : 0\r\n );\r\n }\r\n\r\n if (key === 'eTruckPrice') {\r\n return this.calculateETruckPrice(\r\n this.dieselForm.get('truckPrice')?.value,\r\n necessaryValues ? necessaryValues[0] : 0\r\n );\r\n }\r\n\r\n if (key === 'tankSize') {\r\n return this.calculateHPerformance(\r\n this.hydrogenForm?.get('hGrossWeight')?.value,\r\n this.hydrogenForm?.get('hTare')?.value,\r\n this.dieselForm.get('transport')?.value,\r\n this.dieselForm.get('dailyDistance')?.value\r\n );\r\n }\r\n\r\n if (key === 'cellPower') {\r\n return this.calculateCellPower(this.dieselForm.get('transport')?.value);\r\n }\r\n\r\n if (key === 'hTruckPrice') {\r\n return this.calculateHTruckPrice(\r\n this.dieselForm.get('truckPrice')?.value,\r\n necessaryValues ? necessaryValues[0] : 0,\r\n necessaryValues ? necessaryValues[1] : 0\r\n );\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n // COMAP discount related methods\r\n private getCOMAPDiscount(originalValue: number): number {\r\n const alpha = this.getAlpha(1);\r\n const discount = this.getDiscount(1, alpha);\r\n\r\n return originalValue * discount;\r\n }\r\n\r\n private getInvestment(investment: boolean, majorInvestment: number, originalValue: number): number {\r\n return investment ? originalValue : majorInvestment;\r\n }\r\n\r\n private getAlpha(ratio: number): number {\r\n if (ratio > this.ratioDiscountMatrix[0][0]) {\r\n return 0;\r\n }\r\n\r\n if (ratio < this.ratioDiscountMatrix[0][1]) {\r\n return 1;\r\n }\r\n\r\n return (this.ratioDiscountMatrix[0][0] - ratio) / (this.ratioDiscountMatrix[0][0] - this.ratioDiscountMatrix[0][1]);\r\n }\r\n\r\n private getDiscount(ratio: number, alpha: number): number {\r\n return ratio < this.ratioDiscountMatrix[0][1] ?\r\n 0 : alpha * this.ratioDiscountMatrix[1][1] + (1 - alpha) * this.ratioDiscountMatrix[1][0];\r\n }\r\n\r\n private calculatePerformance(grossWeight: number, tare: number, transport: string, performanceMatrix: PerformanceMatrix): number {\r\n\r\n const payLoad = grossWeight - tare;\r\n\r\n let index = performanceMatrix.payload.length - 2;\r\n\r\n for (let i = 0; i < performanceMatrix.payload.length - 2; i++) {\r\n if (payLoad < performanceMatrix.payload[i] && payLoad > performanceMatrix.payload[i + 1]) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n // const index = payLoad < performanceMatrix.payload[0] && payLoad > performanceMatrix.payload[1] ? 0 :\r\n // payLoad < performanceMatrix.payload[1] && payLoad > performanceMatrix.payload[2] ? 1 : 2;\r\n\r\n const alpha = (payLoad - performanceMatrix.payload[index + 1]) /\r\n (performanceMatrix.payload[index] - performanceMatrix.payload[index + 1]);\r\n\r\n const theoreticalConsumption = alpha *\r\n (performanceMatrix[transport as keyof PerformanceMatrix][index] -\r\n performanceMatrix[transport as keyof PerformanceMatrix][index + 1])\r\n + performanceMatrix[transport as keyof PerformanceMatrix][index + 1];\r\n\r\n return theoreticalConsumption;\r\n }\r\n\r\n private calculateAverageSpeed(transport: string): number {\r\n return this.averageSpeedMatrix[transport as keyof TruckDataMatrix];\r\n }\r\n\r\n private calculateMaintenanceCost(transport: string, distanceTraveled: number, operatingDays: number, truckPrice: number): number {\r\n return (distanceTraveled * operatingDays / 1000) * this.maintenanceCostMatrix[transport as keyof TruckDataMatrix] * truckPrice;\r\n }\r\n\r\n private calculateInsuranceCost(truckPrice: number, percentage: number, pesoDollarConv: number): number {\r\n return truckPrice * percentage * pesoDollarConv;\r\n }\r\n\r\n private calculateBattery(distanceTraveled: number, averageSpeed: number, performance: number): number {\r\n const maxConsumption = this.calculateAverageConsumption(averageSpeed, performance) * 1.2;\r\n return maxConsumption * distanceTraveled * 1.5;\r\n }\r\n\r\n private calculateAverageConsumption(averageSpeed: number, performance: number): number {\r\n const energyPerDistance = 10.6 / performance;\r\n const efficiencyRatio = (0.0003 * Math.pow(averageSpeed, 2)) - (0.0692 * averageSpeed) + 6.3495;\r\n return energyPerDistance / efficiencyRatio;\r\n }\r\n\r\n private calculateETruckPrice(truckPrice: number, battery: number): number {\r\n return this.getCIF(truckPrice, battery) * (1 + this.taxesMatrix.tga[1] + this.taxesMatrix.consularFee[1]);\r\n }\r\n\r\n private getCIF(truckPrice: number, battery: number): number {\r\n return (0.988 * truckPrice) + (150 * battery);\r\n }\r\n\r\n private getTheoreticalConsumption(hGrossWeight: number, hTare: number, transport: string): number {\r\n return this.calculatePerformance(hGrossWeight, hTare, transport, this.hPerformanceMatrix);\r\n }\r\n\r\n private calculateHPerformance(hGrossWeight: number, hTare: number, transport: string,\r\n distanceTraveled: number): number {\r\n const theoreticalConsumption = this.getTheoreticalConsumption(hGrossWeight, hTare, transport);\r\n const maxConsumption = 1.2 * theoreticalConsumption * 0.03; // maxConsumption = 1.2 * averageConsumption\r\n return 1.5 * maxConsumption * distanceTraveled;\r\n }\r\n\r\n private calculateCellPower(transport: string): number {\r\n return this.cellPowerMatrix[transport as keyof TruckDataMatrix];\r\n }\r\n\r\n private calculateHTruckPrice(truckPrice: number, tankSize: number, cellPower: number): number {\r\n return (1.4 * truckPrice + 35 * tankSize + 1275 * cellPower) * (1 + this.taxesMatrix.tga[2] + this.taxesMatrix.consularFee[2]);\r\n }\r\n\r\n private getAnnualCosts(callbackFn: (index: number) => number, vehicleChange: number): number[] {\r\n const anualCosts: number[] = [];\r\n\r\n for (let i = 1; i <= vehicleChange; i++) {\r\n anualCosts.push(callbackFn(i));\r\n }\r\n\r\n return anualCosts;\r\n }\r\n\r\n private getTotalDieselCost(fuelCost: number, vehicleChange: number, distanceTraveledPerYear: number, performance: number,\r\n discountRate: number, inflation: number, pesoDollarConv: number): number {\r\n const commonValue = distanceTraveledPerYear * fuelCost / (performance * pesoDollarConv);\r\n return discountRate === inflation ? commonValue * vehicleChange :\r\n commonValue * (1 - Math.pow((1 + inflation) / (1 + discountRate), vehicleChange)) / (discountRate - inflation);\r\n }\r\n\r\n private getDieselAnnualCosts(fuelCost: number, vehicleChange: number, distanceTraveledPerYear: number, performance: number,\r\n discountRate: number, inflation: number, pesoDollarConv: number): number[] {\r\n return this.getAnnualCosts(\r\n year => distanceTraveledPerYear * fuelCost *\r\n Math.pow(1 + inflation, year - 1) / (performance * pesoDollarConv * Math.pow(1 + discountRate, year)), vehicleChange);\r\n }\r\n\r\n private getTotalFuelCost(fuelCost: number, vehicleChange: number, distanceTraveledPerYer: number,\r\n averageConsumption: number, discountRate: number, inflation: number): number {\r\n const commonValue = fuelCost * averageConsumption * distanceTraveledPerYer;\r\n return discountRate === inflation ? commonValue * vehicleChange / (1 + discountRate) :\r\n commonValue * (1 - Math.pow((1 + inflation) / (1 + discountRate), vehicleChange)) / (discountRate - inflation);\r\n\r\n }\r\n\r\n private getFuelAnnualCosts(fuelCost: number, vehicleChange: number, distanceTraveledPerYer: number,\r\n averageConsumption: number, discountRate: number, inflation: number): number[] {\r\n return this.getAnnualCosts(\r\n year => fuelCost * averageConsumption *\r\n distanceTraveledPerYer * Math.pow(1 + inflation, year - 1) / Math.pow(1 + discountRate, year), vehicleChange);\r\n }\r\n\r\n private getTotalMaintenanceCost(maintenanceCost: number, vehicleChange: number, inflation: number, discountRate: number): number {\r\n return discountRate === inflation ? (maintenanceCost * vehicleChange) / (1 + discountRate) :\r\n (maintenanceCost * (1 - Math.pow((1 + inflation) / (1 + discountRate), vehicleChange)) / (discountRate - inflation));\r\n }\r\n\r\n private getMaintenanceAnnualCosts(maintenanceCost: number, vehicleChange: number, inflation: number, discountRate: number): number[] {\r\n return this.getAnnualCosts(\r\n year => maintenanceCost * Math.pow(1 + inflation, year - 1) / Math.pow(1 + discountRate, year), vehicleChange);\r\n }\r\n\r\n private getResidualValue(truckPrice: number, vehicleChange: number, lifespan: number, discountRate: number): number {\r\n return truckPrice * (1 - vehicleChange / lifespan) / Math.pow((1 + discountRate), vehicleChange);\r\n }\r\n\r\n private getTotalInsuranceCost(insuranceCost: number, inflation: number, discountRate: number, vehicleChange: number,\r\n pesoDollarConv: number): number {\r\n\r\n return discountRate === 0 ? insuranceCost * vehicleChange / pesoDollarConv :\r\n insuranceCost * (1 - Math.pow((1 + inflation) / (1 + discountRate), vehicleChange)) / ((discountRate - inflation) * pesoDollarConv);\r\n }\r\n\r\n private getInsuranceAnnualCosts(insuranceCost: number, inflation: number, discountRate: number, vehicleChange: number,\r\n pesoDollarConv: number): number[] {\r\n return this.getAnnualCosts(\r\n index => insuranceCost * Math.pow(1 + inflation, index - 1) / (Math.pow(1 + discountRate, index) * pesoDollarConv), vehicleChange);\r\n }\r\n\r\n private getPatent(truckPrice: number, discountRate: number, vehicleChange: number): number {\r\n return discountRate === 0 ? 0.013 * truckPrice * vehicleChange :\r\n (0.013 * truckPrice * (1 - 1 / Math.pow(1 + discountRate, vehicleChange))) / discountRate;\r\n }\r\n\r\n private getPatentAnnualCosts(truckPrice: number, discountRate: number, vehicleChange: number): number[] {\r\n return this.getAnnualCosts(index => 0.013 * truckPrice / Math.pow(1 + discountRate, index), vehicleChange);\r\n }\r\n\r\n private getHInfrastructure(hInfrastructureCost: number, distanceTraveledPerYear: number, vehicleChange: number,\r\n averageConsumption: number, discountRate: number): number {\r\n const commonValue = hInfrastructureCost * averageConsumption * distanceTraveledPerYear;\r\n return discountRate === 0 ? commonValue * discountRate :\r\n commonValue * (1 - 1 / Math.pow(1 + discountRate, vehicleChange)) / discountRate;\r\n }\r\n\r\n private calculateDieselTCO({dieselForm, assumptionsForm, hydrogenForm}: FormsWrapper): Tco {\r\n const distanceTraveledPerYear = dieselForm.dailyDistance * dieselForm.operatingDays;\r\n\r\n const totalGasCost = this.getTotalDieselCost(dieselForm.gasCost, dieselForm.vehicleChange, distanceTraveledPerYear,\r\n dieselForm.performance, assumptionsForm.discountRate, assumptionsForm.gasoil, assumptionsForm.pesoDollarConv);\r\n const annualGasCosts = this.getDieselAnnualCosts(dieselForm.gasCost, dieselForm.vehicleChange, distanceTraveledPerYear,\r\n dieselForm.performance, assumptionsForm.discountRate, assumptionsForm.gasoil, assumptionsForm.pesoDollarConv);\r\n\r\n const totalMaintenanceCost = this.getTotalMaintenanceCost(dieselForm.maintenanceCost, dieselForm.vehicleChange,\r\n assumptionsForm.inflation, assumptionsForm.discountRate);\r\n const annualMaintenanceCosts = this.getMaintenanceAnnualCosts(dieselForm.maintenanceCost, dieselForm.vehicleChange,\r\n assumptionsForm.inflation, assumptionsForm.discountRate);\r\n\r\n const residualValue = this.getResidualValue(dieselForm.truckPrice, dieselForm.vehicleChange,\r\n assumptionsForm.dLifespan, assumptionsForm.discountRate);\r\n\r\n\r\n const totalInsurance = this.getTotalInsuranceCost(dieselForm.insuranceCost, assumptionsForm.inflation, assumptionsForm.discountRate,\r\n dieselForm.vehicleChange, assumptionsForm.pesoDollarConv);\r\n const annualInsuranceCosts = this.getInsuranceAnnualCosts(dieselForm.insuranceCost, assumptionsForm.inflation,\r\n assumptionsForm.discountRate, dieselForm.vehicleChange, assumptionsForm.pesoDollarConv);\r\n\r\n const patent = this.getPatent(dieselForm.truckPrice, assumptionsForm.discountRate, dieselForm.vehicleChange);\r\n const annualPatentCosts = this.getPatentAnnualCosts(dieselForm.truckPrice, assumptionsForm.discountRate, dieselForm.vehicleChange);\r\n\r\n return new Tco(dieselForm.truckPrice, 0, totalGasCost, totalMaintenanceCost, residualValue, 0, totalInsurance,\r\n patent, 0, annualGasCosts, annualMaintenanceCosts, annualInsuranceCosts, annualPatentCosts);\r\n }\r\n\r\n private calculateElectricTCO({dieselForm, electricForm, hydrogenForm, assumptionsForm}: FormsWrapper, annualDMaintenanceCosts: number[],\r\n dieselMaintenanceCost: number): Tco {\r\n const distanceTraveledPerYear = dieselForm.dailyDistance * dieselForm.operatingDays;\r\n const efficiencyRatio = 0.0003 * Math.pow(dieselForm.averageSpeed, 2) - 0.0692 * dieselForm.averageSpeed + 6.3495;\r\n const averageConsumption = this.calculateAverageConsumption(dieselForm.averageSpeed, dieselForm.performance);\r\n const annualCycles = averageConsumption * distanceTraveledPerYear / electricForm.battery;\r\n const batteryLifespan = Math.round(assumptionsForm.batteryNumberOfCycles / annualCycles);\r\n\r\n\r\n const totalFuelCost = this.getTotalFuelCost(\r\n this.uteTariff.getEnergyCost(electricForm.uteFare, electricForm.chargingSchedule) / (assumptionsForm.pesoDollarConv),\r\n dieselForm.vehicleChange,\r\n distanceTraveledPerYear,\r\n 10.6 / (dieselForm.performance * efficiencyRatio),\r\n assumptionsForm.discountRate,\r\n assumptionsForm.electricity\r\n );\r\n const annualFuelCosts = this.getFuelAnnualCosts(\r\n this.uteTariff.getEnergyCost(electricForm.uteFare, electricForm.chargingSchedule) / (assumptionsForm.pesoDollarConv),\r\n dieselForm.vehicleChange,\r\n distanceTraveledPerYear,\r\n 10.6 / (dieselForm.performance * efficiencyRatio),\r\n assumptionsForm.discountRate,\r\n assumptionsForm.electricity\r\n );\r\n\r\n const maintenanceCost = 0.605 * dieselMaintenanceCost;\r\n const annualMaintenanceCosts = annualDMaintenanceCosts.map(value => 0.605 * value);\r\n\r\n const batteryResidualValue = this.getResidualValue(\r\n electricForm.battery * 150,\r\n dieselForm.vehicleChange,\r\n ((batteryLifespan < assumptionsForm.batteryTimeWarranty) &&\r\n (batteryLifespan * distanceTraveledPerYear < assumptionsForm.batteryDistanceWarranty) ? 2 : 1) * batteryLifespan,\r\n assumptionsForm.discountRate\r\n );\r\n\r\n\r\n const residualValue = this.getResidualValue(\r\n electricForm.eTruckPrice - electricForm.battery * 150,\r\n dieselForm.vehicleChange,\r\n assumptionsForm.eLifespan,\r\n assumptionsForm.discountRate);\r\n\r\n // const extraBattery = electricForm.batteryReplacement ? 150 * electricForm.battery : 0;\r\n const totalInsurance = this.getTotalInsuranceCost(electricForm.eInsuranceCost, assumptionsForm.inflation,\r\n assumptionsForm.discountRate, dieselForm.vehicleChange, assumptionsForm.pesoDollarConv);\r\n const annualInsuranceCosts = this.getInsuranceAnnualCosts(electricForm.eInsuranceCost, assumptionsForm.inflation,\r\n assumptionsForm.discountRate, dieselForm.vehicleChange, assumptionsForm.pesoDollarConv);\r\n\r\n\r\n const patent = this.getPatent(electricForm.eTruckPrice, assumptionsForm.discountRate, dieselForm.vehicleChange);\r\n const annualPatentCosts = this.getPatentAnnualCosts(electricForm.eTruckPrice, assumptionsForm.discountRate, dieselForm.vehicleChange);\r\n\r\n const infrastructureCost = 20 * assumptionsForm.chargingStationCostPerKW * Math.ceil(\r\n electricForm.battery / (20 * electricForm.chargingTime));\r\n\r\n return new Tco(electricForm.eTruckPrice, electricForm.discounts, totalFuelCost, maintenanceCost, residualValue,\r\n batteryResidualValue, totalInsurance, patent, infrastructureCost, annualFuelCosts, annualMaintenanceCosts, annualInsuranceCosts,\r\n annualPatentCosts);\r\n }\r\n\r\n private calculateHydrogenTCO({dieselForm, hydrogenForm, assumptionsForm}: FormsWrapper, annualDMaintenanceCosts: number[],\r\n dieselMaintenanceCost: number): Tco {\r\n\r\n const averageConsumption = 0.03 * this.getTheoreticalConsumption(hydrogenForm.hGrossWeight, hydrogenForm.hTare,\r\n dieselForm.transport);\r\n const distanceTraveledPerYear = dieselForm.dailyDistance * dieselForm.operatingDays;\r\n\r\n const totalFuelCost = this.getTotalFuelCost(hydrogenForm.hydrogenCost, dieselForm.vehicleChange, distanceTraveledPerYear,\r\n averageConsumption, assumptionsForm.discountRate, -assumptionsForm.hUpgradeRate);\r\n const annualFuelCosts = this.getFuelAnnualCosts(hydrogenForm.hydrogenCost, dieselForm.vehicleChange, distanceTraveledPerYear,\r\n averageConsumption, assumptionsForm.discountRate, -assumptionsForm.hUpgradeRate);\r\n\r\n const maintenanceCost = 1.091 * dieselMaintenanceCost;\r\n const annualMaintenanceCosts = annualDMaintenanceCosts.map(value => 1.091 * value);\r\n\r\n const residualValue = this.getResidualValue(hydrogenForm.hTruckPrice, dieselForm.vehicleChange, assumptionsForm.hLifespan,\r\n assumptionsForm.discountRate);\r\n\r\n const totalInsurance = this.getTotalInsuranceCost(hydrogenForm.hInsuranceCost, assumptionsForm.inflation, assumptionsForm.discountRate,\r\n dieselForm.vehicleChange, assumptionsForm.pesoDollarConv);\r\n const annualInsuranceCosts = this.getInsuranceAnnualCosts(hydrogenForm.hInsuranceCost, assumptionsForm.inflation,\r\n assumptionsForm.discountRate, dieselForm.vehicleChange, assumptionsForm.pesoDollarConv);\r\n\r\n const patent = this.getPatent(hydrogenForm.hTruckPrice, assumptionsForm.discountRate, dieselForm.vehicleChange);\r\n const annualPatentCosts = this.getPatentAnnualCosts(hydrogenForm.truckPrice, assumptionsForm.discountRate, dieselForm.vehicleChange);\r\n\r\n const infrastructure = this.getHInfrastructure(assumptionsForm.hInfrastructureCost, distanceTraveledPerYear, dieselForm.vehicleChange,\r\n averageConsumption, assumptionsForm.discountRate);\r\n\r\n return new Tco(hydrogenForm.hTruckPrice, hydrogenForm.discounts, totalFuelCost, maintenanceCost,\r\n residualValue, 0, totalInsurance, patent, infrastructure, annualFuelCosts, annualMaintenanceCosts,\r\n annualInsuranceCosts, annualPatentCosts);\r\n }\r\n}\r\n","import {Component, Input, OnInit} from '@angular/core';\r\nimport {QuestionEntry} from '../../models/faqEntry';\r\n\r\n@Component({\r\n selector: 'app-faq-entry',\r\n templateUrl: './faq-entry.component.html',\r\n styleUrls: ['./faq-entry.component.scss']\r\n})\r\nexport class FaqEntryComponent implements OnInit {\r\n\r\n @Input() title?: string;\r\n @Input() questionSet?: QuestionEntry[];\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","

\r\n","import { Pipe, PipeTransform } from '@angular/core';\nimport {KeyValue} from '@angular/common';\n\n@Pipe({\n name: 'truckSelection'\n})\nexport class TruckSelection implements PipeTransform {\n\n transform(value: Array>, ...args: any[]): Array> {\n return value.filter(({value: val}) => val);\n }\n\n}\n","import {Injectable} from '@angular/core';\nimport {Columns, Img, PdfMakeWrapper, Table, Txt} from 'pdfmake-wrapper';\nimport {getFormTitle, getTcoKeyMapping, getValue, UnitlessMappingValue} from '../../models/mappingUtils';\nimport {error} from 'protractor';\nimport Tco from '../../models/tco';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PdfService {\n\n constructor() {\n }\n\n async generatePdf(formsWrapper: [string, any][], tcoDoughnutCharts: HTMLCanvasElement[],\n tcoBarCharts: HTMLCanvasElement[], annualCharts: HTMLCanvasElement[],\n categoryCharts: HTMLCanvasElement[],\n tcoForms: {\n dieselTCO: { title: string, value: Tco }, electricTCO?: { title: string, value: Tco },\n hydrogenTCO?: { title: string, value: Tco }\n }): Promise {\n // const trucks = ['diesel', 'electric', 'hydrogen'];\n // const selectedTrucks = trucks.filter(((_, index) => selectedTrucksBooleans[index]));\n\n const pdf = new PdfMakeWrapper();\n pdf.pageSize('A4');\n pdf.pageMargins([40, 30]);\n pdf.styles({\n formWrapper: {\n fontSize: 16,\n lineHeight: 1.5,\n },\n dieselWrapper: {\n color: '#737373'\n },\n electricWrapper: {\n color: '#A6C34E'\n },\n hydrogenWrapper: {\n color: '#25A0B6'\n },\n assumptionsWrapper: {\n color: '#222',\n },\n normalText: {\n fontSize: 10,\n color: '#747171',\n lineHeight: 1.5\n },\n title: {\n fontSize: 20,\n lineHeight: 2,\n color: '#073763'\n },\n });\n const pageWidth = 535;\n\n // append inputs to pdf\n formsWrapper.forEach(formWrapper => {\n if (!formWrapper[1]) {\n return;\n }\n\n const titleType = ['diesel', 'electric', 'hydrogen', 'assumptions']\n .find(value => formWrapper[0].includes(value))?.concat('Wrapper');\n\n\n pdf.add(new Txt(getFormTitle(formWrapper[0])).style(['formWrapper', titleType ?? '']).end);\n\n Object.entries(formWrapper[1])\n .filter(([key]) => !key.includes('Switch'))\n .forEach(([key, value]) => {\n const mappedValue = getValue(formWrapper[0], key);\n pdf.add(new Columns([\n new Txt(`${mappedValue.label}:`).bold().end,\n `\\t${mappedValue.mapValue(value)} ${mappedValue.getUnit(value)}`\n ])\n .style('normalText').end);\n });\n\n pdf.add('\\n\\n\\n\\n\\n\\n\\n\\n');\n });\n // convert canvas to images\n const [tcoDoughnutChartsImgs, tcoBarChartsImgs, annualChartsImgs, categoryChartsImgs] = [tcoDoughnutCharts, tcoBarCharts,\n annualCharts, categoryCharts].map(chartGroup => chartGroup.map(chart => chart.toDataURL('image/png')));\n\n const columnGap = 10;\n const imgWidth = (pageWidth / tcoDoughnutChartsImgs.length) - columnGap * (tcoDoughnutChartsImgs.length - 1);\n pdf.add(new Txt('Costos Totales de Propiedad').style('title').end);\n\n const filteredTcoEntries = Object.values(tcoForms).filter(entry => entry) as { title: string, value: Tco }[];\n const titles = filteredTcoEntries.map(({title}) => title);\n const values = filteredTcoEntries.map(({value}) => value);\n // const data = values.reduce((acc, tco) => [...acc, ], [])\n const data = Object.entries(values[0]).filter(([_, val]) => typeof val === 'number').map(([key, val]) => {\n const mapping = getTcoKeyMapping(key);\n let dataEntry = [mapping.label, mapping.mapValue(val)];\n if (tcoForms.electricTCO && this.isObjKey(key, tcoForms.electricTCO.value)) {\n dataEntry = [...dataEntry, mapping.mapValue(tcoForms.electricTCO.value[key] as number)];\n }\n if (tcoForms.hydrogenTCO && this.isObjKey(key, tcoForms.hydrogenTCO.value)) {\n dataEntry = [...dataEntry, mapping.mapValue(tcoForms.hydrogenTCO.value[key] as number)];\n }\n console.log(dataEntry);\n return dataEntry;\n }) as (string | number)[][];\n\n let total = ['Tco', tcoForms.dieselTCO.value.getTCO()];\n if (tcoForms.electricTCO) {\n total = [...total, tcoForms.electricTCO.value.getTCO()];\n }\n if (tcoForms.hydrogenTCO) {\n total = [...total, tcoForms.hydrogenTCO.value.getTCO()];\n }\n\n // const [...values] = filteredTcoEntries.map(({value}) => Object.entries(value).filter(([_, val]) => typeof val === 'number')\n // .map(([key, val]) => {\n // const mapping = getTcoKeyMapping(key);\n // return [mapping, ]\n // }) as {mapping: UnitlessMappingValue, value: number}[]);\n pdf.add(new Table(\n [['', ...titles], ...data, total]\n ).alignment('center').margin([30, 0]).end);\n pdf.add(new Columns(await Promise.all(tcoDoughnutChartsImgs.map(imgUrl => new Img(imgUrl).width(imgWidth).build())))\n .columnGap(columnGap).end);\n pdf.add('\\n\\n');\n pdf.add(new Columns(await Promise.all(tcoBarChartsImgs.map(imgUrl => new Img(imgUrl).width(imgWidth).build())))\n .columnGap(columnGap).end);\n\n pdf.add('\\n\\n\\n\\n\\n\\n\\n\\n');\n\n pdf.add(new Txt('Costos de Propiedad Anuales').style('title').end);\n for (const imgUrl of annualChartsImgs) {\n pdf.add(await new Img(imgUrl).width(pageWidth).build());\n }\n\n pdf.add('\\n\\n\\n\\n\\n\\n\\n\\n');\n\n pdf.add(new Txt('Costos Totales de Propiedad por Catgoría').style('title').end);\n pdf.add(new Columns(await Promise.all(categoryChartsImgs.map(imgUrl => new Img(imgUrl).width(imgWidth).build())))\n .columnGap(columnGap).end);\n\n // pdf.images(chartImgs.reduce((acc, value, index) => ({...acc, [`chart ${index + 1}`]: value}), {}));\n // for (const imgUrl of chartImgs) {\n // pdf.add(await new Img(imgUrl).width(500).build());\n // }\n\n // const hola = await Promise.all(tcoDoughnutChartsImgs.map(imgUrl => new Img(imgUrl).width('100%').build()));\n\n return pdf;\n }\n\n dowloadPdf(pdf: PdfMakeWrapper): void {\n pdf.create().download('InformeTCO');\n }\n\n viewPdf(pdf: PdfMakeWrapper): void {\n pdf.create().open();\n }\n\n\n isObjKey(key: any, obj: T): key is keyof T {\n return key in obj;\n }\n}\n","export class ScholarEntry {\r\n name: string;\r\n title: string;\r\n role: string;\r\n imgUrl: string;\r\n\r\n\r\n constructor(name: string, title: string, role: string, imgUrl: string) {\r\n this.name = name;\r\n this.title = title;\r\n this.role = role;\r\n this.imgUrl = imgUrl;\r\n }\r\n}\r\n","
\r\n
\r\n
{{truckModel.model}}
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n","import {Component, Input, OnInit} from '@angular/core';\r\nimport {TruckModel} from '../../models/truckModel';\r\nimport {FormGroup} from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-truck-select',\r\n templateUrl: './truck-select.component.html',\r\n styleUrls: ['./truck-select.component.scss']\r\n})\r\nexport class TruckSelectComponent implements OnInit {\r\n\r\n @Input() truckFormGroup?: FormGroup;\r\n\r\n @Input() truckModelsList?: TruckModel[];\r\n\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n setTruckModel(truckModel: TruckModel): void {\r\n this.setField('eGrossWeight', truckModel.eGrossWeight);\r\n this.setField('eTare', truckModel.eTare);\r\n this.setField('battery', truckModel.battery);\r\n this.setField('chargingTime', truckModel.chargingTime);\r\n }\r\n\r\n setField(fieldName: string, fieldValue?: number): void {\r\n if (fieldValue) {\r\n this.truckFormGroup?.get(fieldName)?.setValue(fieldValue);\r\n }\r\n }\r\n\r\n // Preserve original property order\r\n originalOrder = (a: any, b: any): number => {\r\n return 0;\r\n }\r\n\r\n}\r\n","import {AfterViewInit, Component, OnInit} from '@angular/core';\r\nimport {Chart, DoughnutController} from 'chart.js';\r\nimport {TruckFormService} from '../../services/truck-form/truck-form.service';\r\nimport Tco from '../../models/tco';\r\n\r\n// Chart.register(DoughnutController);\r\n\r\n@Component({\r\n selector: 'app-results',\r\n templateUrl: './results.component.html',\r\n styleUrls: ['./results.component.scss']\r\n})\r\nexport class ResultsComponent implements AfterViewInit {\r\n\r\n constructor(private _truckFormService: TruckFormService) {\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this._truckFormService.dieselTCO === null || this._truckFormService.electricTCO === null ||\r\n this._truckFormService.hydrogenTCO === null) {\r\n return;\r\n }\r\n\r\n this.generateTCOComparisonChart(this._truckFormService.dieselTCO, this._truckFormService.electricTCO,\r\n this._truckFormService.hydrogenTCO);\r\n\r\n }\r\n\r\n // ngOnInit(): void {\r\n //\r\n // this.generateTCOComparisonChart(this._truckFormService.dieselTCO, this._truckFormService.electricTCO,\r\n // this._truckFormService.hydrogenTCO);\r\n // this.generateTCOChart('diesel-tco-chart', this._truckFormService.dieselTCO);\r\n // this.generateTCOChart('electric-tco-chart', this._truckFormService.electricTCO);\r\n // this.generateTCOChart('hydrogen-tco-chart', this._truckFormService.hydrogenTCO);\r\n // }\r\n\r\n\r\n get truckFormService(): TruckFormService {\r\n return this._truckFormService;\r\n }\r\n\r\n private tcoValuesDefined(dieselTCO: Tco | null, electricTCO: Tco | null, hydrogenTCO: Tco | null): boolean {\r\n return dieselTCO !== null && electricTCO !== null && hydrogenTCO !== null;\r\n }\r\n\r\n private generateTCOComparisonChart(dieselTCO: Tco, electricTCO: Tco, hydrogenTCO: Tco): Chart {\r\n return new Chart('tco-comparison-chart', {\r\n type: 'bar',\r\n data: {\r\n labels: ['Camión Diesel', 'Camión Eléctrico', 'Camión Hidrógeno'],\r\n datasets: [\r\n {\r\n label: 'Precio Vehículo',\r\n data: [dieselTCO.vehiclePrice, electricTCO.vehiclePrice, hydrogenTCO.vehiclePrice],\r\n backgroundColor: 'rgb(255, 0, 0)'\r\n },\r\n {\r\n label: 'Combustible',\r\n data: [dieselTCO.fuel, electricTCO.fuel, electricTCO.fuel],\r\n backgroundColor: 'rgb(54, 162, 235)'\r\n },\r\n {\r\n label: 'Mantenimiento',\r\n data: [dieselTCO.maintenance, electricTCO.maintenance, hydrogenTCO.maintenance],\r\n backgroundColor: 'rgb(0, 255, 0)'\r\n },\r\n {\r\n label: 'Batería Extra',\r\n data: [dieselTCO.batteryResidualValue, electricTCO.batteryResidualValue, hydrogenTCO.batteryResidualValue],\r\n backgroundColor: 'rgb(23, 123, 79)'\r\n },\r\n {\r\n label: 'Seguro',\r\n data: [dieselTCO.insurance, electricTCO.insurance, hydrogenTCO.insurance],\r\n backgroundColor: 'rgb(255,255,0)'\r\n },\r\n {\r\n label: 'Patente',\r\n data: [dieselTCO.patent, electricTCO.patent, hydrogenTCO.patent],\r\n backgroundColor: '#add8e6'\r\n },\r\n {\r\n label: 'Infraestructura',\r\n data: [dieselTCO.infrastructure, electricTCO.infrastructure, hydrogenTCO.infrastructure],\r\n backgroundColor: 'rgb(128,128,128)'\r\n }\r\n ]\r\n },\r\n options: {\r\n indexAxis: 'y',\r\n plugins: {\r\n title: {\r\n display: true,\r\n text: 'Comparativa TCO'\r\n }\r\n },\r\n responsive: true,\r\n scales: {\r\n x: {\r\n stacked: true\r\n },\r\n y: {\r\n beginAtZero: true,\r\n stacked: true\r\n }\r\n }\r\n },\r\n });\r\n }\r\n\r\n // private generateTCOChart(chartId: string, tco: Tco): Chart {\r\n // return new Chart(chartId, {\r\n // type: 'doughnut',\r\n // data: {\r\n // labels: ['Precio', 'Combustible', 'Mantenimiento', 'Batería extra', 'Seguro', 'Patente', 'Infraestructura'],\r\n // datasets: [\r\n // {\r\n // label: 'Test',\r\n // data: [tco.vehiclePrice, tco.fuel, tco.maintenance, tco.extraBattery, tco.insurance, tco.patent, tco.infrastructure],\r\n // backgroundColor: [\r\n // 'rgb(255, 0, 0)',\r\n // 'rgb(0, 255, 0)',\r\n // 'rgb(0, 0, 255)',\r\n // 'rgb(255, 0, 255)',\r\n // 'rgb(255, 255, 0)',\r\n // 'rgb(0, 255, 255)',\r\n // '#eee'\r\n // ]\r\n // }\r\n // ]\r\n // }\r\n //\r\n // });\r\n // }\r\n\r\n}\r\n","\r\n\r\n\r\n
\r\n \r\n
\r\n

Resultado Total

\r\n
\r\n \r\n
\r\n
    \r\n
  • \r\n

    TCO Diesel

    \r\n

    {{truckFormService.dieselTCO?.getTCO()}}

    \r\n
  • \r\n
  • \r\n

    TCO Eléctrico

    \r\n

    {{truckFormService.electricTCO?.getTCO()}}

    \r\n
  • \r\n
  • \r\n

    TCO Hidrógeno

    \r\n

    {{truckFormService.hydrogenTCO?.getTCO()}}

    \r\n
  • \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n","import {Component, Input, OnInit} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-calc-intro-content-box',\r\n templateUrl: './calc-intro-content-box.component.html',\r\n styleUrls: ['./calc-intro-content-box.component.scss']\r\n})\r\nexport class CalcIntroContentBoxComponent implements OnInit {\r\n\r\n @Input() imageUrl?: string;\r\n @Input() imageAlt = 'description-image';\r\n @Input() title?: string;\r\n @Input() description?: string;\r\n\r\n classSwitch = true;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","
\r\n \"{{imageAlt}}\"\r\n
\r\n
\r\n

{{title}}

\r\n

{{description}}

\r\n
\r\n","export interface TruckModel {\r\n\r\n brand: string;\r\n model: string;\r\n imageUrl?: string;\r\n eGrossWeight?: number;\r\n eTare?: number;\r\n payload?: number;\r\n eTruckPrice?: number;\r\n battery?: number;\r\n chargingTime?: number;\r\n batteryTimeWarranty?: number;\r\n batteryDistanceWarranty?: number;\r\n\r\n\r\n // constructor(brand: string, model: string, imageUrl?: string, grossVehicleWeight?: number, tare?: number, battery?: number,\r\n // chargingTime?: number, batteryTimeWarranty?: number, batteryDistanceWarranty?: number) {\r\n // this.brand = brand;\r\n // this.model = model;\r\n // this.imageUrl = imageUrl;\r\n // this.grossVehicleWeight = grossVehicleWeight;\r\n // this.tare = tare;\r\n // this.battery = battery;\r\n // this.chargingTime = chargingTime;\r\n // this.batteryTimeWarranty = batteryTimeWarranty;\r\n // this.batteryDistanceWarranty = batteryDistanceWarranty;\r\n // }\r\n}\r\n\r\nexport const truckModels: TruckModel[] = [\r\n {\r\n brand: 'JAC',\r\n model: '1063EV1',\r\n imageUrl: undefined,\r\n eGrossWeight: 6.49,\r\n eTare: 3.35,\r\n payload: 3.14,\r\n eTruckPrice: 49900,\r\n battery: 96.77,\r\n chargingTime: 3,\r\n batteryTimeWarranty: 8,\r\n batteryDistanceWarranty: 150000\r\n }, {\r\n brand: 'Farizon',\r\n model: 'E200X',\r\n imageUrl: undefined,\r\n eGrossWeight: 9,\r\n eTare: 3.4,\r\n payload: 5.6,\r\n eTruckPrice: 63250,\r\n battery: 106.95,\r\n chargingTime: 2.5,\r\n batteryTimeWarranty: 8,\r\n batteryDistanceWarranty: 150000\r\n }, {\r\n brand: 'Farizon',\r\n model: 'E200M',\r\n imageUrl: undefined,\r\n eGrossWeight: 5.9,\r\n eTare: 2.47,\r\n payload: 3.43,\r\n eTruckPrice: 52250,\r\n battery: 81.14,\r\n chargingTime: 2.5,\r\n batteryTimeWarranty: 8,\r\n batteryDistanceWarranty: 150000\r\n }, {\r\n brand: 'BYD',\r\n model: 'T4C',\r\n imageUrl: undefined,\r\n eGrossWeight: 4.3,\r\n eTare: 1.85,\r\n payload: 2.45,\r\n eTruckPrice: 68000,\r\n battery: 63.63,\r\n chargingTime: 1.7,\r\n batteryTimeWarranty: 5,\r\n batteryDistanceWarranty: 500000\r\n }, {\r\n brand: 'BYD',\r\n model: 'T45C01',\r\n imageUrl: undefined,\r\n eGrossWeight: 6.495,\r\n eTare: 2.8,\r\n payload: 3.695,\r\n eTruckPrice: 87000,\r\n battery: 99,\r\n chargingTime: 1.2,\r\n batteryTimeWarranty: 5,\r\n batteryDistanceWarranty: 500000\r\n }, {\r\n brand: 'BYD',\r\n model: 'T7BG',\r\n imageUrl: undefined,\r\n eGrossWeight: 11.8,\r\n eTare: 4.75,\r\n payload: 7.05,\r\n eTruckPrice: 131000,\r\n battery: 177.74,\r\n chargingTime: 2.5,\r\n batteryTimeWarranty: 5,\r\n batteryDistanceWarranty: 500000\r\n }, {\r\n brand: 'Dong Feng',\r\n model: 'e-Tuyi',\r\n imageUrl: undefined,\r\n eGrossWeight: 4.495,\r\n eTare: 2.495,\r\n payload: 2,\r\n eTruckPrice: 38805,\r\n battery: 55.7,\r\n chargingTime: 2,\r\n batteryTimeWarranty: 5,\r\n batteryDistanceWarranty: undefined\r\n }, {\r\n brand: 'Dong Feng',\r\n model: 'e-Shang',\r\n imageUrl: undefined,\r\n eGrossWeight: undefined,\r\n eTare: undefined,\r\n payload: 3.5,\r\n eTruckPrice: undefined,\r\n battery: 81.4,\r\n chargingTime: 2,\r\n batteryTimeWarranty: 5,\r\n batteryDistanceWarranty: undefined\r\n }, {\r\n brand: 'Dong Feng',\r\n model: 'e-Don',\r\n imageUrl: undefined,\r\n eGrossWeight: undefined,\r\n eTare: undefined,\r\n payload: undefined,\r\n eTruckPrice: undefined,\r\n battery: 98.04,\r\n chargingTime: undefined,\r\n batteryTimeWarranty: 5,\r\n batteryDistanceWarranty: undefined\r\n }\r\n // new TruckModel('BYD', 'T7BG')\r\n];\r\n","import {Component, Input, OnInit} from '@angular/core';\r\nimport {Router} from '@angular/router';\r\nimport {FormGroup} from '@angular/forms';\r\nimport {FormValidationService} from '../../services/form-validation/form-validation.service';\r\nimport {TruckFormService} from '../../services/truck-form/truck-form.service';\r\n\r\n@Component({\r\n selector: 'app-progress-bar',\r\n templateUrl: './progress-bar.component.html',\r\n styleUrls: ['./progress-bar.component.scss']\r\n})\r\nexport class ProgressBarComponent implements OnInit {\r\n\r\n router: Router;\r\n @Input() truckForm!: FormGroup;\r\n @Input() assumptionsForm!: FormGroup;\r\n private previousRouter = '/calculadora';\r\n\r\n constructor(router: Router, private formValidationService: FormValidationService, private truckFormService: TruckFormService) {\r\n this.router = router;\r\n // this.router.events\r\n // .pipe(filter(event => event instanceof NavigationEnd))\r\n // .subscribe(event => {\r\n // if (event instanceof NavigationEnd) {\r\n // if (event.url === '/calculadora') {\r\n // console.log(this.truckForm);\r\n // }\r\n // this.previousRouter = event.url;\r\n // }\r\n // });\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n printCurrentRoute(): void {\r\n\r\n console.log(this.router.url);\r\n console.log(this.previousRouter);\r\n if (this.previousRouter === this.router.url) {\r\n return;\r\n }\r\n\r\n if (this.previousRouter === '/calculadora') {\r\n console.log(this.truckForm);\r\n }\r\n this.previousRouter = this.router.url;\r\n }\r\n\r\n // submitTruckForm(): void {\r\n // this.truckFormComponent.submitForm();\r\n // }\r\n\r\n getCurrentClass(): string {\r\n return this.router.url === '/calculadora' ? 'calculator' : this.router.url === '/supuestos' ? 'assumptions' : 'results';\r\n }\r\n\r\n saveAndSubmit(futureRouteUrl: string): void {\r\n // this.truckFormService.saveAndSubmit(futureRouteUrl, this.truckForm, this.assumptionsForm);\r\n if (this.router.url === futureRouteUrl) {\r\n return;\r\n }\r\n\r\n if (this.router.url === '/calculadora') {\r\n if (!this.formValidationService.formIsValid(this.truckForm)) {\r\n return;\r\n }\r\n\r\n // this.truckFormService.saveTruckFormGroup(this.truckForm);\r\n }\r\n\r\n if (this.router.url === '/supuestos') {\r\n if (!this.formValidationService.formIsValid(this.assumptionsForm)) {\r\n return;\r\n }\r\n\r\n this.truckFormService.saveAssumptionsForm(this.assumptionsForm);\r\n }\r\n\r\n if (futureRouteUrl === '/resultados') {\r\n if (!this.truckFormService.truckFormGroup || !this.truckFormService.assumptionsForm) {\r\n return;\r\n }\r\n\r\n this.truckFormService.calculateTCO();\r\n }\r\n\r\n this.router.navigateByUrl(futureRouteUrl);\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
Calculadora
\r\n
Supuestos
\r\n
Resultados
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import {NgModule} from '@angular/core';\r\nimport {Routes, RouterModule} from '@angular/router';\r\nimport {HomeComponent} from './components/home/home.component';\r\nimport {CalculatorComponent} from './components/calculator/calculator.component';\r\nimport {AssumptionsComponent} from './components/assumptions/assumptions.component';\r\nimport {ResultsComponent} from './components/results/results.component';\r\nimport {FaqComponent} from './components/faq/faq.component';\r\nimport {AboutComponent} from './components/about/about.component';\r\nimport {CalculatorIntroComponent} from './components/calculator-intro/calculator-intro.component';\r\nimport {ContactComponent} from './components/contact/contact.component';\r\n\r\n\r\nconst routes: Routes = [\r\n {path: 'home', component: HomeComponent},\r\n {path: 'sobre-el-proyecto', component: AboutComponent},\r\n {path: 'calculadora-intro', component: CalculatorIntroComponent},\r\n {path: 'calculadora', component: CalculatorComponent},\r\n {path: 'supuestos', component: AssumptionsComponent},\r\n {path: 'resultados', component: ResultsComponent},\r\n {path: 'faq', component: FaqComponent},\r\n {path: 'contacto', component: ContactComponent},\r\n {path: '**', redirectTo: 'home', pathMatch: 'full'}\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes, {\r\n scrollOffset: [0, 0],\r\n scrollPositionRestoration: 'top'\r\n })],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule {\r\n}\r\n","import {AfterContentInit, AfterViewChecked, AfterViewInit, Component, OnInit} from '@angular/core';\r\nimport {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\r\nimport {TruckFormService} from '../../services/truck-form/truck-form.service';\r\nimport {FormValidationService} from '../../services/form-validation/form-validation.service';\r\nimport {Router} from '@angular/router';\r\nimport TcoList from '../../models/tcoList';\r\nimport Tco from '../../models/tco';\r\nimport {Chart} from 'chart.js';\r\nimport {getCategoryColor, getDataValue, getTcoColorPallete, getTitleColor, PalleteIds} from '../../models/chartUtils';\r\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\r\nimport {PdfService} from '../../services/pdf/pdf.service';\r\nimport {getFormTitle, getTcoKeyMapping} from '../../models/mappingUtils';\r\nimport {TruckModel, truckModels} from '../../models/truckModel';\r\n\r\ntype CalculatorSection = 'data' | 'assumptions' | 'results';\r\ntype ToggleFormKey = 'dieselForm' | 'electricForm' | 'hydrogenForm';\r\n\r\n\r\n@Component({\r\n selector: 'app-truck-form',\r\n templateUrl: './calculator.component.html',\r\n styleUrls: ['./calculator.component.scss']\r\n})\r\nexport class CalculatorComponent implements AfterViewChecked {\r\n\r\n private _currentSection: CalculatorSection = 'data';\r\n private firstLoad = true;\r\n\r\n dataSectionComplete = false;\r\n assumptionsSectionComplete = false;\r\n\r\n truckSelectionForm = this.formBuilder.group({\r\n dieselForm: new FormControl(true),\r\n electricForm: new FormControl(true),\r\n hydrogenForm: new FormControl(true)\r\n });\r\n\r\n toggleForm = {\r\n dieselForm: false,\r\n electricForm: false,\r\n hydrogenForm: false\r\n };\r\n\r\n dieselTruckForm = this._truckFormService.dieselForm ?? this.formBuilder.group({\r\n // Truck\r\n grossWeight: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n tare: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n vehicleChange: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // Operation\r\n dailyDistance: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n performance: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n performanceSwitch: [false],\r\n averageSpeed: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n averageSpeedSwitch: [false],\r\n transport: ['regional', [Validators.required]],\r\n operatingDays: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // Economy\r\n gasCost: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n maintenanceCost: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n maintenanceCostSwitch: [false],\r\n insuranceCost: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n insuranceCostSwitch: [false],\r\n truckPrice: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]]\r\n });\r\n\r\n electricTruckForm = this._truckFormService.electricForm ?? this.formBuilder.group({\r\n // Truck\r\n eGrossWeight: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n eTare: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n battery: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n batterySwitch: [false],\r\n // truckPower: [undefined, [Validators.required]],\r\n // modelSelectionToggle: [false],\r\n modelSelection: [undefined],\r\n // Operation\r\n uteFare: ['mc1', [Validators.required]],\r\n consumedPower: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n chargingSchedule: ['peak', [Validators.required]],\r\n chargingTime: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // batteryReplacement: [true],\r\n // Economy\r\n eInsuranceCost: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n eInsuranceCostSwitch: [false],\r\n eTruckPrice: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n eTruckPriceSwitch: [false],\r\n comapDiscountSwitch: [false],\r\n // comapInvestment: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]]\r\n });\r\n\r\n hydrogenTruckForm = this._truckFormService.hydrogenForm ?? this.formBuilder.group({\r\n // Truck\r\n hGrossWeight: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n hTare: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n tankSize: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n tankSizeSwitch: [false],\r\n cellPower: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n cellPowerSwitch: [false],\r\n // Operation\r\n hydrogenCost: [undefined, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n hInsuranceCost: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n hInsuranceCostSwitch: [false],\r\n hTruckPrice: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n hTruckPriceSwitch: [false],\r\n // Additional Data\r\n hComapDiscountSwitch: [false],\r\n // comapInvestment: [undefined, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]]\r\n });\r\n\r\n assumptionsForm = this._truckFormService.assumptionsForm ?? this.formBuilder.group({\r\n inflation: [9, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n discountRate: [8, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n gasoil: [3.35, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n electricity: [7.23, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n hUpgradeRate: [1, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n dLifespan: [15, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n eLifespan: [15, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n batteryTimeWarranty: [8, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n batteryDistanceWarranty: [500000, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n batteryNumberOfCycles: [1500, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n chargingStationCostPerKW: [100, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n hLifespan: [12, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n hInfrastructureCost: [2.62, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n pesoDollarConv: [44, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n });\r\n\r\n resultsVariablesForm = this.formBuilder.group({\r\n dailyDistance: [30, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n operatingDays: [10, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n vehicleChange: [5, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n chargingSchedule: ['peak', [Validators.required]],\r\n pesoDollarConv: [44, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n gasCost: [70, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]]\r\n });\r\n\r\n tcoList: TcoList = {\r\n dieselTCO: null,\r\n electricTCO: null,\r\n hydrogenTCO: null\r\n };\r\n\r\n dieselTcoDoughnutChart: Chart<'doughnut', any[], string> | null = null;\r\n electricTcoDoughnutChart: Chart<'doughnut', any[], string> | null = null;\r\n hydrogenTcoDoughnutChart: Chart<'doughnut', any[], string> | null = null;\r\n\r\n dieselTcoBarChart: Chart<'bar', any[], string> | null = null;\r\n electricTcoBarChart: Chart<'bar', any[], string> | null = null;\r\n hydrogenTcoBarChart: Chart<'bar', any[], string> | null = null;\r\n\r\n dieselAnnualCostsChart: Chart<'bar', any[], string> | null = null;\r\n electricAnnualCostsChart: Chart<'bar', any[], string> | null = null;\r\n hydrogenAnnualCostsChart: Chart<'bar', any[], string> | null = null;\r\n\r\n dieselCategoryChart: Chart<'bar', any[], string> | null = null;\r\n electricCategoryChart: Chart<'bar', any[], string> | null = null;\r\n hydrogenCategoryChart: Chart<'bar', any[], string> | null = null;\r\n\r\n // notAvailableList = {\r\n // maintenanceCost: true,\r\n // insuranceCost: true\r\n // };\r\n\r\n truckModels = [\r\n // new TruckModel('T4C', 4.3, 1.85, 63.63, 1.5),\r\n // new TruckModel('T45C01', 6.495, 2.8, 99, 1.2)\r\n ];\r\n\r\n printTruckForm(truckForm: FormGroup): void {\r\n console.log(truckForm.value);\r\n }\r\n\r\n constructor(private formBuilder: FormBuilder, private _truckFormService: TruckFormService, private pdfService: PdfService,\r\n private _formValidationService: FormValidationService, private router: Router) {\r\n }\r\n\r\n\r\n get truckFormService(): TruckFormService {\r\n return this._truckFormService;\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n if (this.currentSection === 'data') {\r\n this.setStyles();\r\n } else if (this.firstLoad && this.currentSection === 'results') {\r\n this.loadResultsForm();\r\n this.setBubbles();\r\n this.createCharts();\r\n this.firstLoad = false;\r\n }\r\n\r\n if (this.currentSection !== 'results') {\r\n this.firstLoad = true;\r\n }\r\n }\r\n\r\n handleFormToggle(formName: ToggleFormKey): void {\r\n this.toggleForm[formName] = !this.toggleForm[formName];\r\n }\r\n\r\n set currentSection(value: CalculatorSection) {\r\n this._currentSection = value;\r\n }\r\n\r\n get currentSection(): CalculatorSection {\r\n return this._currentSection;\r\n }\r\n\r\n get formValidationService(): FormValidationService {\r\n return this._formValidationService;\r\n }\r\n\r\n private createCharts(): void {\r\n this.createTcoDoughnutCharts();\r\n this.createTcoBarCharts();\r\n this.createAnnualCostsCharts();\r\n this.createCategoryCharts();\r\n }\r\n\r\n private createTcoDoughnutCharts(): void {\r\n const dieselTCO = this._truckFormService.dieselTCO;\r\n const electricTCO = this._truckFormService.electricTCO;\r\n const hydrogenTCO = this._truckFormService.hydrogenTCO;\r\n this.dieselTcoDoughnutChart = this.createTcoDoughnutChart(dieselTCO, 'diesel-tco-doughnut-chart', this.dieselTcoDoughnutChart);\r\n this.electricTcoDoughnutChart = this.createTcoDoughnutChart(electricTCO, 'electric-tco-doughnut-chart', this.electricTcoDoughnutChart);\r\n this.hydrogenTcoDoughnutChart = this.createTcoDoughnutChart(hydrogenTCO, 'hydrogen-tco-doughnut-chart', this.hydrogenTcoDoughnutChart);\r\n }\r\n\r\n private createTcoBarCharts(): void {\r\n this.dieselTcoBarChart = this.createTcoBarChart(this._truckFormService.dieselTCO, 'diesel-tco-bar-chart', this.dieselTcoBarChart);\r\n this.electricTcoBarChart = this.createTcoBarChart(this._truckFormService.electricTCO,\r\n 'electric-tco-bar-chart', this.electricTcoBarChart);\r\n this.hydrogenTcoBarChart = this.createTcoBarChart(this._truckFormService.hydrogenTCO,\r\n 'hydrogen-tco-bar-chart', this.hydrogenTcoBarChart);\r\n }\r\n\r\n private createAnnualCostsCharts(): void {\r\n this.dieselAnnualCostsChart = this.createAnnualCostsChart(this._truckFormService.dieselTCO, 'diesel-annual-chart',\r\n this.dieselAnnualCostsChart);\r\n this.electricAnnualCostsChart = this.createAnnualCostsChart(this._truckFormService.electricTCO, 'electric-annual-chart',\r\n this.electricAnnualCostsChart);\r\n this.hydrogenAnnualCostsChart = this.createAnnualCostsChart(this._truckFormService.hydrogenTCO, 'hydrogen-annual-chart',\r\n this.hydrogenAnnualCostsChart);\r\n }\r\n\r\n private createCategoryCharts(): void {\r\n this.dieselCategoryChart = this.createCategoryChart(this._truckFormService.dieselTCO, 'diesel-category-chart', this.dieselCategoryChart);\r\n this.electricCategoryChart = this.createCategoryChart(this._truckFormService.electricTCO,\r\n 'electric-category-chart', this.electricCategoryChart);\r\n this.hydrogenCategoryChart = this.createCategoryChart(this._truckFormService.hydrogenTCO,\r\n 'hydrogen-category-chart', this.hydrogenCategoryChart);\r\n }\r\n\r\n private createTcoDoughnutChart(tco: Tco | null, id: string,\r\n chart: Chart<'doughnut', any[], string> | null): Chart | null {\r\n if (chart) {\r\n chart.destroy();\r\n }\r\n\r\n const canvasContext = document.querySelector(`#${id}`)?.getContext('2d');\r\n\r\n if (!canvasContext) {\r\n return null;\r\n }\r\n\r\n if (tco) {\r\n const depreciation = tco.vehiclePrice - tco.residualValue - tco.batteryResidualValue - tco.discounts;\r\n const data = {\r\n depreciation: {\r\n label: 'Depreciación',\r\n value: depreciation,\r\n dieselColor: '#3B3838',\r\n electricColor: '#385623',\r\n hydrogenColor: '#073763'\r\n },\r\n fuel: {\r\n label: id.includes('electric') ? 'Energía' : 'Combustible',\r\n value: tco.fuel,\r\n dieselColor: '#767171',\r\n electricColor: '#4D7731',\r\n hydrogenColor: '#1F4E79'\r\n },\r\n maintenance: {\r\n label: 'Mantenimiento',\r\n value: tco.maintenance,\r\n dieselColor: '#AEAAAA',\r\n electricColor: '#63973F',\r\n hydrogenColor: '#25A0B6'\r\n },\r\n insurance: {label: 'Seguro', value: tco.insurance, dieselColor: '#BFBFBF', electricColor: '#A5D37B', hydrogenColor: '#2BBBD3'},\r\n patent: {label: 'Patente', value: tco.patent, dieselColor: '#D9D9D9', electricColor: '#A6C34E', hydrogenColor: '#7CD5E4'},\r\n infrastructure: {\r\n label: 'Infraestructura',\r\n value: tco.infrastructure,\r\n dieselColor: '#000',\r\n electricColor: '#BBD076',\r\n hydrogenColor: '#C8EEF4'\r\n }\r\n };\r\n\r\n const labels = Object.values(data).map(({label}) => label);\r\n const values = Object.values(data).map(({value}) => value);\r\n const colorSelection = id.includes('diesel') ? 'dieselColor' : id.includes('electric') ? 'electricColor' : 'hydrogenColor';\r\n const colors = Object.values(data).map(obj => obj[colorSelection]);\r\n\r\n const total = values.reduce((a, v) => v + a, 0);\r\n\r\n return new Chart(canvasContext, {\r\n type: 'doughnut',\r\n data: {\r\n labels,\r\n datasets: [{\r\n label: `${id} dataset`,\r\n data: values,\r\n backgroundColor: colors\r\n }]\r\n },\r\n plugins: [ChartDataLabels],\r\n options: {\r\n plugins: {\r\n legend: {\r\n display: false\r\n },\r\n datalabels: {\r\n display: true,\r\n align: 'end',\r\n anchor: 'end',\r\n formatter: (value, ctx) => {\r\n const dataLabels = ctx.chart.data.labels;\r\n const percentage = 100 * value / total;\r\n return (percentage < 2 || !dataLabels) ? '' : [dataLabels[ctx.dataIndex], `${+percentage.toFixed(1)} %`];\r\n },\r\n font: {\r\n weight: 'normal',\r\n size: 16,\r\n family: 'open-sans, sans-serif',\r\n },\r\n color: '#747171',\r\n }\r\n },\r\n layout: {\r\n padding: 50\r\n }\r\n }\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private createTcoBarChart(tco: Tco | null, id: string, chart: Chart<'bar', any[], string> | null): Chart | null {\r\n\r\n if (chart) {\r\n chart.destroy();\r\n }\r\n\r\n const canvasContext = document.querySelector(`#${id}`)?.getContext('2d');\r\n\r\n if (!canvasContext) {\r\n return null;\r\n }\r\n\r\n if (tco) {\r\n const palleteId = id.includes('diesel') ? PalleteIds.DIESEL : id.includes('electric') ? PalleteIds.ELECTRIC : PalleteIds.HYDROGEN;\r\n const pallete = getTcoColorPallete(palleteId);\r\n\r\n const tcoData = (data: number) => tco.discounts === 0 ? [data, 0, 0] : [data, 0, 0, 0];\r\n\r\n const tcoDiscountsVal = [0, tco.discounts].map(value => value + tco.getTCOWithDiscounts());\r\n const tcoDiscounts = tco.discounts === 0 ? [0, 0, 0] : [0, tcoDiscountsVal, 0, 0];\r\n\r\n const tcoResidualValueArr = [0, tco.getResidualValue()].map(value => value + tco.getTCO());\r\n const tcoResidualValue = tco.discounts === 0 ? [0, tcoResidualValueArr, 0] : [0, 0, tcoResidualValueArr, 0];\r\n\r\n const tcoTotal = tco.discounts === 0 ? [0, 0, tco.getTCO()] : [0, 0, 0, tco.getTCO()];\r\n\r\n const labels = tco.discounts === 0 ? ['Costos', 'Valores Residuales', 'Costo total de propiedad'] :\r\n ['Costos', 'Descuento COMAP', 'Valores Residuales', 'Costo total de propiedad'];\r\n\r\n return new Chart(canvasContext, {\r\n type: 'bar',\r\n data: {\r\n labels,\r\n datasets: [{\r\n label: 'Precio Camión',\r\n data: tcoData(tco.vehiclePrice),\r\n stack: 'tco',\r\n backgroundColor: pallete.vehiclePrice\r\n }, {\r\n label: id.includes('electric') ? 'Energía' : 'Combustible',\r\n data: tcoData(tco.fuel),\r\n stack: 'tco',\r\n backgroundColor: pallete.fuel\r\n }, {\r\n label: 'Mantenimiento',\r\n data: tcoData(tco.maintenance),\r\n stack: 'tco',\r\n backgroundColor: pallete.maintenance\r\n }, {\r\n label: 'Seguro',\r\n data: tcoData(tco.insurance),\r\n stack: 'tco',\r\n backgroundColor: pallete.insurance\r\n }, {\r\n label: 'Patente',\r\n data: tcoData(tco.patent),\r\n stack: 'tco',\r\n backgroundColor: pallete.patent\r\n }, {\r\n label: 'Infraestructura',\r\n data: tcoData(tco.infrastructure),\r\n stack: 'tco',\r\n backgroundColor: pallete.infrastructure\r\n }, {\r\n label: 'Descuento COMAP',\r\n data: tcoDiscounts,\r\n stack: 'tco',\r\n backgroundColor: pallete.discounts,\r\n }, {\r\n label: 'Valores Residuales',\r\n data: tcoResidualValue,\r\n stack: 'tco',\r\n backgroundColor: pallete.discounts,\r\n }, {\r\n label: 'Costo total de propiedad',\r\n data: tcoTotal,\r\n stack: 'tco',\r\n backgroundColor: pallete.tco\r\n }]\r\n },\r\n plugins: [ChartDataLabels],\r\n options: {\r\n layout: {\r\n padding: {\r\n top: 50,\r\n bottom: 50,\r\n left: 50,\r\n right: 50\r\n }\r\n },\r\n plugins: {\r\n datalabels: {\r\n anchor: 'end',\r\n align: 'end',\r\n formatter: (value, ctx) => {\r\n const datasets = ctx.chart.data.datasets;\r\n return ctx.datasetIndex !== datasets.length - 1 ? '' :\r\n [Math.round(datasets.reduce((accum, dataset) => accum + getDataValue(dataset, ctx.dataIndex), 0)), 'USD'];\r\n },\r\n font: {\r\n weight: 'normal',\r\n size: 24,\r\n family: 'open-sans, sans-serif',\r\n },\r\n color: '#000',\r\n textAlign: 'center'\r\n },\r\n tooltip: {\r\n filter: ({raw}) => {\r\n return raw !== 0;\r\n },\r\n callbacks: {\r\n label: tooltipItem => {\r\n const value = Array.isArray(tooltipItem.raw) ?\r\n tooltipItem.raw.length !== 2 ? -1 : tooltipItem.raw[1] - tooltipItem.raw[0] : tooltipItem.raw;\r\n return `${tooltipItem.dataset.label}: ${value}`;\r\n }\r\n }\r\n },\r\n legend: {\r\n display: false\r\n }\r\n },\r\n elements: {\r\n bar: {\r\n borderRadius: 10\r\n }\r\n },\r\n datasets: {\r\n bar: {\r\n categoryPercentage: 1,\r\n barPercentage: .9\r\n }\r\n },\r\n scales: {\r\n x: {\r\n ticks: {\r\n font: {\r\n family: 'open-sans, sans-serif',\r\n size: 16,\r\n weight: 'normal'\r\n },\r\n color: '#747171'\r\n }\r\n },\r\n y: {\r\n ticks: {\r\n font: {\r\n family: 'open-sans, sans-serif',\r\n size: 16,\r\n weight: 'normal'\r\n },\r\n color: '#747171'\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private createAnnualCostsChart(tco: Tco | null, id: string,\r\n chart: Chart<'bar', any[], string> | null): Chart<'bar', any[], string> | null {\r\n if (chart) {\r\n chart.destroy();\r\n }\r\n\r\n const canvasContext = document.querySelector(`#${id}`)?.getContext('2d');\r\n\r\n if (!tco || !canvasContext) {\r\n return null;\r\n }\r\n\r\n const numberOfYears = tco.annualFuelCosts.length;\r\n\r\n const averageDepreciation = (tco.vehiclePrice - tco.getDiscountsAndResidualValue()) / numberOfYears;\r\n const annualDepreciationCosts = Array(numberOfYears).fill(averageDepreciation);\r\n\r\n const averageInfrastructureCost = tco.infrastructure / numberOfYears;\r\n const annualInfrastructureCosts = id.includes('electric') ? Array(numberOfYears).fill(0).fill(tco.infrastructure, 0, 1)\r\n : Array(numberOfYears).fill(averageInfrastructureCost);\r\n\r\n const labels = [...Array(numberOfYears).keys()].map((_, i) => `Año ${i + 1}`);\r\n\r\n const [palleteId, title] = id.includes('diesel') ? [PalleteIds.DIESEL, 'Camión diésel']\r\n : id.includes('electric') ? [PalleteIds.ELECTRIC, 'Camión eléctrico'] : [PalleteIds.HYDROGEN, 'Camión hidrógeno'];\r\n const pallete = getTcoColorPallete(palleteId);\r\n const titleColor = getTitleColor(palleteId);\r\n\r\n return new Chart(canvasContext, {\r\n type: 'bar',\r\n data: {\r\n labels,\r\n datasets: [{\r\n label: 'Depreciación',\r\n data: annualDepreciationCosts,\r\n backgroundColor: pallete.vehiclePrice\r\n }, {\r\n label: id.includes('electric') ? 'Energía' : 'Combustible',\r\n data: tco.annualFuelCosts,\r\n backgroundColor: pallete.fuel\r\n }, {\r\n label: 'Mantenimiento',\r\n data: tco.annualMaintenanceCosts,\r\n backgroundColor: pallete.maintenance\r\n }, {\r\n label: 'Seguro',\r\n data: tco.annualInsuranceCosts,\r\n backgroundColor: pallete.insurance\r\n }, {\r\n label: 'Patente',\r\n data: tco.annualPatentCosts,\r\n backgroundColor: pallete.patent\r\n }, {\r\n label: 'Infraestructura',\r\n data: annualInfrastructureCosts,\r\n backgroundColor: pallete.infrastructure\r\n }]\r\n },\r\n options: {\r\n plugins: {\r\n legend: {\r\n position: 'right',\r\n labels: {\r\n usePointStyle: true,\r\n pointStyle: 'circle',\r\n filter: (item, data) => {\r\n return data.datasets[item.datasetIndex].data.some(value => value !== 0);\r\n },\r\n font: {\r\n family: 'open-sans, sans-serif',\r\n size: 20,\r\n },\r\n padding: 50\r\n },\r\n },\r\n title: {\r\n align: 'start',\r\n text: title,\r\n font: {\r\n family: 'Kollektif, sans-serif',\r\n size: 40\r\n },\r\n color: titleColor,\r\n padding: {\r\n bottom: 30\r\n }\r\n }\r\n },\r\n scales: {\r\n x: {\r\n stacked: true,\r\n grid: {\r\n display: false\r\n },\r\n ticks: {\r\n font: {\r\n family: 'open-sans, sans-serif',\r\n size: 16,\r\n weight: 'normal'\r\n },\r\n color: '#747171'\r\n },\r\n title: {\r\n display: true,\r\n color: '#747171',\r\n font: {\r\n family: 'open-sans, sans-serif',\r\n weight: 'normal',\r\n size: 32\r\n },\r\n text: 'Años'\r\n }\r\n },\r\n y: {\r\n stacked: true,\r\n ticks: {\r\n font: {\r\n family: 'open-sans, sans-serif',\r\n size: 16,\r\n weight: 'normal'\r\n },\r\n color: '#747171'\r\n },\r\n title: {\r\n display: true,\r\n color: '#747171',\r\n font: {\r\n family: 'open-sans, sans-serif',\r\n weight: 'normal',\r\n size: 32\r\n },\r\n text: 'USD',\r\n }\r\n }\r\n },\r\n elements: {\r\n bar: {\r\n borderRadius: 10\r\n }\r\n },\r\n datasets: {\r\n bar: {\r\n categoryPercentage: 1,\r\n barPercentage: .9\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n private createCategoryChart(tco: Tco | null, id: string, chart: Chart<'bar', any[], string> | null): Chart<'bar', any[], string> | null {\r\n if (chart) {\r\n chart.destroy();\r\n }\r\n\r\n const canvasContext = document.querySelector(`#${id}`)?.getContext('2d');\r\n\r\n if (!tco || !canvasContext) {\r\n return null;\r\n }\r\n const depreciation = tco.vehiclePrice - tco.residualValue - tco.batteryResidualValue - tco.discounts;\r\n\r\n const data = {\r\n depreciation: {\r\n label: 'Depreciación',\r\n value: depreciation\r\n },\r\n fuel: {\r\n label: id.includes('electric') ? 'Energía' : 'Combustible',\r\n value: tco.fuel\r\n },\r\n maintenance: {\r\n label: 'Mantenimiento',\r\n value: tco.maintenance\r\n },\r\n insurance: {\r\n label: 'Seguro',\r\n value: tco.insurance\r\n },\r\n patent: {\r\n label: 'Patente',\r\n value: tco.patent\r\n },\r\n infrastructure: {\r\n label: 'Infraestructura',\r\n value: tco.infrastructure\r\n }\r\n };\r\n\r\n const labels = Object.values(data).filter(({value}) => value !== 0).map(({label}) => label);\r\n const values = Object.values(data).filter(({value}) => value !== 0).map(({value}) => value);\r\n const palleteId = id.includes('diesel') ? PalleteIds.DIESEL : id.includes('electric') ? PalleteIds.ELECTRIC : PalleteIds.HYDROGEN;\r\n const backgroundColor = getCategoryColor(palleteId);\r\n const title = 'Camión ' + (id.includes('diesel') ? 'diésel' : id.includes('electric') ? 'eléctrico' : 'a hidrógeno');\r\n const titleColor = getTitleColor(palleteId);\r\n\r\n return new Chart(canvasContext, {\r\n type: 'bar',\r\n data: {\r\n labels,\r\n datasets: [{\r\n label: `${id} dataset`,\r\n data: values,\r\n backgroundColor\r\n }]\r\n },\r\n options: {\r\n plugins: {\r\n legend: {\r\n display: false\r\n },\r\n title: {\r\n display: true,\r\n text: title,\r\n color: titleColor,\r\n font: {\r\n family: 'Kollektif, sans-serif',\r\n size: 40,\r\n weight: '900'\r\n },\r\n padding: {\r\n bottom: 30\r\n }\r\n }\r\n },\r\n elements: {\r\n bar: {\r\n borderRadius: 10\r\n }\r\n },\r\n datasets: {\r\n bar: {\r\n categoryPercentage: 1,\r\n barPercentage: .9\r\n }\r\n },\r\n scales: {\r\n x: {\r\n ticks: {\r\n font: {\r\n family: 'open-sans, sans-serif',\r\n size: 16,\r\n weight: 'normal'\r\n },\r\n color: '#747171'\r\n }\r\n },\r\n y: {\r\n ticks: {\r\n font: {\r\n family: 'open-sans, sans-serif',\r\n size: 16,\r\n weight: 'normal'\r\n },\r\n color: '#747171'\r\n },\r\n title: {\r\n display: true,\r\n color: '#747171',\r\n font: {\r\n family: 'open-sans, sans-serif',\r\n weight: 'normal',\r\n size: 32\r\n },\r\n text: 'USD'\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n private setStyles(): void {\r\n document.querySelectorAll('.suffix').forEach(span => {\r\n const rightPadding = span.clientWidth;\r\n const inputSibling = span.previousElementSibling as HTMLElement;\r\n const inputSiblingWidth = inputSibling.clientWidth;\r\n inputSibling.style.paddingRight = `calc(${rightPadding}px + 1.1em)`;\r\n // inputSibling.style.maxWidth = `100%`;\r\n });\r\n\r\n // console.log(document.querySelector('#gross-weight')?.parentElement);\r\n // const inputMaxWidth = document.querySelector('#gross-weight')?.parentElement?.style.maxWidth;\r\n // console.log(`inputMaxWidth: ${inputMaxWidth}`);\r\n // if (!inputMaxWidth) {\r\n // return;\r\n // }\r\n\r\n // document.querySelectorAll('.input-container').forEach(div => {\r\n // div.style.maxWidth = inputMaxWidth;\r\n // });\r\n\r\n\r\n // document.querySelectorAll('.select').forEach(selector => {\r\n // selector.style.maxWidth = inputMaxWidth;\r\n // });\r\n }\r\n\r\n private setTCO(key: keyof TcoList, val: Tco): void {\r\n this.tcoList[key] = val;\r\n }\r\n\r\n onSubmit(section: CalculatorSection, btn: HTMLElement): void {\r\n\r\n if (!this.atLeastOneFormSelected()) {\r\n this.showNoFormSelectedMsg(btn);\r\n return;\r\n }\r\n\r\n // Validate Forms\r\n {\r\n if (!this.areFormsValid()) {\r\n this.showInvalidFormMsg(btn);\r\n return;\r\n }\r\n }\r\n\r\n // Save Forms in service\r\n if (this.truckSelectionForm.get('dieselForm')?.value) {\r\n this._truckFormService.saveDieselForm(this.dieselTruckForm);\r\n }\r\n\r\n if (this.truckSelectionForm.get('electricForm')?.value) {\r\n this._truckFormService.saveElectricForm(this.electricTruckForm);\r\n }\r\n\r\n if (this.truckSelectionForm.get('hydrogenForm')?.value) {\r\n this._truckFormService.saveHydrogenForm(this.hydrogenTruckForm);\r\n }\r\n\r\n this.dataSectionComplete = true;\r\n\r\n this._truckFormService.setFormBooleans(\r\n this.truckSelectionForm.get('dieselForm')?.value,\r\n this.truckSelectionForm.get('electricForm')?.value,\r\n this.truckSelectionForm.get('hydrogenForm')?.value);\r\n\r\n if (section === 'results') {\r\n this._truckFormService.calculateTCO();\r\n }\r\n\r\n this.currentSection = section;\r\n }\r\n\r\n private showNoFormSelectedMsg(btn: HTMLElement): void {\r\n this.startAnimation(btn, 'show-no-form-selected-error');\r\n }\r\n\r\n private showInvalidFormMsg(btn: HTMLElement): void {\r\n this.startAnimation(btn, 'show-invalid-form-error');\r\n }\r\n\r\n private showAssumptionsIncompleteMsg(btn: HTMLElement): void {\r\n this.startAnimation(btn, 'show-assumptions-incomplete-error');\r\n }\r\n\r\n private startAnimation(btn: HTMLElement, className: string): void {\r\n ['show-no-form-selected-error', 'show-invalid-form-error', 'show-assumptions-incomplete-error'].forEach(name => {\r\n btn.classList.remove(name); });\r\n // tslint:disable-next-line:no-unused-expression\r\n void (btn.offsetWidth);\r\n btn.classList.add(className);\r\n }\r\n\r\n private atLeastOneFormSelected(): boolean {\r\n return Object.keys(this.truckSelectionForm.controls).reduce(\r\n (sum, control) => sum + this.truckSelectionForm.get(control)?.value ? 1 : 0, 0) >= 1;\r\n }\r\n\r\n private areFormsValid(): boolean {\r\n let formsValidated = true;\r\n\r\n if (this.truckSelectionForm.get('dieselForm')?.value) {\r\n formsValidated = formsValidated && this.isFormValid(this.dieselTruckForm);\r\n }\r\n\r\n if (this.truckSelectionForm.get('electricForm')?.value) {\r\n formsValidated = formsValidated && this.isFormValid(this.electricTruckForm);\r\n }\r\n\r\n if (this.truckSelectionForm.get('hydrogenForm')?.value) {\r\n formsValidated = formsValidated && this.isFormValid(this.hydrogenTruckForm);\r\n }\r\n\r\n return formsValidated;\r\n }\r\n\r\n private isFormValid(truckForm: FormGroup): boolean {\r\n // return Object.keys(truckForm.controls).every(control => truckForm.get(control)?.valid);\r\n return truckForm.valid;\r\n }\r\n\r\n assumptionsOnSubmit(section: CalculatorSection, btn: HTMLElement): void {\r\n if (!this.isFormValid(this.assumptionsForm)) {\r\n this.showInvalidFormMsg(btn);\r\n return;\r\n }\r\n\r\n this._truckFormService.saveAssumptionsForm(this.assumptionsForm);\r\n if (section === 'results') {\r\n this.assumptionsSectionComplete = true;\r\n this._truckFormService.calculateTCO();\r\n }\r\n this.currentSection = section;\r\n }\r\n\r\n goToSection(section: CalculatorSection, target: EventTarget | null): void {\r\n\r\n const btn = target as HTMLElement;\r\n\r\n if (!btn) {\r\n return;\r\n }\r\n\r\n if (section === this._currentSection ||\r\n (section === 'assumptions' && !this.dataSectionComplete && this.currentSection !== 'data')) {\r\n return;\r\n }\r\n\r\n if (section === 'results' && !this.assumptionsSectionComplete && this.currentSection !== 'assumptions') {\r\n this.showAssumptionsIncompleteMsg(btn);\r\n return;\r\n }\r\n\r\n if (this._currentSection === 'data') {\r\n this.onSubmit(section, btn);\r\n } else if (this._currentSection === 'assumptions') {\r\n this.assumptionsOnSubmit(section, btn);\r\n } else {\r\n this.currentSection = section;\r\n }\r\n\r\n }\r\n\r\n async downloadReport(): Promise {\r\n const selectedTrucks = ['diesel', 'electric', 'hydrogen'].filter(val => this.truckSelectionForm.value[`${val}Form`]);\r\n\r\n const [tcoDoughnutCharts, tcoBarCharts, annualCharts, categoryCharts] = ['tco-doughnut', 'tco-bar', 'annual', 'category']\r\n .map(chartType => {\r\n return selectedTrucks.map(truck => {\r\n return document.querySelector(`#${truck}-${chartType}-chart`);\r\n }).filter(truck => truck) as HTMLCanvasElement[];\r\n });\r\n // const tcoDoughnutCharts = selectedTrucks.map(value => document.querySelector(`#${value}-tco-doughnut-chart`));\r\n // const tcoBarCharts = selectedTrucks.map(value => document.querySelector(`#${value}-tco-bar-chart`));\r\n // const annualCharts = selectedTrucks.map(value => document.querySelector(`#${value}-annual-chart`));\r\n // const categoryCharts = selectedTrucks.m\r\n\r\n if (!tcoDoughnutCharts || !tcoBarCharts || !annualCharts || !categoryCharts || !this.truckFormService.dieselTCO) {\r\n return;\r\n }\r\n\r\n\r\n const charts: HTMLCanvasElement[] = Array.from(document.querySelectorAll('canvas'));\r\n const pdf = await this.pdfService.generatePdf(Object.entries(this._truckFormService.formsWrapper), tcoDoughnutCharts,\r\n tcoBarCharts, annualCharts, categoryCharts,\r\n {\r\n dieselTCO: {title: 'Camión Diésel', value: this.truckFormService.dieselTCO},\r\n electricTCO: this.truckFormService.electricTCO ? {title: 'Camión Eléctrico', value: this.truckFormService.electricTCO} : undefined,\r\n hydrogenTCO: this.truckFormService.hydrogenTCO ? {title: 'Camión a Hidrógeno', value: this.truckFormService.hydrogenTCO} : undefined\r\n });\r\n // this.pdfService.dowloadPdf(pdf);\r\n this.pdfService.dowloadPdf(pdf);\r\n }\r\n\r\n handleFormTitleMapping(formName: string): string {\r\n return getFormTitle(formName);\r\n }\r\n\r\n handleTcoKeyMapping(key: string): string {\r\n return getTcoKeyMapping(key).label;\r\n }\r\n\r\n originalOrder = (a: any, b: any): number => 0;\r\n\r\n // toggleSwitch(field: string): void {\r\n //\r\n // // if (!this.isObjKey(field, this.notAvailableList)) {\r\n // // return;\r\n // // }\r\n //\r\n // // this.notAvailableList[field] = !this.notAvailableList[field];\r\n // this.dieselTruckForm.get(field)?.setValue(!this.dieselTruckForm.get(field)?.value);\r\n // console.log(this.dieselTruckForm);\r\n // // this.notAvailableList = {...this.notAvailableList, field : !this.notAvailableList[field]};\r\n // }\r\n\r\n isObjKey(key: any, obj: T): key is keyof T {\r\n return key in obj;\r\n }\r\n\r\n isNumber(val: any): boolean {\r\n return typeof val === 'number';\r\n }\r\n\r\n getTcoVal(tco: Tco, key: string, mappingFunc: (val: number) => number): number {\r\n return this.isObjKey(key, tco) && typeof tco[key] === 'number' ? mappingFunc(tco[key] as number) : 0;\r\n }\r\n\r\n setTruckModel(): void {\r\n const model = truckModels.find(\r\n ({model, brand}) => this.electricTruckForm.get('modelSelection')?.value === `${brand}-${model}`);\r\n\r\n if (!model) {\r\n return;\r\n }\r\n\r\n const electricTruckFields = ['eGrossWeight', 'eTare', 'battery', 'eTruckPrice', 'chargingTime'];\r\n const electricSwitches = [['batterySwitch', 'battery'], ['eTruckPriceSwitch', 'eTruckPrice']];\r\n const assumptionsFormFields = ['batteryTimeWarranty', 'batteryDistanceWarranty'];\r\n\r\n // Object.entries(newValue).filter(([key]) => electricTruckFields.includes(key)).forEach(([key, value]) => {\r\n // if (!value) {\r\n // this.electricTruckForm.get(key)?.setValue('');\r\n // return;\r\n // }\r\n //\r\n // this.electricTruckForm.get(key)?.setValue(value);\r\n // });\r\n this.setFormValues(this.electricTruckForm, electricTruckFields, model);\r\n\r\n electricSwitches.forEach(([switchVal, modelField]) => {\r\n this.electricTruckForm.get(switchVal)?.setValue(!model[modelField as keyof TruckModel]);\r\n });\r\n\r\n this.setFormValues(this.assumptionsForm, assumptionsFormFields, model, false);\r\n\r\n // console.log(this.electricTruckForm.get('modelSelection')?.value);\r\n // console.log(truckModels.map(({brand, model}) => `${brand}-${model}`));\r\n // this.electricTruckForm.get('modelSelection')?.setValue('');\r\n }\r\n\r\n setFormValues(formGroup: FormGroup, formFields: string[], model: TruckModel, unsetEmptyFields: boolean = true): void {\r\n Object.entries(model).filter(([key]) => formFields.includes(key)).forEach(([key, value]) => {\r\n if (!value) {\r\n if (unsetEmptyFields) {\r\n formGroup.get(key)?.setValue('');\r\n }\r\n return;\r\n }\r\n\r\n formGroup.get(key)?.setValue(value);\r\n });\r\n }\r\n\r\n getTruckModels(): TruckModel[] {\r\n return truckModels;\r\n }\r\n\r\n setBubbles(): void {\r\n document.querySelectorAll('.slider').forEach(input => this.setBubble(input));\r\n }\r\n\r\n setBubble(target: EventTarget | null): void {\r\n\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const range = target as HTMLInputElement;\r\n const bubble = range.parentElement?.querySelector('.output-bubble') as HTMLOutputElement;\r\n\r\n if (!bubble) {\r\n return;\r\n }\r\n\r\n const val = parseFloat(range.value);\r\n const min = range.min ? parseFloat(range.min) : 0;\r\n const max = range.max ? parseFloat(range.max) : 100;\r\n const newVal = Number((val - min) * 100 / (max - min));\r\n bubble.innerHTML = val.toString();\r\n bubble.style.left = `calc(${newVal}% + (${8 - newVal * 0.15}px))`;\r\n }\r\n\r\n onResultsFormChange(): void {\r\n if (this.resultsVariablesForm.invalid) {\r\n return;\r\n }\r\n\r\n this.setForms();\r\n this.saveForms();\r\n this._truckFormService.calculateTCO();\r\n this.createCharts();\r\n }\r\n\r\n setForms(): void {\r\n this.dieselTruckForm.get('dailyDistance')?.setValue(this.resultsVariablesForm.get('dailyDistance')?.value);\r\n this.dieselTruckForm.get('operatingDays')?.setValue(this.resultsVariablesForm.get('operatingDays')?.value);\r\n this.dieselTruckForm.get('vehicleChange')?.setValue(this.resultsVariablesForm.get('vehicleChange')?.value);\r\n this.electricTruckForm.get('chargingSchedule')?.setValue(this.resultsVariablesForm.get('chargingSchedule')?.value);\r\n this.assumptionsForm.get('pesoDollarConv')?.setValue(this.resultsVariablesForm.get('pesoDollarConv')?.value);\r\n this.dieselTruckForm.get('gasCost')?.setValue(this.resultsVariablesForm.get('gasCost')?.value);\r\n }\r\n\r\n saveForms(): void {\r\n this._truckFormService.saveDieselForm(this.dieselTruckForm);\r\n this._truckFormService.saveElectricForm(this.electricTruckForm);\r\n this._truckFormService.saveAssumptionsForm(this.assumptionsForm);\r\n }\r\n\r\n private loadResultsForm(): void {\r\n this.resultsVariablesForm.get('dailyDistance')?.setValue(this.dieselTruckForm.get('dailyDistance')?.value);\r\n this.resultsVariablesForm.get('operatingDays')?.setValue(this.dieselTruckForm.get('operatingDays')?.value);\r\n this.resultsVariablesForm.get('vehicleChange')?.setValue(this.dieselTruckForm.get('vehicleChange')?.value);\r\n this.resultsVariablesForm.get('chargingSchedule')?.setValue(this.electricTruckForm.get('chargingSchedule')?.value);\r\n this.resultsVariablesForm.get('pesoDollarConv')?.setValue(this.assumptionsForm.get('pesoDollarConv')?.value);\r\n this.resultsVariablesForm.get('gasCost')?.setValue(this.dieselTruckForm.get('gasCost')?.value);\r\n }\r\n\r\n // private loadTruckFormGroup(): FormGroup {\r\n // return this.truckFormService.truckFormGroup === null ?\r\n // // FormGroup with TCO form fields and their corresponding validators\r\n // this.formBuilder.group({\r\n // // Truck\r\n // grossWeight: [10, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // tare: [4, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // vehicleChange: [10, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // // Trajectory\r\n // distanceTraveled: [150, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // performance: [4.5, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // averageSpeed: [30, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // transport: ['regional', [Validators.required]],\r\n // operatingDays: [350, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // // Economy\r\n // gasCost: [1.2, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // maintenanceCost: [5000, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // insuranceCost: [1500, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // truckPrice: [90000, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // // Truck\r\n // eGrossWeight: [15, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // eTare: [5, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // battery: ['', [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // // Electricity\r\n // uteFare: ['mc1', [Validators.required]],\r\n // hiredPower: [800, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // chargingSchedule: ['peak', [Validators.required]],\r\n // chargingTime: [8, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // // Economy\r\n // eInsuranceCost: [1650, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // eTruckPrice: [123000, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // comapDiscount: [false],\r\n // // eLifespan: ['', [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // // Truck\r\n // hGrossWeight: [12, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // hTare: [3, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // tankSize: ['', [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // cellPower: ['', [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // // Economy\r\n // hydrogenCost: [9, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // hInsuranceCost: [1650, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // hTruckPrice: [170000, [Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // // hLifespan: ['', [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // // Additional Data\r\n // pesoDollarConv: [44, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]]\r\n // // inflation: [3, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)')]],\r\n // // discountRate: [2, [Validators.required, Validators.pattern('([0-9]+([.][0-9]*)?|[.][0-9]+)'), Validators.max(100)]]\r\n // }) : this.truckFormService.truckFormGroup;\r\n // }\r\n\r\n // Is called when the html tag finds a unsatisfied validator condition\r\n // Returns corresponding error message\r\n // getErrorMessage(fieldName: string): string {\r\n //\r\n // if (this.truckForm.get(fieldName)?.hasError('required')) {\r\n // return 'Campo obligatorio';\r\n // } else if (this.truckForm.get(fieldName)?.hasError('pattern') || this.truckForm.get(fieldName)?.hasError('max')) {\r\n // return 'Formato inválido';\r\n // }\r\n //\r\n // return 'Unexpected call';\r\n // }\r\n // isChargingScheduleValid(): boolean {\r\n // return !['rs', 'gs'].includes(this.truckForm.get('uteFare')?.value);\r\n // }\r\n\r\n // On submit\r\n // submitForm(): void {\r\n //\r\n // if (!this.formValidationService.formIsValid(this.truckForm)) {\r\n // return;\r\n // }\r\n //\r\n // this.truckFormService.saveTruckFormGroup(this.truckForm);\r\n //\r\n // this.router.navigateByUrl('/supuestos');\r\n // // if (this._formValidationService.formIsValid(this.truckForm)) {\r\n // // this.truckFormService.calculateTCO(this.truckForm);\r\n // // console.log('form sent');\r\n // // } else {\r\n // // console.log('invalid form');\r\n // // }\r\n // }\r\n\r\n // Verify field validators in each field\r\n // formIsValid(): boolean {\r\n // for (const key of Object.keys(this.truckForm.controls)) {\r\n // if (this.truckForm.get(key)?.errors != null) {\r\n // return false;\r\n // }\r\n // }\r\n //\r\n // return true;\r\n // }\r\n\r\n // modifies chargingSchedule value if the current one is invalid\r\n // verifychargingSchedule(): void {\r\n // if (!this.isChargingScheduleValid()) {\r\n // this.truckForm.get('charchingSchedule')?.setValue('valley');\r\n // }\r\n // }\r\n\r\n // checks if the tare is less or equal than the grossWeight\r\n // verifyTare(type: string): void {\r\n // let grossWeightField: string;\r\n // let tareField: string;\r\n //\r\n // // define truck type\r\n // if (type === 'diesel') {\r\n // grossWeightField = 'grossWeight';\r\n // tareField = 'tare';\r\n // } else if (type === 'electric') {\r\n // grossWeightField = 'eGrossWeight';\r\n // tareField = 'eTare';\r\n // } else {\r\n // grossWeightField = 'hGrossWeight';\r\n // tareField = 'hTare';\r\n // }\r\n //\r\n // if (!this.formValidationService.fieldIsValid(this.truckForm, grossWeightField) ||\r\n // !this.formValidationService.fieldIsValid(this.truckForm, tareField)) {\r\n // return;\r\n // }\r\n //\r\n // const grossWeight = TruckFormService.getNumberValue(this.truckForm, grossWeightField);\r\n // const tare = TruckFormService.getNumberValue(this.truckForm, tareField);\r\n //\r\n // if (tare > grossWeight) {\r\n // this.truckForm.get(tareField)?.setValue(this.truckForm.get(grossWeightField)?.value);\r\n // }\r\n // }\r\n\r\n}\r\n\r\n","
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n

Marque las tecnologías que le interese comparar y complete los datos

\r\n\r\n \r\n
\r\n
\r\n\r\n
\r\n

Camión a combustión interna

\r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n\r\n
\r\n

Camión

\r\n
\r\n \r\n
\r\n \r\n ton\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n ton\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n años\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n

Operación

\r\n
\r\n \r\n
\r\n \r\n km/día\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n km/lt\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n km/h\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n días\r\n
\r\n
\r\n
\r\n\r\n
\r\n

Economía

\r\n
\r\n \r\n
\r\n \r\n $/lt\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n USD/año\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n $/año\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n USD\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n
\r\n

Camión a batería eléctrica

\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n\r\n
\r\n

Camión

\r\n
\r\n \r\n
\r\n \r\n ton\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n ton\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n kWh\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n

Operación

\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n kW\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n horas\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n

Economía

\r\n
\r\n \r\n
\r\n \r\n $/año\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n USD\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n

Camión a hidrógeno

\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n\r\n
\r\n

Camión

\r\n
\r\n \r\n
\r\n \r\n ton\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n ton\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n kg\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n kW\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n

Operación

\r\n
\r\n \r\n
\r\n \r\n USD/kg\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n $/año\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n USD\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n

Datos adicionales

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n %\r\n
\r\n \r\n
\r\n \r\n %\r\n
\r\n \r\n
\r\n \r\n %\r\n
\r\n
\r\n \r\n
\r\n \r\n %\r\n
\r\n \r\n
\r\n \r\n %\r\n
\r\n
\r\n

Vidas útiles de los camiones

\r\n
\r\n \r\n
\r\n \r\n años\r\n
\r\n \r\n
\r\n \r\n años\r\n
\r\n \r\n
\r\n \r\n años\r\n
\r\n \r\n
\r\n \r\n km\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n USD\r\n
\r\n \r\n
\r\n \r\n años\r\n
\r\n
\r\n \r\n
\r\n \r\n USD/kg\r\n
\r\n \r\n
\r\n \r\n $/USD\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n

Variables

\r\n

Aquí puedes modificar variables rápidamente para evaluar cómo cambian los costos. Si deseas cambiar otra\r\n variable que no aparezca aquí, vuelva a \"DATOS\".\r\n

\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
0350
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
0365
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
020
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n $/USD\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n $/LT\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n

Resumen de Costos Totales de Propiedad

\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{handleFormTitleMapping(value.key)}}\r\n
\r\n {{dieselTcoValue.value.mapping.label}}\r\n \r\n {{dieselTcoValue.value.mapping.mapValue(dieselTcoValue.value.value) | toFixed}}\r\n \r\n {{getTcoVal(truckFormService.electricTCO, dieselTcoValue.key, dieselTcoValue.value.mapping.mapValue) | toFixed}}\r\n \r\n {{getTcoVal(truckFormService.hydrogenTCO, dieselTcoValue.key, dieselTcoValue.value.mapping.mapValue) | toFixed}}\r\n
TCO\r\n {{truckFormService.dieselTCO.getTCO() | toFixed}}\r\n \r\n {{truckFormService.electricTCO.getTCO() | toFixed}}\r\n \r\n {{truckFormService.hydrogenTCO.getTCO() | toFixed}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n

Costos Totales de Propiedad

\r\n
\r\n
\r\n
\r\n

Camión diésel

\r\n \r\n
\r\n
\r\n

Camión eléctrico

\r\n \r\n
\r\n
\r\n

Camión a hidrógeno

\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n

Costos de propiedad anuales

\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n

Costos totales de propiedad por categoría

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n","import {enableProdMode} from '@angular/core';\nimport {platformBrowserDynamic} from '@angular/platform-browser-dynamic';\n\nimport {AppModule} from './app/app.module';\nimport {environment} from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"zn8P\";"],"sourceRoot":"webpack:///"}