WebCalom - příručka uživatele

Systém Calom slouží pro tarifikaci telefonních hovorů. Skládá se z Calom serveru a Calom klienta. K systému Calom se standardně dodává textový klient calom, se kterým je možné pracovat po přihlášení na počítač, na kterém je tento klient nainstalován, např. pomocí služeb SSH nebo Telnet. Dále existuje klient creport, který slouží pro vygenerování reportu přes příkazovou řádku.

Tento dokument popisuje www prostředí WebCalom, pomocí kterého je možné k systému Calom přistupovat přes webový prohlížeč. Na úvod stručně popíšeme Calom server.

1Calom server

Calom server je základní částí systému Calom. Sbírá data, spravuje telefonní seznam, uživatele a poskytuje služby pro zpracování reportů.

Poznámky

2WebCalom - www klient

1Úvod

Vlastní práce se systémem (zadávání údajů a prezentace dat) probíhá prostřednictvím webového prohlížeče. Práce se systémem vyžaduje povolené cookies a některé stránky vyžadují přítomnost Java pluginu (Java 2 SE 5.0 nebo vyšší). Pro přihlášení k systému napište do adresy:

http://jméno_počítače/calom/login.html

resp.:

http://jméno_počítače/cgi-bin/calom/calom_www/login.html

Poznámka: "jméno_počítače" je jméno počítače, na kterém je nainstalován WWW klient. Na podrobnosti se zeptejte správce systému Calom.

Tím se dostanete do úvodní obrazovky. Tam zadáte svoje přihlašovací jméno a heslo, které vám přidělil administrátor systému. Administrátorský účet má název 'admin', 'administrator' nebo 'root'. Všechny účty˙s těmito jmény mají práva administrátora (smějí měnit veškeré nastavení).˙

Pokud nastane při přihlašování nějaký problém, zobrazí se popis nad tabulkou s přihlašovacími údaji. Po úspěšném přihlášení se zobrazí hlavní stránka systému.

2Hlavní stránka

Hlavní stránka (main.html) je rozcestník k dalším funkcím WebCalomu. V závislosti na tom, zda jste přihlášeni pod administrátorským účtem nebo jako běžní uživatelé, se bude obsah stránky lišit.

Spustit report Nastaví parametry reportu a spustí report
Editace telefonního seznamu Umožní upravovat telefonní seznam
Konfigurace Konfigurace Calom serveru a WebCalomu
Spustit synchronizaci Nastavuje spuštění nástrojů pro synchronizaci telefonního seznamu
Odhlásit se Ukončí sezení

Běžní uživatelé vidí místo položky konfigurace přímo nabídku stránek s konfigurací, ke kterým mají přístup:

Uživatelské nastavení Základní nastavení uživatele (heslo, jazyk a vzhled (skin) prostředí)
Správa rychlých reportů Umožnuje vytvářet, mazat a upravovat rychlé reporty
Naplánované reporty Spravuje naplánované reporty a nastavuje jejich spouštění
Uložené reporty Prohlížení a stahování výsledků reportů uložených na serveru

3Spouštění reportů

Na stránce spouštění reportů (report_params.html) se nastavují parametry reportu. Nejdřív se vybere formát (HTML, PDF, CSV, XML, neformátovaný) a typ reportu, který určuje jaké informace budou na výstupu reportu a jak budou strukturované. Podporované typy reportu jsou:

Pro každý formát může být nadefinováno libovolné množství typů reportu. Klasicky se dodávají tyto předdefinované reporty (nemusí být dostupné pro všechny formáty), ale je možné si vytvořit vlastní typy:

Autorizační kódy celkem

Obsahuje seznam autorizačních kódů, které byly použity v alespoň jednom hovoru (který splnil kritéria - viz. výše).

Pro každý autorizační kód obsahuje ve sloupcích tabulky daný kód, počet hovorů s daným kódem, celkovou dobu trvání takových hovorů, počet tarifních pulsů a celkovou cenu.

Na závěr je uveden celkový součet těchto položek.

Hovory bez autorizačního kódu jsou z reportu vyřazeny.

Autorizační kódy detail

Podobný reportu Autorizační kódy celkem. Pro každý autorizační kód ale obsahuje tabulku všech hovorů uskutečněných jeho prostřednictvím.

Oddělení celkem

Pro každé oddělení vypíše tabulku obsahující záznam pro každého účastníka, který hovor platil spolu s celkovými údaji (počet volání, trvání hovorů, počet pulsů a cena). Na závěr tabulky je uveden součet přes všechny účastníky z daného oddělení. Úplně na závěr je celkový součet.

Oddělení detail

Podobný reportu Oddělení celkem. Pro každého účastníka ale vypíše zvláštní tabulku, kde jsou rozepsány jeho jednotlivé hovory.

Varování: Pokud nezadáte dostatečné množství omezujících podmínek, může být výsledný report velmi dlouhý.

Oddělení přehled

Podobný reportu Oddělení celkem. Pro dané oddělení se ale vypíše pouze celkový součet.

Pobočky celkem

Vypíše pro každé účastnické číslo součty hodnot (počet volání, délka, počet pulsů, cena) přes všechny hovory.

Pobočky cena

Podobný reportu Pobočky celkem, ale setříděný podle ceny.

Účastníci, kteří protelefonovali nejvyšší částky, jsou uvedeni první.

Pobočky detail

Vypíše pro každé účastnické číslo tabulku všech hovorů obsahující informace o času, délce, cíli, počtu pulsů, ceně a použitém autorizačním kódu.

Pobočky trvání

Podobný reportu Pobočky celkem, ale setříděný podle délky trvání.

Účastníci, kteří protelefonovali nejdelší dobu, jsou uvedeni první.

Přenašeče celkem

Pro každý odchozí přenašeč vypíše řádek se součtem hodnot (počet volání, trvání, počet pulsů, cena) přes všechny hovory, které přes něj odešly.

Může sloužit pro porovnání účtů s operátorem.

Přenašeče detail

Obsahuje podobné informace jako Přenašeče celkem, ale pro každý přenašeč je uveden seznam všech hovorů, které přes něj prošly, ne jen součet jejich údajů.

Účty celkem

Obsahuje seznam account kódů, které byly použity v alespoň jednom hovoru (který splnil kritéria - viz. výše).

Pro každý account kód obsahuje ve sloupcích tabulky daný kód, počet hovorů s daným kódem, celkovou dobu trvání takových hovorů, počet tarifních pulsů a celkovou cenu.

Na závěr je uveden celkový součet těchto položek.

Hovory bez account kódu jsou z reportu vyřazeny.

Účty detail

Podobný reportu Účty celkem. Pro každý account kód ale obsahuje tabulku všech hovorů uskutečněných jeho prostřednictvím.

Volaná čísla

Obsahuje pro každé volané číslo informace o počtu volání na toto číslo, celkovém trvání, počtu pulsů a ceně.

Výpis je setříděn podle volaného čísla.

Četnost volaných čísel

