В кассовом ПО Artix реализована возможность автоматически закрывать смену в заданное время, при выключении кассы и послав запрос удаленно по REST-интерфейсу.

Конфигурирование плагина

Активация плагина "Операционный день" определяется параметром operationday, который задается в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/operationday.ini в секции [plugins].

НаименованиеТип данныхВозможные значенияОписаниеПримечания
operationdayстроковый
  • on
  • off
Активация плагина "Операционный день"По умолчанию off


[plugins]
; Плагин Операционный день
; для контроля состояния кассы и смены
;operationday = off

Настройка плагина "Операционный день" производится в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/operationday.ini в секции [OperationDay].

НаименованиеТип данныхВозможные значенияОписаниеПримечания
executeCSCommandsлогический
  • true
  • false

Выполнять команды, полученные с кассового сервера

Запросы принимаются на порт 38082.

По умолчанию false

shiftCloseTimeстроковый

Автоматически закрывать смену в указанное время

Время задается в формате чч:мм

Закрытие смены может быть произведено позднее указанного времени, так как смена закрывается после окончания выполнения всех операций.


closeShiftOnShutdownлогический
  • true
  • false
Закрывать смену при выключении кассыПо умолчанию false
userNameстроковый
Имя пользователя, от имени которого смена будет закрываться по времени и при выключении кассы
userIdстроковый
Идентификатор пользователя, от имени которого смена будет закрываться по времени и при выключении кассы


[OperationDay]

; Выполнять команды, полученные с кассового сервера
; запросы принимаются на порт 38082
; по умолчанию выключено
;executeCSCommands = false

; Автоматически закрывать смену в указанное время
; время в формате чч:мм
; по умолчанию выключено
;shiftCloseTime = ""

; Закрывать смену при выключении кассы
; по умолчанию false
;closeShiftOnShutdown = false

; Имя пользователя, от имени которого смена будет закрываться по времени и при выключении кассы
;userName = ""

; Идентификатор пользователя, от имени которого смена будет закрываться по времени и при выключении кассы
;userId = ""


Если имя (userName) и идентификатор пользователя (userId) не заданы, то для автоматического закрытия смены будут использоваться данные последнего пользователя из БД Documents таблицы Users.

Если данные о пользователе не удалось получить из БД, то смена не будет закрыта.


Если во время автоматического закрытия смены по времени на экране выведен диалог, то смена не будет закрыта.


Если включена проверка счетчиков в смене и в ФР при закрытии смены, то при расхождении сумм смену можно будет закрыть только вручную.

API для удаленного закрытия смены

Плагин "Операционный день" поддерживает следующие команды (GET-запросы):

Команды можно выполнять через любую программу, отправляя GET-запросы, например:

curl --location --request GET 'http://192.169.10.8:38082/getState'
curl --location --request GET 'http://192.169.10.8:38082/closeShift?cashierName=Test&cashierCode=999'
curl --location --request GET 'http://192.169.10.8:38082/closeShiftResult'

Ответы на запросы

Ответы на запросы приходят в формате json.

Наименования полей совпадают с наименованием аналогичных полей, выгружаемых через aif. Поэтому в некоторых полях используются заглавные буквы, а в некоторых нет.

Запрос на получение состояния (getState)

При выполнении запроса на получение состояния могут быть получены следующие ответы:

{
  "canCloseShift": false,
  "cashInfo": {
    "kkms": [],
    "mode": "normal"
  },
  "context": "receiptforming",
  "error": "Смена не открыта",
  "shift": {
    "cashCode": "177",
    "countBack": 0,
    "countMoneyIn": 0,
    "countMoneyOut": 0,
    "countSale": 0,
    "firstchecktime": "",
    "shift": 280,
    "shopCode": "1234567890",
    "status": "new",
    "statusDescription": "Новая смена",
    "sumBack": "0.00",
    "sumMoneyIn": "0.00",
    "sumMoneyOut": "0.00",
    "sumSale": "0.00",
    "timeBeg": "",
    "timeEnd": ""
  },
  "user": {
    "userCode": "4",
    "userName": "Мастер"
  }
}

, где:

{
  "canCloseShift": true,
  "cashInfo": {
    "kkms": [
      {
        "countBack": "",
        "countMoneyIn": "",
        "countMoneyOut": "",
        "countSale": "",
        "fnnumber": "9999078902008655",
        "kkmNum": 1,
        "serialNum": "0381080012020518",
        "shiftnumkkm": 102,
        "sumBack": "0.00",
        "sumMoneyIn": "0.00",
        "sumMoneyOut": "0.00",
        "sumSale": "0.00",
        "unsenddoccount": -1,
        "unsenddocdate": ""
      }
    ],
    "mode": "normal"
  },
  "context": "receiptview",
  "shift": {
    "cashCode": "177",
    "countBack": 0,
    "countMoneyIn": 0,
    "countMoneyOut": 0,
    "countSale": 1,
    "firstchecktime": "2022-02-25T11:20:26",
    "shift": 280,
    "shopCode": "1234567890",
    "status": "open",
    "statusDescription": "Смена открыта",
    "sumBack": "0.00",
    "sumMoneyIn": "0.00",
    "sumMoneyOut": "0.00",
    "sumSale": "20.90",
    "timeBeg": "2022-02-25T11:22:14",
    "timeEnd": ""
  },
  "user": {
    "userCode": "4",
    "userName": "Мастер"
  }
}

