Example #1
0
    def addRbElement(self, parentElement, rbName):
        rb = CXMLHelper.addElement(parentElement, 'REFBOOK')
        CXMLHelper.setValue(CXMLHelper.addElement(rb, 'NAME'), rbName)
        db = QtGui.qApp.db

        if rbName == 'rcField':
            for record in db.getRecordList('rcField', '*', 'deleted = 0'):
                self.addFieldElement(rb, record)
        elif rbName == 'rcFunction':
            for record in db.getRecordList('rcFunction', '*'):
                self.addFunctionElement(rb, record)
        elif rbName == 'rcConditionType':
            for record in db.getRecordList('rcConditionType', '*',
                                           'deleted = 0'):
                self.addConditionTypeElement(rb, record)
        elif rbName == 'rcValueType':
            for record in db.getRecordList('rcValueType', '*'):
                self.addValueTypeElement(rb, record)
        elif rbName == 'rcTable':
            for record in db.getRecordList('rcTable', '*', 'deleted = 0'):
                self.addTableElement(rb, record)
        elif rbName == 'rcParamType':
            for record in db.getRecordList('rcParamType', '*'):
                self.addParamTypeElement(rb, record)
        elif rbName == 'rcParam':
            for record in db.getRecordList('rcParam', '*'):
                self.addParamElement(rb, record)
        elif rbName == 'rcParamValues':
            for record in db.getRecordList('rcParam_Value', '*'):
                self.addParamValueElement(rb, record)
        return rb
Example #2
0
    def addReportElement(self, rootElement, record):
        report = CXMLHelper.addElement(rootElement, 'REPORT')
        self.setRecordValuesToElement(
            report, record, ['name', 'description', 'editionMode', 'sql'])
        db = QtGui.qApp.db

        queryRecord = db.getRecord(db.table('rcQuery'), '*',
                                   forceInt(record.value('query_id')))
        if queryRecord:
            self.addQueryElement(report, queryRecord)

        params = CXMLHelper.addElement(report, 'PARAMETRS')
        for paramRecord in self.getReportParameterRecords(record.value('id')):
            self.addReportParamElement(params, paramRecord)

        groups = CXMLHelper.addElement(report, 'GROUPS')
        for groupRecord in db.getRecordList(
                'rcReport_Group', '*', 'master_id = %d and deleted = 0' %
                forceInt(record.value('id')), 'number'):
            self.addReportGroupElement(groups, groupRecord)

        capCells = CXMLHelper.addElement(report, 'TABLECAPCELLS')
        for tableCapCellRecord in db.getRecordList(
                'rcReport_TableCapCells', '*',
                'master_id = %d' % forceInt(record.value('id'))):
            self.addCapCellElement(capCells, tableCapCellRecord)

        return report
Example #3
0
 def createXMLDocument(self, accountRecord, destOKATO):
     doc = CXMLHelper.createDomDocument(rootElementName='ZL_LIST',
                                        encoding=self.encoding)
     rootElement = CXMLHelper.getRootElement(doc)
     self.addHeaderElement(rootElement, destOKATO)
     accountElement = self.addAccountElement(rootElement, accountRecord)
     return doc, accountElement
Example #4
0
    def addEntryElement(self, rootElement, record, entryNumber):
        entryElement = CXMLHelper.addElement(rootElement, 'ZAP')

        CXMLHelper.setValue(
            CXMLHelper.addElement(entryElement,
                                  'N_ZAP'),  # номер позиции записи
            entryNumber)
        patientElement = CXMLHelper.addElement(
            entryElement, 'PACIENT')  # сведения о пациенте
        self.fillPacient(patientElement, record)
        return entryElement, patientElement
Example #5
0
    def addConditionElement(self, parentElement, record):
        condition = CXMLHelper.addElement(parentElement, 'CONDITION')
        self.setRecordValuesToElement(
            condition, record,
            ['field', 'value', 'conditionType_id', 'valueType_id'])

        subConditions = CXMLHelper.addElement(condition, 'CONDITIONS')
        for conditionRecord in self.getConditionRecords(
                record.value('master_id'), record.value('id')):
            self.addConditionElement(subConditions, conditionRecord)
        return condition
Example #6
0
 def addHeaderElement(self, rootElement, destOKATO):
     header = CXMLHelper.addElement(rootElement, 'ZGLV')
     CXMLHelper.setValue(
         CXMLHelper.addElement(header, 'VERSION'),  # Версия взаимодействия
         self.version[:5])
     CXMLHelper.setValue(
         CXMLHelper.addElement(header, 'DATA'),  # Дата
         QtCore.QDate.currentDate().toString(QtCore.Qt.ISODate))
     CXMLHelper.setValue(
         CXMLHelper.addElement(
             header, 'OKATO_OMS'
         ),  # Код ОКАТО территории страхования по ОМС (территория, в которую выставляется счет)
         self.formatOKATO(destOKATO))
     return header
Example #7
0
 def addFieldElement(self, parentElement, record):
     field = CXMLHelper.addElement(parentElement, 'RECORD')
     self.setRecordValuesToElement(field, record, [
         'id', 'name', 'field', 'ref_id', 'rcTable_id', 'description',
         'visible'
     ])
     return field
Example #8
0
 def addCapCellElement(self, parentElement, record):
     capCell = CXMLHelper.addElement(parentElement, 'CAPCELL')
     self.setRecordValuesToElement(capCell, record, [
         'name', 'row', 'column', 'rowSpan', 'columnSpan', 'alignment',
         'type', 'bold'
     ])
     return capCell
Example #9
0
    def processFile(self, fileName):
        docFile = None
        try:
            isOk, sourceType, sourceInfis, destType, destInfis, year, month, number = self.parseFileName(fileName)
            if not isOk:
                return False

            if not zipfile.is_zipfile(fileName):
                raise Exception(u'Файл %s не является zip-архивом' % fileName)

            zipFile = zipfile.ZipFile(fileName, 'r')
            zipItems = zipFile.namelist()
            if not zipItems:
                raise Exception(u'Zip-архив "%s" пуст' % fileName)
            zipItem = next((item for item in zipItems if not item.startswith('L')), None)
            if zipItem is None:
                raise Exception(u'Необходимый файл в zip-архиве не найден' % fileName)

            docFile = zipFile.open(zipItem)

            self.processDocument(CXMLHelper.loadDocument(QtCore.QString(docFile.read().decode(self.encoding))), sourceInfis)
        except Exception, e:
            self.logger().warning(u'Не удалось провести импорт (%s)' % e.message)
            self.onException()
            return False
Example #10
0
    def processRespFile(self, fileName):
        """Импортирует указанный файл

        :param fileName: имя файла для импорта (R|D)<SS><DD><YY><NNNN>.(oms|xml) (описание имени см в `parseFileName`)
        :return: True, если импорт файла прошел успешно, False в ином случа
        :raise: Exception("архив пуст"), если архив пуст
        """
        docFile = None
        try:
            if zipfile.is_zipfile(fileName):
                zipFile = zipfile.ZipFile(fileName, 'r')
                zipItems = zipFile.namelist()
                if not zipItems:
                    raise Exception(u'zip-архив "%s" пуст' % fileName)
                docFile = zipFile.open(zipItems[0])
            else:
                docFile = open(fileName, 'r')

            self.processRespDocument(CXMLHelper.loadDocument(QtCore.QString(docFile.read().decode(self.encoding))))


        except Exception, e:
            self.logger().warning(u'Не удалось импортировать файл "%s" (%s)' % (fileName, e.message))
            self.onException()
            return False
Example #11
0
 def addParamElement(self, parentElement, record):
     param = CXMLHelper.addElement(parentElement, 'RECORD')
     self.setRecordValuesToElement(param, record, [
         'id', 'name', 'code', 'title', 'tableName', 'valueType_id',
         'type_id'
     ])
     db = QtGui.qApp.db
     return param