Podobný reportu Volaná čísla, ale setříděný podle počtu volání na dané číslo.

Zatížení

Vypíše součty informací o hovorech (počet volání, trvání, počet pulsů a cena) přes všechny hodiny (od 0:00 do 23:59).

Slouží pro informaci o tom, kdy je jak ústředna zatížena.

Další volby lze rozdělit do dvou kategorií. Většina z nich omezuje výběr hovorů, které se dostanou do reportu, další vybírají způsob prezentace nebo uložení výsledku. Poslední volba umožňuje uložit všechno nastavení ve formě tzv. "rychlého reportu" (což je report, který se dá vyvolat z hlavní stránky).

Jednotlivé volby je možné skrývat kliknutím na název v prvním sloupci. Znovu ukázat všechny volby je možné klepnutím na "Zobraz všechna pole".

Do reportu jsou zahrnuty všechny hovory, které splňují zadaná kritéria a uživatel, který je spouští, má právo na jejich prohlížení. Právo na prohlížení se nastaví pouze na ty hovory, kde volající, volaný i ten, co hovor platil, mají v telefonním seznamu záznam umístěný v rámci organizačních jednotek, na které má daný uživatel právo na čtení nebo pokud ten, co hovor platí, má v telefonním seznamu záznam umístěný v rámci organizačních jednotek, na které má daný uživatel právo na rozšířené čtení.

Poznámka: Vždy, když se u reportu mluví o tom, že obsahuje tabulku pro všechny oddělení, autorizační kód, atd., rozumí se, že pokud do dané kategorie nespadl žádný záznam, tabulka je vynechána.

Datum

Určuje časové rozmezí, ze kterého se budou do reportu započítávat hovory. Všechny hovory mimo toto rozmezí se budou v reportu ignorovat.

Je možné nastavit jednu z předdefinovaných možností (např. Dnes, Tento týden, Minulý měsíc, …).

Pokud zvolíte Vše, bude se report zpracovávat přes všechna data, která Calom obsahuje. Výsledek může být velmi velký.

Pokud chcete vybrat nějaký den, týden, měsíc nebo rok, ale není to tento den, tento týden, atd., můžete zvolit položky Den, Týden, Měsíc nebo Rok a přesnější určení nastavit v pravé části.

Chcete-li mít úplnou kontrolu nad časovým rozmezím, zvolte Explicitní určení. Pouze s touto volbou můžete nastavit přesně i čas.

Den v týdnu

Zde můžete výběr hovorů omezit jen na některé dny v týdnu. Hovory, které skončily ve dne, který není zaškrtnut, budou ignorovány.

Typ hovoru

Zde můžete výběr hovorů omezit jen na některé typy hovorů. Událost je typ, který je ústřednou přiřazen např. když šlo o přepojení hovoru na jiného účastníka.

Typy hovorů, které nejsou zaškrtnuty, budou ignorovány.

Denní doba

Slouží k omezení výběru hovorů na hovory končící v určité denní době. Můžete zadat dolní a horní limit.

Dobu zadáváte ve tvaru hodina:minuta, např. 14:30.

Pokud chcete, aby se tato omezení použila, musíte zašrtnout políčko vlevo od nich.

Můžete např. vyhledávat hovory, které se odehrály v neobvyklou denní dobu.

Délka hovoru

Slouží k omezení výběru hovorů na hovory s určitou délkou. Můžete zadat dolní a horní limit.

Dobu zadáváte ve tvaru hodina:minuta, např. 14:30.

Pokud chcete, aby se tato omezení použila, musíte zašrtnout políčko vlevo od nich.

Můžete např. zjišťovat velmi dlouhé hovory.

Cena hovoru

Slouží k omezení výběru hovorů podle ceny. Můžete zadat dolní a horní limit.

Cenu zadáváte v korunách a haléřích (haléře oddělujete desetinou tečkou '.'), např. 2.50.

Pokud chcete, aby se tato omezení použila, musíte zašrtnout políčko vlevo od nich.

Můžete např. zjišťovat informace jen o drahých hovorech nebo ignorovat hovory, které nestály nic (např. v rámci jedné budovy).

Zdroj

Slouží k omezení výběru hovorů podle volajícího. Můžete zadat:

  • Číslo účastníka (pro výběr z adresáře použijte tlačítko Výběr z adresáře).

    Pokud je za číslem tečka, vynucuje se na dané pozici konec čísla (tedy číslo musí přesně souhlasit). V opačném případě se vyberou i hovory, u kterých je zde uvedené číslo prefixem.

  • Jméno organizační struktury (pro výběr z adresáře použijte tlačítko Výběr z adresáře).

  • Rozsah čísel ve tvaru dolní hranice – horní hranice, kde obě hranice mají stejnou délku. Např. 001 – 002.

  • Vzor. Vzor se sestává z několika variant čísla (viz první bod) oddělených čárkou. Např. vzoru 123,456. vyhovují čísla 123, 123456, 456, ale nevyhovují mu čísla 12, 842 nebo 456789.

  • nechat prázdné políčko. Potom podmínku splní všechny záznamy (dané omezení se nepoužije).

Cíl

Slouží k omezení výběru hovorů podle volaného. Můžete zadat stejné údaje jako u položky Zdroj.

Pokud tedy chcete zkoumat např. všechny hovory do Německa, zmáčknete tlačítko Výběr z adresáře u položky Cíl a vyberete z adresáře Německo.

Platí

Slouží k omezení výběru hovorů podle účastníka, který hovor platí.

Běžně hovor platí volající. Pokud je ale použit autorizační kód (CIL-kód) a v ústředně je pro tento kód nadefinován PIN kód, budou se hovory účtovat účastníkovi, který má v telefonním seznamu uveden daný CIL-kód.

Omezení této položky se vztahuje právě na ty, jejichž autorizační kód byl při hovoru použit (nebo na volané, pokud žádný použit nebyl).

Autorizační kód

Omezení na hovory s určitým autorizačním kódem.

Kromě hodnot uvedených u položky Zdroj je možné použít ještě:

  • Speciální kód 'EMPTY' vybírající hovory, které byly uskutečněny bez autorizačního kódu.

  • Speciální kód 'NONEMPTY' vybírající hovory, které byly uskutečněny s autorizačním kódem.

Account kód

Omezení na hovory s určitým account kódem.

Je možné použít stejné hodnoty jako u Autorizačního kódu.

Tarifikační skript

Každý report může mít hovory tarifikované různými tarify. Pokud nezvolíte jiný, bude se používat Implicitní tarif, což je tarif, který nastavil správce systému. Pro bližší informace o tarifech viz stránka správy tarifů.

Zasílání výsledků reportu

Zde volíte způsob výstupu reportu.

  • Zobrazit na obrazovce zobrazí report v (novém) okně prohlížeče.

  • Poslat e-mailem zašle výsledek reportu e-mailem. Musíte vyplnit kolonku e-mail a musí být správně nastaveny parametry spojení na poštovní server (zajistí administrátor sytému)

  • Ulož výsledek na serveru uloží výsledek do souboru na WebCalom serveru a podívat se na něj můžete ze stránky uložených reportů. Report musíte pojmenovat v kolonce Jméno reportu. Viz uložené reporty. Význam této volby je hlavně při plánování reportů.

  • Pouze uložit definici, naplánovat spuštění později nespustí report, pouze uloží nastavení a spuštění můžete naplánovat na stránce naplánovaných reportů. Musíte vyplnit kolonku Jméno reportu. Pod tímto jménem s ním budete nadále pracovat. Více informací najdete na stránce plánování reportů.

Rychlý report

Nastavení parametrů je možné uložit jako tzv. "rychlý report". Tyto reporty se zobrazí na hlavní stránce a kliknutím na ně se zobrazí výsledek bez nutnosti zadávat nějaké parametry.

Aby se report uložil jako "rychlý report", musíte zaškrtnou políčko u Uložit jako rychlý report a napsat jméno rychlého reportu do textového políčka.

4Editace reportů

Editor reportů je Java aplikace pro editaci definice reportu. Definici reportu je možné upravovat i v textovém editoru, ale editor reportů nabízí grafické prostředí pro návrh. Je možné jej spouštět jako Java applet v rámci aplikace nebo jako samostatnou aplikaci. Bližší informace je možné najít v nápovědě pro aplikaci.

5Plánování reportů – nastavení pozdějšího a pravidelného spouštění

Na stránce “Správa plánovače” se provádí správa naplánovaných úloh.

Uvedete zde čas prvního spuštění a případně také frekvenci opakovaného spouštění. Pokud chcete report spustit pouze jednou, vyberte Pouze jednou. Parametry reportu už zde nemůžete měnit, můžete se ale podívat na nastavení reportu stisknutím Zobraz detaily o reportu. Toto je však určeno pro zkušené uživatele. Stisknutím OK bude report nastaven pro plánování.

Na stránce “Správa naplánovaných reportů” je pak s danými reporty možné dále pracovat. Tyto reporty se vytvoří na stránce spouštění reportů zaškrtnutím políčka Pouze uložit definici, naplánovat spuštění později. Při vytvoření takového reportu se nespouští generování reportu, pouze se uloží nastavení. Na této stránce pak naplánujete, kdy se report spustí.

Report může být spuštěn jednou v zadaný čas a potom zůstane neaktivní nebo můžete nastavit periodické spouštění. Pokud má report pevně určený rozsah data, nemá periodické spouštění smysl. V reportu ale můžete zadat rozdahy jako Dnes, Tento týden nebo Minulý měsíc. V takovém případě např. spouštění každý měsíc vygeneruje bez dalších zásahů každý měsíc aktuální report. Pokud to ještě zkombinujete se zasíláním reportu e-mailem, budete výsledky reportu automaticky dostávat. Pokud ne, můžete si hotové reporty vyzvednout na stránce uložených reportů.

Neaktivní reporty (ty, které se nebudou samy spouštět) jsou vybarveny šedou barvou, aktivní jsou černé. Kliknutím na Zapnout/Vypnout report aktivujete/deaktivujete. U každého reportu je vyznačeno datum a čas spuštění i frekvence spouštění.

Naplánovaný report můžete také smazat. Report se pak předstane spouštět, pokud však již spuštěn byl, výsledky nebudou smazány.

6Spouštění externích aplikací – SQLSync a LDAPSync

Z této nabídky můžete spouštět synchronizaci telefonního seznamu (dirdb adresáře) z jednoho ze dvou zdrojů:

  1. SQLSync - synchronizace s DNA databází

  2. LDAPSync - synchronizace s LDAP databází

Pro synchronizaci SQLSync jsou k dispozici následující parametry:

Poznámky k výběru databázových sloupců (políček):

7Správa tarifikačních skriptů

Na stránce “Správa tarifů” se provádí úprava tarifikačních skriptů (tarifů). Tarify jsou programy ve speciálním skriptovacím jazyce, které slouží pro určení ceny hovoru.

Tyto tarify mohou být složeny z několika skriptů. Jednotlivé skripty jsou vidět v levé části v tabulce Dostupné skripty. Skriptovací jazyk je syntaxí podobný jazykům JavaScript nebo C. Skripty obsahují definice funkcí, proměnných a mohou obsahovat také kód mimo funkce. Skripty, které mají kód mimo funkce mohou sloužit jako tzv. hlavní tarifikační skripty. Tyto skripty si můžete vybrat při generování reportu a ceny hovorů budou počítány právě tímto kódem za definicemi funkcí.

Filosofie je taková, že tento kód obsahuje jenom kostru a většinu činností zajišťují funkce, které volá. Tyto funkce mohou být ze stejného skriptu nebo i z jiných skriptů.

Tímto vznikají závislosti mezi jednotlivými skripty. Pokud skript A využívá skript B, není možné skript B odstranit dokud existuje skript A. Podobně není možné odstranit skript pokud je používán jako implicitní tarif pro reporty. Tyto závislosti si systém sám kontroluje a nepovolí odstranit skript pokud by došlo k porušení pravidel.

Ve standardní distribuci např. existuje skript global, ve kterém jsou pomocné funkce použitelné prakticky pro všechny tarifikace. Například je tam funkce pro zjištění zda je daný den svátek nebo obecné jedno-pásmové, dvou-pásmové a tří-pásmové tarify.

Na tento skript pak navazuje skript telecom nebo aliatel, kde jsou funkce pro konkrétní způsoby tarifikace - např. místní hovor Telecomu. To je o víkendu a svátcích jednopásmový hovor, jindy dvoupásmový se jedním pásmem od 7:00 do 19:00 a s nejmenším tarifikovaným časem 2 minuty a následnou tarifikací po jedné minutě. Konkrétní ceny zde nejsou, jsou až v konkrétnějším tarifu např. telecom_standard nebo telecom_business. Tyto skripty volají služeb ze skriptu telecom.

Nakonec je tu hlavní tarifikovací skript main, kde se určí, jaké trunky budou tarifikovány jakými operátory, tedy jaké funkce se pro tarifikaci budou volat, případně se zde provedou výjimky. Třeba hovory z organizační domény soukromé hovory mohou být tarifikovány dvakrát větší cenou. Toto kaskádovité uspořádání má výhody v univerzálnosti, je však možné zvolit i libovolné jiné řešení.

Na levé straně v tabulce Dostupné skripty vyberte skript/tarif se kterým budete pracovat. Všechny další informace na stránce se budou vztahovat k tomuto skriptu.

V části Dostupné tarify můžete také vytvářet nové skripty, přejmenovávat nebo mazat existující (pro pravidla pro mazání viz výše).

V pravé části v sekci detaily můžete upravovat kód tarifu. Pro uložení změn stiskněte tlačítko Ulož. Pokud při kontrole nastaly ve skriptu chyby, uvidíte popis v horní části stránky. Aby nedošlo k poškození existujícího tarifu, bude nefunkční tarif dočasně přejmenován a po odstranění chyb se vrátí původní jméno.