, где для kkms:

{
  "canCloseShift": false,
  "cashInfo": {
    "kkms": [
      {
        "countBack": "0",
        "countMoneyIn": "0",
        "countMoneyOut": "0",
        "countSale": "1",
        "fnnumber": "9999078902008655",
        "kkmNum": 1,
        "serialNum": "0381080012020518",
        "shiftnumkkm": 102,
        "sumBack": "0.00",
        "sumMoneyIn": "0.00",
        "sumMoneyOut": "0.00",
        "sumSale": "20.90",
        "unsenddoccount": 0,
        "unsenddocdate": ""
      }
    ],
    "mode": "normal"
  },
  "context": "mainmenu",
  "error": "Смена не открыта",
  "shift": {
    "cashCode": "177",
    "countBack": 0,
    "countMoneyIn": 0,
    "countMoneyOut": 0,
    "countSale": 1,
    "firstchecktime": "2022-02-25T11:20:27",
    "shift": 280,
    "shopCode": "1234567890",
    "status": "closed",
    "statusDescription": "Смена закрыта",
    "sumBack": "0.00",
    "sumMoneyIn": "0.00",
    "sumMoneyOut": "0.00",
    "sumSale": "20.90",
    "timeBeg": "2022-02-25T11:22:15",
    "timeEnd": "2022-02-25T11:23:07"
  },
  "user": {
    "userCode": "4",
    "userName": "Мастер"
  }
}


Поля countBack, sumBack, countSale, sumSale, countMoneyIn, sumMoneyIn, countMoneyOut, sumMoneyOut, unsenddoccount, unsenddocdate для kkms заполняются только при закрытии смены, так как эти данные запрашиваются у ФР при закрытии смены.


{
    "canCloseShift": false,
    "cashInfo": {
        "kkms": [],
        "mode": "normal"
    },
    "context": "shiftclose",
    "error": "Процесс закрытия смены уже начался",
    "shift": {
        "cashCode": "777",
        "countBack": 0,
        "countMoneyIn": 0,
        "countMoneyOut": 0,
        "countSale": 1,
        "firstchecktime": "2024-01-30T02:49:49",
        "shift": 132,
        "shopCode": "123",
        "status": "errorOnClose",
        "statusDescription": "Ошибка при закрытии смены",
        "sumBack": "0.00",
        "sumMoneyIn": "0.00",
        "sumMoneyOut": "0.00",
        "sumSale": "67.00",
        "timeBeg": "2024-01-30T02:50:04",
        "timeEnd": "2024-01-30T03:05:57"
    },
    "user": {
        "userCode": "4",
        "userName": "Мастер"
    }
}


 {
    "canCloseShift": true,
    "cashInfo": {
        "kkms": [],
        "mode": "normal"
    },
    "context": "registration",
    "shift": {
        "cashCode": "777",
        "countBack": 0,
        "countMoneyIn": 0,
        "countMoneyOut": 0,
        "countSale": 0,
        "firstchecktime": "",
        "shift": 133,
        "shopCode": "123",
        "status": "new",
        "statusDescription": "Новая смена",
        "sumBack": "0.00",
        "sumMoneyIn": "0.00",
        "sumMoneyOut": "0.00",
        "sumSale": "0.00",
        "timeBeg": "",
        "timeEnd": ""
    },
    "user": {
        "userCode": "4",
        "userName": "Мастер"
    }
}  

Запрос на закрытие смены (closeShift)

При выполнении запроса на закрытие смены могут быть получены следующие ответы:

{
    "errorCode": 1,
    "errorMessage": "Обнаружен незавершенный чек" 
}


{
    "errorCode": 0,
    "errorMessage": "OK"
}

, где:

Предполагается, что при выполнении длительных операций в ответ отправляется "OK" при начале выполнения операции, а далее КС должен запрашивать состояние до окончания выполнения длительной операции.

При закрытии смены данные кассира, переданные в запросе, записываются в БД Documents таблицу Workshift (поле scode – код кассира), users (поля usercode – код кассира, username – имя кассира), crights (cashiercard – код кассира, cashiername – имя кассира).

При закрытии смены по команде происходит переход в главное меню и блокировка кассы.

Если смена была закрыта, а в новой смене ещё не было операций, то при запросе состояния возвращаются данные о закрытой смене.

Запрос о результате закрытия смены (closeShiftResult)

При перезапуске кассового ПО json-объект с результатом закрытия смены перезаписывается, значения полей объекта сбрасываются.

При выполнении запроса о результате закрытия смены могут быть получены следующие ответы:

{
  "closedatetime": "2022-02-21T15:40:18.640+07",
  "context": "registration",
  "errors": []
}


{
  "closedatetime": "+07",
  "context": "shiftclose",
  "errors": []
}


{
  "closedatetime": "2024-01-30T03:06:34.852+00",
  "context": "registration",
  "errors": [
    {
      "COMMAND_VERIFYTOTAL": "Ошибка при выполнении операции"
    }
  ]
}

, где: