Menu Zavřít

Firmy mají řešit byznys, ne hledat účtenky, razí Fidoo. Nově přináší férovou směnu měn

Autor: Fidoo

Bylo by krásné, kdyby dobré firmě stačily k úspěchu dobré nápady. V reálu musejí podnikatelé zvládnout také zpracování rozsáhlé administrativy, což řadě malých a středních podniků elán pro rozvoj byznysu ubírá. A právě takovým pomáhá Fidoo s řešením pro správu firemních výdajů a férovou směnu zahraničních měn.

Fintech Fidoo je součástí Direct family a vytváří platformu, která zjednodušuje komplikovanou finanční agendu malých a středních firem a přináší významné úspory času i peněz. 

Podle Petra Herzmanna, CEO společnosti Direct Fidoo, jen asi 15 % firem umí monitorovat náklady v reálném čase a pružně reagovat na jejich vývoj. Společnosti se podle něj snaží náklady hlídat alespoň postaru prostřednictvím papírových účtenek, jenže vědět až na konci měsíce, že zaměstnanec někde ušetřil, ale jinde peníze rozházel, je k ničemu. 

Proto Fidoo vyvinulo svou první službu Expense management, která v současné době pomáhá zjednodušovat správu firemních výdajů už více než 1100 českých firem a 30 tisícům uživatelů. 

Díky možnostem jako je placení předplacenými kartami, na kterých lze nastavit různé limity, okamžité focení a digitalizace účtenek ihned po nákupu a jejich přiřazení k výdaji v aplikaci, bleskové schvalování výdajů, vyplňování online cesťáků a knihy jízd během pár minut a plynulé integrace s účetními systémy jen za loňský rok těmto firmám Fidoo ušetřilo čtvrt miliardy na drobných provozních nákladech. 

České firmy meziročně ušetřily 11 procent nákladů. Valná většina o tom ale neví, tvrdí fintech Fidoo
Přečtěte si také:

České firmy meziročně ušetřily 11 procent nákladů. Valná většina o tom ale neví, tvrdí fintech Fidoo

„Ušetřené prostředky z každodenních výdajů se kumulují a na konci měsíce mohou vytvořit zajímavou sumu, která dokáže pokrýt další investice do produktu, pracovníků a podniku samotného, nebo naopak sanovat bilanci,“ podotýká Petr Herzmann. „Rozdíl mezi metodou ‚tužky a papíru‘ a hlídáním nákladů v reálném čase může být v horizontu několika měsíců propastný,“ doplňuje. 

Zahraniční platby férově 

Další oblastí, do které se Fidoo nyní pustilo, je převod měn a zahraniční platby. Podle Petra Herzmanna současná situace na devizovém trhu připomíná divoká devadesátá léta. 

Firmy často střídají poskytovatele devizových služeb s vidinou výhodnější směny, podmínky se však často mění, neexistuje důvěra, transparentnost a stabilita. Navíc specifika české ekonomiky a debata o přijetí eura bez jasného konce staví firmy do složité situace. 

„Fidoo na tuto situaci reaguje a představuje řešení – online aplikaci pro FX a zahraniční platby, která přináší výhodnou a férovou směnu, díky které mohou klienti ušetřit klidně i půl milionu korun ročně,“ upřesňuje výkonný ředitel. 

Průzkum Ipsos pro Asociaci malých a středních podniků ČR z roku 2023 ukázal, že více než polovina menších a středních českých firem plánuje vstoupit v následujících dvou letech na zahraniční trhy. Mnoho tuzemských firem také přijímá platby nebo platí v eurech (případně v PLN). V důsledku nevýhodných směn přicházejí firmy ročně o statisíce korun. 

Fidoo nabízí jednoduchou, transparentní a spolehlivou službou, která narušuje status quo na trhu. Je konkurencí zejména pro banky i nebankovní poskytovatele devizových služeb. Firemní multiměnový účet nabízí férovost pro všechny. Podmínky neurčuje nálada bankéře, kterému se klient zrovna dovolá, ale jasně daná, otevřeně komunikovaná pravidla. 

Autor: Fidoo

„Čím více klient smění, tím lepší sazby získá. FX sazby (= naše přirážka/marže k tržnímu kurzu) se odvíjí od celkového objemu směněných peněz za posledních 90 dní,“ popisuje Petr Herzmann. 

Dalším benefitem je přijímání a posílání plateb mezi 35 zeměmi, automatické připisování plateb do jedné z 24 měnových peněženek, přehled o stavu transakce a bohatá síť korespondenčních bank po celém světě, díky kterým jsou zahraniční platby stejně snadné a rychlé jako ty domácí. 

„Klientům vždy nabízíme něco navíc – jasným příkladem je úročení jejich eurových zůstatků, s čímž se na trhu běžně nesetkáte. Stačí směněná nebo příchozí eura nechat na FX účtu a úroky se automaticky připíší. Úroková sazba je proměnlivá a oznamujeme ji vždy zpětně za uplynulý měsíc – třeba za září 2024 byla její výše 0,75 % p.a.,“ doplňuje Herzmann. 

S Fidoo nehrozí žádné změny cen bez upozornění, skryté podmínky pod čarou nebo nepřehledné poplatky. Směny jsou dostupné 24 hodin 5 dní v týdnu, a to klidně i o půlnoci. „Vše probíhá online a bez papírování: od založení účtu přes jeho správu po transakce,“ doplňuje Herzmann. 

Jedním z prvních klientů Fidoo FX je společnost 100 Towers Holding. Ta při směně s bankou doposud vždy smlouvala – volala více poskytovatelům a porovnávala kurzy. Firemní finance tak často záležely na tom, komu se dovolají a jakou má zrovna náladu. 

„U Fidoo oceňujeme pevně daná pravidla i cenu – vidíme přesný výpočet kurzu, který se na 30 vteřin zamrazí a my můžeme uskutečnit směnu. A význam pro nás má i uživatelská přívětivost českého prostředí. Ta se ještě více projevuje u nástroje na správu zaměstnaneckých nákladů, který používají všichni naši pracovníci,“ dodává Tereza Mádrová, finanční ředitelka společnosti

Lukáš Res, výkonný ředitel nástrojářské firmy Paerk tools, zase až díky Fidoo FX zjistil, že se dá na směně ušetřit. Za dobu používání se podařilo uspořit téměř 17 % nákladů, což při objemech přes milion korun měsíčně tvoří nezanedbatelnou částkou. 

Fidoo FX tak doplňuje již zaběhlý Expense management. „Do budoucna se počítá s integrací obou služeb do jedné platformy rozšířené o další služby usnadňující každodenní agendu finančních ředitelů a přinášející firmám úspory nejen času, ale i vyšších stovek tisíc korun,“ slibuje Petr Herzmann.

Zdroj: Youtube.com

Fidoo je český fintech, který zjednodušuje komplikovanou agendu týkající se řízení firemních financí. Prostřednictvím chytrých řešení automatizuje správu zaměstnaneckých výdajů a nově nabízí také férovou a výhodnou směnu měn a zahraniční platby. Podnikům tak šetří čas i peníze, aby se mohly naplno věnovat svému byznysu. Společně s Direct pojišťovnou, Direct auto, Direct technologies, Direct nadací a investiční platformou Fondee je Fidoo členem skupiny Direct přinášející lehkost do oborů, které nefungují tak, jak by měly. Je stabilním a renomovaným partnerem také díky tomu, že je vydavatelem karet Mastercard, má licenci od České národní banky a spolupracuje s Komerční bankou.

'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }