{"id":22061,"date":"2025-12-01T18:10:14","date_gmt":"2025-12-01T16:10:14","guid":{"rendered":"https:\/\/tilde.ai\/?page_id=22061"},"modified":"2026-04-24T13:21:18","modified_gmt":"2026-04-24T11:21:18","slug":"ai-assistant-roi-calculator","status":"publish","type":"page","link":"https:\/\/tilde.ai\/lv\/ai-assistant-roi-calculator\/","title":{"rendered":"AI pal\u012bgs Rio kalkulators"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"22061\" class=\"elementor elementor-22061\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-24a074d e-flex e-con-boxed e-con e-parent\" data-id=\"24a074d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b1825e3 elementor-widget elementor-widget-heading\" data-id=\"b1825e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">ROI kalkulators <\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-da51fe9 elementor-widget elementor-widget-text-editor\" data-id=\"da51fe9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>\u0160is kalkulators apr\u0113\u0137ina, cik daudz laika un naudas j\u016bsu organiz\u0101cija var\u0113tu ietaup\u012bt, izmantojot MI asistentu klientu atbalstam.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-292a25c e-con-full e-flex e-con e-child\" data-id=\"292a25c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-21d15a4 elementor-widget__width-auto elementor-widget elementor-widget-button\" data-id=\"21d15a4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/tilde.ai\/lv\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Sazin\u0101ties ar mums<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c156bc6 elementor-align-center elementor-widget__width-auto elementor-widget elementor-widget-button\" data-id=\"c156bc6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/tilde.ai\/lv\/ai-chatbots\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Izp\u0113t\u012bt AI pal\u012bgu<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-39e2d38 e-flex e-con-boxed e-con e-parent\" data-id=\"39e2d38\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c561c7 elementor-widget elementor-widget-html\" data-id=\"0c561c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\r\n    <style>\r\n    .elementor-kit-8 label {\r\n    color: #ffff;\r\n    font-size: 0.9rem;\r\n    font-weight: 500;\r\n    letter-spacing: -0.1px;\r\n}\r\n    .elementor-kit-8 h2 {\r\n    color: #ffff;\r\n\r\n}\r\n.results-table tbody td {\r\n    padding: 12px;\r\n    color: #ffff;\r\n    border-bottom: 1px solid var(--line);\r\n    font-size: 14px;\r\n}\r\n.elementor-kit-8 input:not([type=\"button\"]):not([type=\"submit\"]) {\r\n      accent-color: #4ca85a;\r\n}\r\n.card{\r\n    background: #353637;\r\n}\r\n\r\n\r\n\r\n    <\/style>\r\n\r\n\r\n<noscript>\r\n    <div style=\"padding:12px; background:#111318; border:1px solid #1f2430; border-radius:8px; margin-bottom:12px;\">\r\n        \u0160im kalkulatoram ir j\u0101b\u016bt aktiviz\u0113tam Javascript, lai tas darbotos.\r\n    <\/div>\r\n<\/noscript>\r\n<main class=\"wrapper\">\r\n    <!-- Inputs -->\r\n    <section class=\"card\">\r\n        <h2>Ievades<\/h2>\r\n        <div class=\"sub\">Visas v\u0113rt\u012bbas ir veseli skait\u013ci. Procentu\u0101lo sl\u012bd\u0146u maksim\u0101l\u0101 v\u0113rt\u012bba ir 100%.<\/div>\r\n\r\n        <form id=\"calc-form\" autocomplete=\"off\" novalidate action=\"\">\r\n            <div class=\"field\"\r\n             title=\"MI asistenta kop\u0113j\u0101s izmaksas gad\u0101: izstr\u0101des maksa + abonements, izteikts k\u0101 kopsumma gad\u0101. \u0160os skait\u013cus sniedz Tilde.\">\r\n                <label for=\"AI_License_Cost_per_Year_EUR\">MI asistenta izmaksas gad\u0101 (EUR) <\/label>\r\n                <input id=\"AI_License_Cost_per_Year_EUR\" name=\"AI_License_Cost_per_Year_EUR\" type=\"number\"\r\n                       inputmode=\"numeric\" min=\"0\" step=\"1\" value=\"55000\" required\r\n data-field=\"AI_License_Cost_per_Year_EUR\" \/>\r\n            <\/div>\r\n         \r\n\r\n            <div class=\"field\" title=\"Vid\u0113jais viena a\u0123enta darba laiks ned\u0113\u013c\u0101 (piem., 40\u202fstundas).\">\r\n                <label for=\"Working_Hours_per_Week\">A\u0123enta darba stundas ned\u0113\u013c\u0101<\/label>\r\n                <input id=\"Working_Hours_per_Week\" name=\"Working_Hours_per_Week\" type=\"number\"\r\n                       inputmode=\"numeric\" min=\"0\" step=\"1\" value=\"40\" required\r\n data-field=\"Working_Hours_per_Week\" \/>\r\n            <\/div>\r\n\r\n            <div class=\"field\" title=\"Cik ned\u0113\u013cu gad\u0101 a\u0123enti faktiski str\u0101d\u0101, iz\u0146emot br\u012bvdienas un atva\u013cin\u0101juma laiku.\">\r\n                <label for=\"Working_Weeks_per_Year\">Darba ned\u0113\u013cas gad\u0101<\/label>\r\n                <input id=\"Working_Weeks_per_Year\" name=\"Working_Weeks_per_Year\" type=\"number\"\r\n                       inputmode=\"numeric\" min=\"0\" step=\"1\" value=\"52\" required\r\n data-field=\"Working_Weeks_per_Year\" \/>\r\n            <\/div>\r\n\r\n            <div class=\"field\" title=\"Vid\u0113jais m\u0113nes\u012b apstr\u0101d\u0101to bi\u013ce\u0161u, t\u0113rz\u0113\u0161anas sarunu, e-pasta zi\u0146ojumu vai zvanu skaits.\">\r\n                <label for=\"Customer_Requests_per_Month\">Klientu piepras\u012bjumu skaits m\u0113nes\u012b<\/label>\r\n                <input id=\"Customer_Requests_per_Month\" name=\"Customer_Requests_per_Month\" type=\"number\"\r\n                       inputmode=\"numeric\" min=\"0\" step=\"1\" value=\"65000\" required\r\n data-field=\"Customer_Requests_per_Month\" \/>\r\n            <\/div>\r\n\r\n            <div class=\"field\" title=\"Cik ilgs laiks a\u0123entam nepiecie\u0161ams viena piepras\u012bjuma apstr\u0101dei no s\u0101kuma l\u012bdz beig\u0101m, tostarp t\u0101 izlas\u012b\u0161anai, atbildes snieg\u0161anai, re\u0123istr\u0113\u0161anai un atrisin\u0101\u0161anai.\">\r\n                <label for=\"Avg_Minutes_per_Request\">Vid\u0113jais viena piepras\u012bjuma apstr\u0101des laiks (min\u016bt\u0113s)<\/label>\r\n                <input id=\"Avg_Minutes_per_Request\" name=\"Avg_Minutes_per_Request\" type=\"number\"\r\n                       inputmode=\"numeric\" min=\"0\" step=\"1\" value=\"5\" required\r\n data-field=\"Avg_Minutes_per_Request\" \/>\r\n            <\/div>\r\n\r\n            <div class=\"field\" title=\"Viena pilna laika atbalsta a\u0123enta bruto gada alga pirms darba dev\u0113ja pieskait\u0101maj\u0101m izmaks\u0101m. Ja algas at\u0161\u0137iras, izmantojiet vid\u0113jo v\u0113rt\u012bbu.\">\r\n                <label for=\"Base_Salary_per_Agent_EUR\">Viena a\u0123enta gada pamatalga (EUR)<\/label>\r\n                <input id=\"Base_Salary_per_Agent_EUR\" name=\"Base_Salary_per_Agent_EUR\" type=\"number\"\r\n                       inputmode=\"numeric\" min=\"0\" step=\"1\" value=\"20400\" required\r\n data-field=\"Base_Salary_per_Agent_EUR\" \/>\r\n            <\/div>\r\n\r\n            <div class=\"field\" style=\"grid-column: 1 \/ -1;\" title=\"Citas izmaksas papildus algai, piem\u0113ram, nodok\u013ci, pabalsti, darba r\u012bki un biroja izdevumi. Tipiski \u0161\u012bs izmaksas veido 20\u201330% maz\u0101k\u0101 komand\u0101 un 40\u201360% liel\u0101k\u0101 korporat\u012bvaj\u0101 vid\u0113.\">\r\n                <label>Darba dev\u0113ja pieskait\u0101m\u0101s izmaksas (%)  <\/label>\r\n                <div class=\"range-row\">\r\n                    <input id=\"Oncost_Percent_range\" type=\"range\" min=\"0\" max=\"100\" step=\"1\" aria-label=\"Pa\u0161izmaksas procentu sl\u012bdnis\"\r\n                           value=\"15\" data-field=\"Oncost_Percent\" data-role=\"range\" \/>\r\n                    <input id=\"Oncost_Percent\" name=\"Oncost_Percent\" type=\"number\" inputmode=\"numeric\"\r\n                           min=\"0\" max=\"100\" step=\"1\" value=\"15\" required\r\n data-field=\"Oncost_Percent\" data-role=\"number\" \/>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"field\" style=\"grid-column: 1 \/ -1;\" title=\"T\u0101 klientu piepras\u012bjumu procentu\u0101l\u0101 da\u013ca, kurus MI asistents var apstr\u0101d\u0101t bez cilv\u0113ka iesaistes. Agr\u012bnajos ievie\u0161anas posmos tie bie\u017ei vien ir 10\u201335%, savuk\u0101rt att\u012bst\u012bti risin\u0101jumi var p\u0101rsniegt 50%.\">\r\n                <label>MI piln\u012bb\u0101 atrisin\u0101tie piepras\u012bjumi (%) <\/label>\r\n                <div class=\"range-row\">\r\n                    <input id=\"Auto_Resolved_Rate_range\" type=\"range\" min=\"0\" max=\"100\" step=\"1\" aria-label=\"Autom\u0101tiski atrisin\u0101ta \u0101truma sl\u012bdnis\"\r\n                           value=\"55\" data-field=\"Auto_Resolved_Rate\" data-role=\"range\" \/>\r\n                    <input id=\"Auto_Resolved_Rate\" name=\"Auto_Resolved_Rate\" type=\"number\" inputmode=\"numeric\"\r\n                           min=\"0\" max=\"100\" step=\"1\" value=\"55\" required\r\n data-field=\"Auto_Resolved_Rate\" data-role=\"number\" \/>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"field\" style=\"grid-column: 1 \/ -1;\" title=\"Cik daudz \u0101tr\u0101k a\u0123enti apstr\u0101d\u0101 atliku\u0161os piepras\u012bjumus, pateicoties papildu MI atbalstam (melnraksti, kopsavilkumi, inform\u0101cijas uzmekl\u0113\u0161ana). Iestatiet v\u0113rt\u012bbu 0, ja MI nepal\u012bdz a\u0123entiem ar citiem uzdevumiem, iz\u0146emot piepras\u012bjumu apstr\u0101di. Neliela pal\u012bdz\u012bba parasti nodro\u0161ina 5\u201310%, bet uzlabotas sist\u0113mas var sasniegt 15\u201330%.\">\r\n                <label>A\u0123entu apstr\u0101d\u0101tajiem piepras\u012bjumiem pat\u0113r\u0113t\u0101 laika samazin\u0101jums (%)<\/label>\r\n                <div class=\"range-row\">\r\n                    <input id=\"Time_Reduction_on_Non_Auto_range\" type=\"range\" min=\"0\" max=\"100\" step=\"1\" aria-label=\"Laika samazin\u0101\u0161ana sl\u012bdn\u012b, kas nav autom\u0101tisks\"\r\n                           value=\"5\" data-field=\"Time_Reduction_on_Non_Auto\" data-role=\"range\" \/>\r\n                    <input id=\"Time_Reduction_on_Non_Auto\" name=\"Time_Reduction_on_Non_Auto\" type=\"number\" inputmode=\"numeric\"\r\n                           min=\"0\" max=\"100\" step=\"1\" value=\"5\" required\r\n data-field=\"Time_Reduction_on_Non_Auto\" data-role=\"number\" \/>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <input type=\"hidden\" name=\"twt-form-language\" value=\"lv\"\/><\/form>\r\n    <\/section>\r\n\r\n    <!-- Results -->\r\n    <aside class=\"card\">\r\n        <h2>Rezult\u0101ti<\/h2>\r\n        <div class=\"sub\">Mainot ievad\u012bt\u0101s v\u0113rt\u012bbas, rezult\u0101ti tiek atjaunin\u0101ti re\u0101llaik\u0101.<\/div>\r\n\r\n        <table class=\"results-table\">\r\n            <thead>\r\n            <tr>\r\n                <th style=\"width:65%;\">R\u0101d\u012bt\u0101ji:<\/th>\r\n                <th style=\"width:35%; text-align:right;\">V\u0113rt\u012bba:<\/th>\r\n            <\/tr>\r\n            <\/thead>\r\n            <tbody>\r\n            <tr>\r\n                <td class=\"metric\">Pa\u0161reiz\u0113j\u0101s atbalsta izmaksas gad\u0101 (EUR)<\/td>\r\n                <td class=\"value\" id=\"out_Current_Annual_Cost_EUR\">\u20ac0<\/td>\r\n            <\/tr>\r\n            <tr>\r\n                <td class=\"metric\">Atbalsta izmaksas gad\u0101, izmantojot MI (EUR)<\/td>\r\n                <td class=\"value\" id=\"out_New_Annual_Cost_EUR\">\u20ac0<\/td>\r\n            <\/tr>\r\n            <tr>\r\n                <td class=\"metric\">Bruto ietaup\u012bjumi gad\u0101 (EUR)<\/td>\r\n                <td class=\"value good\" id=\"out_Gross_Savings_EUR_per_Year\">\u20ac0<\/td>\r\n            <\/tr>\r\n            <tr>\r\n                <td class=\"metric\">Neto ietaup\u012bjumi gad\u0101 (EUR)<\/td>\r\n                <td class=\"value good\" id=\"out_Net_Savings_EUR_per_Year\">\u20ac0<\/td>\r\n            <\/tr>\r\n            <tr>\r\n                <td class=\"metric\">Pe\u013c\u0146a no kapit\u0101la ieguld\u012bjuma (ROI)<\/td>\r\n                <td class=\"value\" id=\"out_ROI_Percent\">0%<\/td>\r\n            <\/tr>\r\n            <tr>\r\n                <td class=\"metric\">Atmaksas periods (m\u0113ne\u0161os) <\/td>\r\n                <td class=\"value\" id=\"out_Payback_Months\">\u2014<\/td>\r\n            <\/tr>\r\n            <tr>\r\n                <td class=\"metric\">Ietaup\u012btais laiks gad\u0101 (stund\u0101s)<\/td>\r\n                <td class=\"value\" id=\"out_Time_Saved_Hours_per_Year\">0<\/td>\r\n            <\/tr>\r\n            <tr>\r\n                <td class=\"metric\">Ietaup\u012bto pilnas slodzes \u0161tata vietu ekvivalents<\/td>\r\n                <td class=\"value\" id=\"out_FTE_Saved\">0<\/td>\r\n            <\/tr>\r\n            <\/tbody>\r\n        <\/table>\r\n    <\/aside>\r\n<\/main>\r\n<div id=\"results\" aria-live=\"polite\" hidden><\/div>\r\n\r\n\r\n\r\n<script>\r\n\/* =========================\r\n   Pure config + helpers\r\n   ========================= *\/\r\n\r\nconst FIELD_CONSTRAINTS = {\r\n  Number_of_Agents: {min: 1, max: null},\r\n  Working_Hours_per_Week: {min: 0, max: null},\r\n  Working_Weeks_per_Year: {min: 0, max: 52\r\n  },\r\n  Customer_Requests_per_Month: {min: 0, max: null},\r\n  Avg_Minutes_per_Request: {min: 0, max: null},\r\n  Base_Salary_per_Agent_EUR: {min: 0, max: null},\r\n  Oncost_Percent: {min: 0, max: 100},\r\n  Auto_Resolved_Rate: {min: 0, max: 99.99},\r\n  Time_Reduction_on_Non_Auto: {min: 0, max: 100},\r\n  AI_License_Cost_per_Year_EUR: {min: 0, max: null},\r\n};\r\n\r\nfunction clamp(n, min, max) {\r\n  if (n < min) return min;\r\n  if (max !== null && n > max) return max;\r\n  return n;\r\n}\r\n\r\nfunction sanitizeValue(raw, {min, max}) {\r\n  if (raw === \"\" || raw === null || raw === undefined) return 0;\r\n\r\n  let n = Number(raw);\r\n  if (!Number.isFinite(n)) n = 0;\r\n\r\n  n = Math.floor(n);\r\n  n = clamp(n, min, max);\r\n\r\n  return n;\r\n}\r\n\r\nfunction getRepresentativeInput(formEl, fieldName) {\r\n  return formEl.querySelector(\r\n    `[data-field=\"${fieldName}\"][data-role=\"number\"], [data-field=\"${fieldName}\"]:not([data-role])`\r\n  );\r\n}\r\n\r\nfunction setFieldValue(formEl, fieldName, value) {\r\n  const inputs = formEl.querySelectorAll(`[data-field=\"${fieldName}\"]`);\r\n  inputs.forEach((el) => {\r\n    if (String(el.value) !== String(value)) {\r\n      el.value = value;\r\n    }\r\n  });\r\n}\r\n\r\nfunction getSanitizedValuesFromForm(formEl) {\r\n  const values = {};\r\n\r\n  for (const fieldName of Object.keys(FIELD_CONSTRAINTS)) {\r\n    const input = getRepresentativeInput(formEl, fieldName);\r\n    const raw = input ? input.value : \"0\";\r\n\r\n    const sanitized = sanitizeValue(raw, FIELD_CONSTRAINTS[fieldName]);\r\n    values[fieldName] = sanitized;\r\n\r\n    setFieldValue(formEl, fieldName, sanitized);\r\n  }\r\n\r\n  return values;\r\n}\r\n\r\n\/* =========================\r\n   Formulas\r\n   ========================= *\/\r\n\r\nfunction computeResults(values) {\r\n  const Annual_Working_Hours =\r\n    values.Working_Hours_per_Week * values.Working_Weeks_per_Year;\r\n\r\n  const Fully_Loaded_Salary =\r\n    values.Base_Salary_per_Agent_EUR * (1 + values.Oncost_Percent \/ 100);\r\n\r\n  const Hourly_Cost =\r\n    Annual_Working_Hours === 0 ? 0 : Fully_Loaded_Salary \/ Annual_Working_Hours;\r\n\r\n  const Requests_per_Year =\r\n    values.Customer_Requests_per_Month * 12;\r\n\r\n  const Hours_per_Request =\r\n    values.Avg_Minutes_per_Request \/ 60;\r\n\r\n  const Current_Handling_Hours =\r\n    Requests_per_Year * Hours_per_Request;\r\n\r\n  const Current_Annual_Cost_EUR =\r\n    Current_Handling_Hours * Hourly_Cost;\r\n\r\n  const AutoResolved_Requests =\r\n    Requests_per_Year * values.Auto_Resolved_Rate \/ 100;\r\n\r\n  const NonAuto_Requests =\r\n    Requests_per_Year - AutoResolved_Requests;\r\n\r\n  const New_Hours_for_NonAuto =\r\n    NonAuto_Requests *\r\n    (values.Avg_Minutes_per_Request * (1 - values.Time_Reduction_on_Non_Auto \/ 100)) \/\r\n    60;\r\n\r\n  const New_Total_Handling_Hours =\r\n    New_Hours_for_NonAuto;\r\n\r\n  const New_Annual_Cost_EUR =\r\n    New_Total_Handling_Hours * Hourly_Cost;\r\n\r\n  const Time_Saved_Hours_per_Year =\r\n    New_Total_Handling_Hours * Hourly_Cost;\r\n\r\n  const FTE_Saved =\r\n    Annual_Working_Hours === 0 ? 0 : Time_Saved_Hours_per_Year \/ Annual_Working_Hours;\r\n\r\n  const Gross_Savings_EUR_per_Year =\r\n    Current_Annual_Cost_EUR - New_Annual_Cost_EUR;\r\n\r\n  const Net_Savings_EUR_per_Year =\r\n    Gross_Savings_EUR_per_Year - values.AI_License_Cost_per_Year_EUR;\r\n\r\n  const ROI_Percent =\r\n    values.AI_License_Cost_per_Year_EUR === 0\r\n      ? 0\r\n      : Net_Savings_EUR_per_Year \/ values.AI_License_Cost_per_Year_EUR;\r\n\r\n  const Payback_Months =\r\n    Gross_Savings_EUR_per_Year === 0\r\n      ? \"\"\r\n      : 12 * values.AI_License_Cost_per_Year_EUR \/ Gross_Savings_EUR_per_Year;\r\n\r\n  return {\r\n    Annual_Working_Hours,\r\n    Fully_Loaded_Salary,\r\n    Hourly_Cost,\r\n    Requests_per_Year,\r\n    Hours_per_Request,\r\n    Current_Handling_Hours,\r\n    Current_Annual_Cost_EUR,\r\n    AutoResolved_Requests,\r\n    NonAuto_Requests,\r\n    New_Hours_for_NonAuto,\r\n    New_Total_Handling_Hours,\r\n    New_Annual_Cost_EUR,\r\n    Time_Saved_Hours_per_Year,\r\n    FTE_Saved,\r\n    Gross_Savings_EUR_per_Year,\r\n    Net_Savings_EUR_per_Year,\r\n    ROI_Percent,\r\n    Payback_Months,\r\n  };\r\n}\r\n\r\n\/* =========================\r\n   Class: DOM orchestration\r\n   ========================= *\/\r\n\r\nclass LiveCalculator {\r\n  constructor({formId, resultsId, onResults}) {\r\n    this.formEl = document.getElementById(formId);\r\n    this.resultsEl = document.getElementById(resultsId);\r\n    this.onResults = typeof onResults === \"function\" ? onResults : null;\r\n\r\n    if (!this.formEl) throw new Error(`Form element #${formId} not found`);\r\n    if (!this.resultsEl) throw new Error(`Results element #${resultsId} not found`);\r\n\r\n    this.handleInput = this.handleInput.bind(this);\r\n    this.formEl.addEventListener(\"input\", this.handleInput);\r\n\r\n    this.recalculate();\r\n  }\r\n\r\n  getValues() {\r\n    return getSanitizedValuesFromForm(this.formEl);\r\n  }\r\n\r\n  setValues(partialValues = {}) {\r\n    for (const [fieldName, rawValue] of Object.entries(partialValues)) {\r\n      if (!FIELD_CONSTRAINTS[fieldName]) continue;\r\n\r\n      const sanitized = sanitizeValue(rawValue, FIELD_CONSTRAINTS[fieldName]);\r\n      setFieldValue(this.formEl, fieldName, sanitized);\r\n    }\r\n\r\n    this.recalculate();\r\n  }\r\n\r\n  recalculate() {\r\n    const values = this.getValues();\r\n    const results = computeResults(values);\r\n\r\n    this.render(results);\r\n\r\n    if (this.onResults) {\r\n      this.onResults(results, values);\r\n    }\r\n  }\r\n\r\n  handleInput(e) {\r\n    const target = e.target;\r\n    const fieldName = target.getAttribute(\"data-field\");\r\n    if (!fieldName || !FIELD_CONSTRAINTS[fieldName]) return;\r\n\r\n    const sanitized = sanitizeValue(target.value, FIELD_CONSTRAINTS[fieldName]);\r\n    setFieldValue(this.formEl, fieldName, sanitized);\r\n\r\n    this.recalculate();\r\n  }\r\n\r\n  render(results) {\r\n    const eur = (n) =>\r\n      \"\u20ac\" + Math.round(n).toLocaleString(\"en-US\");\r\n\r\n    const num = (n, digits = 0) =>\r\n      Number.isFinite(n)\r\n        ? n.toLocaleString(\"en-US\", { maximumFractionDigits: digits })\r\n        : \"0\";\r\n\r\n    const pct = (n, digits = 1) =>\r\n      num(n * 100, digits) + \"%\";\r\n\r\n    document.getElementById(\"out_Current_Annual_Cost_EUR\").textContent =\r\n      eur(results.Current_Annual_Cost_EUR);\r\n\r\n    document.getElementById(\"out_New_Annual_Cost_EUR\").textContent =\r\n      eur(results.New_Annual_Cost_EUR);\r\n\r\n    document.getElementById(\"out_Gross_Savings_EUR_per_Year\").textContent =\r\n      eur(results.Gross_Savings_EUR_per_Year);\r\n\r\n    document.getElementById(\"out_Net_Savings_EUR_per_Year\").textContent =\r\n      eur(results.Net_Savings_EUR_per_Year);\r\n\r\n    document.getElementById(\"out_ROI_Percent\").textContent =\r\n      pct(results.ROI_Percent);\r\n\r\n    document.getElementById(\"out_Payback_Months\").textContent =\r\n      results.Payback_Months === \"\" ? \"\u2014\" : num(results.Payback_Months, 2);\r\n\r\n    document.getElementById(\"out_Time_Saved_Hours_per_Year\").textContent =\r\n      num(results.Time_Saved_Hours_per_Year, 2);\r\n\r\n    document.getElementById(\"out_FTE_Saved\").textContent =\r\n      num(results.FTE_Saved, 2);\r\n  }\r\n\r\n\r\n  destroy() {\r\n    this.formEl.removeEventListener(\"input\", this.handleInput);\r\n  }\r\n}\r\n\r\n\/* =========================\r\n   Init on DOM ready\r\n   ========================= *\/\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", () => {\r\n  window.calculator = new LiveCalculator({\r\n    formId: \"calc-form\",\r\n    resultsId: \"results\",\r\n  });\r\n});\r\n\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-672685c e-flex e-con-boxed e-con e-parent\" data-id=\"672685c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-963f5f9 elementor-widget elementor-widget-text-editor\" data-id=\"963f5f9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Rezult\u0101ti ir tikai apl\u0113ses un neatspogu\u013co garant\u0113tus ietaup\u012bjumus vai ieguvumus.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>ROI kalkulators \u0160is kalkulators nov\u0113rt\u0113, cik daudz laika un naudas j\u016bsu organiz\u0101cija var\u0113tu ietaup\u012bt, izmantojot AI pal\u012bgu klientu atbalstam. Sazinieties ar mums Izp\u0113tiet AI pal\u012bgu Lai \u0161is kalkulators darbotos, tam ir j\u0101b\u016bt aktiviz\u0113tam Javascript. Ievades Visas v\u0113rt\u012bbas ir veseli skait\u013ci. Maksim\u0101lais sl\u012bd\u0146u skaits procentos pie 100. AI Assistant gada izmaksas (EUR) A\u0123enta darba laiks ned\u0113\u013c\u0101 Darbs [\u2026]<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-22061","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tilde.ai\/lv\/wp-json\/wp\/v2\/pages\/22061","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tilde.ai\/lv\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tilde.ai\/lv\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tilde.ai\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tilde.ai\/lv\/wp-json\/wp\/v2\/comments?post=22061"}],"version-history":[{"count":0,"href":"https:\/\/tilde.ai\/lv\/wp-json\/wp\/v2\/pages\/22061\/revisions"}],"wp:attachment":[{"href":"https:\/\/tilde.ai\/lv\/wp-json\/wp\/v2\/media?parent=22061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}