Více informací o syntaxi tarifikačních skriptů najdete v dokumentaci popisující tarifikační jazyk.

Při generování reportu si můžete vybrat jakým tarifem budete chtít cenu počítat. Aby byl daný tarif při generování reportu nabídnut, musíte mu přiřadit jméno pro tarifikaci. Toto jméno od té doby budete moci používat. Administrátor může pojmenovat tarif globálně, tj. pro všechny uživatele zaškrtnutím políčka Ulož globálně pro všechny uživatele. Pojmenování můžete zrušit uvedením prázdného políčka. Pro potvrzení stiskněte tlačítko Ulož.

Poznámky:

8Správa uživatelů

Na stránce “Správa uživatelů” můžete přidávat, mazat uživatelské účty WWW klienta a měnit jejich nastavení.

Klepnutím na uživatelské jméno se dostanete na stránku “Nastavení uživatelského účtu” pro daného uživatele. Když klepnete na Přidat nového uživatele, dostanete se na týž stránku, ale bez předvyplněných údajů. Klepnutím na Vymaž vymažete daného uživatele.

Uživatelské účty WWW klienta mají svůj protějšek v účtech na Calom serveru.˙Každý uživatelský účet má svůj Calom protějšek stejného jména. Protože se ale˙uživatelské účty na Calom serveru mohou dynamicky měnit i jinak než pomocí˙WWW klienta, synchronizuje se při každém požadavku na připojení ke Calom˙serveru údaj o aktuálním uživateli a jeho protějšek na Calom serveru. Účty na˙serveru se také, pokud se neuloží, při ukončení serveru vymažou.

Klepnutím na Uložit na serveru se uloží nastavení účtů permanentně˙na serveru. Pak nebude třeba tak často účty synchronizovat. Neuloží se ale˙pouze účty modifikované pomocí WWW klienta, ale všechny účty, které jsou˙v paměti serveru.

Je vhodné po nadefinování uživatelských účtů provést uložení na serveru.

Pomocí licence je možné omezit počet uživatelů, kteří smějí být na WWW klientu definováni. Pokud narazíte na omezení počtu uživatelů, bude nutné některé uživatele smazat.

9Nastavení uživatelského účtu

Na stránce “Nastavení uživatelského účtu” nastavujete vlastnosti uživatelských účtů. Můžete měnit nastavení nějakého konkrétního účtu, jehož hodnoty byly do políček předvyplněné, nebo přidávat nový účet.

Jednotlivá políčka jsou:

10Prohlížení záznamů systému – log Calom serveru a WebCalomu

Do logu systému WebCalom se zapisují chybové události nebo varování, které nastanou ve WebCalom klientu nebo při komunikaci s Calom serverem.

Na každém řádku je na začátku uvedeno datum a čas, potom následuje popis události. Určité druhy událostí jsou vyznačeny zvláštními barvami.

Prohlížení WebCalom logu je určeno pouze pro správu WebCalomu, většina záznamů nemá při běžném používání smysl, neboť obsahuje pouze informace použitelné při ladění systému a hledání chyb.

Aby log příliš nenarůstal, můžete starší údaje vymazat. Do kolonky Smazat záznamy před vyplňte datum (den-měsíc-rok), před kterým chcete záznamy smazat a stiskněte tlačítko Smazat.

Do logu systému Calom se zapisují události, které při provozu generuje Calom server. Na každé řádce je uvedeno datum a čas a v dalším sloupci popis události. a jedna událost. Každá obrazovka ukazuje vždy záznamy pro jeden den.

Pokud při práci s WWW klientem nastane nějaká chyba, sem se o ní zapíše podrobnější informace.

Ke každému záznamu je přiřazen typ (závažnost), která je rozlišena barvou. Kliknutím na položky z horní tabulky se seznamem typů se zobrazí nebo skryjí záznamy s daným typem.

Kliknutím na odkazy Předchozí a Následující se přesunete na předchozí resp. následující dny, kdy byly vygenerovány nějaké záznamy. Také můžete napsat datum ve formátu rok-měsíc-den a zobrazí se záznam pro daný den nebo nejbližší neprázdný záznam před tímto datem.

11Konzole Calom serveru

Tato konzole slouží pro přímou komunikaci s Calom serverem. Pro bližší popis funkcí Calom serveru nahlédněte do manuálu k Calom serveru.

Konsole běží v prostředí Java. Pro její funkčnost musíte mít v prohlížeči nainstalovanou a povolenou podporu jazyka Java alespoň verze 1.2. Pokud tomu tak není, můžete si stáhnout Java plugin pro váš prohlížeč z http://java.sun.com/.

12Editace telefonního seznamu

V systému Calom jsou v telefonním seznamu uloženy všechny důležité informace o účastnících (pobočkách) v telefonní síti. Používá se pro převod telefonního čísla na jméno účastníka (pobočky) a další záznamy.

V telefonním seznamu by měly být uloženy všechny vnitřní linky a do co největších detailů také vnější směry.

Pokud budou v seznamu chybět některé položky, nezobrazí se v reportech na místě pro jméno účastníka nic. Pokud bude vynechán nějaký údaj s CIL-kódem, nebudou se správně zobrazovat ani reporty, které jej využívají.

Telefonní seznam je hierarchický podobně jako struktura adresářů (složek) a souborů na počítači. Roli adresářů (složek) zde hrají organizační domény.

V každém místě telefonního seznamu je možné umístit libovolné množství organizačních domén i záznamů o účastnících (pobočkách).

Organizační doména sama o sobě nenese žádnou informaci, pouze může obsahovat další domény a záznamy o účastnících.

Typické nastavení pro firmu s odděleními 'Vývoj' a 'Prodej' se dá znázornit např.:

ext
    Evropa
       <x> Albánie           000355
       …
       Česká republika
           <x> Brno          05
           <x> Plzeň         019
           <x> Praha         02
           <x> ostatní       01
           <x> ostatní       03
           <x> ostatní       04
           <x> ostatní       06
           <x> ostatní       07
           <x> ostatní       08
           <x> ostatní       09
        …
        <x> Německo          00049
    Asie
        <x> Čína             00086
      …
   …
Vývoj
    skupina 1
        <x> Josef Novák      2456
        <x> Miroslav Pokorný 2457
    skupina 2
        <x> Pavel Prokeš     2510
        <x> Miroslav Pokorný 2522
Prodej
    <x> Antonín Svoboda      2568
    <x> Hana Svobodová       2571

Kde řádky označené <x> představují účastníky, ostatní jsou organizační domény.

Z daného příkladu je vidět, že když je nějaký útvar pro hovory důležitý, nemusí se mu přiřadit účastník, ale přiřadí se mu organizační doména a účastnící se vytvoří až v ní. Tímto se informace "zjemňuje" (viz např. rozdíl u České republiky a Albánie).