Example #12
0
    def fillPacient(self, patientElement, record):
        CXMLHelper.setValue(
            CXMLHelper.addElement(patientElement, 'VPOLIS'),  # тип полиса
            forceInt(record.value('policyKindCode')))

        policySerial = forceStringEx(record.value('policySerial'))

        if policySerial.lower() != u'еп' and len(policySerial) > 0:
            CXMLHelper.setValue(
                CXMLHelper.addElement(patientElement,
                                      'SPOLIS'),  # серия полиса
                policySerial[:10])
        CXMLHelper.setValue(
            CXMLHelper.addElement(patientElement, 'NPOLIS'),  # номер полиса
            forceStringEx(record.value('policyNumber'))[:20])
Example #13
0
    def openZip(self, zipFileName):
        if not zipfile.is_zipfile(forceString(zipFileName)):
            QtGui.qApp.processEvents()
            return False

        archive = zipfile.ZipFile(forceString(zipFileName), "r")
        names = archive.namelist()
        for fileName in names:
            docFile = archive.read(fileName)
            self.documents[fileName] = CXMLHelper.loadDocument(docFile)
Example #14
0
 def addHeaderElement(self, rootElement):
     header = CXMLHelper.addElement(rootElement, 'HEADER')
     CXMLHelper.setValue(
         CXMLHelper.addElement(header, 'VERSION'),  # Версия взаимодействия
         self.version[:5])
     CXMLHelper.setValue(
         CXMLHelper.addElement(header, 'DATA'),  # Дата
         QtCore.QDate.currentDate().toString(QtCore.Qt.ISODate))
     return header
Example #15
0
    def processFile(self, fileName, accInfo):
        """Импортирует указанный файл

        :param fileName: имя файла для импорта (A)<SS><DD><YY><NNNN>.(oms|xml) (описание имени см в `parseFileName`)
        :return: True, если импорт файла прошел успешно, False в ином случа
        :raise: Exception("архив пуст"), если архив пуст
        """
        docFile = None
        try:
            isOk, destInfis, sourceInfis, year, number = self.parseFileName(
                fileName)
            if destInfis[:2] != self._orgInfis[:2]:
                self.logger().info(
                    u'Пропуск обработки файла "%s": территория назначения (%s) не соответствует текущей (%s)'
                    % (fileName, destInfis, self._orgInfis))
                return False

            if zipfile.is_zipfile(fileName):
                zipFile = zipfile.ZipFile(fileName, 'r')
                zipItems = zipFile.namelist()
                if not zipItems:
                    raise Exception(u'oms-архив "%s" пуст' % fileName)
                docFile = zipFile.open(zipItems[0])
            else:
                docFile = open(fileName, 'r')

            self.processDocument(
                CXMLHelper.loadDocument(
                    QtCore.QString(docFile.read().decode(self.encoding))),
                sourceInfis, year, accInfo)

            self.logger().info(u'Импорт окончен %s\nОбновлено записей: %s' %
                               (QtCore.QTime.currentTime().toString('hh:mm'),
                                accInfo['countUpdate']))

        except Exception, e:
            self.logger().warning(u'Не удалось импортировать файл "%s" (%s)' %
                                  (fileName, e.message))
            self.onException()
            return False
Example #16
0
 def processReport(self, doc):
     db = QtGui.qApp.db
     rootElement = CXMLHelper.getRootElement(doc)
     reportElement = self.getElement(rootElement, 'REPORT', True)
     reportName = self.getElementValue(reportElement, 'NAME')
     reportId = db.translate('rcReport', 'name', reportName, 'id')
     if reportId:
         msg = QtGui.QMessageBox.warning(
             self._parent._parent, u'Внимание!',
             u"Отчёт с именем '%s' уже существует.\nOk - заменить.\nSave - сохранить с другим именем."
             % reportName, QtGui.QMessageBox.Ok | QtGui.QMessageBox.Save
             | QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Ok)
         if msg == QtGui.QMessageBox.Cancel:
             return
         elif msg == QtGui.QMessageBox.Ok:
             self.deleteReport(reportId)
         elif msg == QtGui.QMessageBox.Save:
             idx = 1
             while db.translate('rcReport', 'name',
                                u'%s_%d' % (reportName, idx), 'id'):
                 idx += 1
             reportName = u'%s_%d' % (reportName, idx)
     self.parceReport(reportElement, reportName)
