Учет услуг сотовой связи (постановка)
SYSDBA (обсуждение | вклад) |
Вера (обсуждение | вклад) |
||
| Строка 102: | Строка 102: | ||
usr$name dname, | usr$name dname, | ||
usr$comment dtext1024 | usr$comment dtext1024 | ||
| + | /*добавлено 17.08.2011*/ | ||
| + | usr$limit usr$call_dcost, | ||
| + | usr$date ddate NOT NULL | ||
| + | /**/ | ||
); | ); | ||
| Строка 111: | Строка 115: | ||
CREATE TABLE usr$call_grouplink ( | CREATE TABLE usr$call_grouplink ( | ||
id dintkey, | id dintkey, | ||
| − | usr$groupkey dintkey, | + | /*Изменения 17.08.2011*/ |
| − | usr$phonekey dintkey, | + | /*usr$groupkey dintkey,*/ |
| + | usr$groupkey usr$call_dgroupkey, | ||
| + | /*usr$phonekey dintkey,*/ | ||
| + | usr$phonekey usr$call_dphonekey, | ||
| + | /**/ | ||
usr$fromdate DATE NOT NULL | usr$fromdate DATE NOT NULL | ||
); | ); | ||
Версия 11:18, 17 августа 2011
Исходный файл (Excel или XML) мы обрабатываем последовательно. Распознав запись, мы берем из нее следующую информацию:
- Дата и время
- Тип услуги
- Абонент
- Стоимость
Зная абонента -- определяем его группу. По группе и типу услуги берем правило распределения затрат и вычисляем какую сумму возьмет на себя предприятие, а какую абонент покроет из своей зарплаты.
На выходе, после обработки исходного файла, мы должны получить список абонентов и две суммы для каждого: "на затраты" и "из зарплаты". Если для группы абонента установлен лимит, то проверяем сумму "на затраты" и ее превышение над лимитом переносим на вычет из зарплаты.
Лимиты устанавливаются для каждой группы абонентов. Сумма в пределах лимита покрывается предприятием. Сверх этой суммы -- оплачивает работник. Лимит действует с определенной даты до того момента, пока не будет изменен следующим установленным значением.
После этого оператор может вручную изменить (подкореетировать) сумму, которая будет возмещаться предприятием.
Правила устанавливаются для группы и конкретной услуги. В правиле мы указываем следующие параметры:
- Рабочее время согласно графика -- Если признак установлен, то рабочее время учитывается согласно графика работы. Информации берется из подсистемы Кадры и Зарплата. Звонки в рабочее время оплачиваются предприятием. Вне рабочего времени -- сотрудником. Если признак установлен, то не действуют поля с временными интервалами.
/* * Домены * */ CREATE DOMAIN usr$call_dphone VARCHAR(12) CHECK(VALUE SIMILAR TO '[0-9]{5,12}'); -- ссылка на GD_VALUE usr$call_dvaluekey -- обязательная ссылка на услугу usr$call_dservicekey /* * Все номера телефонов, которые появляются в листинге. * Храним только цифры без разделителей, плюсов, скобок и т.п. * Флагом помечаем номера нашего предприятия. */ CREATE TABLE usr$call_phone ( id dintkey, usr$phone usr$call_dphone, usr$our dboolean_notnull ); /* * Список услуг: телефонный звонок, СМС, звонок в роуминге, * звонок на стационарную сеть и т.п. * Единица измерения услуги -- ссылка на стандартный * справочник GD_VALUE. */ CREATE TABLE usr$call_service ( id dintkey, usr$name dname, usr$valuekey usr$call_dvaluekey ); /* * Хронология звонков, услуг и т.п. * Указывается объем и/или продолжительность. */ CREATE TABLE usr$call_history ( id dintkey, usr$date DATE NOT NULL, usr$time TIME NOT NULL, usr$from usr$call_dphonekey NOT NULL, usr$to usr$call_dphonekey, usr$volume usr$call_dvolume, usr$duration TIME, usr$servicekey usr$call_dservicekey, usr$cost usr$call_dcost NOT NULL ); /* * История перехода СИМ карт из рук в руки. * Если карточка никому не назначена -- * usr$employeekey IS NULL */ CREATE TABLE usr$call_phonelink ( id dintkey, usr$phonekey usr$call_dphonekey NOT NULL, usr$employeekey usr$call_employeekey, usr$fromdate DATE NOT NULL ); /* * Список групп абонентов. * Правила вычета денег привязаны к группам. * */ CREATE TABLE usr$call_group ( id dintkey, usr$name dname, usr$comment dtext1024 /*добавлено 17.08.2011*/ usr$limit usr$call_dcost, usr$date ddate NOT NULL /**/ ); /* * Привязка номера к группе. * */ CREATE TABLE usr$call_grouplink ( id dintkey, /*Изменения 17.08.2011*/ /*usr$groupkey dintkey,*/ usr$groupkey usr$call_dgroupkey, /*usr$phonekey dintkey,*/ usr$phonekey usr$call_dphonekey, /**/ usr$fromdate DATE NOT NULL ); /* * Правила. * * * * * */ CREATE TABLE usr$call_rule ( id dintkey, usr$name dname, usr$servicekey usr$call_dservicekey ); /* * Привязка правил к группе. * * */ CREATE TABLE usr$call_grouprule ( id dintkey, usr$call_rulekey usr$call_drulekey, usr$call_groupkey usr$call_dgroupkey, usr$fromdate DATE NOT NULL );