Учет услуг сотовой связи (постановка)
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| − | Предприятие заключило с оператором сотовой связи договор. В рамках договора предоставлены сим карты, которые предприятие передает своим сотрудникам. Ежемесячно оператор выставляет суммарный счет для оплаты и листинг к нему, где расписаны все | + | Предприятие заключило с оператором сотовой связи договор. В рамках договора предоставлены сим карты, которые предприятие передает своим сотрудникам. Ежемесячно оператор выставляет суммарный счет для оплаты и листинг к нему, где расписаны все начисления по каждому номеру. На предприятии действует определенная политика каким группам абонентов, какую часть суммы оплачивать за счет предприятия, а какую -- вычитать из начисленной зарплаты. |
| − | + | Введем понятие '''услуги''' -- это звонок на номер стационарной связи, звонок на мобильный номер, звонок на номер предприятия, звонок в роуминге, отправка СМС и т.п. Справочник услуг наполняется в процессе внедрения и зависит от принятой политики предприятия. | |
| − | Исходный файл (Excel или XML) мы обрабатываем последовательно | + | Исходный файл (Excel или XML) мы обрабатываем последовательно, анализируя каждую строку и извлекая следующую информацию: |
* Дата и время | * Дата и время | ||
| − | * | + | * Услуга |
* Абонент | * Абонент | ||
* Стоимость | * Стоимость | ||
| + | |||
| + | Данную информацию помещаем в базу данных для дальнейшей обработки. | ||
| + | |||
| + | |||
Зная абонента -- определяем его группу. По группе и типу услуги берем правило распределения затрат и вычисляем какую сумму возьмет на себя предприятие, а какую абонент покроет из своей зарплаты. | Зная абонента -- определяем его группу. По группе и типу услуги берем правило распределения затрат и вычисляем какую сумму возьмет на себя предприятие, а какую абонент покроет из своей зарплаты. | ||
Версия 14:28, 19 августа 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$fromdate 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 ); /* * Правила. * * * * * */ /*Исправлено 17.08.2011*/ /*CREATE TABLE usr$call_rule ( id dintkey, usr$name dname, usr$servicekey usr$call_dservicekey );*/ CREATE TABLE USR$CALL_RULE ( ID DINTKEY, USR$SERVICEKEY USR$CALL_DSERVICEKEY NOT NULL, USR$DAY USR$CALL_DDAY, USR$TOTIME DTIME, USR$FROMTIME DTIME ); /*Где USR$CALL_DDAY - это тип перечисление * со следующими кодами и значениями: * код значение * 1 Рабочие дни * 2 Выходные дни * 3 Сб * 4 Все дни */ /* * Привязка правил к группе. * * */ /*CREATE TABLE usr$call_grouprule ( id dintkey, usr$call_rulekey usr$call_drulekey, usr$call_groupkey usr$call_dgroupkey, usr$fromdate DATE NOT NULL );*/ CREATE TABLE USR$CALL_GROUPRULE ( ID DINTKEY, USR$RULEKEY USR$CALL_DRULEKEY NOT NULL, USR$GROUPKEY USR$CALL_DGROUPKEY NOT NULL );