Example #17
0
    def addQueryElement(self, parentElement, record):
        query = CXMLHelper.addElement(parentElement, 'QUERY')
        self.setRecordValuesToElement(
            query, record,
            ['id', 'name', 'stateTree', 'referencedField', 'mainTable_id'])
        db = QtGui.qApp.db

        columns = CXMLHelper.addElement(query, 'COLUMNS')
        for columnRecord in db.getRecordList(
                'rcQuery_Cols', '*', 'master_id = %d and deleted = 0' %
                forceInt(record.value('id')), 'number'):
            self.addColumnElement(columns, columnRecord)

        orders = CXMLHelper.addElement(query, 'ORDERS')
        for orderRecord in db.getRecordList(
                'rcQuery_Order', '*', 'master_id = %d and deleted = 0' %
                forceInt(record.value('id')), 'number'):
            self.addOrderElement(orders, orderRecord)

        groups = CXMLHelper.addElement(query, 'GROUPS')
        for groupRecord in db.getRecordList(
                'rcQuery_Group', '*', 'master_id = %d and deleted = 0' %
                forceInt(record.value('id')), 'number'):
            self.addGroupElement(groups, groupRecord)

        conds = CXMLHelper.addElement(query, 'CONDITIONS')
        for headConditionRecord in self.getConditionRecords(
                record.value('id')):
            self.addConditionElement(conds, headConditionRecord)

        subQuerys = CXMLHelper.addElement(query, 'QUERYES')
        subQueryIdList = [
            u"'%s'" % forceString(subQueryId) for subQueryId in re.findall(
                'q(\d+)', forceString(record.value('stateTree')))
        ]
        if subQueryIdList:
            for queryRecord in db.getRecordList(
                    'rcQuery', '*', 'id in (%s)' % u', '.join(subQueryIdList)):
                self.addQueryElement(subQuerys, queryRecord)

        return query
Example #18
0
 def createXMLDocument(self, title):
     doc = CXMLHelper.createDomDocument(rootElementName='MAIN',
                                        encoding=self.encoding)
     rootElement = CXMLHelper.getRootElement(doc)
     self.addHeaderElement(rootElement)
     return doc, rootElement
Example #19
0
    def addAccountElement(self, rootElement, record):
        account = CXMLHelper.addElement(rootElement, 'SCHET')
        accDate = forceDate(record.value('settleDate'))

        CXMLHelper.setValue(
            CXMLHelper.addElement(account, 'YEAR'),  # отчетный год
            accDate.year())
        CXMLHelper.setValue(
            CXMLHelper.addElement(account, 'MONTH'),  # отчетный месяц
            accDate.month())
        CXMLHelper.setValue(
            CXMLHelper.addElement(account, 'NSCHET'),  # номер счета
            forceStringEx(record.value('number')).split(u'/п')[0][:15])
        CXMLHelper.setValue(
            CXMLHelper.addElement(account, 'DSCHET'),  # дата выставления счёта
            forceDate(record.value('exposeDate')).toString(QtCore.Qt.ISODate))
        CXMLHelper.setValue(
            CXMLHelper.addElement(account,
                                  'SUMMAV'),  # сумма, выставленная на оплату
            '%.2f' % forceDouble(record.value('sum')))
        CXMLHelper.setValue(
            CXMLHelper.addElement(account,
                                  'SUMMAP'),  # сумма, принятая к оплате
            '%.2f' % forceDouble(record.value('summap')))
        CXMLHelper.setValue(
            CXMLHelper.addElement(account,
                                  'SANK_MEK'),  # финансовые санкции (МЭК)
            '%.2f' % forceDouble(record.value('sank_mek')))
        CXMLHelper.setValue(
            CXMLHelper.addElement(account,
                                  'SANK_MEE'),  # финансовые санкции (МЭЭ)
            '%.2f' % 0.0)
        CXMLHelper.setValue(
            CXMLHelper.addElement(account,
                                  'SANK_EKMP'),  # финансовые санции (ЭКМП)
            '%.2f' % 0.0)
        return account