Když se v reportu někde vyskytne telefonní číslo, hledá se pro něj v telefonním seznamu záznam, který je nejdelším prefixem daného čísla (pokud je u něj poznačeno, že se nejedná o prefix, musí se shodovat přesně). Z tohoto záznamu se pak vezme jméno, CIL-kód a další informace a zobrazí se v reportu.

K organizačním doménám se vztahují uživatelská práva. Pokud by se měl v reportu zpracovávat hovor, kde volající, volaný nebo ten, co hovor platí, jsou z domény, kam daný uživatel nemá právo na čtení, hovor se ignoruje. Proto je dobré dát každému právo na čtení domény ext (pro telefonování ven).

Na stránce editace adresáře je možné provádět následující úkony:

13Editace záznamu telefonního seznamu

Záznamy v telefonním seznamu slouží pro převod telefonního čísla na jméno, navíc slouží pro tarifikaci.

V horním řádku se za textem Org. vypíše v které organizační doméně se daný záznam nachází. Je to ta doména telefonního seznamu, ze které jste klepli na Přidej záznam nebo Edituj.

Stiskem Ulož uložíte daný záznam na Calom serveru (pozor, ještě není permanentně uložen, viz poznámka na stránce “Editace adresáře”. Stisknutím odkazu Zpět se vrátíte na stránku “Editace adresáře”.

14Správa uložených reportů

Na stránce “uložené reporty” je možné stahovat nebo mazat výsledky reportů, které byly vygenerovány plánovačem nebo byla v tabulce parametrů reportu zaškrtnuta volba Pouze uložit definici, naplánovat spuštění později.

Poznámka: Tyto uložené reporty by se měly čas od času promazat, protože zabírají místo na disku serveru.

Poznámka: Pro více informací viz. správa plánovače.

15Konfigurace rychlých reportů

Na stránce “Konfigurace rychlých reportů” se provádí úprava rychlých reportů. Vidíte seznam vlastních (administrátor i globálních) tzv. rychlých reportů. Klepnutím na Smazat daný rychlý report smažete, klepnutím na Editovat se dostanete na stránku “Editace rychlého reportu”, kde můžete daný rychlý report upravit.

16Nastavení licence

Na stránce “Nastavení licence” můžete nastavit vlastnosti licence. Tato stránka je určena pouze pro osoby, které mohou měnit licenci a znají autorizační kód. Nastavují se zde různé limity a povolují resp. zakazují se určité vlastnosti. Tato nastavení se týkají pouze WebCalomu, ne Calom serveru.

Počtem uživatelů se myslí počet uživatelských účtů na WebCalomu, ne počet současně pracujících uživatelů.

Poznámka: Pokud do políčka Omezit počet uživatelů napíšete -1, nebude počet uživatelů omezen.

3Dodatek A: popis tarifikačního jazyka

Tarifikace probíhá při generování reportu po tom, co informace o hovoru projde autorizací a lokálními filtry.

Je zajišťována skripty (také označovaných jako tarify), jejichž formát zde bude popsán.

3.1Hlavní skripty

To, jaký skript se pustí pro tarifikování hovoru se určí podle nastavení implicitního "hlavního" skriptu.

Nastavení tohoto skriptu se provede příkazem 'TARIF DEFAULT_MAIN jmeno_skriptu' buď v konfiguračním souboru nebo z příkazové řádky klienta.

Vymazat implicitní hlavní skript lze pomocí 'TARIF NO_DEFAULT_MAIN' (skript se nesmaže, pouze se u něj poznačí, že není hlavní).

Kromě implicitního hlavního skriptu se dá pro každou seanci zvlášť nastavit lokální "hlavní" skript příkazem 'TARIF LOCAL_MAIN jmeno_skriptu'. Pokud je nastaven, použije se při tarifikování místo implicitního.

3.2Správa skriptů

Skripty je možné přidávat pomocí 'TARIF ADD', mazat pomocí 'TARIF DEL', zjišťovat o nich informace 'TARIF DUMP' nebo si nechat vypsat všechny natažené skripty přes 'TARIF LIST'.

Každý skript má tzv. reference count, což je počet objektů, které ho potřebují. Pokud tento čítač klesne na nulu a skript není uložen, smaže se. Za každou funkci daného skriptu, kterou používá nějaký jiný skript se mu o 1 zvýší reference count.

Když z určité cli seance natáhnu nový skript, dostane reference count 1. Když daná seance skončí, čítač se zase sníží. Když je skript "hlavní" (ať už lokálně nebo globálně), má reference count zvýšený o 1 (pokud je jak lokálně tak globálně, tak o 2). To zabraňuje tomu, aby byl smazán.

Pozor na to, že pokud natáhnu nějaký skript pomocí 'TARIF ADD' a skončím seanci, skript se smaže. To platí i pro seanci, ve které se načítá konfigurační soubor. Takže pokud chci skript zachovat, musím buď nahrát jiný skript, který bude využívat jeho funkcí, nebo ho označit jako hlavní.

Tímto vznikají jakésy stromy využívání skriptů, kde v kořeni jsou "hlavní" skripty (globální nebo lokální pro nějakou probíhající seanci) a na ně se napojují skripty, které jsou jimi využívány. Pokud potom smažu kořen, smaže se celý strom (v případě, že jsem skripty načítal ve stejné seanci, ve které toto provádím, smažou se až po jejím skončení).

Pokud ale nějaký skript uložím příkazem 'TARIF STORE', nesmaže se ani když jeho reference count dosáhne 0 (pod 0 klesnout nemůže).

Když chci provést upgrade skriptů, stačí smazat hlavní skript a potom nahrát nové verze skriptů a jednomu z nich přiřadit funkci "hlavního skriptu". Tento reference counting je udělán z důvodu, aby se nemohly mazat skripty, které jsou používány, a aby v systému nezůstávaly nepoužívané skripty.

Skript mohu smazat příkazem 'TARIF DEL'. Pokud měl reference count větší než 0, akce se neprovede. To se může stát, pokud je daný skript lokální (využívá ho aktuální seance, takže mu o 1 zvyšuje reference count), pokud je nastaven jako hlavní skript nebo pokud jeho funkcí využívá nějaký jiný skript. Reference county skriptů a další informace se mi zobrazídané příkazem 'TARIF LIST'.

Příkazy 'TARIF REPARSE', 'TARIF STRIP', 'TARIF STORE', 'TARIF DEL', 'TARIF SET_MAIN', 'TARIF NO_DEFAULT_MAIN', 'TARIF INFO', 'TARIF DUMP' a 'TARIF DUMP_CODE' jsou povolené pouze účtům s administrátorskými právy.

Standardní postup je načíst skripty v konfiguračním souboru serveru v takovém pořadí, aby skript, který načítám se odkazoval pouze na skripty už načtené a na závěr načtu hlavní skript a označím ho jako hlavní. Příklad konfiguračního souboru:

; Ruzne servisni funkce
TARIF ADD global tarifs/global.trf

; Telecom
TARIF ADD telecom tarifs/telecom_fcn.trf
TARIF ADD tabulky tarifs/telecom_standard.trf

; Aliatel
TARIF ADD aliatel tarifs/aliatel.trf

; Main
TARIF ADD main tarifs/main.trf

TARIF STORE main
TARIF SET_MAIN main

Seznam nových příkazů serveru (dají se použít z klienta z příkazové řádky nebo v konfiguračním souboru serveru):

TARIF ADD jméno_tarifu jméno_souboru

Načte tarif ze souboru 'jméno_souboru' a pojmenuje ho 'jméno_tarifu'. Reference count bude mít 1 a po skončení seance se o 1 sníží. Takže ho ve stejné seanci musím označit jako hlavní, uložit ho pomocí 'TARIF STORE' nebo načíst jiný skript, který ho používá. V opačném případě se po ukončení seance smaže. Načítání konfiguračního souboru je bráno jako seance.

TARIF DEL jméno_tarifu

Smaže skript 'jméno tarifu', pokud měl reference count 0. Pokud má reference count větší než 0, systém ho odmítne smazat.

Je-li skript lokální, má reference count větší než 0 a musí se nejdřív provést 'TARIF STORE'. Pokud jeho funkcí využívá jiný skript, také bude mít reference count větší než 0. V takovém případě se nejdříve musí smazat skripty, které ho používají.

Je-li nastaven jako lokální nebo globální hlavní skript (pomocí 'TARIF DEFAULT_MAIN' nebo 'TARIF LOCAL_MAIN'), také tím získá vyšší reference count. Potom se musí odstranit příznak globálního skriptu (pomocí 'TARIF NO_DEFAULT_MAIN' a 'TARIF NO_LOCAL_MAIN).

TARIF CREATE jméno_tarifu

Vytvoří skript 'jméno tarifu', ale nepřiřadí mu žádný kód. Kód se musí doplnit pomocí příkazů 'TARIF DEFINE'. Dokud se neprovede 'TARIF PARSE' nebo 'TARIF REPARSE', skript nelze spouštět.

TARIF DEFINE jméno_tarifu "definice tarifu"

Přidá řádku kódu do definice skriptu 'jméno_tarifu'.

TARIF PARSE jméno_tarifu

Spustí překlad skriptu 'jméno_tarifu'. Lze použít pouze pokud ještě není přeložen. Smí ho použít každý uživatel (aby si uživatelé mohli definovat svoje vlastní tarify). Dokud se skript nepřeloží, nelze spouštět.

TARIF REPARSE jméno_tarifu

Podobně jako 'TARIF PARSE', ale skript už může být přeložen. Využije se v případě, že se zdrojový kód skriptu změnil. Vyžaduje administrátorská práva (aby normální uživatelé nemohli měnit stávající tarify).

TARIF STRIP jméno_tarifu

Odstraní ze skriptu zdrojový kód. Takový skript může být spouštěn, ale nemůže být znova přeložen (pokud se znova nedodefinuje zdrojový kód).

TARIF STORE jméno_tarifu

Uloží skript 'jméno_tarifu' mezi globální skripty. Tyto skripty se nemažou při dosáhnutí reference countu 0. Lokální skripty (které nebyly uloženy) se po skončení sezení smažou (pokud není zvláštní důvod, proč je nesmazat - jako třeba že je používá nějaký globální skript). Tímto způsobem lze uchovat skripty "do zásoby" i když nejsou nastaveny jako hlavní ani je nepoužívají jiné skripty. Například pro uložení tarifikace podle alternativního operátora, o jehož zavedení se teprve rozhoduje.

TARIF DEFAULT_MAIN jméno_tarifu (nebo TARIF SET_MAIN jméno_tarifu)

Nastaví 'jméno_tarifu' jako implicitní (globální) hlavní skript. Pokud v nějaké seanci není nastaven lokální hlavní skript, bude se tento skript spouštět pro tarifikaci hovorů.

TARIF NO_DEFAULT_MAIN

U globálního hlavního skriptu odstraní příznak hlavního skriptu. Pak nebude globální hlavní skript specifikován a bude se tarifikovat pouze pomocí lokálního hlavního skriptu (bude-li specifikován).

TARIF LOCAL_MAIN jméno_tarifu

Nastaví 'jméno_tarifu' jako lokální hlavní skript. Ten se bude pro danou seanci spouštět pro tarifikaci hovorů (i když je nastaven globální hlavní skript).

TARIF NO_LOCAL_MAIN

U lokálního hlavního skriptu odstraní příznak hlavního skriptu. Pak se bude tarifikovat pouze pomocí globálního hlavního skriptu (bude-li uveden).

TARIF LIST

Vypíše všechny načtené skripty s různými informacemi (o velikosti kódu, dat, o tom, zda jde o hlavní skripty, a o reference countu). Je to užitečné například pro určení, jaký skript je hlavní.

TARIF LIST_LOCAL

Vypíše seznam lokálních skriptů. Lokální skripty se po skončení seance automaticky smažou pokud mají během seance reference count 1 nebo menší.

TARIF INFO jméno_tarifu

Vypíše seznam deklarovaných funkcí skriptu 'jméno_tarifu' a také funkce importované z jiných skriptů.

TARIF DUMP jméno_tarifu

Vypíše zdrojový kód skriptu 'jméno_tarifu'.

TARIF DUMP_CODE jméno_tarifu

Vypíše byte-kód skriptu 'jméno_tarifu'. Pro uživatele asi nemá význam.

3.3Syntaxe tarifikačních skriptů

Jazyk pro skripty je syntaxí podobný jazyku C. Zdrojový kód se skládá ze dvou částí: deklarační a příkazové.

V deklarační části jsou deklarace proměnných (jsou lokální pro daný skript) a funkcí (ty jsou globální, tj. přístupné z jiných skriptů).

V příkazové části jsou příkazy, které se budou spouštět při tarifikaci pokud je daný skript hlavní (pokud není, daná část nemá smysl).

Deklarace globálních proměnných vypadá takto (hranaté závorky udávají nepovinnou část):

TYP jméno1 [, jméno2 [, …]] [= iniciální hodnota];

3.3.1Typy

TYP může být:

int

klasické 32-bitové znaménkové celé číslo

ulong

odpovídá unsigned longu: 32 bitů, bez znaménka, celé číslo

byte

8 bitů se znaménkem, celé číslo

float

odpovídá floatu. 32 bitů, číslo s pohyblivou řádovou čárkou (desetinné)

string

řetězec znaků o délce maximálně 256 znaků

time

označuje délku časového úseku, je uložen jako int (může být záporný), přesnost na sekundy

timestamp

označuje časový okamžik, přesnost na sekundy

money

peníze - celé číslo udávající počet haléřů

Mezi mnoha typy jsou prováděny implicitní konverze.

Pokud je v deklaraci proměnné uvedena iniciální hodnota, je daná proměnná na tuto hodnotu inicializována při každém spuštění reportu.

3.3.2Předdefinované proměnné

Poznámka: obsahují aktuální informace o hovoru a mají stejný význam jako proměnné stejného jména v reportech nebo filtrech

3.3.3Deklarace funkcí

TYP jméno_funkce ([TYP [&] parametr1 [, TYP [&] parametr2 [,…]]])
{
    [lokální deklarace proměnných (stejné jako globální)]
    [seznam příkazů]
}

TYP je stejný jako u proměnné, ale navíc může být 'void', který označuje, že funkce nic nevrací.

Pokud je v lokální deklaraci uvedena iniciální hodnota, dosadí se do dané proměnné při každém volání funkce (než se začnou vykonávat příkazy). Parametry, u kterých je uvedeno '&' se předávají odkazem, tj. funkce může měnit hodnotu proměnné uvedené jako skutečný parametr (ten, který se píše do volání funkce).

Ve volání funkce musí být parametry předávané odkazem uvedeny také s '&'.

3.3.4Předdefinované funkce

Poznámka: není problém na požádání přidat další. Zatím jsou tam ty, které byly potřeba při tarifikování

int split_timestamp(
    timestamp end,
    int &year, int &month,
    int &month_day,
    int &week_day,
    int &day_seconds
);

Rozdělí údaj o časovém okamžiku ('end') na jednotlivé části:

  • rok

  • měsíc (číslováno od 0)

  • den v měsíci (číslováno od 1)

  • den v týdnu (neděle je 0, pondělí 1, …)

  • počet sekund od začátku dne.

int day_intersect(
    time end0, time length0,
    time begin1, time end1
);

Spočítá počet sekund průsečíku dvou časových období: jedno končí end0 (počítáno od začátku dne) a má délku length0, druhé začíná begin1 a končí end1.

int strlen(string s);

Vrací délku řetězce s

string substr(
    string s,
    int start,
    int length);

Vrací podřetězec s začínající start a s délkou length

int parse_trunk(
    string trunk,
    int &t1, int &t2, int &t3
);

Rozdělí trunk na tři čísla (podle formátu trunku jsou v řetězci trunk uloženy dvojciderně nebo trojciferně)

3.3.5Příkazy

{ příkaz1; [příkaz2; [příkaz3; […]]]}

Skupina příkazů. Chápe se jako jeden příkaz.

if (podmínka) příkaz
if (podmínka) příkaz1 else príkaz2

Pokud je splněna podmínka (tj. výraz 'podmínka' bude mít hodnotu nenulovou), provede se příkaz/příkaz1 (může být i víc příkazů uvedených mezi '{' a '}'). V opačném případě se provede příkaz2 (je-li uveden).

while (podmínka) příkaz

Dokud je splněna podmínka, provádí se příkaz

for (příkaz1; podmínka; příkaz3;) příkaz4

Na začátku se provede příkaz1, potom dokud platí podmínka, provádí se příkaz4 a příkaz3.

switch (výraz) {
    case a: příkazy_a; [break;]
    case b: příkazy_b; [break;]
    […]
    [default: příkazy_default;]
}

Na základě hodnoty výrazu se provádění přesune na příkazy uvedené u hodnoty výrazu (např. je-li výraz roven 5, a 'b' je 5, začnou se provádět příkazy_b. Pokud hodnota výrazu není mezi a, b, …, skočí se na větev default. Výraz musí být převeditelný na int.

break;
break n;

Skočí se na konec určité oblasti (pokud je uveden parametr n, skočí se na konec n-té oblasti nad aktuálně prováděnou. Oblastí pro break je for a while cykly a switch příkaz. break 3 ukončí třeba tři právě prováděné do sebe vnořené cykly.

return výraz;

Vrátí výraz jako výsledek z funkce.

print string [, string2 [, …]];
println string [, string2 [, …]];

Vypíše dané řetězce (pouze pokud je tarifikátor spouštěn samostatně, ne z reportu). println navíc za posledním z nich odřádkuje.

stop;

Zastaví provádění skriptu (bez chybového hlášení).

fail;
fail "Chybová hláška";

Zastaví provádění skriptu a ohlásí chybu (pokud je to spuštěno z reportu, ukončí se jeho zpracování).

funkce(parametr [, parametr]);

Volání funkce. 'parametr' může být buď výraz nebo může být tvaru '& proměnná' (v případě předávání parametru odkazem). Je striktně požadováno, aby souhlasily parametry předávané odkazem a hodnotou v deklaraci funkce i ve volání. U paramtrů předávaných odkazem navíc musí přesně sedět typ. Pokud funkce vrací hodnotu, může být použita i jako výraz.

3.3.6Výrazy

Klasické výrazy v infixové notaci se závorkami.

Používají se operátory (seřazeno podle priorit, první řádek má nejvyšší):

'-' (unární), '++', '--', '(typ)', '(+typ)', '(-typ) (přetypování)
'*', '/', '%'
'+', '-'
'<', '>', '<=', '>='
'==', '!='
'&'
'|'
'&&'
'||'
'=' a všechny varianty jako '+=', '*=', …
','

Poznámky:

3.3.7Překlad

Překlad probíhá těsně po příkazu serveru 'TARIF ADD', 'TARIF PARSE' nebo 'TARIF REPARSE'. Výskyt chyby je hlášen serverem klientovi a detailní popis důvodu je zapsán do logu.

3.4Standardní tarifikační skripty

3.4.1main.trf:

Hlavní skript; v něm se tarifikace rozskakuje podle trunku do tarifikačních funkcí jednotlivých operátorů. Tento soubor je potřeba upravit podle přiřazení trunků jednotlivým operátorům.

3.4.2global.trf:

Zde jsou uloženy obecné servisní funkce, které je možné použít pro libovolného operátora.

int is_easter(int year, int month, int day)

Vrací 1, pokud jsou v daném dnu velikonoce

int is_holiday(int year, int month, int day)

Vrací 1, pokud je daný den svátkem

void get_day_before(
    int year, int month, int day,
    int &year1, int &month1, int &day1
)

Do proměnných year1, month1 a day1 uloží datum dne před dnem určeným year, month a day

money do_tarif_1pasmo(
    time mintime,
    money mincost,
    time timeslice,
    money slicecost,
    time &begin, time &length,
    int is_continuation
)

Spočítá cenu hovoru, který končí v čase 'begin' (počítá se od půlnoci) s délkou 'length'. Parametr is_continuation určuje, zda se počítá první část hovoru (potom je potřeba dbát na minimální zpoplatněnou částku, hodnota is_continuation je 0) nebo zda se jedná o pokračování hovoru jdoucího přes víc dnů, jehož první část byla spočítána. Parametr 'mintime' určuje minimální zpoplatněný čas, parametr 'mincost' určuje cenu za tento minimální čas, 'timeslice' je délka úseků, po kterých se navyšuje cena a konečně 'slicecost' je cena za jeden takovýto úsek. Celý hovor musí ležet v rámci jednoho dne. Parametry 'begin' a 'length' jsou předávány odkazem, uloží se do nich informace nutné pro tarifikování zbytku hovoru pro případ, kdy hovor přejde přes půlnoc. V parametru 'length' se vrátí rozdíl konce hovoru a okamžiku, kdy by se znova navýšila cena (pokud hovor končil přesně na násobku timeslice, bude length 0, jinak je záporná - určuje vlastně na kolik sekund by ještě volající měl "nárok"). V parametru 'begin' se vrátí začátek nepředplacené doby (vždy je větší nebo roven času 'begin' na vstupu). Pokud je třeba 'min_time' 1 minuta a 'timeslice' 30 sekund, hovor trval 1:05 a začal v 7:20:00, bude ma konci v 'begin' 7:21:30 (v tuto dobu by se do hovoru započítala další půlminuta) a 'length' bude -0:25 (protože mohl mluvit ještě 25 sekund bez navýšení ceny).

money do_tarif_2pasma(
    time T1, time T2,
    time mintime1, time mintime2,
    money mincost1, money mincost2,
    time timeslice1, time timeslice2,
    money slicecost1, money slicecost2,
    time &begin, time &length,
    int is_continuation
)

Rozdíl od do_tarif_1pasmo je v tom, že zde je den rozdělen na dvě časová pásma, která mají vlastní parametry mincost, mintime, timeslice a slicecost. Parametry končící 1 jsou pro první pásmo, parametry končící 2 jsou pro druhé pásmo. První pásmo má dvě části, od 0:00:00 do (T1 - 1 sekunda) včetně a od T2 do 23:59:59 včetně, druhé je od T1 do (T2 - 1 sekunda) včetně. Jinak význam ostatních parametrů je jako u do_tarif_1pasmo.

money do_tarif_3pasma(
    time T1, time T2, time T3, time T4,
    time mintime1,
    time mintime2,
    time mintime3,
    money mincost1,
    money mincost2,
    money mincost3,
    time timeslice1,
    time timeslice2,
    time timeslice3,
    money slicecost1,
    money slicecost2,
    money slicecost3,
    time &begin, time &length,
    int is_continuation
)

Rozdíl od do_tarif_1pasmo je v tom, že zde je den rozdělen na tři časová pásma, která mají vlastní parametry mincost, mintime, timeslice a slicecost. Parametry končící 1 jsou pro první pásmo, parametry končící 2 jsou pro druhé pásmo a parametry končící 3 pro třetí. První pásmo má dvě části, od 0:00:00 do (T1 - 1 sekunda) a od T4 do 23:59:59, druhé má také dvě části: od T1 do (T2 - 1 sekunda) a od T3 do (T4 - 1 sekunda), třetí je od T2 do (T3 - 1 sekunda) (vše včetně).

money do_tarif_internet2002(
    time T1, time T2,
    money low_cost1, money high_cost1,
    money low_cost2, money high_cost2,
    time &begin,
    time &length1, time &length2
)

Tarifikuje hovor podle internetového tarifu, kde se počítá v minutových intervalech, ale minuta v prvních 10 minutách od začátku hovoru má jinou cenu než minuta ve zbytku hovoru. 'low_cost1' je cena v prvním pásmu v prvních 10 minutách. 'low_cost2' je cena v prvním pásmu mimo prvních 10 minut. 'high_cost1' je cena ve druhém pásmu v prvních 10 minutách. 'high_cost2' je cena ve druhém pásmu mimo prvních 10 minut. Pásma se stanovují stejně jako u do_tarif_2pasma, význam ostatních parametrů je také stejný jako u ostatních funkcí.

3.4.3telecom_fcn.trf:

Zde jsou funkce uzpůsobené konkrétně pro Telecom, používají ale funkce z global.trf.

money tarif_telecom_mistni02(
    money cost_low, money cost_high,
    timestamp end, time length
)

Tarifikuje místní hovor s cenou 'cost_low' za minutu v slabém pásmu, 'cost_high' za minutu v silném pásmu. 'end' je konec hovoru, length je délka hovoru.

money tarif_telecom_mezimesto02(
    money cost_night,
    money cost_low,
    money cost_high,
    timestamp end, time length
)

Tarifikuje meziměstský hovor s cenou 'cost_night' za minutu v nočním pásmu, 'cost_low' za minutu v slabém pásmu a 'cost_high' za minutu v silném pásmu. 'end' je konec hovoru, length je délka hovoru.

money tarif_telecom_mobil02(
    money cost,
    timestamp end, time length
)

Tarifikuje hovor na mobil, 'cost' je cena za minutu, ostatní parametry mají stejný význam jako u tarif_telecom_mistni02.

money tarif_telecom_mezinarodni02(
    money cost_low, money cost_high,
    timestamp end, time length
)

Tarifikuje mezinárodní hovor s cenou 'cost_low' za minutu v slabém pásmu, 'cost_high' za minutu v silném pásmu. 'end' je konec hovoru, length je délka hovoru. Od místního se liší tím, že je tarifikován po sekundách a minimální zpoplatněná délka je jedna minuta.

money tarif_telecom_2pasma_02(
    time min_time, time interval,
    money cost_low, money cost_high,
    timestamp end, time length
)

Tarifikuje speciální tarify Telecomu, které jsou rozděleny do dvou časových pásem a mají různě dlouhé minimální doby a intervaly, ale vždy se počítá se stejnou cenou vztaženou k jedné minutě. Slouží např. pro tarifikování různých barevných linek. 'min_time' je minimální zpoplatněná doba. 'interval' je interval, po kterých se tarikuje. 'cost_low' je cena za minutu ve slabém pásmu. 'cost_low' je cena za minutu v silném pásmu.

money tarif_telecom_1pasmo_02(
    time min_time,
    time interval,
    money cost_per_minute,
    timestamp end, time length
)

Tarifikuje speciální tarify Telecomu, které nejsou rozděleny do časových pásem a mají různě dlouhé minimální doby a intervaly, ale vždy se počítá se stejnou cenou vztaženou k jedné minutě. Slouží např. pro tarifikování různých barevných linek. 'min_time' je minimální zpoplatněná doba. 'interval' je interval, po kterých se tarikuje. 'cost_per_minute' je cena za minutu.

money tarif_telecom_internet2002(
    money cost1_low,
    money cost1_high,
    money cost2_low,
    money cost2_high,
    timestamp end, time length
)

Tarif Telecom Internet2002. 'cost1_low' je cena za minutu ve slabém pásmu v prvních 10 minutách, 'cost1_high' je cena za minutu v silném pásmu v prvních 10 minutách, 'cost2_low' je cena za minutu ve slabém pásmu ve zbytku hovoru. 'cost2_high' je cena za minutu ve slabém pásmu ve zbytku hovoru.

3.4.4telecom_standard.trf:

Je zde hlavní tarifikovací funkce tarif_telecom(), která na základě BCATu určí, jaké tarifikovací funkce a s jakými cenami zavolá. Tento soubor je potřeba upravit podle konkrétní konfigurace BCATů a podle konkrétního cenového programu.