h1. Округление длительности {{>toc}} Наибольшая точность сохранения длительности вызова в базе данных, которая доступна в системе - посекундная. Посекундная длительность доступна в CDR для всех вызовов, прошедших через систему. Также для звонков, которые прошли через [[Биллинг]], в базе данных хранится вычисленная на основании [[Биллинговый инкремент|Биллингового инкремента]] длительность вызова в минутах. При выполнении [[Пересчет биллинга|Пересчета биллинга]] длительность вызова в минутах пересчитывается заново исходя из [[Биллинговый инкремент|Биллингового инкремента]] и длительности вызова в секундах. Длительность вызова в секундах после сохранения CDR является неизменной и пересчету не подлежит. Однако секундная точность не является наименьшим атомом измерения длительности. Секунда состоит из миллисекунд, в миллисекунда состоит из микросекунд итп. Таким образом, возникает проблема выбора режима округления. Например, звонок начался в 15 сек. 300 мсек, а закончился в 25 сек. 900 мсек. Можно вычислить длительность только на основании секунд как 25 - 15 = 10 сек. Либо же можно вычислить длительность как 25.800 - 15.300 = 10.500 сек, далее можно округлить до 10 либо 11 сек. Казалось бы проблема округления 1 секунды незначительна и можно ею пренебречь. Однако на больших объемах телефонного трафика разница в округлении может давать значительные суммы расхождения при расчетах с партнерами. Биллинговые системы партнеров могут использовать различные схемы округления длительности. Крайне желательно использовать одинаковый метод округления длительности между партнерами. На проблему округления накладывается проблема задержек в сети VoIP. Например, оригинатор отбил вызов и отправил вам сообщение о завершении, а сообщение к вам дошло через 500мсек. Расхождение в длительности может возникнуть и по этой причине. В системе доступны следующие режимы округления: h2. К меньшему, потом вычесть. Время начала и время завершения вызова округляются в меньшую сторону до секунд. Затем, для получения длительности вызова, из времени завершения вычитается время начала. Пример. |время начала|2013-01-01 01:00:15.300| |время завершения|2013-01-01 01:00:25.900| Длительность = 25 - 15 = 10 сек. h2. Вычесть, потом к ближайшему, середина округляется в бОльшую сторону. Пример 1. |время начала|2013-01-01 01:00:15.300| |время завершения|2013-01-01 01:00:25.900| Сначала вычитаем: длительность = 25.900 - 15.300 = 10.600 Далее округляем к ближайшему: длительность = 11 сек. Пример 2. |время начала|2013-01-01 01:00:15.300| |время завершения|2013-01-01 01:00:25.800| Сначала вычитаем: длительность = 25.800 - 15.300 = 10.500 Далее округляем к ближайшему. Поскольку 500 посредине, а середина округляется в бОльшую сторону, длительность = 11 сек. Пример 3. |время начала|2013-01-01 01:00:15.300| |время завершения|2013-01-01 01:00:25.700| Сначала вычитаем: длительность = 25.700 - 15.300 = 10.400 Далее округляем к ближайшему: длительность = 10 сек. h2. Вычесть, потом к бОльшему. Пример 1. |время начала|2013-01-01 01:00:15.300| |время завершения|2013-01-01 01:00:25.900| Сначала вычитаем: длительность = 25.900 - 15.300 = 10.600 Далее округляем к большему: длительность = 11 сек. Пример 2. |время начала|2013-01-01 01:00:15.30| |время завершения|2013-01-01 01:00:25.700| Сначала вычитаем: длительность = 25.700 - 15.300 = 10.400 Далее округляем к большему: длительность = 11 сек. [[Duration rounding|English translation]]