Example #20
0
 def addReportParamElement(self, parentElement, record):
     param = CXMLHelper.addElement(parentElement, 'PARAMETR')
     self.setRecordValuesToElement(param, record, ['param_id'])
     return param
Example #21
0
    def process(self, accountId):
        self.isAbort = False
        self.phaseReset(11)

        db = QtGui.qApp.db

        tableOrganisation = self._db.table('Organisation')

        tableAccount = self._db.table('Account')
        tableContract = self._db.table('Contract')
        tableContractPayer = tableOrganisation.alias(
            'ContractPayer')  # Сторонний фонд, в который происходит выгрузка
        tableContractRecipient = tableOrganisation.alias(
            'ContractRecipient')  # Текущий фонд, откуда происходит выгрузка

        queryTable = tableAccount.innerJoin(
            tableContract, tableContract['id'].eq(tableAccount['contract_id']))
        queryTable = queryTable.innerJoin(
            tableContractPayer,
            tableContractPayer['id'].eq(tableContract['payer_id']))
        queryTable = queryTable.innerJoin(
            tableContractRecipient,
            tableContractRecipient['id'].eq(tableContract['recipient_id']))

        cols = [
            tableAccount['settleDate'], tableAccount['number'],
            tableAccount['exposeDate'], tableAccount['sum'],
            tableContractPayer['OKATO'].alias('payerOKATO'),
            tableContractPayer['infisCode'].alias('payerInfis'),
            tableContractPayer['area'].alias('payerArea'),
            tableContractRecipient['OKATO'].alias('recipientOKATO'),
            tableContractRecipient['infisCode'].alias('recipientInfis')
        ]

        self.nextPhase(3, u'Загрузка данных по счету')
        accountRecord = self._db.getRecordEx(
            queryTable, cols, where=tableAccount['id'].eq(accountId))

        currentInfis = forceStringEx(accountRecord.value('recipientInfis'))

        insuranceArea = forceStringEx(accountRecord.value('payerArea'))
        insurerFundOKATO = forceStringEx(accountRecord.value('payerOKATO'))
        insurerFundInfis = forceStringEx(accountRecord.value('payerInfis'))

        tableAccount = db.table('Account')
        tableAccountItem = db.table('Account_Item')
        tablePayRefuseType = db.table('rbPayRefuseType')

        tableEvent = db.table('Event')
        tableMedicalAidUnit = db.table('rbMedicalAidUnit')

        tableClientPolicy = db.table('ClientPolicy')
        tablePolicyKind = db.table('rbPolicyKind')

        cols = [  # account
            tableAccount['settleDate'],
            tableAccount['number'],
            tableAccount['exposeDate'],
            tableAccount['sum'],
            tableAccount['payedSum'].alias('summap'),
            tableAccount['refusedSum'].alias('sank_mek'),

            # client
            tableClientPolicy['id'].alias('clientPolicyId'),
            tablePolicyKind['federalCode'].alias('policyKindCode'),
            tableClientPolicy['serial'].alias('policySerial'),
            tableClientPolicy['number'].alias('policyNumber'),

            # event
            tableEvent['id'].alias('eventId'),
            tableEvent['externalId'],
            tableMedicalAidUnit['federalCode'].alias('eventAidUnitCode'),
            tableAccountItem['price'],
            tableAccountItem['sum'].alias('sumv'),
            u'''IF(Account_Item.date IS NULL AND Account_Item.refuseType_id IS NULL, 0,
                       IF(Account_Item.date IS NOT NULL AND Account_Item.refuseType_id IS NULL, 1, 2)) AS oplata''',
            'if(%s IS NULL, Account_Item.sum, 0) AS sump' %
            tablePayRefuseType['id'],
            'if(%s IS NOT NULL, Account_Item.sum, 0) AS sank_it' %
            tablePayRefuseType['id'],

            # sank
            tablePayRefuseType['flatCode'].alias('refuseTypeCode')
        ]

        queryTable = tableAccount.innerJoin(
            tableAccountItem,
            tableAccountItem['master_id'].eq(tableAccount['id']))
        queryTable = queryTable.innerJoin(
            tableEvent, tableEvent['id'].eq(tableAccountItem['event_id']))
        queryTable = queryTable.leftJoin(tableClientPolicy, [
            tableClientPolicy['client_id'].isNotNull(),
            '''ClientPolicy.id = (SELECT MAX(cp.id)
                                                                                   FROM ClientPolicy cp
                                                                                   WHERE cp.client_id = Event.client_id AND cp.deleted = 0)'''
        ])
        queryTable = queryTable.leftJoin(
            tablePolicyKind,
            tablePolicyKind['id'].eq(tableClientPolicy['policyKind_id']))
        queryTable = queryTable.leftJoin(
            tableMedicalAidUnit,
            tableMedicalAidUnit['id'].eq(tableAccountItem['unit_id']))
        queryTable = queryTable.leftJoin(tablePayRefuseType, [
            tablePayRefuseType['id'].eq(tableAccountItem['refuseType_id']),
            tableAccountItem['date'].isNotNull()
        ])

        cond = [
            tableAccount['id'].eq(accountId), tableAccountItem['deleted'].eq(0)
        ]

        self.nextPhaseStep(u'Загрузка данных по счету')
        recordList = self._db.getRecordList(queryTable, cols, where=cond)
        self.nextPhaseStep(u'Загрузка данных завершена')

        self.accCodeToAccountItemId.clear()
        entries = {}
        events = {}
        idCaseCounter = 0
        entryCounter = {}
        sankCounter = {}
        self.orgForDeferredFilling.clear()
        self.personSpecialityForDeferredFilling.clear()
        eventsTotal = {}
        oplataTotal = {}
        sankTotal = {}
        accountTotal = {}
        self.nextPhase(len(recordList), u'Обработка позиций счета')
        for record in recordList:
            if self.isAbort:
                self.onAborted()
                return False

            if not self.fileNames.has_key(insuranceArea):
                self.fileNames[insuranceArea] = (insurerFundInfis,
                                                 currentInfis)

            if not self.documents.has_key(insuranceArea):
                self.documents[insuranceArea] = self.createXMLDocument(
                    accountRecord, insurerFundOKATO)

            doc, accountElement = self.documents[insuranceArea]

            rootElement = CXMLHelper.getRootElement(doc)

            clientPolicyId = forceRef(record.value('clientPolicyId'))
            if not entries.has_key(clientPolicyId):
                entryCounter[insuranceArea] = entryCounter.setdefault(
                    insuranceArea, 0) + 1
                entries[clientPolicyId] = self.addEntryElement(
                    rootElement, record, entryCounter[insuranceArea])

            entryElement, _ = entries[clientPolicyId]

            eventId = forceStringEx(record.value('eventId'))

            if not events.has_key(eventId):
                sankTotal[eventId] = {}
                partsExternalId = forceStringEx(
                    record.value('externalId')).strip().split('#')
                if len(partsExternalId) >= 3:
                    idCaseCounter = max(idCaseCounter, partsExternalId[2])
                events[eventId] = self.addEventElement(
                    entryElement,
                    partsExternalId[2] if len(partsExternalId) >= 3 else None,
                    record)
            eventElement = events[eventId]

            refuseTypeCode = forceStringEx(record.value('refuseTypeCode'))
            if refuseTypeCode:
                if not sankTotal[eventId].has_key(refuseTypeCode):
                    sankCounter[eventId] = sankCounter.setdefault(eventId,
                                                                  0) + 1
                    sankTotal[eventId][refuseTypeCode] = [
                        self.addSankElement(eventElement,
                                            sankCounter[eventId],
                                            record=record), 0
                    ]
                sankTotal[eventId][refuseTypeCode][1] += forceDouble(
                    record.value('sumv'))
            if not eventsTotal.has_key(eventId):
                eventsTotal[eventId] = [0] * 3
                oplataTotal[eventId] = [0, 1]
            eventsTotal[eventId][0] += forceDouble(record.value('sumv'))
            eventsTotal[eventId][1] += forceDouble(record.value('sump'))
            eventsTotal[eventId][2] += forceDouble(record.value('sank_it'))
            oplataTotal[eventId][0] += 1
            oplataTotal[eventId][1] *= forceInt(record.value('oplata'))
            self.nextPhaseStep()

        for elementIdCase in self.notIdCase:
            idCaseCounter = forceInt(idCaseCounter) + 1
            CXMLHelper.setValue(elementIdCase, idCaseCounter)
        self.nextPhase(len(eventsTotal),
                       u'Заполнение данных о стоимости случаев')
        for eventId, total in eventsTotal.iteritems():
            eventElement = events[eventId]
            element = eventElement.firstChildElement('OPLATA')
            CXMLHelper.setValue(
                element, 0 if oplataTotal[eventId][1] == 0 else
                1 if oplataTotal[eventId][1] == 1 else
                2 if oplataTotal[eventId][1] %
                oplataTotal[eventId][0] == 0 else 3)
            if self.isAbort:
                self.onAborted()
                return False
            for index, elemName in enumerate(['SUMV', 'SUMP', 'SANK_IT']):
                element = eventElement.firstChildElement(elemName)
                CXMLHelper.setValue(element, '%.2f' % total[index])
                if not accountTotal.has_key(insuranceArea):
                    accountTotal[insuranceArea] = [0] * 3
                accountTotal[insuranceArea][index] += total[index]
            for refuseTypeCode, total in sankTotal[eventId].iteritems():
                sankElement = sankTotal[eventId][refuseTypeCode][0]
                element = sankElement.firstChildElement('S_SUM')
                CXMLHelper.setValue(element, '%.2f' % total[1])
            self.nextPhaseStep()

        self.nextPhase(len(accountTotal),
                       u'Заполнение данных об общей стоимости счетов')
        for insuranceArea, total in accountTotal.iteritems():
            if self.isAbort:
                self.onAborted()
                return False
            _, accountElement = self.documents[insuranceArea]
            for index, elemName in enumerate(['SUMMAV', 'SUMMAP', 'SANK_MEK']):
                element = accountElement.firstChildElement(elemName)
                CXMLHelper.setValue(element, '%.2f' % total[index])
            self.nextPhaseStep()

        self.logger().info(u'Завершено')
        if self.isAbort:
            self.onAborted()
            return False
        return True
Example #22
0
 def addReportGroupElement(self, parentElement, record):
     group = CXMLHelper.addElement(parentElement, 'GROUP')
     self.setRecordValuesToElement(group, record, ['number', 'field'])
     return group
Example #23
0
    def addSankElement(self, entryElement, idCase, record):
        sankElement = CXMLHelper.addElement(entryElement, 'SANK')

        CXMLHelper.setValue(
            CXMLHelper.addElement(sankElement,
                                  'S_CODE'),  # идентификатор санкции
            idCase)
        CXMLHelper.addElement(sankElement, 'S_SUM')  # финансовая санкция
        CXMLHelper.setValue(
            CXMLHelper.addElement(sankElement, 'S_TIP'),  # тип санкции
            1)  # 1 - МЭК, 2 - МЭЭ, 3 - ЭКМП
        CXMLHelper.setValue(
            CXMLHelper.addElement(
                sankElement, 'S_OSN'),  # Код причины отказа (частичной) оплаты
            forceStringEx(record.value('refuseTypeCode')))
        CXMLHelper.setValue(
            CXMLHelper.addElement(sankElement, 'S_IST'),  # источник
            2)  # 1 – ТФОМС1 к МО,
        # 2 – ТФОМС2 к ТФОМС1 (только в протоколе обработ-ки основной части),
        # 3 – уточнённые санкции ТФОМС1 к МО (только в ис-правленной части и далее),
        # 4 – итоговые санк-ции ТФОМС2 к ТФОМС1 (только в протоколе обработ-ки исправленной части),
        # где:
        # ТФОМС1 – ТФОМС террито-рии оказания меди-цинской помощи;
        # ТФОМС2 – ТФОМС террито-рии страхования;
        # МО – МО, оказав-шая медицинскую помощь.

        return sankElement
Example #24
0
    def addEventElement(self, entryElement, idCase, record):
        eventElement = CXMLHelper.addElement(entryElement, 'SLUCH')

        idCaseElement = CXMLHelper.addElement(eventElement, 'IDCASE')
        if idCase is not None:
            CXMLHelper.setValue(idCaseElement,
                                idCase)  # номер запси в случае реестров
        else:
            self.notIdCase.append(idCaseElement)
        externalId = forceStringEx(record.value('externalId'))
        partsExternalId = externalId.strip().split('#')
        externalId = partsExternalId[0] if len(partsExternalId) > 0 else ""

        CXMLHelper.setValue(
            CXMLHelper.addElement(eventElement,
                                  'NHISTORY'),  # номер истории болезни
            externalId[:50])
        if forceInt(record.value('eventAidUnitCode')) > 0:
            CXMLHelper.setValue(
                CXMLHelper.addElement(
                    eventElement,
                    'IDSP'),  # Код способа оплаты медицинской помощи
                forceInt(record.value('eventAidUnitCode')))
        #atronah: принято решение, что для случая кол-во всегда 1, а цена и сумма равны суммарной стоимости всех услуг
        CXMLHelper.setValue(
            CXMLHelper.addElement(
                eventElement,
                'ED_COL'),  # количество единиц оплаты медицинской помощи
            '%.2f' % 1.0)
        CXMLHelper.setValue(
            CXMLHelper.addElement(eventElement, 'TARIF'),  # тариф
            '%.2f' % forceDouble(record.value('price')))
        CXMLHelper.addElement(eventElement,
                              'SUMV')  # сумма, выставленная к оплате
        CXMLHelper.addElement(
            eventElement, 'OPLATA'
        )  # тип оплаты  # 0 - не принято решение об оплате, 1 - полная оплата, 2 - полный отказ, 3 - частичный отказ
        CXMLHelper.addElement(eventElement, 'SUMP')  # сумма, принятая к оплате
        CXMLHelper.addElement(eventElement,
                              'SANK_IT')  # сумма санкций по случаю

        return eventElement
Example #25
0
 def addFunctionElement(self, parentElement, record):
     function = CXMLHelper.addElement(parentElement, 'RECORD')
     self.setRecordValuesToElement(
         function, record, ['id', 'name', 'function', 'description'])
     return function
Example #26
0
 def addConditionTypeElement(self, parentElement, record):
     conditionType = CXMLHelper.addElement(parentElement, 'RECORD')
     self.setRecordValuesToElement(conditionType, record,
                                   ['id', 'name', 'sign', 'code'])
     return conditionType
Example #27
0
 def getRBRecordElementList(self, doc):
     rootElement = CXMLHelper.getRootElement(doc)
     rbElement = self.getElement(rootElement, 'REFBOOK', True)
     return self.getElementList(rbElement, 'RECORD')
Example #28
0
 def addTableElement(self, parentElement, record):
     table = CXMLHelper.addElement(parentElement, 'RECORD')
     self.setRecordValuesToElement(
         table, record,
         ['id', 'name', 'table', 'description', 'visible', 'group'])
     return table
Example #29
0
 def addParamTypeElement(self, parentElement, record):
     paramType = CXMLHelper.addElement(parentElement, 'RECORD')
     self.setRecordValuesToElement(paramType, record,
                                   ['id', 'name', 'code'])
     return paramType
Example #30
0
 def addParamValueElement(self, parentElement, record):
     param = CXMLHelper.addElement(parentElement, 'RECORD')
     self.setRecordValuesToElement(
         param, record, ['id', 'value', 'title', 'master_id', 'number'])