コード例 #1
0
    def writeTextHeader(self, txtStream, appendixStream, txt2Stream):
        self.totalSum = 0
        self.clientCount = 0
        orgInfo = getOrganisationInfo(QtGui.qApp.currentOrgId())
        contractNum = self.contractNum if self.contractNum != '' else u'б/н'
        contractDate = self.contractDate.toString(
            'dd.MM.yy') if self.contractDate else u'б\д'
        header = (u'%s' % orgInfo.get('title')).center(76) + '\n\n'
        header += (u'Перечень медицинских услуг к договору N %s от %s' % (contractNum, \
                            contractDate)).center(76)+ '\n'
        header += self.payerName.center(76) + '\n'
        header += self.payerAddr.center(76) + '\n'
        dateStr = forceString(self.accDate.toString('MM.yy'))
        header += (u'с 01.%s по %2d.%s' %
                   (dateStr, self.accDate.day(), dateStr)).center(76) + '\n\n'

        txtStream << header

        header = (u'%s' % orgInfo.get('title')).center(76) + '\n\n'
        header += (u'Приложение N 1 к договору N %s от %s' % (contractNum, \
                            contractDate)).center(76)+ '\n'
        header += self.payerName.center(76) + '\n'
        header += self.payerAddr.center(76) + '\n'
        dateStr = forceString(self.accDate.toString('MM.yy'))
        header += (u'с 01.%s по %2d.%s' %
                   (dateStr, self.accDate.day(), dateStr)).center(76) + '\n\n'

        appendixStream << header
        appendixStream << u"""____________________________________________________________________________
コード例 #2
0
ファイル: PatientEntranceReport.py プロジェクト: dio4/vista_1
    def build(self, params):
        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)

        org_id = QtGui.qApp.currentOrgId()
        org_info = getOrganisationInfo(org_id)

        cursor.insertBlock(CReportBase.AlignCenter)
        cursor.insertText(org_info.get('fullName'))
        cursor.insertBlock(CReportBase.AlignCenter)
        cursor.insertText(self.title())

        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [('20%', [u'Отделение'], CReportBase.AlignCenter)]

        valueDomain = QtGui.qApp.db.translate('ActionPropertyType', 'name',
                                              u'Cостояние пациента',
                                              'valueDomain')
        state_list = CStrComboBox.parse(forceString(valueDomain))[0]
        state_list.insert(0, u'')
        for header in state_list:
            tableColumns.append(('12%', [header], CReportBase.AlignCenter))

        tableColumns.append(('8%', [u'Всего'], CReportBase.AlignCenter))
        table = createTable(cursor, tableColumns)
        struct = OrderedDict()
        while query.next():
            record = query.record()
            org_struct = forceString(record.value('org_struct'))
            org_struct = org_struct if org_struct else u'без уточнения'
            patient_state = forceString(record.value('patient_state'))
            d = struct.setdefault(org_struct,
                                  OrderedDict.fromkeys(state_list, 0))
            d[patient_state] += 1

        total_col = OrderedDict.fromkeys(state_list, 0)
        total_col['total'] = 0
        for org_struct, d in struct.items():
            i = table.addRow()
            table.setText(i, 0, org_struct)
            total_row = 0
            for col, (state, num) in enumerate(d.items()):
                table.setText(i, col + 1, num)
                total_row += num
                total_col[state] += num
            table.setText(i, len(d) + 1, total_row)
            total_col['total'] += total_row
        i = table.addRow()
        table.setText(i, 0, u'Всего', CReportBase.TableTotal)
        for col, N in enumerate(total_col.values()):
            table.setText(i, col + 1, N, CReportBase.TableTotal)

        return doc
コード例 #3
0
ファイル: CheckClients.py プロジェクト: dio4/vista_1
 def checkWork(self, work):
     orgId = forceRef(work.value('org_id'))
     work_info = getOrganisationInfo(orgId)
     if work_info:
         if not work_info['INN']:
             self.err2log(u'отсутствует ИНН')
         if not work_info['KPP']:
             self.err2log(u'отсутствует КПП')
     else:
         self.err2log(u'отсутствует работа')
コード例 #4
0
 def userName(self):
     if self.userInfo:
         orgId = self.currentOrgId()
         orgInfo = getOrganisationInfo(orgId)
         if not orgInfo:
             QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
         shortName = orgInfo.get('shortName', u'ЛПУ в настройках не указано!')
         return u'%s (%s) %s' % (self.userInfo.name(), self.userInfo.login(), shortName)
     else:
         return ''
コード例 #5
0
    def build(self):
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setCharFormat(CReportBase.ReportTitle)
        text0 = u'''Акт приёма-передачи
файла со сведениями о результатах дополнительной диспансеризации
'''

        cursor.setCharFormat(CReportBase.ReportBody)
        text0+=u'\nза период с '+self.begDate.toString('dd.MM.yyyy')+ \
                u' по '+self.endDate.toString('dd.MM.yyyy')+u'\n'

        cursor.insertText(text0)
        cursor.insertBlock()

        tableColumns = [
            ('20%', [u'Имя файла'], CReportBase.AlignLeft),
            ('10%', [u'Размер файла (байт)'], CReportBase.AlignLeft),
            ('20%', [u'Контрольная сумма'], CReportBase.AlignLeft),
            ('20%', [u'Дата создания'], CReportBase.AlignRight),
        ]

        table = createTable(cursor, tableColumns)

        i = table.addRow()
        table.setText(i, 0, self.fname)
        table.setText(i, 1, str(self.fsize))
        table.setText(i, 2, str(self.md5))
        table.setText(i, 3,
                      datetime.datetime.now().strftime('%d.%m.%Y %H:%M:%S'))

        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.setCharFormat(CReportBase.ReportBody)
        text1 = ''

        my_org_id = QtGui.qApp.currentOrgId()
        org_info = getOrganisationInfo(my_org_id)

        if org_info:
            text1+=u'\n\nЛПУ: '+org_info['shortName']+u' (ИНН '+org_info['INN']+ \
                        u', КПП '+org_info['KPP']+u', ОГРН '+org_info['OGRN']+u')\n'

        cursor.insertText(text1)
        return doc
コード例 #6
0
    def writeText2Header(self, txt2Stream):
        orgInfo = getOrganisationInfo(QtGui.qApp.currentOrgId())
        contractNum = self.contractNum if self.contractNum != '' else u'б/н'
        contractDate = self.contractDate.toString(
            'dd.MM.yy') if self.contractDate else u'б\д'
        dateStr = forceString(self.accDate.toString('MM.yy'))
        header = (u'%s' % orgInfo.get('title')).center(76) + '\n\n'
        header += (u'Счет-фактура').center(76) + '\n'
        header += (u'к договору N %s от %s' % (contractNum, \
                            contractDate)).center(76)+ '\n'
        header += self.payerName.center(76) + '\n'
        dateStr = forceString(self.accDate.toString('MM.yy'))
        header += (u'с 01.%s по %2d.%s' %
                   (dateStr, self.accDate.day(), dateStr)).center(76) + '\n\n'

        header += (u'Количество обратившихся - %5d' %
                   self.clientCount).center(76) + '\n'
        txt2Stream << header
        txt2Stream << u"""_____________________________________________________________________________
コード例 #7
0
    def build(self, params):
        groups = [
            u'Всего взрослых (в возрасте 18 лет и старше)\nиз них:',
            u'\tмужчины', u'\tженщины', u'Работаюших граждан\nиз них:',
            u'\tмужчины', u'\tженщины', u'Неработающих граждан\nиз них:',
            u'\tмужчины', u'\tженщины',
            u'Справочно: из строки 1 обучающиеся в образовательных организациях по очной форме',
            u'из строки 2 мужчины', u'из строки 3 женщины'
        ]

        processedEvents = []
        totalSum = [0.0] * 12
        amountFS = [0] * 12
        sumFS = [0.0] * 12
        amountSS = [0] * 12
        sumSS = [0.0] * 12

        query = selectData(params)
        while query.next():
            record = query.record()
            eventId = forceRef(record.value('event_id'))
            if eventId in processedEvents:
                continue
            sex = forceInt(record.value('sex'))
            sum = forceDouble(record.value('sum'))
            code = forceString(record.value('code'))
            socStatus = forceString(record.value('socStatusCode'))

            totalSum[0] += sum
            if sex:
                totalSum[sex] += sum
            if socStatus == 'с05':  # работающий
                totalSum[3] += sum
                if sex:
                    totalSum[3 + sex] += sum
            elif socStatus == 'с06':  # неработающий
                totalSum[6] += sum
                if sex:
                    totalSum[6 + sex] += sum
            elif socStatus == 'с04':  # студент
                totalSum[9] += sum
                if sex:
                    totalSum[9 + sex] += sum

            if code in ('01', '04'):
                amountFS[0] += 1
                sumFS[0] += sum
                if sex:
                    amountFS[sex] += 1
                    sumFS[sex] += sum

                if socStatus == 'с05':  # работающий
                    amountFS[3] += 1
                    sumFS[3] += sum
                    if sex:
                        amountFS[3 + sex] += 1
                        sumFS[3 + sex] += sum
                if socStatus == 'с06':  # работающий
                    amountFS[6] += 1
                    sumFS[6] += sum
                    if sex:
                        amountFS[6 + sex] += 1
                        sumFS[6 + sex] += sum
                if socStatus == 'с04':  # работающий
                    amountFS[9] += 1
                    sumFS[9] += sum
                    if sex:
                        amountFS[9 + sex] += 1
                        sumFS[9 + sex] += sum

            elif code == '02':
                amountSS[0] += 1
                sumSS[0] += sum
                if sex:
                    amountSS[sex] += 1
                    sumSS[sex] += sum

                if socStatus == 'с05':  # работающий
                    amountSS[3] += 1
                    sumSS[3] += sum
                    if sex:
                        amountSS[3 + sex] += 1
                        sumSS[3 + sex] += sum
                if socStatus == 'с06':  # работающий
                    amountSS[6] += 1
                    sumSS[6] += sum
                    if sex:
                        amountSS[6 + sex] += 1
                        sumSS[6 + sex] += sum
                if socStatus == 'с04':  # работающий
                    amountSS[9] += 1
                    sumSS[9] += sum
                    if sex:
                        amountSS[9 + sex] += 1
                        sumSS[9 + sex] += sum
        rowSize = 7

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('15%', [u'Группы', u'', u''], CReportBase.AlignLeft),
            ('10%', [u'№ стр.', u'', u''], CReportBase.AlignCenter),
            ('15%', [
                u'Количество медицинских организаций, проводящих диспансеризацию в отчетном периоде',
                u'', u''
            ], CReportBase.AlignCenter),
            ('15%', [
                u'Численность застрахованных лиц, прикрепленных к медицинским организациям, оказывающим первичную медико-санитарную помошь, на отчетную дату, человек',
                u'', u''
            ], CReportBase.AlignRight),
            ('15%', [
                u'в том числе:',
                u'подлежащие диспансеризации в отчетном году, согласно утвержденному плану-графику, всего, человек',
                u''
            ], CReportBase.AlignRight),
            ('15%', [u'', u'из них:',
                     u'на отчетный период, человек'], CReportBase.AlignRight),
            ('15%', [
                u'Всего предъявленных к оплате реестров счетов в рамках диспансеризации на отчетную дату, тыс. рублей',
                u'', u''
            ], CReportBase.AlignRight),
            ('15%', [
                u'Объем средств, предъявленных к оплате в рамках диспансеризации на отчетную дату, всего',
                u'тыс. рублей', u''
            ], CReportBase.AlignRight),
            ('15%', [
                u'В том числе:', u'В рамках I этапа диспансеризации',
                u'кол-во случаев'
            ], CReportBase.AlignRight),
            ('15%', [u'', u'', u'тыс. рублей'], CReportBase.AlignRight),
            ('15%',
             [u'', u'в рамках II этапа диспансеризации',
              u'кол-во случаев'], CReportBase.AlignRight),
            ('15%', [u'', u'', u'тыс. рублей'], CReportBase.AlignRight),
            ('15%', [
                u'Оплачено в рамках диспансеризации на отчетную дату, тыс. рублей',
                u'Всего', u''
            ], CReportBase.AlignRight),
            ('15%', [u'', u'в том числе:',
                     u'в рамках I этапа'], CReportBase.AlignRight),
            ('15%', [u'', u'', u'в рамках II этапа'], CReportBase.AlignRight),
            ('15%', [
                u'Количество граждан, направленных на II этап диспансеризации по результатам I этапа диспансеризации, человек',
                u'', u''
            ], CReportBase.AlignRight),
            ('15%', [
                u'Группа состояния здоровья застрахованных лиц, прошедших диспансеризацию',
                u'I группа здоровья, человек', u''
            ], CReportBase.AlignRight),
            ('15%', [u'', u'II группа здоровья, человек',
                     u''], CReportBase.AlignRight),
            ('15%', [u'', u'III группа здоровья, человек',
                     u''], CReportBase.AlignRight),
        ]

        table = createTable(cursor, tableColumns)

        table.mergeCells(0, 0, 3, 1)
        table.mergeCells(0, 1, 3, 1)
        table.mergeCells(0, 2, 2, 1)
        table.mergeCells(0, 3, 1, 4)
        table.mergeCells(1, 3, 1, 2)
        table.mergeCells(1, 5, 1, 2)

        i = table.addRow()

        for j in xrange(rowSize):
            table.setText(i, j, j + 1, blockFormat=bf)

        for k in range(12):
            i = table.addRow()
            table.setText(i, 0, groups[k])
            table.setText(i, 1, k + 1)
            table.setText(i, 6, totalSum[k])
            table.setText(i, 7, amountFS[k])
            table.setText(i, 8, sumFS[k])
            table.setText(i, 9, amountSS[k])
            table.setText(i, 10, sumSS[k])
        return doc
コード例 #8
0
    def build(self, params):

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        reportDataByNumbers, plat = getDataFromFile(params) if params.has_key(
            'dataFileName') else getDataFromDatabase(params)

        isFirstReport = True
        for nsvod, reportData in reportDataByNumbers.items():

            if not isFirstReport:
                pageBreakBlockFormat = QtGui.QTextBlockFormat()
                pageBreakBlockFormat.setPageBreakPolicy(
                    QtGui.QTextFormat.PageBreak_AlwaysBefore)
                cursor.insertBlock(pageBreakBlockFormat)
                cursor.movePosition(QtGui.QTextCursor.End)

            invisibleTableFormat = QtGui.QTextTableFormat()
            invisibleTableFormat.setBorder(0)

            invisibleTableFormat.setAlignment(QtCore.Qt.AlignRight)
            table = cursor.insertTable(1, 1, invisibleTableFormat)
            subCursor = table.cellAt(0, 0).firstCursorPosition()
            subCursor.insertBlock(CReportBase.AlignCenter)
            subCursor.insertText(u'Приложение 11\n', CReportBase.TableBody)
            cursor.movePosition(QtGui.QTextCursor.End)

            invisibleTableFormat.setAlignment(QtCore.Qt.AlignLeft)
            oldTableWidth = invisibleTableFormat.width()
            invisibleTableFormat.setWidth(
                QtGui.QTextLength(QtGui.QTextLength.PercentageLength, 40))
            table = cursor.insertTable(1, 1, invisibleTableFormat)
            subCursor = table.cellAt(0, 0).firstCursorPosition()
            subCursor.insertBlock(CReportBase.AlignCenter)
            orgInfo = getOrganisationInfo(QtGui.qApp.currentOrgId())
            subCursor.insertText(u'Наименование МО %s\n' % orgInfo['fullName'],
                                 CReportBase.ReportBody)
            subCursor.insertText(u' код %s \n' % orgInfo['infisCode'],
                                 CReportBase.ReportBody)
            subCursor.insertText(u'штамп   медицинской организации\n',
                                 CReportBase.ReportBody)
            invisibleTableFormat.setWidth(oldTableWidth)
            cursor.movePosition(QtGui.QTextCursor.End)

            cursor.insertBlock(CReportBase.AlignCenter)
            begDate = params.get('begDate', QtCore.QDate.currentDate())
            endDate = params.get('endDate', QtCore.QDate.currentDate())
            intervalText = u''
            if begDate and begDate.isValid():
                intervalText += unicode(begDate.toString('MMMM yyyy')).lower()
                #intervalText += u'c %s' % formatDate(begDate)
            else:
                intervalText += u'__________'
            #if endDate and endDate.isValid():
            #    intervalText += u' по %s' % formatDate(endDate)
            #else:
            #    intervalText += '__________'
            if (begDate and begDate.isValid()) or (endDate
                                                   and endDate.isValid()):
                pass
                #intervalText = u'период %s' % intervalText
            else:
                intervalText = u'_____________________ 200__ г.'

            cursor.insertText(u'Сводный счет № %s\n' % nsvod,
                              CReportBase.ReportBody)
            cursor.insertText(
                u'за оказанные медицинские услуги по поликлинике, параклинические услуги,\n',
                CReportBase.ReportBody)
            cursor.insertText(
                u'отдельные врачебные манипуляции, стоматологические услуги \n',
                CReportBase.ReportBody)
            cursor.insertText(u'за %s \n' % intervalText,
                              CReportBase.ReportBody)

            invisibleTableFormat.setAlignment(QtCore.Qt.AlignLeft)
            table = cursor.insertTable(1, 1, invisibleTableFormat)
            subCursor = table.cellAt(0, 0).firstCursorPosition()
            subCursor.insertBlock(CReportBase.AlignCenter)
            subCursor.insertText(u' %s \n' % plat, CReportBase.ReportBody)
            subCursor.insertText(u'(наименование плательщика)\n',
                                 CReportBase.ReportBody)
            cursor.movePosition(QtGui.QTextCursor.End)

            tableColumns = [
                ('?5', [u'Код подразделения', '', '',
                        '2'], CReportBase.AlignLeft),
                ('?5', [u'Наименование врачебной специальности', '', '',
                        '3'], CReportBase.AlignCenter),
                ('?5', [u'Код посещения, услуги', '', '',
                        '4'], CReportBase.AlignCenter),
                ('?5', [u'Кол-во посещений', '', '',
                        '5'], CReportBase.AlignCenter),
                ('?5', [u'Кол-во услуг', '', '',
                        '6'], CReportBase.AlignCenter),
                ('?5', [u'Кол-во УЕТ', '', '', '7'], CReportBase.AlignCenter),
                ('?5', [
                    u'Количество индивид. счетов в т.ч. по стоматологии', '',
                    '', '8'
                ], CReportBase.AlignCenter),
                ('?5',
                 [u'Сумма счета за мед. помощь (руб.)', u'Всего', '',
                  '9'], CReportBase.AlignCenter),
                ('?5',
                 [u'', u'В т.ч.', u'Заработная плата с начислениями',
                  '10'], CReportBase.AlignCenter),
                ('?5', [
                    u'', '',
                    u'Из них фин.обеспеч. доп.выплат работникам участковой службы и мед.перс.ФА.Пов',
                    '11'
                ], CReportBase.AlignCenter),
                ('?5', [u'', '', u'Медикаменты',
                        '12'], CReportBase.AlignCenter),
                ('?5', [u'', '', u'Мелкий инвентарь',
                        '13'], CReportBase.AlignCenter),
                ('?5', [u'', '', u'Накладные расходы',
                        '14'], CReportBase.AlignCenter)
            ]

            table = createTable(cursor,
                                tableColumns,
                                charFormat=CReportBase.ReportBody)

            table.mergeCells(0, 0, 3, 1)  # Код подразделения
            table.mergeCells(0, 1, 3,
                             1)  # Наименование врачебной специальности
            table.mergeCells(0, 2, 3, 1)  # Код посещения, услуги
            table.mergeCells(0, 3, 3, 1)  # Кол-во посещений
            table.mergeCells(0, 4, 3, 1)  # Кол-во услуг
            table.mergeCells(0, 5, 3, 1)  # Кол-во УЕТ
            table.mergeCells(
                0, 6, 3,
                1)  # Количество индивид. счастов в т.ч. по стоматологии
            table.mergeCells(0, 7, 1, 6)  # Сумма счета за мед. помощь (руб.)
            table.mergeCells(1, 7, 2, 1)  #    Всего
            table.mergeCells(1, 8, 1, 5)  #    В т.ч.

            #i = table.addRow()

            cursor.setCharFormat(CReportBase.TableBody)
            totalVisitCount = 0
            totalEventCount = 0
            totalSum = 0.0
            totalWages = 0.0
            totalAdditionalPayments = 0.0
            totalDrugs = 0.0
            totalSoftInventory = 0.0
            totalOverhead = 0.0
            codes0 = reportData.keys()
            codes0.sort()
            for orgStructureCode in codes0:
                orgStructureData = reportData[orgStructureCode]

                totalOSVisitCount = 0
                totalOSEventCount = 0
                totalOSSum = 0.0
                totalOSWages = 0.0
                totalOSAdditionalPayments = 0.0
                totalOSDrugs = 0.0
                totalOSSoftInventory = 0.0
                totalOSOverhead = 0.0
                codes = orgStructureData.keys()
                codes.sort()
                for serviceCode in codes:
                    serviceData = orgStructureData[serviceCode]
                    row = table.addRow()
                    table.setText(row, 0, serviceData['orgStructureCode'])
                    table.setText(row, 1, serviceData['specialityName'])
                    table.setText(row, 2, serviceData['serviceCode'])
                    table.setText(row, 3,
                                  forceString(serviceData['visitCount']))
                    table.setText(row, 4, 'x')
                    table.setText(row, 5, 'x')
                    table.setText(
                        row, 6, 'x')  #forceString(serviceData['eventCount']))
                    table.setText(
                        row, 7,
                        QtCore.QString.number(serviceData['sum'], 'g', 9))
                    table.setText(
                        row, 8,
                        QtCore.QString.number(serviceData['wages'], 'g', 9))
                    table.setText(
                        row, 9,
                        QtCore.QString.number(
                            serviceData['additionalPayments'], 'g', 9))
                    table.setText(
                        row, 10,
                        QtCore.QString.number(serviceData['drugs'], 'g', 9))
                    table.setText(
                        row, 11,
                        QtCore.QString.number(serviceData['softInventory'],
                                              'g', 9))
                    table.setText(
                        row, 12,
                        QtCore.QString.number(serviceData['overhead'], 'g', 9))
                    totalOSVisitCount += serviceData['visitCount']
                    totalOSEventCount += serviceData['eventCount']
                    totalOSSum += serviceData['sum']
                    totalOSWages += serviceData['wages']
                    totalOSAdditionalPayments += serviceData[
                        'additionalPayments']
                    totalOSDrugs += serviceData['drugs']
                    totalOSSoftInventory += serviceData['softInventory']
                    totalOSOverhead += serviceData['overhead']

                osTotalRow = table.addRow()
                table.setText(osTotalRow, 0, u'Итого по подразделению')
                table.setText(osTotalRow, 1, 'x')
                table.setText(osTotalRow, 2, 'x')
                table.setText(osTotalRow, 3, forceString(totalOSVisitCount))
                table.setText(osTotalRow, 4, 'x')
                table.setText(osTotalRow, 5, 'x')
                table.setText(osTotalRow, 6,
                              forceString(totalOSEventCount))  # 'x')
                table.setText(osTotalRow, 7,
                              QtCore.QString.number(totalOSSum, 'g', 9))
                table.setText(osTotalRow, 8,
                              QtCore.QString.number(totalOSWages, 'g', 9))
                table.setText(
                    osTotalRow, 9,
                    QtCore.QString.number(totalOSAdditionalPayments, 'g', 9))
                table.setText(osTotalRow, 10,
                              QtCore.QString.number(totalOSDrugs, 'g', 9))
                table.setText(
                    osTotalRow, 11,
                    QtCore.QString.number(totalOSSoftInventory, 'g', 9))
                table.setText(osTotalRow, 12,
                              QtCore.QString.number(totalOSOverhead, 'g', 9))

                totalVisitCount += totalOSVisitCount
                totalEventCount += totalOSEventCount
                totalSum += totalOSSum
                totalWages += totalOSWages
                totalAdditionalPayments += totalOSAdditionalPayments
                totalDrugs += totalOSDrugs
                totalSoftInventory += totalOSSoftInventory
                totalOverhead += totalOSOverhead

            cursor.setCharFormat(CReportBase.TableTotal)
            totalRow = table.addRow()
            table.setText(
                totalRow, 0, u'Итого по %s' %
                (u'поликлинике'
                 if params.get('orgStructureId', None) is not None or
                 params.has_key('dataFileName') else u'всем подразделениям'))
            table.setText(totalRow, 1, 'x')
            table.setText(totalRow, 2, 'x')
            table.setText(totalRow, 3, forceString(totalVisitCount))
            table.setText(totalRow, 4, 'x')
            table.setText(totalRow, 5, 'x')
            table.setText(totalRow, 6, forceString(totalEventCount))
            table.setText(totalRow, 7, QtCore.QString.number(totalSum, 'g', 9))
            table.setText(totalRow, 8,
                          QtCore.QString.number(totalWages, 'g', 9))
            table.setText(
                totalRow, 9,
                QtCore.QString.number(totalAdditionalPayments, 'g', 9))
            table.setText(totalRow, 10,
                          QtCore.QString.number(totalDrugs, 'g', 9))
            table.setText(totalRow, 11,
                          QtCore.QString.number(totalSoftInventory, 'g', 9))
            table.setText(totalRow, 12,
                          QtCore.QString.number(totalOverhead, 'g', 9))

            cursor.movePosition(QtGui.QTextCursor.End)
            cursor.setCharFormat(CReportBase.ReportBody)
            cursor.insertBlock(CReportBase.AlignLeft)
            cursor.insertText(
                u'\nОбщая сумма оказанных медицинских услуг составляет ')
            fmt = QtGui.QTextCharFormat()
            fmt.setFontWeight(QtGui.QFont.Bold)
            cursor.insertText(
                u'%s руб.' % QtCore.QString.number(
                    totalSum,
                    'g',
                    9,
                ), fmt)
            fmt.setFontWeight(QtGui.QFont.Normal)
            cursor.insertText(
                u', в т.ч.анестезиологических пособий ____________ руб.\n',
                fmt)
            cursor.insertText(u'%s\n' % unicode(
                QtCore.QDate.currentDate().toString('"d" MMMM yyyy')).lower())
            mainStaff = getOrganisationMainStaff(QtGui.qApp.currentOrgId())
            cursor.insertText(u'Руководитель МО_______________/%s\n' %
                              mainStaff[0])
            cursor.insertText(u'Экономист   _______________/%s' % mainStaff[1])
            cursor.insertText(u'__________МП\n')
            isFirstReport = False

        return doc
コード例 #9
0
    def build(self, params):
        rowSize = 9
        self.resultSet = [
            [
                u'Повышенный уровень артериального давления', u'01', 0, 0, 0,
                0, 0, 0, 0, 0, 0
            ],
            [u'Дислипидемия', u'02', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [
                u'Повышенный уровень глюкозы в крови', u'03', 0, 0, 0, 0, 0, 0,
                0, 0, 0
            ],
            [u'Курение табака', u'04', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [
                u'Риск пагубного потребления алкоголя', u'05', 0, 0, 0, 0, 0,
                0, 0, 0, 0
            ],
            [
                u'Риск потребления наркотических средств и психотропных веществ без назначения врача',
                u'06', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [u'Нерациональное питание', u'07', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [
                u'Низкая физическая активность', u'08', 0, 0, 0, 0, 0, 0, 0, 0,
                0
            ],
            [
                u'Избыточная масса тела (ожирение)', u'09', 0, 0, 0, 0, 0, 0,
                0, 0, 0
            ],
            [
                u'Отягощенная наследственность по хроническим неинфекционным заболеваниям',
                u'10', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [u'Высокий уровень стресса', u'11', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [
                u'Умеренный суммарный сердечно-сосудистый риск', u'12', 0, 0,
                0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'Высокий суммарный сердечно-сосудистый риск', u'13', 0, 0, 0,
                0, 0, 0, 0, 0, 0
            ],
            [
                u'Очень высокий суммарный сердечно-сосудистый риск', u'14', 0,
                0, 0, 0, 0, 0, 0, 0, 0
            ],
        ]

        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            idx = forceInt(record.value('idx'))
            apsValue = forceString(record.value('APS_value')).lower()
            rowNum = self.getRow(idx, apsValue)
            if rowNum == None:
                continue
            age = forceInt(record.value('clientAge'))
            cnt = forceInt(record.value('cnt'))
            sex = forceInt(record.value('sex'))

            row = self.resultSet[rowNum]
            if age > 20 and age < 37:
                row[8] += cnt
                if sex:
                    row[(sex) * 3 - 1] += cnt
            elif age > 38 and age <= 60:
                row[9] += cnt
                if sex:
                    row[(sex) * 3] += cnt
            elif age > 60:
                row[10] += cnt
                if sex:
                    row[(sex) * 3 + 1] += cnt

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('20%', [u'Фактор риска развития заболеваний',
                     u''], CReportBase.AlignCenter),
            ('5%', [u'№ строки', u''], CReportBase.AlignCenter),
            ('9%', [u'Мужчины', u'21 - 36 лет'], CReportBase.AlignRight),
            ('8%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('8%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ('9%', [u'Женщины', u'21 - 36 лет'], CReportBase.AlignRight),
            ('8%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('8%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ('9%', [u'Всего', u'21 - 36 лет'], CReportBase.AlignRight),
            ('8%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('8%', [u'', u'Старше 60 лет'], CReportBase.AlignRight)
        ]

        rowSize = 11
        table = createTable(cursor, tableColumns)

        table.mergeCells(0, 0, 2, 1)
        table.mergeCells(0, 1, 2, 1)
        table.mergeCells(0, 2, 1, 3)
        table.mergeCells(0, 5, 1, 3)
        table.mergeCells(0, 8, 1, 3)

        i = table.addRow()

        for j in xrange(rowSize):
            table.setText(i, j, j + 1, blockFormat=bf)

        for z in range(len(self.resultSet)):
            row = self.resultSet[z]
            i = table.addRow()
            table.setText(i, 0, row[0])
            table.setText(i, 1, row[1])
            table.setText(i, 2, row[2])
            table.setText(i, 3, row[3])
            table.setText(i, 4, row[4])
            table.setText(i, 5, row[5])
            table.setText(i, 6, row[6])
            table.setText(i, 7, row[7])
            table.setText(i, 8, row[8])
            table.setText(i, 9, row[9])
            table.setText(i, 10, row[10])

        return doc
コード例 #10
0
    def build(self, params):
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(QtGui.QTextCharFormat())

        orgInfo = getOrganisationInfo(QtGui.qApp.currentOrgId())
        headerLeft = u'Министерство здравоохранения\n' \
                     u'и социального развития\n' \
                     u'Российской Федерации\n' \
                     u'%s\n' \
                     u'%s' % (orgInfo['fullName'], forceString(QtGui.qApp.db.translate('Organisation', 'id', orgInfo['id'], 'Address')))

        headerRight = u'Медицинская документация\n' \
                      u'Форма № 001/у\n' \
                      u'утв. приказом\n' \
                      u'Минздрава СССР\n' \
                      u'№ 1030 от 04.10.1980 г'
        headerColumns = [
            ('50%', [''], CReportBase.AlignLeft),
            ('50%', [''], CReportBase.AlignRight)
        ]
        table = createTable(cursor, headerColumns, border=0, cellPadding=2, cellSpacing=0)
        table.setText(0, 0, headerLeft)
        table.setText(0, 1, headerRight)
        cursor.movePosition(QtGui.QTextCursor.End)

        cursor.insertBlock()
        cursor.setBlockFormat(CReportBase.AlignCenter)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(u'ЖУРНАЛ\nучета приема больных и отказов в госпитализации\n')
        cursor.insertText(u'за период с %s %s по %s %s \n' % (params['begDate'].toString('dd.MM.yyyy'),
                                                              params['begTime'].toString('hh:mm'),
                                                              params['endDate'].toString('dd.MM.yyyy'),
                                                              params['endTime'].toString('hh:mm')))
        cursor.insertText(u'отчет составлен: %s' % QtCore.QDateTime.currentDateTime().toString('dd.MM.yyyy hh:mm'))
        cursor.movePosition(QtGui.QTextCursor.End)

        showRegAddress = params.get('chkRegAddress', True)
        showLocAddress = params.get('chkLocAddress', True)
        showContacts = params.get('chkContacts', True)
        showRelations = params.get('chkRelations', True)
        showDocument = params.get('chkDocument', True)
        showCompulsoryPolicy = params.get('chkCompulsoryPolicy', True)
        showVoluntaryPolicy = params.get('chkVoluntaryPolicy', True)
        showRelegateOrg = params.get('chkRelegateOrg', True)
        showDeliveredOrg = params.get('chkDeliveredOrg', True)
        showRelegateOrgDiagnosis = params.get('chkRelegateOrgDiagnosis', True)
        showReceivedOrgDiagnosis = params.get('chkReceivedOrgDiagnosis', True)
        showLeavedInfo = params.get('chkLeavedInfo', True)
        showMessageToRelatives = params.get('chkMessageToRelatives', True)
        showNotes = params.get('chkNotes', True)
        showSex = params.get('chkSex', True)
        showAge = params.get('chkAge', True)
        showHour = params.get('chkHour', True)
        showCardNumber = params.get('chkCardNumber')
        showNotHospitalized = params.get('chkNotHospitalized')
        showEventOrder = params.get('chkEventOrder')
        showBedProfile = params.get('chkBedProfile')
        showHospitalBedProfile = params.get('chkHospitalBedProfile')
        showOtherRelegateOrg = params.get('chkOtherRelegateOrg')

        columnNames = [
            'num',
            'receivedDate',
            'receivedTime',
            'clientName',
            'clientSex',
            'clientBirthDate',
            'clientAge',
            'clientContacts',
            'clientDocument',
            'clientPolicy',
            'relegateOrDeliveredOrg',
            'receivedOrgStructure',
            'bedProfile',
            'hospitalBedProfile',
            'cardNumber',
            'relegateOrgDiagnosis',
            'receivedOrgDiagnosis',
            'eventOrder',
            'leavedInfo',
            'messageToRelatives',
            'reason',
            'takenMeasures',
            'notes'
        ]

        columnDescription = [
            ('10?', [u'№ п/п', u''], CReportBase.AlignRight),
            ('10?', [u'Поступление', u'дата'], CReportBase.AlignRight),
            ('10?', [u'', u'час'], CReportBase.AlignRight),
            ('20?', [u'ФИО пациента', u''], CReportBase.AlignRight),
            ('10?', [u'Пол', u''], CReportBase.AlignRight),
            ('10?', [u'Дата рождения', u''], CReportBase.AlignRight),
            ('10?', [u'Возраст', u''], CReportBase.AlignRight),
            ('20?', [u'Постоянное место жительства (регистрация/проживание), контактные данные, родственные связи', u''], CReportBase.AlignRight),
            ('20?', [u'Документ, удостоверяющий личность', u''], CReportBase.AlignRight),
            ('20?', [u'Полисные данные (ОМС/ДМС)', u''], CReportBase.AlignRight),
            ('10?', [u'Каким учреждением был направлен или доставлен', u''], CReportBase.AlignRight),
            ('20?', [u'Отделение, в которое помещен пациент', u''], CReportBase.AlignRight),
            ('15?', [u'Профиль', u''], CReportBase.AlignRight),
            ('15?', [u'Профиль койки', u''], CReportBase.AlignRight),
            ('10?', [u'№ карты стационарного больного (истории родов)', u''], CReportBase.AlignRight),
            ('10?', [u'Диагноз направившего учреждения', u''], CReportBase.AlignRight),
            ('10?', [u'Диагноз при поступлении', u''], CReportBase.AlignRight),
            ('15?', [u'Порядок наступления', u''], CReportBase.AlignRight),
            ('10?', [u'Выписан, переведен в другой  стационар, умер', u''], CReportBase.AlignRight),
            ('10?', [u'Отметка о сообщении родственникам или учреждению', u''], CReportBase.AlignRight),
            ('15?', [u'Если не был госпитализирован', u'указать причину'], CReportBase.AlignRight),
            ('15?', [u'', u'принятые меры при отказе в госпитализации'], CReportBase.AlignRight),
            ('10?', [u'Примечание', u''], CReportBase.AlignRight)
        ]

        showColumn = dict([(name, True) for name in columnNames])
        showColumn['clientContacts'] = showRegAddress or showLocAddress or showContacts or showRelations
        showColumn['clientDocument'] = showDocument
        showColumn['clientPolicy'] = showCompulsoryPolicy or showVoluntaryPolicy
        showColumn['relegateOrDeliveredOrg'] = showRelegateOrg or showDeliveredOrg
        showColumn['relegateOrgDiagnosis'] = showRelegateOrgDiagnosis
        showColumn['receivedOrgDiagnosis'] = showReceivedOrgDiagnosis
        showColumn['leavedInfo'] = showLeavedInfo
        showColumn['messageToRelatives'] = showMessageToRelatives
        showColumn['notes'] = showNotes
        showColumn['clientSex'] = showSex
        showColumn['clientAge'] = showAge
        showColumn['receivedTime'] = showHour
        showColumn['cardNumber'] = showCardNumber
        showColumn['reason'] = showColumn['takenMeasures'] = showNotHospitalized
        showColumn['eventOrder'] = showEventOrder
        showColumn['hospitalBedProfile'] = showHospitalBedProfile
        showColumn['bedProfile'] = showBedProfile

        columnNumber = {}
        tableColumns = []
        for i, name in enumerate(columnNames):
            if showColumn[name]:
                columnNumber[name] = len(columnNumber)
                tableColumns.append(columnDescription[i])

        cursor.insertBlock()
        table = createTable(cursor, tableColumns)
        if showHour:
            table.mergeCells(0, columnNumber['receivedDate'], 1, 2)
        if showNotHospitalized:
            table.mergeCells(0, columnNumber['reason'], 1, 2)
        for col in xrange(len(tableColumns)):
            twoRowsHeaders = [columnNumber['receivedDate']]
            if showHour:
                twoRowsHeaders += [columnNumber['receivedTime']]
            if showNotHospitalized:
                twoRowsHeaders += [columnNumber['reason'], columnNumber['takenMeasures']]
            if col not in twoRowsHeaders:
                table.mergeCells(0, col, 2, 1)

        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))

        eventOrderValues = [
            u'',                # db enum starts with 1
            u'планово',
            u'экстренно',
            u'самотеком',
            u'принудительно',
            u'неотложно',
        ]

        rowNumber = 0
        while query.next():
            rowNumber += 1
            record = query.record()
            actionDateTime = forceDateTime(record.value('actionDateTime'))
            clientId = forceRef(record.value('clientId'))
            clientName = forceString(record.value('clientName'))
            clientSex = forceString(record.value('clientSex'))
            clientBirthDate = forceDate(record.value('clientBirthDate'))
            clientAge = forceString(record.value('clientAge'))
            clientLocAddress = forceString(record.value('clientLocAddress'))
            clientRegAddress = forceString(record.value('clientRegAddress'))
            clientContacts = forceString(record.value('clientContacts'))
            clientDocument = forceString(record.value('clientDocument'))
            clientDocumentDate = forceDate(record.value('clientDocumentDate'))
            clientCompulsoryPolicy = forceString(record.value('clientCompulsoryPolicy'))
            clientCompulsoryPolicyDate = forceDate(record.value('clientCompulsoryPolicyDate'))
            clientVoluntaryPolicy = forceString(record.value('clientVoluntaryPolicy'))
            clientVoluntaryPolicyDate = forceDate(record.value('clientVoluntaryPolicyDate'))
            relegateOrg = forceString(record.value('relegateOrg'))
            deliveredOrg = forceString(record.value('deliveredOrg'))
            receivedOrgStructure = forceString(record.value('receivedOrgStructure'))
            hospitalBedProfile = forceString(record.value('hospitalBedProfile'))
            bedProfile = forceString(record.value('bedProfile'))
            cardNumber = forceString(record.value('cardNumber'))
            relegateOrgDiag = forceString(record.value('relegateOrgDiagnosis'))
            receivedOrgDiag = forceString(record.value('receivedOrgDiagnosis'))
            leavedDate = forceDate(record.value('leavedDate'))
            leavedResult = forceString(record.value('leavedResult'))
            leavedTo = forceString(record.value('leavedTo'))
            msgToRelatives = forceString(record.value('msgToRelaties'))
            eventOrder = eventOrderValues[forceInt(record.value('eventOrder'))]
            reason = forceString(record.value('reason'))
            takenMeasures = forceString(record.value('takenMeasures'))
            notes = forceString(record.value('notes'))
            otherRelegateOrg = forceString(record.value('otherRelegateOrg'))

            i = table.addRow()
            table.setText(i, 0, rowNumber)

            if showColumn['receivedDate']:
                table.setText(i, columnNumber['receivedDate'], actionDateTime.date().toString('dd.MM.yyyy'))

            if showColumn['receivedTime']:
                table.setText(i, columnNumber['receivedTime'], actionDateTime.time().toString('hh:mm'))

            if showColumn['clientName']:
                table.setText(i, columnNumber['clientName'], clientName)

            if showColumn['clientSex']:
                table.setText(i, columnNumber['clientSex'], u'м' if clientSex == '1' else u'ж')

            if showColumn['clientBirthDate']:
                table.setText(i, columnNumber['clientBirthDate'], clientBirthDate.toString('dd.MM.yyyy'))

            if showColumn['clientAge']:
                table.setText(i, columnNumber['clientAge'], clientAge)

            if showColumn['clientContacts']:
                address = []
                if showRegAddress and clientRegAddress != '':
                    address.append(clientRegAddress)
                if showLocAddress and clientLocAddress != '':
                    address.append(clientLocAddress)
                contacts = '/'.join(address)

                if showContacts:
                    contacts = contacts + '\n' + clientContacts

                if showRelations:
                    contacts = contacts + '\n' + '\n'.join(getClientRelations(clientId))

                table.setText(i, columnNumber['clientContacts'], contacts)

            if showColumn['clientDocument']:
                text =  u'%s выдан: %s' % (clientDocument, clientDocumentDate.toString('dd.MM.yyyy'))
                table.setText(i, columnNumber['clientDocument'], text)

            if showColumn['clientPolicy']:
                policy = []
                if showCompulsoryPolicy:
                    policy.append(u'%s выдан %s' % (clientCompulsoryPolicy, clientCompulsoryPolicyDate.toString('dd.MM.yyyy')))
                if showVoluntaryPolicy:
                    policy.append(u'%s выдан %s' % (clientVoluntaryPolicy, clientVoluntaryPolicyDate.toString('dd.MM.yyyy')))
                table.setText(i, columnNumber['clientPolicy'], '/'.join(policy))

            if showColumn['relegateOrDeliveredOrg']:
                org = []
                if showRelegateOrg and relegateOrg != '':
                    org.append(relegateOrg)
                if showDeliveredOrg and deliveredOrg != '':
                    org.append(deliveredOrg)
                if showOtherRelegateOrg and otherRelegateOrg != '':
                    org.append(otherRelegateOrg)
                table.setText(i, columnNumber['relegateOrDeliveredOrg'], '/'.join(org))

            table.setText(i, columnNumber['receivedOrgStructure'], receivedOrgStructure)

            if showColumn['hospitalBedProfile']:
                table.setText(i, columnNumber['hospitalBedProfile'], hospitalBedProfile)

            if showColumn['bedProfile']:
                table.setText(i, columnNumber['bedProfile'], bedProfile)

            if showColumn['cardNumber']:
                table.setText(i, columnNumber['cardNumber'], cardNumber)

            if showColumn['relegateOrgDiagnosis']:
                table.setText(i, columnNumber['relegateOrgDiagnosis'], relegateOrgDiag)

            if showColumn['receivedOrgDiagnosis']:
                table.setText(i, columnNumber['receivedOrgDiagnosis'], receivedOrgDiag)

            if showColumn['leavedInfo']:
                text = leavedResult + u'\n' + leavedDate.toString('dd.MM.yyyy') + u'\t' + leavedTo
                table.setText(i, columnNumber['leavedInfo'], text)

            if showColumn['messageToRelatives']:
                table.setText(i, columnNumber['messageToRelatives'], msgToRelatives)

            if showColumn['eventOrder']:
                table.setText(i, columnNumber['eventOrder'], eventOrder)

            if showColumn['reason']:
                table.setText(i, columnNumber['reason'], reason)

            if showColumn['takenMeasures']:
                table.setText(i, columnNumber['takenMeasures'], takenMeasures)

            if showColumn['notes']:
                table.setText(i, columnNumber['notes'], notes)

        return doc
コード例 #11
0
    def build(self, params):
        rowSize = 49

        query = selectData(params)
        totalFS = set()
        totalSS = set()
        totalFull = set()
        totalHG1 = set()
        totalHG2 = set()
        totalHG3 = set()
        totalChronic = {
            'total': set(),
            0: set(),
            1: set(),
            2: set(),
            3: set(),
            4: set(),
            5: set(),
            6: set(),
            7: set(),
            8: set(),
            9: set(),
            10: set(),
            11: set(),
            12: set(),
            13: set(),
            14: set(),
            15: set(),
            16: set(),
            17: set(),
            18: set(),
            19: set(),
            20: set(),
            21: set()
        }

        totalRisky = {
            'total': set(),
            22: set(),
            23: set(),
            24: set(),
            25: set(),
            26: set(),
            27: set(),
            28: set(),
            29: set(),
            30: set()
        }
        alcoholic = {31: set(), 32: set()}
        multiRiskClients = {}

        i = 0
        while query.next():
            i += 1
            record = query.record()
            clientId = forceRef(record.value('clientId'))
            eventId = forceRef(record.value('eventId'))
            eventKindCode = forceString(record.value('eventKindCode'))
            hg = forceString(record.value('hgCode'))
            resultCode = forceString(record.value('resultCode'))
            APS_idx = forceString(record.value('idx'))
            APS_value = forceBool(record.value('aps_value'))

            if eventKindCode == '01':
                totalFS.add(clientId)
                if resultCode != '49':
                    totalFull.add(clientId)
                    if hg == '1':
                        totalHG1.add(clientId)
                    elif hg in ['2', '3', '4', '5']:
                        totalHG2.add(clientId)
                    elif hg == '6':
                        totalHG3.add(clientId)
            elif eventKindCode == '02':
                totalSS.add(clientId)
                totalFull.add(clientId)
                if hg == '1':
                    totalHG1.add(clientId)
                elif hg in ['2', '3', '4', '5']:
                    totalHG2.add(clientId)
                elif hg == '6':
                    totalHG3.add(clientId)

            if APS_idx != '' and APS_value:
                idx = forceInt(APS_idx)
                if idx <= 21:
                    totalChronic['total'].add(clientId)
                    totalChronic[idx].add(clientId)
                elif idx > 21 and idx <= 30:
                    totalRisky['total'].add(clientId)
                    totalRisky[idx].add(clientId)
                    if clientId in multiRiskClients:
                        multiRiskClients[clientId].add(idx)
                    else:
                        multiRiskClients[clientId] = set([idx])
                elif idx > 30:
                    alcoholic[idx].add(clientId)

        multiRiskTotal = 0
        for i in multiRiskClients:
            if len(multiRiskClients[i]) > 1:
                multiRiskTotal += 1
        query = selectExtraData(params)
        query.first()
        record = query.record()

        tc = totalChronic
        reportRow = [
            u'', u'',
            len(totalFS),
            len(totalSS),
            len(totalFull),
            len(totalHG1),
            len(totalHG2),
            len(totalHG3)
        ]
        # Порядок свойств у нас в одном месте отличается от оного в отчете, поэтому следующая строчка столь пугающая
        reportRow += [len(totalChronic['total'])] + [
            len(tc[0]),
            len(tc[1]),
            len(tc[2]),
            len(tc[4]),
            len(tc[3])
        ] + [len(totalChronic[i]) for i in range(5, 22)]
        reportRow += [len(totalRisky['total'])
                      ] + [len(totalRisky[i]) for i in range(22, 31)]
        reportRow += [multiRiskTotal, len(alcoholic[31]), len(alcoholic[32])]
        reportRow += [
            forceInt(record.value('deep_hg2')),
            forceInt(record.value('group_hg2'))
        ]
        reportRow += [
            forceInt(record.value('deep_hg3')),
            forceInt(record.value('group_hg3'))
        ]
        reportRow += [u'']

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('2%', [u'Численность взрослого населения района',
                    u''], CReportBase.AlignRight),
            ('2%', [
                u'Общее количество гражден, подлежаших диспансеризации в текущем году',
                u'1.'
            ], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан, прошедших 1-й этап диспансеризации за отчетный период',
                u'2.'
            ], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан, прошедших 2-й этап диспансеризации за отчетный период',
                u'3.'
            ], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан, полностью завершивших диспансеризацию за отчетный период, в том числе:',
                u'4.'
            ], CReportBase.AlignRight),
            ('2%', [u'- имеют 1-ю группу здоровья',
                    u'4.1'], CReportBase.AlignRight),
            ('2%', [u'- имеют 2-ю группу здоровья',
                    u'4.2'], CReportBase.AlignRight),
            ('2%', [u'- имеют 3-ю группу здоровья',
                    u'4.3'], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан с впервые выявленными хроническими инфекционными заболеваниями, из них:',
                u'5.'
            ], CReportBase.AlignRight),
            ('2%', [u'- со стенокардией', u'5.1'], CReportBase.AlignRight),
            ('2%', [u'- с хронической ишемической болезнью сердца',
                    u'5.2'], CReportBase.AlignRight),
            ('2%', [u'- с артериальной гипертонией',
                    u'5.3'], CReportBase.AlignRight),
            ('2%', [u'- со стенозом сонных артерий >50%',
                    u'5.4'], CReportBase.AlignRight),
            ('2%', [
                u'- с острым нарушением мозгового кровообращения в анамнезе',
                u'5.5'
            ], CReportBase.AlignRight),
            ('2%', [
                u'- с подозрением на злокачественное новообразование желудка по результатам фиброгастроскопии, из них',
                u'5.6'
            ], CReportBase.AlignRight),
            ('2%', [u'на ранней стадии', u'5.7'], CReportBase.AlignRight),
            ('2%', [
                u'- с подозрением на злокачественное образование матки и ее придатков',
                u'5.8'
            ], CReportBase.AlignRight),
            ('2%', [u'на ранней стадии', u'5.9'], CReportBase.AlignRight),
            ('2%', [
                u'- с подозрением на злокачественное новообразование простаты по данным осмотра врача-хирурга (уролога) и теста на простатспецифический антиген, из них',
                u'5.10'
            ], CReportBase.AlignRight),
            ('2%', [u'на ранней стадии', u'5.11'], CReportBase.AlignRight),
            ('2%', [
                u'- с подозрением на злокачественное новообразование грудной железы по данным маммографии, из них',
                u'5.12'
            ], CReportBase.AlignRight),
            ('2%', [u'на ранней стадии', u'5.13'], CReportBase.AlignRight),
            ('2%', [
                u'- с подозрением на колоректальный рак по данным ректоромано- и колоноскопии, из них',
                u'5.14'
            ], CReportBase.AlignRight),
            ('2%', [u'на ранней стадии', u'5.15'], CReportBase.AlignRight),
            ('2%', [
                u'- с подозрением на злокачественные заболевания других локализаций, из них',
                u'5.16'
            ], CReportBase.AlignRight),
            ('2%', [u'на ранней стадии', u'5.17'], CReportBase.AlignRight),
            ('2%', [u'- с сахарным диабетом',
                    u'5.18'], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан с впервые выявленным туберкулезом легких',
                u'6.'
            ], CReportBase.AlignRight),
            ('2%',
             [u'Количество граждан с впервые выявленной глаукомой',
              u'7.'], CReportBase.AlignRight),
            ('2%', [u'на ранней стадии', u''], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан с впервые выявленными заболеваниями других органов и систем',
                u'8.'
            ], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан, имеющих факторы риска хронических неинфекционных заболеваний, из них:',
                u'9.'
            ], CReportBase.AlignRight),
            ('2%', [u'- потребляют табак (курение)',
                    u'9.1'], CReportBase.AlignRight),
            ('2%', [u'- повышенное АД', u'9.2'], CReportBase.AlignRight),
            ('2%', [u'- избыточная масса тела',
                    u'9.3'], CReportBase.AlignRight),
            ('2%', [u'- ожирение', u'9.4'], CReportBase.AlignRight),
            ('2%', [u'- гиперхолистеринемия, дислипидемия',
                    u'9.5'], CReportBase.AlignRight),
            ('2%', [u'- гипергликемия', u'9.6'], CReportBase.AlignRight),
            ('2%', [u'- недостаточная физическая активность',
                    u'9.7'], CReportBase.AlignRight),
            ('2%', [u'- нерациональное питание',
                    u'9.8'], CReportBase.AlignRight),
            ('2%', [u'- подозрение на пагубное потребление алкоголя',
                    u'9.9'], CReportBase.AlignRight),
            ('2%', [u'- имеющие 2 фактора риска и более',
                    u'9.10'], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан с подозрением на зависимость от алкоголя, наркотиков и психотропных средств, из них',
                u'10.'
            ], CReportBase.AlignRight),
            ('2%',
             [u'число граждан, направленных к психиатру-наркологу',
              u'11.'], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан 2-й группы здоровья, прошедших углубленное профилактическое консультирование',
                u'12.'
            ], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан 2-й группы здоровья, прошедших групповое профилактическое консультирование',
                u'13.'
            ], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан 3-й группы здоровья, прошедших углубленное профилактическое консультирование',
                u'14.'
            ], CReportBase.AlignRight),
            ('2%', [
                u'Количество граждан 3-й группы здоровья, прошедших групповое профилактическое консультирование',
                u'15.'
            ], CReportBase.AlignRight),
            ('2%', [u'Численность прикрепленного взрослого контингента',
                    u''], CReportBase.AlignRight)
        ]

        table = createTable(cursor, tableColumns)

        i = table.addRow()
        for j in xrange(rowSize):
            table.setText(i, j, reportRow[j])
        return doc
コード例 #12
0
    def build(self, params):
        if QtGui.qApp.region() == '78':
            mapResultRow = {
                50: 0,
                89: 0,  # 1 группа здоровья
                51: 1,
                90: 1,  # 2
                52: 2,
                53: 2,
                91: 2,
                92: 2,
                94: 2,  # 3a
                54: 3,
                93: 3,
                95: 3,  # 3b
                32: 4,
                11: 7
            }
        else:
            mapResultRow = {
                317: 0,
                318: 1,
                353: 1,
                355: 2,
                357: 2,
                356: 3,
                358: 3,
                3: 5,
                1: 6
            }

        finalResultSet = [
            [
                u'Определена I группа состояния здоровья', u'01', 0, 0, 0, 0,
                0, 0
            ],
            [
                u'Определена II группа состояния здоровья', u'02', 0, 0, 0, 0,
                0, 0
            ],
            [
                u'Определена IIIа группа состояния здоровья', u'03', 0, 0, 0,
                0, 0, 0
            ],
            [
                u'Определена IIIб группа состояния здоровья', u'04', 0, 0, 0,
                0, 0, 0
            ], [u'Назначено лечение', u'05', 0, 0, 0, 0, 0, 0],
            [
                u'Направлено на дополнительное обследование, не входящее в объем диспансеризации',
                u'06', 0, 0, 0, 0, 0, 0
            ],
            [
                u'Направлено для получения специализированной, в том числе высокотехнологичной, медицинской помощи',
                u'07', 0, 0, 0, 0, 0, 0
            ],
            [
                u'Направлено на санаторно-курортное лечение', u'08', 0, 0, 0,
                0, 0, 0
            ]
        ]

        resultSet = self.processQuery(params, 0)
        diagResultSet = self.processQuery(params, 1)
        for dataSet in (resultSet, diagResultSet):
            for resultCode in sorted(dataSet.keys()):
                if resultCode in mapResultRow:
                    row, data = mapResultRow[resultCode], dataSet[resultCode]
                    for col in xrange(len(data)):
                        finalResultSet[row][2 + col] += data[col]

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('41%', [
                u'Результат диспансеризации определенных групп взрослого населения\n(далее - диспансеризация)',
                u''
            ], CReportBase.AlignLeft),
            ('5%', [u'№ строки', u''], CReportBase.AlignCenter),
            ('9%', [u'Мужчины', u'21 - 36 лет'], CReportBase.AlignRight),
            ('9%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('9%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ('9%', [u'Женщины', u'21 - 36 лет'], CReportBase.AlignRight),
            ('9%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('9%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
        ]

        cursor.movePosition(cursor.End)
        cursor.insertText(u'7000')

        rowSize = len(tableColumns)
        table = createTable(cursor, tableColumns)
        table.mergeCells(0, 0, 2, 1)
        table.mergeCells(0, 1, 2, 1)
        table.mergeCells(0, 2, 1, 3)
        table.mergeCells(0, 5, 1, 3)

        i = table.addRow()
        for j in xrange(rowSize):
            table.setText(i, j, j + 1, blockFormat=bf)

        for z in range(len(finalResultSet)):
            row = finalResultSet[z]
            i = table.addRow()
            table.setText(i, 0, row[0])
            table.setText(i, 1, row[1])
            for j in xrange(2, rowSize):
                table.setText(i, j, row[j])
        query = selectData(params, 2, DDREPORT_2017, mapResultRow.keys())
        self.addQueryText(forceString(query.lastQuery()))
        query.first()
        record = query.record()
        cursor.movePosition(cursor.End)
        cursor.insertBlock()

        countFirstStep = forceInt(record.value('countFirstStep'))
        rows = [
            u'\n7001 Общее число работающих граждан, прошедших диспансеризацию: %d человек'
            % forceInt(record.value('countWorking')),
            u'\n7002 Общее число неработающих граждан, прошедших диспансеризацию: %d человек'
            % forceInt(record.value('countNotWorking')),
            u'\n7003 Общее число граждан, обучающихся в образовательных организациях по очной форме, прошедших диспансеризацию: %d человек'
            % forceInt(record.value('students')),
            u'\n7004 Общее число граждан, имеющих право на получение государственной социальной помощи в виде набора социальных услуг, прошедших диспансеризацию, %d чел., из них:\n'
            % forceInt(record.value('beneficiaries')),
            u'\tинвалиды войны: %d чел.;\n' %
            forceInt(record.value('beneficiaries10_11')),
            u'\tучастники Великой Отечественной войны, ветераны боевых действий из числа лиц, '
            u'указанных в подпунктах 1 - 4 пункта 1 статьи 3 Федерального закона от 12 января 1995 г. №5-ФЗ "О ветеранах": %d чел.;\n'
            % forceInt(record.value('beneficiaries20')),
            u'\tлица, награжденные знаком "Жителю блокадного Ленинграда" и признанных инвалидами вследствие общего заболевания, трудового увечья и других причин '
            u'(кроме лиц, инвалидность которых наступила вследствие их противоправных действий): %d чел.;'
            % forceInt(record.value('beneficiaries50')),
            u'\n7005 Общее число прошедших диспансеризацию граждан, принадлежащих к коренным малочисленным народам Севера, Сибири и Дальнего Востока Российской Федерации: %d человек'
            % 0,
            u'\n7006 Общее число медицинских организаций, принимавших участие в проведении диспансеризации, а также имеющих кабинеты или отделения медицинской профилактики: %d человек'
            % 0,
            u'\n7007 Общее число мобильных медицинских бригад, принимавших участие в проведении диспансеризации: %d бригад'
            % forceInt(record.value('countMobile')),
            u'\n7008 Общее число граждан, диспансеризация которых была проведена мобильными медицинскими бригадами: %d человек'
            % forceInt(record.value('dispByMobileTeam')),
            u'\n7009 Число письменных отказов от прохождения медицинских мероприятий в рамках диспансеризации: %d человек'
            % forceInt(record.value('countDeclinedActions')),
            u'\n7010 Число письменных отказов от прохождения диспансеризации в целом: %d человек'
            % forceInt(record.value('countDeclinedEvents')),
            u'\n7011 Число граждан, прошедших первый этап диспансеризации и не завершивших второй этап диспансеризации: / человек',  #% ((countFirstStep - forceInt(record.value('countSecondStep'))) if countFirstStep else 0),
            u'\n7012 Число граждан, проживающих в сельской местности, прошедших диспансеризацию: %d человек'
            % forceInt(record.value('countVillagers')),
        ]
        for row in rows:
            cursor.insertText(row)

        cursor.insertBlock()
        tableColumns = [
            ('50%', [u''], CReportBase.AlignCenter),
            ('15%', [u''], CReportBase.AlignCenter),
            ('15%', [u''], CReportBase.AlignCenter),
        ]
        table = createTable(cursor, tableColumns, 0, 0)
        i = table.addRow()
        table.setText(i, 0, '_' * 50)
        table.setText(i, 1, '_' * 25)
        table.setText(i, 2, '_' * 25)
        i = table.addRow()
        table.setText(i, 0, u'(должность)')
        table.setText(i, 1, u'(Ф.И.О.)')
        table.setText(i, 2, u'(подпись)')
        i = table.addRow()
        table.setText(i, 2, u'М.П.')
        i = table.addRow()
        table.setText(i, 1, u'Адрес электронной почты:')
        i = table.addRow()
        table.setText(i, 0, '_' * 50)
        table.setText(i, 1, '_' * 25)
        table.setText(i, 2, u'«____» _____________ 20___ года')
        i = table.addRow()
        table.setText(i, 0, u'(номер контактного телефона)')
        table.setText(i, 2, u'(дата составления документа)')
        return doc
コード例 #13
0
    def build(self, params):
        self.count4002_1 = 0
        self.count4002_2 = 0
        self.count4001_1 = 0
        self.count4001_2 = 0
        self.resultSet = [
            [u'Повышенный уровень артериального давления (Повышенное кровяное давление при отсутствии диагноза гипертензии)', u'01', u'R03.0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Гипергликемия неуточненная (Повышенное содержание глюкозы в крови)', u'02', u'R73.9', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Избыточная масса тела (Анормальная прибавка массы тела)', u'03', u'R63.5', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Курение табака (Употребление табака)', u'04', u'Z72.0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Риск пагубного потребления алкоголя (Употребление алкоголя)', u'05', u'Z72.1', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Риск потребления наркотических средств и психотропных веществ без назначения врача (Употребление наркотиков)', u'06', u'Z72.2', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Низкая физическая активность (Недостаток физической активности)', u'07', u'Z72.3', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Нерациональное питание (Неприемлемая диета и вредные привычки питания)', u'08', u'Z72.4', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Отягощенная наследственность по злокачественным новообразованиям (в семейном анамнезе злокачественное новообразование)', u'09', u'Z80', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'отягощенная наследственность по сердечно-сосудистым заболеваниям (в семейном анамнезе инсульт, в семейном анамнезе ишемическая болезнь сердца и другие болезни сердечно-сосудистой системы)', u'', u'Z82.3, Z82.4', '', '', '', '', '', '', '', '', '', 0, '', ''],
            [u'отягощенная наследственность по хроническим болезням нижних дыхательных путей (в семейном анамнезе астма и другие хронические болезни нижних дыхательных путей),', u'', u'Z82.5', '', '', '', '', '', '', '', '', '', 0, '', ''],
            [u'отягощенная наследственность по сахарному диабету (в семейном анамнезе сахарный диабет).', u'', u'Z83.3', '', '', '', '', '', '', '', '', '', 0, '', ''],
            [u'Высокий абсолютный суммарный сердечно-сосудистый риск', u'10', u'', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Очень высокий абсолютный суммарный сердечно-сосудистый риск', u'11', u'', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        ]

        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            self.processRecord(query.record())

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('20%', [u'Факторы риска (наименование по МКБ-10)', u''], CReportBase.AlignCenter),
            ('4%', [u'№ строки', u''], CReportBase.AlignCenter),
            ('5%', [u'Код МКБ-10', u''], CReportBase.AlignCenter),
            ('5.9%', [u'Мужчины', u'21 - 36 лет'], CReportBase.AlignRight),
            ('5.9%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('5.9%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ('5.9%', [u'', u'Всего'], CReportBase.AlignRight),
            ('5.9%', [u'Женщины', u'21 - 36 лет'], CReportBase.AlignRight),
            ('5.9%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('5.9%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ('5.9%', [u'', u'Всего'], CReportBase.AlignRight),
            ('5.9%', [u'Всего', u'21 - 36 лет'], CReportBase.AlignRight),
            ('5.9%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('5.9%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ('5.9%', [u'', u'Всего'], CReportBase.AlignRight),
        ]

        cursor.movePosition(cursor.End)
        cursor.insertText(u'4000')

        rowSize = len(tableColumns)
        table = createTable(cursor, tableColumns)

        table.mergeCells(0, 0, 2, 1)
        table.mergeCells(0, 1, 2, 1)
        table.mergeCells(0, 2, 2, 1)
        table.mergeCells(0, 3, 1, 4)
        table.mergeCells(0, 7, 1, 4)
        table.mergeCells(0, 11, 1, 4)

        i = table.addRow()

        for j in xrange(rowSize):
            table.setText(i, j, j + 1, blockFormat=bf)

        for resultRow in self.resultSet:
            i = table.addRow()
            for j in xrange(rowSize):
                table.setText(i, j, resultRow[j])

        for c in [1] + range(3, 12) + [13, 14]:
            table.mergeCells(11, c, 4, 1)

        cursor.movePosition(cursor.End)
        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertBlock()
        ps4001 = u'4001 Установлено диспансерное наблюдение врачом (фельдшером): кабинета или отделения медицинской профилактики: %s чел.; ' \
                 u'центра здоровья: %s чел.'
        ps4002 = u'4002 Направлено к врачу-психиатру (врачу-психиатру-наркологу) в связи с выявленным риском пагубного потребления алкоголя: %s человек; ' \
                 u'в связи с выявленным риском потребления наркотических средств и психотропных веществ без назначения врача: %s человек.'
        cursor.insertText(ps4001 % (self.count4001_1, self.count4001_2))
        cursor.insertBlock()
        cursor.insertText(ps4002 % (self.count4002_1, self.count4002_2))

        return doc
コード例 #14
0
    def build(self, params):
        self.resultSet = [
            ([u'Некоторые инфекционные и паразитарные болезни', u'1', u'A00-B99', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tв том числе: туберкулез', u'1.1', u'A15-A19', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'Новообразования', u'2', u'C00-D48', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tв том числе:\n\tзлокачественные новообразования и новообразования in situ', u'2.1', u'C00-D09', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tв том числе:\n\tпищевода', u'2.2', u'C15, D00.1', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.2.1', u'C15, D00.1', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'\tжелудка', u'2.3', u'C16, D00.2', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.3.1', u'C16, D00.2', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'\tободочной кишки', u'2.4', u'C18, D01.0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.4.1', u'C18, D01.0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'\tректосигмоидного соединения, прямой кишки, заднего прохода (ануса) и анального канала', u'2.5', u'C19-C21, D01.1-D01.3', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.5.1', u'C19-C21, D01.1-D01.3', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'\tподжелудочной железы', u'2.6', u'C25', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.6.1', u'C25', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'\tтрахеи, бронхов и легкого', u'2.7', u'C33, C34, D02.1-D02.2', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.7.1', u'C33-C34, D02.1-D02.2', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'\tмолочной железы', u'2.8', u'C50, D05', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.8.1', u'C50, D05', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'\tшейки матки', u'2.9', u'C53, D06', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.9.1', u'C53, D06', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'\tтела матки', u'2.10', u'C54', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.10.1', u'C54', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'\tяичника', u'2.11', u'C56', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.11.1', u'C56', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'\tпредстательной железы', u'2.12', u'C61, D07.5', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.12.1', u'C61, D07.5', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'\tпочки (кроме почечной лоханки)', u'2.13', u'C64', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tиз них в 1-2 стадии', u'2.13.1', u'C64', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], True),
            ([u'Болезни крови, кроветворных органов и отдельные нарушения, вовлекающие иммунный механизм', u'3', u'D50-D89', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tв том числе:\n\tв том числе: анемии, связанные с питанием, гемолитические анемии, апластические и другие анемии', u'3.1', u'D50-D64', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'Болезни эндокринной системы, расстройства питания и нарушения обмена веществ', u'4', u'E00-E90', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tв том числе:\n\tсахарный диабет', u'4.1', u'E10-E14', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tожирение', u'4.2', u'E66', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tнарушения обмена липопротеинов и другие липидемии', u'4.3', u'E78', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'Болезни нервной системы', u'5', u'G00-G99', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tв том числе:\n\tв том числе: преходящие церебральные ишемические приступы [атаки] и родственные синдромы', u'5.1', u'G45', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'Болезни глаза и его придаточного аппарата', u'6', u'H00-H59', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tв том числе:\n\tстарческая катаракта и другие катаракты', u'6.1', u'H25, H26', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tглаукома', u'6.2', u'H40', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tслепота и пониженное зрение', u'6.3', u'H54', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'Болезни системы кровообращения', u'7', u'I00-I99', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tв том числе:\n\tболезни, характеризующиеся повышенным кровяным давлением', u'7.1', u'I10-I15', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tишемическая болезнь сердца', u'7.2', u'I20-I25', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tв том числе:\n\t\tстенокардия (грудная жаба)', u'7.2.1', u'I20', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tв том числе нестабильная стенокардия', u'7.2.2', u'I20.0', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tхроническая ишемическая болезнь сердца', u'7.2.3', u'I25', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\t\tв том числе:\n\t\t\tперенесенный в прошлом инфаркт миокарда', u'7.2.4', u'I25.2', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tдругие болезни сердца', u'7.3', u'I30-I52', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tцереброваскулярные болезни', u'7.4', u'I60-I69', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tв том числе:\n\t\tзакупорка и стеноз прецеребральных артерий, не приводящие к инфаркту мозга, и закупорка и стеноз церебральных артерий, не приводящие к инфаркту мозга', u'7.4.1', u'I65, I66', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tдругие цереброваскулярные болезни', u'7.4.2', u'I67', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\t\tпоследствия субарахноидального кровоизлияния, последствия внутричерепного кровоизлияния, последствия другого нетравматического внутричерепного кровоизлияния, последствия инфаркта мозга, последствия инсульта, не уточненные как кровоизлияние или инфаркт мозга', u'7.4.3', u'I69.0-I69.4', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tаневризма брюшной аорты', u'7.4.4', u'I71.3-I71.4', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'Болезни органов дыхания', u'8', u'J00-J98', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tв том числе:\n\tвирусная пневмония, пневмония, вызванная Streptococcus pneumonia, пневмония, вызванная Haemophilus influenza, \
            бактериальная пневмония, пневмония, вызванная другими инфекционными возбудителями, пневмония при болезнях, классифицированных \
            в других рубриках, пневмония без уточнения возбудителя', u'8.1', u'J12-J18', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tбронхит, не уточненный как острый и хронический, простой и слизисто-гнойный хронический бронхит, хронический бронхит неуточненный, эмфизема', u'8.2', u'J40-J43', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tдругая хроническая обструктивная легочная болезнь, астма, астматический статус, бронхоэктатическая болезнь', u'8.3', u'J44-J47', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'Болезни органов пищеварения', u'9', u'K00-K93', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tв том числе:\n\tязва желудка, язва двенадцатиперстной кишки', u'9.1', u'K25, K26', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tгастрит и дуоденит', u'9.2', u'K29', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tнеинфекционный энтерит и колит', u'9.3', u'K50-K52', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tдругие болезни кишечника', u'9.4', u'K55-K63', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'Болезни мочеполовой системы', u'10', u'N00-N99', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tв том числе:\n\tгиперплазия предстательной железы, воспалительные болезни предстательной железы, другие болезни предстательной железы', u'10.1', u'N40-N42', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tдоброкачественная дисплазия молочной железы', u'10.2', u'N60', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'\tВоспалительные болезни женских тазовых органов', u'10.3', u'N70-N77', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'Прочие заболевания', u'11', u'', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False),
            ([u'ИТОГО', u'12', u'A00-T98', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], False)
        ]


        query = selectData(params, self.diseaseCharacterCodes)
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            self.processRecord(query.record())

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ( '40%', [u'Заболевание (подозрение на заболевание)', u''], CReportBase.AlignLeft),
            ( '3%', [u'№ строки', u''], CReportBase.AlignCenter),
            ( '5%', [u'Код по МКБ-10', u''], CReportBase.AlignCenter),
            ( '4%', [u'Мужчины', u'21 - 36 лет'], CReportBase.AlignRight),
            ( '4%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ( '4%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ( '4%', [u'', u'Всего'], CReportBase.AlignRight),
            ( '4%', [u'Женщины', u'21 - 36 лет'], CReportBase.AlignRight),
            ( '4%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ( '4%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ( '4%', [u'', u'Всего'], CReportBase.AlignRight),
            ( '4%', [u'Всего', u'21 - 36 лет'], CReportBase.AlignRight),
            ( '4%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ( '4%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ( '4%', [u'', u'Всего'], CReportBase.AlignRight),
            ( '4%', [u'', u'Из них дано направление на дополнительное исследование, не входящее в объем диспансеризации' if self.diseaseCharacterCodes == [5] else u'Установлено диспансерное наблюдение'], CReportBase.AlignRight),
        ]

        cursor.movePosition(cursor.End)
        if self.diseaseCharacterCodes == [3, 4]:
            cursor.insertText(u'5000')
        elif self.diseaseCharacterCodes == [2]:
            cursor.insertText(u'5001')
        elif self.diseaseCharacterCodes == [5]:
            cursor.insertText(u'6000')
        else:
            cursor.insertText(u'ERROR')


        rowSize = len(self.resultSet[0][0])
        table = createTable(cursor, tableColumns)

        table.mergeCells(0, 0, 2, 1)
        table.mergeCells(0, 1, 2, 1)
        table.mergeCells(0, 2, 2, 1)
        table.mergeCells(0, 3, 1, 4)
        table.mergeCells(0, 7, 1, 4)
        table.mergeCells(0, 11, 1, 5)

        i = table.addRow()

        for j in xrange(rowSize):
            table.setText(i, j, j + 1, blockFormat=bf)

        # for z in range(len(self.resultSet)):
        #     row = self.resultSet[z][0]
        #     i = table.addRow()
        #     table.setText(i, 0, row[0], charFormat=(CReportBase.TableBody if row[0].startswith(u'\t') else CReportBase.TableTotal))
        #     table.setText(i, 1, row[1])
        #     if self.resultSet[z][1]:
        #         table.mergeCells(i - 1, 2, 2, 1)
        #     else:
        #         table.setText(i, 2, row[2])
        #     for j in range(3, rowSize):
        #         table.setText(i, j, row[j])

        for resultString in self.resultSet:
            row = resultString[0]
            i = table.addRow()
            table.setText(i, 0, row[0], charFormat=(CReportBase.TableBody if row[0].startswith(u'\t') else CReportBase.TableTotal))
            table.setText(i, 1, row[1])
            if resultString[1]:
                table.mergeCells(i - 1, 2, 2, 1)
            else:
                table.setText(i, 2, row[2])
            for j in range(3, rowSize):
                table.setText(i, j, row[j])

        return doc
コード例 #15
0
    def build(self, params):
        self.prepareRows()
        planTotal = params.get('planTotal', 0)

        totals = self.total_row
        query = selectData(params, DDREPORT_2017)
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            age = forceInt(record.value('clientAge'))
            total = forceInt(record.value('totalClients'))
            male = forceInt(record.value('totalMen'))
            female = forceInt(record.value('totalWomen'))
            processedTotalFS = forceInt(record.value('processedClientsFS'))
            processedTotalSS = forceInt(record.value('processedClientsSS'))
            processedMaleFS = forceInt(record.value('processedMenFS'))
            processedMaleSS = forceInt(record.value('processedMenSS'))
            processedFemaleFS = forceInt(record.value('processedWomenFS'))
            processedFemaleSS = forceInt(record.value('processedWomenSS'))

            totals[2] += total
            totals[4] += processedTotalFS
            totals[5] += processedTotalSS
            totals[6] += male
            totals[8] += processedMaleFS
            totals[9] += processedMaleSS
            totals[10] += female
            totals[12] += processedFemaleFS
            totals[13] += processedFemaleSS

            row = self.getRowByAge(age)
            if row is not None:
                row[2] += total
                row[4] += processedTotalFS
                row[5] += processedTotalSS
                row[6] += male
                row[8] += processedMaleFS
                row[9] += processedMaleSS
                row[10] += female
                row[12] += processedFemaleFS
                row[13] += processedFemaleSS

        planPercent = float(planTotal) / totals[2] if totals[2] else 0

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        tableColumns = [
            ('5%', [u'Возрастная группа', u'', u'',
                    u'1'], CReportBase.AlignLeft),
            ('5%', [u'№ строки', u'', u'', u'2'], CReportBase.AlignCenter),
            ('10%', [
                u'Все население',
                u'Численность населения на 01.01 текущего года', u'', u'3'
            ], CReportBase.AlignRight),
            ('10%', [
                u'', u'Подлежит диспансеризации по плану текущего года', u'',
                u'4'
            ], CReportBase.AlignRight),
            ('5%', [u'', u'Прошли диспансеризацию', u'I этап',
                    u'5'], CReportBase.AlignRight),
            ('5%', [u'', u'', u'II этап', u'6'], CReportBase.AlignRight),
            ('10%', [
                u'Мужчины', u'Численность населения на 01.01 текущего года',
                u'', u'7'
            ], CReportBase.AlignRight),
            ('10%', [
                u'', u'Подлежит диспансеризации по плану текущего года', u'',
                u'8'
            ], CReportBase.AlignRight),
            ('5%', [u'', u'Прошли диспансеризацию', u'I этап',
                    u'9'], CReportBase.AlignRight),
            ('5%', [u'', u'', u'II этап', u'10'], CReportBase.AlignRight),
            ('10%', [
                u'Женщины', u'Численность населения на 01.01 текущего года',
                u'', u'11'
            ], CReportBase.AlignRight),
            ('10%', [
                u'', u'Подлежит диспансеризации по плану текущего года', u'',
                u'12'
            ], CReportBase.AlignRight),
            ('5%', [u'', u'Прошли диспансеризацию', u'I этап',
                    u'13'], CReportBase.AlignRight),
            ('5%', [u'', u'', u'II этап', u'14'], CReportBase.AlignRight),
        ]

        cursor.movePosition(cursor.End)
        cursor.insertText(u'1000')
        rowSize = 11
        table = createTable(cursor, tableColumns)

        table.mergeCells(0, 0, 3, 1)
        table.mergeCells(0, 1, 3, 1)
        table.mergeCells(0, 2, 1, 4)
        table.mergeCells(1, 2, 2, 1)
        table.mergeCells(1, 3, 2, 1)
        table.mergeCells(1, 4, 1, 2)
        table.mergeCells(0, 6, 1, 4)
        table.mergeCells(1, 6, 2, 1)
        table.mergeCells(1, 7, 2, 1)
        table.mergeCells(1, 8, 1, 2)
        table.mergeCells(0, 10, 1, 4)
        table.mergeCells(1, 10, 2, 1)
        table.mergeCells(1, 11, 2, 1)
        table.mergeCells(1, 12, 1, 2)

        totalPlan = 0
        totalMalePlan = 0
        totalFemalePlan = 0

        manualPopulation = params.get('manualPopulation', False)
        fillPopulation = params.get('fillPopulation', False)
        if manualPopulation:
            totalMale = 0
            totalFemale = 0
            if fillPopulation:
                menPopulationPlan = params.get('menPopulationPlan')
                menPopulation = params.get('menPopulation')
                womenPopulationPlan = params.get('womenPopulationPlan')
                womenPopulation = params.get('womenPopulation')
            else:
                db = QtGui.qApp.db
                tablePopulation = db.table('PopulationCount')
                records = db.getRecordList(
                    tablePopulation,
                    where=[tablePopulation['measureYear'].eq(2017)],
                    order='sex, code')
                menPopulation, womenPopulation = [], []
                menPopulationPlan, womenPopulationPlan = [], []
                for record in records:
                    if forceInt(record.value('sex')) == 1:
                        menPopulationPlan.append(forceInt(
                            record.value('plan')))
                        menPopulation.append(
                            forceInt(record.value('population')))

                    else:
                        womenPopulationPlan.append(
                            forceInt(record.value('plan')))
                        womenPopulation.append(
                            forceInt(record.value('population')))
        else:
            planTotal = params.get('planTotal', 0)

        for i, row in enumerate([
                self.junior_row, self.middle_row, self.senior_row,
                self.total_row
        ]):
            # Немного безумия, чтобы все цифры сходились
            if row is self.total_row:
                row[3] = planTotal  # planPercent #raipc: так точно надо было?
                row[7] = totalMalePlan
                row[11] = totalFemalePlan
                if manualPopulation:
                    row[6] = totalMale
                    row[10] = totalFemale
                    row[2] = row[6] + row[10]
            elif manualPopulation:
                row[6] = menPopulation[i]
                row[7] = menPopulationPlan[i]
                row[10] = womenPopulation[i]
                row[11] = womenPopulationPlan[i]
                row[3] = row[7] + row[11]
                row[2] = row[6] + row[10]
                totalMale += row[6]
                totalMalePlan += row[7]
                totalFemale += row[10]
                totalFemalePlan += row[11]
                planTotal += row[3]
            else:
                row[7] = int(planPercent * row[6] + 0.5)
                row[11] = int(planPercent * row[10] + 0.5)
                row[3] = row[7] + row[11]
                totalPlan += row[3]
                totalMalePlan += row[7]
                totalFemalePlan += row[11]

            i = table.addRow()
            row[2] = ""
            row[6] = ""
            row[10] = ""
            for j, value in enumerate(row):
                table.setText(i, j, value)
        return doc
コード例 #16
0
    def build(self, params):
        rowSize = 6
        planTotal = params.get('planTotal', 0)
        totals = [0] * rowSize

        resultSet = {}
        for i in xrange(21, 100, 3):
            resultSet[i] = [0] * rowSize

        query = selectData(params, DDREPORT_2013)
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            age = forceInt(record.value('clientAge'))
            total = forceInt(record.value('totalClients'))
            male = forceInt(record.value('totalMen'))
            female = forceInt(record.value('totalWomen'))
            processedTotal = forceInt(record.value('processedClients'))
            processedMale = forceInt(record.value('processedMen'))
            processedFemale = forceInt(record.value('processedWomen'))

            totals[0] += male
            totals[1] += processedMale
            totals[2] += female
            totals[3] += processedFemale
            totals[4] += total
            totals[5] += processedTotal

            row = resultSet[age]
            row[0] = male
            row[1] = processedMale
            row[2] = female
            row[3] = processedFemale
            row[4] = total
            row[5] = processedTotal

        planPercent = float(planTotal) / totals[4] if totals[4] else 0

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('5%', [u'Возраст (исполняется полных лет в текущем году)',
                    u''], CReportBase.AlignCenter),
            ('5%', [u'№ строки', u''], CReportBase.AlignCenter),
            ('10%', [
                u'Мужчины',
                u'Всего проживает в субъекте Российской Федерации (на территории обслуживания медицинской организации)'
            ], CReportBase.AlignRight),
            ('10%', [
                u'',
                u'Включено в план проведения диспансеризации на текущий календарный год с учетом возрастной категории граждан'
            ], CReportBase.AlignRight),
            ('10%', [u'', u'Прошли диспансеризацию'], CReportBase.AlignRight),
            ('10%', [
                u'Женщины',
                u'Всего проживает в субъекте Российской Федерации (на территории обслуживания медицинской организации)'
            ], CReportBase.AlignRight),
            ('10%', [
                u'',
                u'Включено в план проведения диспансеризации на текущий календарный год с учетом возрастной категории граждан'
            ], CReportBase.AlignRight),
            ('10%', [u'', u'Прошли диспансеризацию'], CReportBase.AlignRight),
            ('10%', [
                u'Всего',
                u'Всего проживает в субъекте Российской Федерации (на территории обслуживания медицинской организации)'
            ], CReportBase.AlignRight),
            ('10%', [
                u'',
                u'Включено в план проведения диспансеризации на текущий календарный год с учетом возрастной категории граждан'
            ], CReportBase.AlignRight),
            ('10%', [u'', u'Прошли диспансеризацию'], CReportBase.AlignRight)
        ]

        rowSize = 11
        table = createTable(cursor, tableColumns)

        table.mergeCells(0, 0, 2, 1)
        table.mergeCells(0, 1, 2, 1)
        table.mergeCells(0, 2, 1, 3)
        table.mergeCells(0, 5, 1, 3)
        table.mergeCells(0, 8, 1, 3)

        i = table.addRow()

        for j in xrange(rowSize):
            table.setText(i, j, j + 1, blockFormat=bf)

        totalRow3 = 0
        totalRow6 = 0
        totalRow9 = 0

        tmpdateMale = []
        tmpdateFemale = []

        for number, age in enumerate(xrange(21, 100, 3)):
            row = resultSet[age]
            tmpdateMale.append(int(row[0] * planPercent))
            tmpdateFemale.append(int(row[2] * planPercent))
            totalRow3 += tmpdateMale[number]
            totalRow6 += tmpdateFemale[number]

        totalRow9 += totalRow6 + totalRow3

        for number, age in enumerate(xrange(21, 100, 3)):
            row = resultSet[age]
            if totalRow9 != planTotal:
                totalRow9 += 1
                if number % 2 == 0:
                    tmpdateMale[number] += 1
                    totalRow3 += 1
                else:
                    tmpdateFemale[number] += 1
                    totalRow6 += 1
            i = table.addRow()
            table.setText(i, 0, age)
            table.setText(i, 1, number + 1)
            table.setText(i, 2, row[0])
            table.setText(i, 3, tmpdateMale[number])
            table.setText(i, 4, row[1])
            table.setText(i, 5, row[2])
            table.setText(i, 6, tmpdateFemale[number])
            table.setText(i, 7, row[3])
            table.setText(i, 8, row[4])
            table.setText(i, 9, tmpdateMale[number] + tmpdateFemale[number])
            table.setText(i, 10, row[5])

        i = table.addRow()
        table.setText(i, 0, u'ИТОГО')
        table.setText(i, 1, u'')
        table.setText(i, 2, totals[0])
        #        table.setText(i, 3, int(totals[0]*planPercent))
        table.setText(i, 3, totalRow3)
        table.setText(i, 4, totals[1])
        table.setText(i, 5, totals[2])
        #        table.setText(i, 6, int(totals[2]*planPercent))
        table.setText(i, 6, totalRow6)
        table.setText(i, 7, totals[3])
        table.setText(i, 8, totals[4])
        #        table.setText(i, 9, int(totals[4]*planPercent))
        table.setText(i, 9, totalRow9)
        table.setText(i, 10, totals[5])

        return doc
コード例 #17
0
ファイル: ReportF030ru.py プロジェクト: dio4/vista_1
    def build(self, params):
        db = QtGui.qApp.db
        doc = QtGui.QTextDocument()

        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(QtGui.QTextCharFormat())
        columns = [('50%', [], CReportBase.AlignLeft),
                   ('50%', [], CReportBase.AlignRight)]
        table = createTable(cursor,
                            columns,
                            border=0,
                            cellPadding=2,
                            cellSpacing=0)
        i = table.addRow()
        currentOrgInfo = getOrganisationInfo(QtGui.qApp.currentOrgId())
        headerLeft = u'''
Министерство здравоохранения и
социального развития
Российской Федерации
%s
%s
Код ОГРН: %s
        ''' % (currentOrgInfo['fullName'],
               forceString(
                   db.translate('Organisation', 'id', currentOrgInfo['id'],
                                'Address')), currentOrgInfo['OGRN'])
        headerRight = u'''
Медицинская документация
Форма № 030-Р/у
утв. приказом
Министерства здравоохранения
и социального развития РФ
№ 255 от 22.11.2004 г.
        '''
        table.setText(i, 0, headerLeft)
        table.setText(i, 1, headerRight)
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()

        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(
            u'Сведения о лекарственных средствах, выписанных и отпущенных гражданам,\n'
        )
        cursor.insertText(
            u'имеющим право на получение набора социальных услуг')
        cursor.insertBlock()
        cursor.insertBlock()

        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        orgStructureId = params.get('orgStructureId', None)
        financeId = params.get('typeFinanceId', None)
        recipeStatus = params.get('recipeStatus', 0)
        cursor.setCharFormat(QtGui.QTextCharFormat())
        cursor.insertText(u'За период с ' +
                          forceString(begDate.toString('dd.MM.yyyy')) +
                          u' по ' +
                          forceString(endDate.toString('dd.MM.yyyy')))
        cursor.insertBlock()
        cursor.insertText(u'Источник финансирования: ' + (
            forceString(db.translate('rbFinance', 'id', financeId, 'name')
                        ) if financeId else u'не задано'))
        cursor.insertBlock()
        cursor.insertText(u'Подразделение: ' + (getOrgStructureFullName(
            orgStructureId) if orgStructureId else u'ЛПУ'))
        cursor.insertBlock()
        cursor.insertText(u'Статус рецепта: ' +
                          recipeStatusNames[recipeStatus])
        cursor.insertBlock()
        cursor.insertBlock()

        tableColumns = [
            ('3%', [u'Заполняется специалистом ОМК',
                    u'№ п/п'], CReportBase.AlignLeft),
            ('5%', [u'', u'Дата выписки рецепта'], CReportBase.AlignLeft),
            ('20%', [u'', u'Ф.И.О. врача (таб №)'], CReportBase.AlignLeft),
            ('10%', [u'', u'Ф.И.О. пациента'], CReportBase.AlignLeft),
            ('7%', [u'', u'Серия и номер страхового медицинского полиса'],
             CReportBase.AlignLeft),
            ('10%', [u'', u'СНИЛС'], CReportBase.AlignLeft),
            ('10%', [u'', u'Серия и номер выписанного рецепта'],
             CReportBase.AlignLeft),
            ('5%', [
                u'Заполняется на основании сведений аптечных учреждений',
                u'Дата отпуска лекарственного средства'
            ], CReportBase.AlignLeft),
            ('5%', [u'', u'Наименование отпущенного лекарственного средства'],
             CReportBase.AlignLeft),
            ('5%', [u'', u'Стоимость упаковки лекарственного средства'],
             CReportBase.AlignLeft),
            ('5%', [u'', u'Отпущено упаковок'], CReportBase.AlignLeft),
            ('5%',
             [u'', u'Общая стоимость отпущенного лекарственного средства'
              ], CReportBase.AlignLeft),
        ]
        table = createTable(cursor, tableColumns)
        table.mergeCells(0, 0, 1, 7)
        table.mergeCells(0, 7, 1, 5)
        rowSize = len(tableColumns)

        i = table.addRow()
        for j in range(rowSize):
            table.setText(i, j, (j + 1))

        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            i = table.addRow()
            table.setText(i, 0, i - 2)
            table.setText(i, 1, forceString(record.value('recipeDate')))
            table.setText(i, 2, forceString(record.value('person')))
            table.setText(i, 3, forceString(record.value('clientName')))
            policySerial = forceString(record.value('policySerial'))
            policyNumber = forceString(record.value('policyNumber'))
            table.setText(
                i, 4, policyNumber if policySerial == u'' else policySerial +
                u' ' + policyNumber)
            table.setText(i, 5, forceString(record.value('SNILS')))
            table.setText(
                i, 6,
                forceString(record.value('recipeNumber')).replace(u'#', u' '))

        cursor.movePosition(QtGui.QTextCursor.End)

        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertText(u'Итого общая стоимость ' + u'_' * 96)
        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertBlock()

        footerColumns = [(percent, [], CReportBase.AlignLeft)
                         for percent in ['25%', '35%', '25%', '15%']]
        table = createTable(cursor,
                            footerColumns,
                            border=0,
                            cellPadding=2,
                            cellSpacing=0)
        i = table.addRow()
        table.setText(i, 0, u'Зав. ОМК')
        table.setText(i, 1, u'_' * 60, blockFormat=CReportBase.AlignCenter)
        table.setText(i, 3, u'_' * 30, blockFormat=CReportBase.AlignCenter)
        i = table.addRow()
        table.setText(i, 1, u'(Ф.И.О.)', blockFormat=CReportBase.AlignCenter)
        table.setText(i, 3, u'(подпись)', blockFormat=CReportBase.AlignCenter)
        i = table.addRow()
        table.setText(i, 0, u'Работник аптечного учреждения')
        table.setText(i, 1, u'_' * 60, blockFormat=CReportBase.AlignCenter)
        table.setText(i, 3, u'_' * 30, blockFormat=CReportBase.AlignCenter)
        i = table.addRow()
        table.setText(i, 1, u'(Ф.И.О.)', blockFormat=CReportBase.AlignCenter)
        table.setText(i, 3, u'(подпись)', blockFormat=CReportBase.AlignCenter)
        return doc
コード例 #18
0
    def build(self, params):
        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)

        org_id = QtGui.qApp.currentOrgId()
        org_info = getOrganisationInfo(org_id)

        cursor.insertBlock(CReportBase.AlignCenter)
        cursor.insertText(org_info.get('fullName'))
        cursor.insertBlock(CReportBase.AlignCenter)
        cursor.insertText(self.title())

        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        tableColumns = [
            ('4%',   [u'№ п/п'],                        CReportBase.AlignCenter),
            ('16%',  [u'Отделение,\n№ ИБ'],             CReportBase.AlignCenter),
            ('5%',   [u'Дата актирования'],             CReportBase.AlignCenter),
            ('15%',  [u'Фамилия Имя Отчество'],         CReportBase.AlignCenter),
            ('5%',   [u'Возраст,\nДата рождения'],      CReportBase.AlignCenter),
            ('20%',  [u'Кем направлен, доставлен'],     CReportBase.AlignCenter),
            ('15%',  [u'Наличие предметов подлежащих актированию'], CReportBase.AlignCenter),
            ('10%',  [u'Сдал'],                         CReportBase.AlignCenter),
            ('10%',  [u'Принял'],                       CReportBase.AlignCenter)]
        table = createTable(cursor, tableColumns)
        total = 0
        total_passport = 0
        total_policy = 0
        while query.next():
            record = query.record()
            counterValue = forceString(record.value('counterValue'))
            externalId = forceString(record.value('externalId'))
            structure = forceString(record.value('structure'))
            date = forceString(record.value('endDate'))
            cl_lastName = record.value('cl_lastName')
            cl_firstName = record.value('cl_firstName')
            cl_patrName = record.value('cl_patrName')
            cl_birthDate = record.value('cl_birthDate')
            organisation = forceString(record.value('organisation'))
            delivered_by = forceString(record.value('delivered_by'))

            passport = u'Сдан паспорт' if forceInt(record.value('passport')) else u''
            policy = u'Сдан полис' if forceInt(record.value('policy')) else u''
            amb = u'АМБ' if forceInt(record.value('amb')) else u''
            total_passport += 1 if passport else 0
            total_policy += 1 if policy else 0

            worth = forceString(record.value('worth'))
            money = forceString(record.value('money'))
            person_name = forceString(record.value('person_name'))
            i = table.addRow()
            FIO = formatName(cl_lastName, cl_firstName, cl_patrName)
            table.setText(i, 0, counterValue)
            table.setText(i, 1, u'%s,\nиб: %s' % (structure, externalId))
            table.setText(i, 2, date)
            table.setText(i, 3, FIO)
            table.setText(i, 4, '%s\n%s' % (calcAge(cl_birthDate), forceString(cl_birthDate)))
            table.setText(i, 5, '%s\n%s' % (organisation, delivered_by))
            table.setText(i, 6, '\n'.join(filter(None, (passport,
                                                        policy,
                                                        amb,
                                                        u'Кв. ценностей № %s' % worth if worth else u'',
                                                        u'Кв. денежная № %s' % money if money else u''))))
            table.setText(i, 7, FIO)
            table.setText(i, 8, person_name)
            total += 1
        i = table.addRow()
        table.setText(i, 0, u'Итого: %d' % total, CReport.TableTotal, CReport.AlignLeft)
        table.setText(i, 6, u'Сдано паспортов: %d\nСдано полисов: %d' % (total_passport, total_policy), CReport.TableTotal, CReport.AlignLeft)
        table.mergeCells(i, 0, 1, 6)
        table.mergeCells(i, 6, 1, 3)
        return doc
コード例 #19
0
    def build(self, params):
        self.resultSet = [
            [
                u'Некоторые инфекционные и паразитарные болезни', u'01',
                u'A00-B99', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'в том числе:\nтуберкулез', u'02', u'A15-A19', 0, 0, 0, 0, 0,
                0, 0, 0, 0
            ],
            [u'Новообразования', u'03', u'C00-D48', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [
                u'\tв том числе:\n\tзлокачественные новообразования', u'04',
                u'C00-D48', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\t\tв том числе:\n\t\tпищевода', u'05', u'C15', 0, 0, 0, 0,
                0, 0, 0, 0, 0
            ],
            [u'\t\tжелудка', u'06', u'C16', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'\t\tободочной кишки', u'07', u'C18', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [
                u'\t\tпрямой кишки, ректосигмоидного соединения, заднего прохода (ануса) и анального канала',
                u'08', u'C19-C21', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\t\tподжелудочной железы', u'09', u'C25', 0, 0, 0, 0, 0, 0,
                0, 0, 0
            ],
            [
                u'\t\tтрахеи, бронхов и легкого', u'10', u'C33, 34', 0, 0, 0,
                0, 0, 0, 0, 0, 0
            ],
            [u'\t\tмолочной железы', u'11', u'C50', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'\t\tшейки матки', u'12', u'C53', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'\t\tтела матки', u'13', u'C54', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'\t\tяичника', u'14', u'C56', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [
                u'\t\tпредстательной железы', u'15', u'C61', 0, 0, 0, 0, 0, 0,
                0, 0, 0
            ],
            [
                u'\t\tпочки (кроме почечной лоханки)', u'16', u'C64', 0, 0, 0,
                0, 0, 0, 0, 0, 0
            ],
            [
                u'Болезни крови, проветворных органов и отдельные нарушения, вовлекающие иммунный механизм',
                u'17', u'D50-D89', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\tв том числе:\n\tанемии', u'18', u'D50-D64', 0, 0, 0, 0, 0,
                0, 0, 0, 0
            ],
            [
                u'Болезни эндокринной системы, расстройства питания и нарушения обмена веществ',
                u'19', u'E00-E89', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\tв том числе:\n\tсахарный диабет', u'20', u'E00-E14', 0, 0,
                0, 0, 0, 0, 0, 0, 0
            ],
            [u'\tожирение', u'21', u'E66', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [
                u'Болезни нервной системы', u'22', u'G00-G98', 0, 0, 0, 0, 0,
                0, 0, 0, 0
            ],
            [
                u'\tв том числе:\n\tпреходящие транзиторные церебральные ишемические приступы [атаки] и родственные синдромы',
                u'23', u'G45', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'Болезни глаза и его придаточного аппарата', u'24',
                u'H00-H59', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\tв том числе:\n\tкатаракта', u'25', u'H25, H26', 0, 0, 0, 0,
                0, 0, 0, 0, 0
            ],
            [u'\tглаукома', u'26', u'H40', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [
                u'\tслепота и пониженное зрение', u'27', u'H54', 0, 0, 0, 0, 0,
                0, 0, 0, 0
            ],
            [
                u'Болезни системы кровообращения', u'28', u'I00-I99', 0, 0, 0,
                0, 0, 0, 0, 0, 0
            ],
            [
                u'\tв том числе:\n\tболезни, характеризующиеся повышенным кровяным давлением',
                u'29', u'I10-I13', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\tишемическая болезнь сердца', u'30', u'I20-I25', 0, 0, 0, 0,
                0, 0, 0, 0, 0
            ],
            [
                u'\t\tв том числе:\n\t\tстенокардия (грудная жаба)', u'31',
                u'I20', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\t\t\tв том числе нестабильная стенокардия', u'32', u'I20.0',
                0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\t\tхроническая ишемическая болезнь сердца', u'33', u'I25',
                0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\tдругие болезни сердца', u'34', u'I30-I52', 0, 0, 0, 0, 0,
                0, 0, 0, 0
            ],
            [
                u'\tцереброваскулярные болезни', u'35', u'I60-I69', 0, 0, 0, 0,
                0, 0, 0, 0, 0
            ],
            [
                u'\t\tв том числе:\n\t\tзакупорка и стеноз прецеребральных, церебральных артерий, не приводящие к инфаркту мозга',
                u'36', u'I65, I66', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\t\tдругие цереброваскулярные болезни', u'37', u'I67', 0, 0,
                0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'Болезни органов дыхания', u'38', u'J00-J98', 0, 0, 0, 0, 0,
                0, 0, 0, 0
            ],
            [
                u'\tв том числе:\n\tпневмония', u'39', u'J12-J18', 0, 0, 0, 0,
                0, 0, 0, 0, 0
            ],
            [
                u'\tбронхит хронический и неуточненный, эмфизема', u'40',
                u'J40-J43', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\tдругая хроническая обструктивная легочная болезнь, бронхоэктатическая болезнь',
                u'41', u'J44-J47', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'Болезни органов пищеварения', u'42', u'K00-K92', 0, 0, 0, 0,
                0, 0, 0, 0, 0
            ],
            [
                u'\tв том числе:\n\tязва желудка, двенадцатиперстной кишки',
                u'43', u'K25, K26', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\tгастрит и дуоденит', u'44', u'K29', 0, 0, 0, 0, 0, 0, 0, 0,
                0
            ],
            [
                u'\tнеинфекционный энтерит и колит', u'45', u'K50-K52', 0, 0,
                0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\tдругие болезни кишечника', u'46', u'K55-K63', 0, 0, 0, 0,
                0, 0, 0, 0, 0
            ],
            [
                u'Болезни мочеполовой системы', u'47', u'N00-N99', 0, 0, 0, 0,
                0, 0, 0, 0, 0
            ],
            [
                u'\tв том числе:\n\tболезни предстательной железы', u'48',
                u'N40-N42', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\tдоброкачественная дисплазия молочной железы', u'49',
                u'N60', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [
                u'\tВоспалительные болезни женских тазовых органов', u'50',
                u'N77', 0, 0, 0, 0, 0, 0, 0, 0, 0
            ],
            [u'Прочие заболевания', u'51', u'', 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'ИТОГО', u'52', u'', 0, 0, 0, 0, 0, 0, 0, 0, 0],
        ]

        query = selectData(params, self.suspicions)
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            self.processRecord(query.record())

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('38%', [u'Заболевание (подозрение на заболевание)',
                     u''], CReportBase.AlignLeft),
            ('3%', [u'№ строки', u''], CReportBase.AlignCenter),
            ('5%', [u'Код по МКБ-10', u''], CReportBase.AlignCenter),
            ('6%', [u'Мужчины', u'21 - 36 лет'], CReportBase.AlignRight),
            ('6%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('6%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ('6%', [u'Женщины', u'21 - 36 лет'], CReportBase.AlignRight),
            ('6%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('6%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ('6%', [u'Всего', u'21 - 36 лет'], CReportBase.AlignRight),
            ('6%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('6%', [u'', u'Старше 60 лет'], CReportBase.AlignRight)
        ]

        rowSize = 12
        table = createTable(cursor, tableColumns)

        table.mergeCells(0, 0, 2, 1)
        table.mergeCells(0, 1, 2, 1)
        table.mergeCells(0, 2, 2, 1)
        table.mergeCells(0, 3, 1, 3)
        table.mergeCells(0, 6, 1, 3)
        table.mergeCells(0, 9, 1, 3)

        i = table.addRow()

        for j in xrange(rowSize):
            table.setText(i, j, j + 1, blockFormat=bf)

        for z in range(len(self.resultSet)):
            row = self.resultSet[z]
            i = table.addRow()
            for j in range(rowSize):
                table.setText(i, j, row[j])

        return doc
コード例 #20
0
ファイル: ReportTelefonogramm.py プロジェクト: dio4/vista_1
    def build(self, params):
        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)

        org_id = QtGui.qApp.currentOrgId()
        org_info = getOrganisationInfo(org_id)

        cursor.insertBlock(CReportBase.AlignCenter)
        cursor.insertText(org_info.get('fullName'))
        cursor.insertBlock(CReportBase.AlignCenter)
        cursor.insertText(self.title())

        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        tableColumns = [
            ('4%',
             [u'№ по журналу, Отделение, № телефонограммы, № истории болезни'
              ], CReportBase.AlignCenter),
            ('6%', [u'Дата поступления,\nВремя'], CReportBase.AlignCenter),
            ('13%', [u'Кем направлен\nКем доставлен'],
             CReportBase.AlignCenter),
            ('13%', [u'Диагноз приемного отделения / тяж.сост.'],
             CReportBase.AlignCenter),
            ('10%', [u'Фамилия Имя Отчество'], CReportBase.AlignCenter),
            ('5%', [u'Возраст, Дата рождения'], CReportBase.AlignCenter),
            ('15%', [u'Домашний адрес; Место работы, должность'],
             CReportBase.AlignCenter),
            ('10%', [u'Телефонограмма'], CReportBase.AlignCenter),
            ('7%', [u'ФИО врача'], CReportBase.AlignCenter),
            ('7%', [u'Кто передал, Куда передавал'], CReportBase.AlignCenter),
            ('10%', [u'Кто принял; Дата, время передачи'],
             CReportBase.AlignCenter)
        ]
        table = createTable(cursor, tableColumns)
        total = 0
        while query.next():
            record = query.record()

            counterValue = forceString(record.value('counterValue'))
            externalId = forceString(record.value('externalId'))
            date_received = forceString(record.value('date_received'))
            date_give = forceString(record.value('date_give'))

            cl_lastName = record.value('cl_lastName')
            cl_firstName = record.value('cl_firstName')
            cl_patrName = record.value('cl_patrName')
            cl_birthDate = record.value('cl_birthDate')

            person_giver = forceString(record.value('person_giver'))
            person_doctor = forceString(record.value('person_doctor'))
            org_structure = forceString(record.value('org_structure'))
            organisation = forceString(record.value('organisation'))
            courier = forceString(record.value('courier'))
            diagnosis = forceString(record.value('diagnosis'))
            state = forceString(record.value('state'))
            client_address = forceString(record.value('client_address'))
            client_work = forceString(record.value('client_work'))
            n_tele = forceString(record.value('n_tele'))
            militia = forceString(record.value('militia'))
            who_took = forceString(record.value('who_took'))
            telefonogramma = forceString(record.value('telefonogramma'))
            view_telefono = forceString(record.value('view_telefono'))

            i = table.addRow()

            table.setText(
                i, 0, u'Жур.№%s\nОтд: %s\n№%s\nиб: %s' %
                (counterValue, org_structure, n_tele, externalId))
            table.setText(i, 1, '%s' % date_received)
            table.setText(i, 2, '%s\n%s' % (organisation, courier))
            table.setText(i, 3, '%s\n/%s' % (diagnosis, state))
            table.setText(i, 4,
                          formatName(cl_lastName, cl_firstName, cl_patrName))
            table.setText(
                i, 5,
                '%s\n%s' % (calcAge(cl_birthDate), forceString(cl_birthDate)))
            table.setText(i, 6, '%s\n%s' % (client_address, client_work))
            table.setText(i, 7, '%s\n(%s)' % (telefonogramma, view_telefono))
            table.setText(i, 8, '%s' % person_doctor)
            table.setText(i, 9, '%s\n%s' % (person_giver, militia))
            table.setText(i, 10, '%s\n%s' % (who_took, date_give))
            total += 1
        i = table.addRow()
        table.setText(i, 0, u'Итого: %d' % total, CReport.TableTotal,
                      CReport.AlignLeft)
        table.mergeCells(i, 0, 1, 11)
        return doc
コード例 #21
0
    def build(self, params):
        queryFS = selectFirstStageData(params)
        queryFS.first()
        recordFS = queryFS.record()
        querySSS = selectSecondStageDataStarted(params)
        querySSS.first()
        recordSSS = querySSS.record()
        querySSF = selectSecondStageDataFinished(params)
        querySSF.first()
        recordSSF = querySSF.record()

        self.setQueryText('\n'.join([
            u'--- First stage query ---',
            forceString(queryFS.lastQuery()), u'\n\n\n',
            u'--- Second stage started query ---',
            forceString(querySSS.lastQuery()), u'\n\n\n',
            u'--- Second stage finished query ---',
            forceString(querySSF.lastQuery())
        ]))

        rowSize = 12
        reportRow = [0] * 12
        reportRow[2] = forceInt(recordFS.value('total'))
        reportRow[3] = forceInt(recordFS.value('veterans'))
        reportRow[4] = forceInt(recordFS.value('mobile'))
        reportRow[5] = forceInt(recordFS.value('hg1'))
        reportRow[6] = forceInt(recordFS.value('hg2'))
        reportRow[7] = forceInt(recordFS.value('hg3'))
        reportRow[8] = forceInt(recordFS.value('exposed'))
        reportRow[9] = forceInt(recordFS.value('payed'))
        reportRow[10] = forceInt(recordSSS.value('started'))
        reportRow[11] = forceInt(recordSSF.value('finished'))

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('8%', [
                u'Число медицинских организаций, осуществляющих диспансеризацию в 2013 г.',
                u'всего'
            ], CReportBase.AlignCenter),
            ('8%', [
                u'',
                u'получили лицензии на проведение медицинских осмотров профилактических'
            ], CReportBase.AlignCenter),
            ('8%',
             [u'Число граждан, прошедших 1 этап диспансеризации',
              u'всего'], CReportBase.AlignRight),
            ('8%', [u'', u'инвалиды и участники Великой Отечественной Войны'],
             CReportBase.AlignRight),
            ('8%', [
                u'',
                u'с применением мобильных медицинских комплексов для диспансеризации'
            ], CReportBase.AlignRight),
            ('8%', [
                u'Распределение граждан, прошедших 1 этап диспансеризации, по группам состояния здоровья',
                u'1 группа (человек)'
            ], CReportBase.AlignRight),
            ('8%', [u'', u'2 группа (человек)'], CReportBase.AlignRight),
            ('8%', [u'', u'3 группа (человек)'], CReportBase.AlignRight),
            ('8%', [
                u'Число законченных случаев 1 этапа диспансеризации',
                u'представлено счетов к оплате'
            ], CReportBase.AlignRight),
            ('8%', [u'', u'из них оплачено'], CReportBase.AlignRight),
            ('8%',
             [u'Число граждан, направленных на 2 этап диспансеризации',
              u''], CReportBase.AlignRight),
            ('8%', [u'из них: завершили 2 этап диспансеризации',
                    u''], CReportBase.AlignRight)
        ]

        table = createTable(cursor, tableColumns)

        table.mergeCells(0, 0, 1, 2)
        table.mergeCells(0, 2, 1, 3)
        table.mergeCells(0, 5, 1, 3)
        table.mergeCells(0, 8, 1, 2)

        i = table.addRow()

        for j in xrange(rowSize):
            table.setText(i, j, j + 1, blockFormat=bf)
        i = table.addRow()
        for j in xrange(rowSize):
            table.setText(i, j, reportRow[j])
        return doc
コード例 #22
0
    def build(self, params):
        db = QtGui.qApp.db
        accountId = params.get('accountId', None)
        payerId = params.get('orgInsurerId')
        placeIndex = params.get('orgStructure')

        self.units = self.mapUnits[placeIndex]
        self.place = self.mapPlaces[placeIndex]

        accountRegistry = params.get('registryNumber')
        idList = params.get('accountItemIdList', [])
        settleDate = forceDate(
            db.translate('Account', 'id', accountId, 'settleDate'))

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        format = QtGui.QTextCharFormat()

        cursor.insertBlock(CReportOrientation.AlignRight)
        format.setFontPointSize(8)
        cursor.insertText(
            u'Приложение N 2\nк тарифному соглашшению в сфере\nобязательного медицинского страхования\nна территории краснодарского края\nот \'__\'__________ 20__'
        )

        cursor.insertBlock()
        insertRequisitesBlock(cursor, QtGui.qApp.currentOrgId(), payerId)
        cursor.movePosition(cursor.End)
        cursor.insertBlock(CReportOrientation.AlignCenter)
        format.setFontPointSize(12)
        cursor.insertText(
            u'СЧЕТ № %s от %s' %
            (accountRegistry,
             settleDate.toString(QtCore.Qt.SystemLocaleLongDate)), format)

        cursor.insertBlock(CReportOrientation.AlignCenter)
        format.setFontPointSize(8)
        currentOrgInfo = getOrganisationInfo(QtGui.qApp.currentOrgId())
        cursor.insertText(
            u'К реестру счетов № %s от %s за %s' %
            (accountRegistry,
             settleDate.toString(QtCore.Qt.SystemLocaleLongDate),
             settleDate.toString(u'yyyy г. MMMM месяц')), format)

        cursor.insertBlock()

        tableColumns = []
        tableColumns.append(('10%', [u'Предмет счета', u'', u'', u'',
                                     str(1)], CReportOrientation.AlignLeft))
        tableColumns.append(('10%', [
            u'Наименование условий оказания медицинской помощи', u'', u'', u'',
            str(2)
        ], CReportOrientation.AlignLeft))
        tableColumns.append(('5%', [u'Един. изм.', u'', u'', u'',
                                    str(3)], CReportOrientation.AlignCenter))
        tableColumns.append(('5%', [u'Количество', u'', u'', u'',
                                    str(4)], CReportOrientation.AlignCenter))
        tableColumns.append(
            ('10%', [u'Сумма, руб.', u'Всего', u'', u'',
                     str(5)], CReportOrientation.AlignCenter))
        tableColumns.append(('10%', [
            u'', u'В том числе', u'По базовой части тарифа', u'Всего',
            str(5)
        ], CReportOrientation.AlignCenter))
        tableColumns.append(('15%', [
            u'', u'', u'',
            u'В т.ч. по выполнению стандартов и повышению доступности амбулаторной медицинской помощи',
            str(6)
        ], CReportOrientation.AlignCenter))
        tableColumns.append(('15%', [
            u'', u'',
            u'По стимулирующим выплатам мадицинскому персоналу участковой службы',
            u'',
            str(7)
        ], CReportOrientation.AlignCenter))
        tableColumns.append(
            ('10%',
             [u'', u'', u'По дополнительным расходам', u'Всего',
              str(8)], CReportOrientation.AlignCenter))
        tableColumns.append(
            ('10%', [u'', u'', u'', u'в т.ч. на коммунальные услуги',
                     str(9)], CReportOrientation.AlignCenter))
        format.setFontPointSize(8)
        table = createTable(cursor, tableColumns, charFormat=format)

        table.mergeCells(0, 0, 4, 1)
        table.mergeCells(0, 1, 4, 1)
        table.mergeCells(0, 2, 4, 1)
        table.mergeCells(0, 3, 4, 1)
        table.mergeCells(0, 4, 1, 6)
        table.mergeCells(1, 4, 3, 1)
        table.mergeCells(1, 5, 1, 5)
        table.mergeCells(2, 5, 1, 2)
        table.mergeCells(2, 7, 2, 1)
        table.mergeCells(2, 8, 1, 2)

        count = 0
        selectData = selectDataAmb if placeIndex < 2 or placeIndex > 3 else selectDataStat
        amount, sum, summ_b, summ_dm, summ_uc, summ_d, summ_k, queryText = selectData(
            idList)
        self.setQueryText(queryText)
        row = table.addRow()
        table.setText(
            row, 0,
            u'Медицинские услуги, оказанные в системе ОМС за период с %sг. по %sг.'
            % (settleDate.toString(u'01.MM.yy'),
               settleDate.toString(u'dd.MM.yy')))
        table.setText(row, 1, self.place)
        table.setText(row, 2, self.units)
        table.setText(row, 3, amount)
        table.setText(row, 4, '%.2f' % sum)
        table.setText(row, 5, '%.2f' % summ_b)
        table.setText(row, 6, '%.2f' % summ_dm)
        table.setText(row, 7, '%.2f' % summ_uc)
        table.setText(row, 8, '%.2f' % summ_d)
        table.setText(row, 9, '%.2f' % summ_k)

        font = QtGui.QFont()
        font.setBold(True)
        oldFont = format.font()
        format.setFont(font)
        format.setFontPointSize(8)

        row = table.addRow()
        table.mergeCells(row, 0, 1, 4)
        cell = table.cellAt(row, 3)
        cellFirst = cell.firstCursorPosition()
        b_format = cellFirst.blockFormat()
        b_format.setAlignment(QtCore.Qt.AlignRight)
        cellFirst.setBlockFormat(b_format)
        cell.lastCursorPosition().insertText(u'Итого', format)
        table.setText(row, 4, '%.2f' % sum)
        table.setText(row, 5, '%.2f' % summ_b)
        table.setText(row, 6, '%.2f' % summ_dm)
        table.setText(row, 7, '%.2f' % summ_uc)
        table.setText(row, 8, '%.2f' % summ_d)
        table.setText(row, 9, '%.2f' % summ_k)

        row = table.addRow()
        table.mergeCells(row, 0, 1, 4)
        cell = table.cellAt(row, 3)
        cellFirst = cell.firstCursorPosition()
        b_format = cellFirst.blockFormat()
        b_format.setAlignment(QtCore.Qt.AlignRight)
        cellFirst.setBlockFormat(b_format)
        cell.lastCursorPosition().insertText(u'НДС', format)
        table.setText(row, 4, '-')
        table.setText(row, 5, '-')
        table.setText(row, 6, '-')
        table.setText(row, 7, '-')
        table.setText(row, 8, '-')
        table.setText(row, 9, '-')

        row = table.addRow()
        table.mergeCells(row, 0, 1, 4)
        cell = table.cellAt(row, 3)
        cellFirst = cell.firstCursorPosition()
        b_format = cellFirst.blockFormat()
        b_format.setAlignment(QtCore.Qt.AlignRight)
        cellFirst.setBlockFormat(b_format)

        cell.lastCursorPosition().insertText(u'Всего без НДС', format)
        table.setText(row, 4, '%.2f' % sum)
        table.setText(row, 5, '%.2f' % summ_b)
        table.setText(row, 6, '%.2f' % summ_dm)
        table.setText(row, 7, '%.2f' % summ_uc)
        table.setText(row, 8, '%.2f' % summ_d)
        table.setText(row, 9, '%.2f' % summ_k)

        format.setFont(oldFont)

        cursor.movePosition(cursor.End)
        cursor.insertBlock()
        format.setFontPointSize(8)
        cursor.insertText(u'Итого: %s' % amountToWords(sum), format)

        cursor.insertBlock(CReportOrientation.AlignLeft)
        orgMainStaff = getOrganisationMainStaff(QtGui.qApp.currentOrgId())
        titles = [u'Главный врач']
        names = [orgMainStaff[0]]

        titles.append(u'Главный бухгалтер')
        names.append(orgMainStaff[1])
        colCount = 2
        sealOverTitle = 2

        cursor.movePosition(cursor.End)

        cursor.insertBlock(CReportOrientation.AlignLeft)
        createAutographField(cursor,
                             titles,
                             names,
                             sealOverTitle=sealOverTitle,
                             colCount=colCount,
                             signLabel=u'(подпись)',
                             transcriptLabel=u'(расшифровка подписи)',
                             charFormat=format)

        cursor.movePosition(cursor.End)

        cursor.insertBlock(CReportOrientation.AlignLeft)
        format.setFontPointSize(7)
        cursor.insertText(
            u'Примечание: Первый экземпляр - плательщику, второй экземпляр - поставщику',
            format)
        return doc
コード例 #23
0
ファイル: StatReportExposedDD.py プロジェクト: dio4/vista_1
    def build(self, params):
        groups = [
            u'Всего взрослых (в возрасте 18 лет и старше)\nиз них:',
            u'\tмужчины', u'\tженщины', u'Работаюших граждан\nиз них:',
            u'\tмужчины', u'\tженщины', u'Неработающих граждан\nиз них:',
            u'\tмужчины', u'\tженщины',
            u'Справочно: из строки 1 обучающиеся в образовательных организациях по очной форме',
            u'из строки 2 мужчины', u'из строки 3 женщины'
        ]

        processedEvents = []
        totalSum = [0.0] * 12
        amountFS = [0] * 12
        sumFS = [0.0] * 12
        amountSS = [0] * 12
        sumSS = [0.0] * 12

        query = selectData(params)
        while query.next():
            record = query.record()
            eventId = forceRef(record.value('event_id'))
            if eventId in processedEvents:
                continue
            sex = forceInt(record.value('sex'))
            sum = forceDouble(record.value('sum'))
            code = forceString(record.value('code'))
            socStatus = forceString(record.value('socStatusCode'))

            totalSum[0] += sum
            if sex:
                totalSum[sex] += sum
            if socStatus == u'с05':  # работающий
                totalSum[3] += sum
                if sex:
                    totalSum[3 + sex] += sum
            elif socStatus == u'с06':  # неработающий
                totalSum[6] += sum
                if sex:
                    totalSum[6 + sex] += sum
            elif socStatus == u'с04':  # студент
                totalSum[9] += sum
                if sex:
                    totalSum[9 + sex] += sum

            if code in ('01', '04'):
                amountFS[0] += 1
                sumFS[0] += sum
                if sex:
                    amountFS[sex] += 1
                    sumFS[sex] += sum

                if socStatus == u'с05':  # работающий
                    amountFS[3] += 1
                    sumFS[3] += sum
                    if sex:
                        amountFS[3 + sex] += 1
                        sumFS[3 + sex] += sum
                if socStatus == u'с06':  # работающий
                    amountFS[6] += 1
                    sumFS[6] += sum
                    if sex:
                        amountFS[6 + sex] += 1
                        sumFS[6 + sex] += sum
                if socStatus == u'с04':  # работающий
                    amountFS[9] += 1
                    sumFS[9] += sum
                    if sex:
                        amountFS[9 + sex] += 1
                        sumFS[9 + sex] += sum

            elif code == '02':
                amountSS[0] += 1
                sumSS[0] += sum
                if sex:
                    amountSS[sex] += 1
                    sumSS[sex] += sum

                if socStatus == u'с05':  # работающий
                    amountSS[3] += 1
                    sumSS[3] += sum
                    if sex:
                        amountSS[3 + sex] += 1
                        sumSS[3 + sex] += sum
                if socStatus == u'с06':  # работающий
                    amountSS[6] += 1
                    sumSS[6] += sum
                    if sex:
                        amountSS[6 + sex] += 1
                        sumSS[6 + sex] += sum
                if socStatus == u'с04':  # работающий
                    amountSS[9] += 1
                    sumSS[9] += sum
                    if sex:
                        amountSS[9 + sex] += 1
                        sumSS[9 + sex] += sum
            processedEvents.append(eventId)
        rowSize = 7

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('15%', [u'Группы', u'', u''], CReportBase.AlignLeft),
            ('10%', [u'№ стр.', u'', u''], CReportBase.AlignCenter),
            ('15%', [
                u'Объем средств, предъявленных к оплате в рамках диспансеризации на отчетную дату, всего',
                u'тыс. рублей', u''
            ], CReportBase.AlignRight),
            ('15%', [
                u'В том числе:', u'В рамках I этапа диспансеризации',
                u'кол-во случаев'
            ], CReportBase.AlignRight),
            ('15%', [u'', u'', u'тыс. рублей'], CReportBase.AlignRight),
            ('15%',
             [u'', u'в рамках II этапа диспансеризации',
              u'кол-во случаев'], CReportBase.AlignRight),
            ('15%', [u'', u'', u'тыс. рублей'], CReportBase.AlignRight)
        ]

        table = createTable(cursor, tableColumns)

        table.mergeCells(0, 0, 3, 1)
        table.mergeCells(0, 1, 3, 1)
        table.mergeCells(0, 2, 2, 1)
        table.mergeCells(0, 3, 1, 4)
        table.mergeCells(1, 3, 1, 2)
        table.mergeCells(1, 5, 1, 2)

        i = table.addRow()

        for j in xrange(rowSize):
            table.setText(i, j, j + 1, blockFormat=bf)

        for k in range(12):
            i = table.addRow()
            table.setText(i, 0, groups[k])
            table.setText(i, 1, k + 1)
            table.setText(i, 2, '%.2f' % (totalSum[k] / 1000))
            table.setText(i, 3, amountFS[k])
            table.setText(i, 4, '%.2f' % (sumFS[k] / 1000))
            table.setText(i, 5, amountSS[k])
            table.setText(i, 6, '%.2f' % (sumSS[k] / 1000))
        return doc
コード例 #24
0
    def build(self, params):
        finalResultSet = []

        resultSet = self.processQuery(params, 0)
        diagResultSet = self.processQuery(params, 1)

        for i in sorted(resultSet.keys()):
            finalResultSet.append(resultSet[i])
        for i in sorted(diagResultSet.keys()):
            finalResultSet.append(diagResultSet[i])

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('41%', [
                u'Результат диспансеризации определенных групп взрослого населения\n(далее - диспансеризация)',
                u''
            ], CReportBase.AlignLeft),
            ('5%', [u'№ строки', u''], CReportBase.AlignCenter),
            ('9%', [u'Мужчины', u'21 - 36 лет'], CReportBase.AlignRight),
            ('9%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('9%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
            ('9%', [u'Женщины', u'21 - 36 лет'], CReportBase.AlignRight),
            ('9%', [u'', u'39 - 60 лет'], CReportBase.AlignRight),
            ('9%', [u'', u'Старше 60 лет'], CReportBase.AlignRight),
        ]
        rowSize = 8
        table = createTable(cursor, tableColumns)

        table.mergeCells(0, 0, 2, 1)
        table.mergeCells(0, 1, 2, 1)
        table.mergeCells(0, 2, 1, 3)
        table.mergeCells(0, 5, 1, 3)

        i = table.addRow()

        for j in xrange(rowSize):
            table.setText(i, j, j + 1, blockFormat=bf)

        for z in range(len(finalResultSet)):
            row = finalResultSet[z]
            i = table.addRow()
            table.setText(i, 0, row[0])
            table.setText(i, 1, '%2d' % z)
            for j in range(2, rowSize):
                table.setText(i, j, row[j - 1])

        query = selectData(params, 2)
        query.first()
        record = query.record()
        cursor.movePosition(cursor.End)
        cursor.insertBlock()
        cursor.insertText(
            u'\n7001 Общее число работающих граждан, прошедших диспансеризацию: %d человек'
            % forceInt(record.value('countWorking')))
        cursor.insertText(
            u'\n7002 Общее число неработающих граждан, прошедших диспансеризацию: %d человек'
            % forceInt(record.value('countNotWorking')))
        cursor.insertText(
            u'\n7003 Общее число прошедших диспансеризацию граждан, обучающихся в образовательных организациях по очной форме: %d человек'
            % forceInt(record.value('countStudents')))
        if self.reportType == 2014:
            cursor.insertText(
                u'\n7004 Общее число прошедших диспансеризацию инвалидов Великой Отечественной войны, лиц, награжденных знаком "Жителю блокадного Ленинграда" и признанных инвалидами вследствие общего заболевания, трудового увечья и других причин (кроме лиц, инвалидность которых наступила вследствие их противоправных действий): %d человек'
                % forceInt(record.value('countDiscount')))
            cursor.insertText(
                u'\n7005 Общее число прошедших диспансеризацию граждан, принадлежащих к коренным народам Севера, Сибири и дальнего Востока Российской Федерации.'
            )
            cursor.insertText(
                u'\n7006 Общее число медицинских организаций, принимавших участие в диспансеризации %d'
                % (forceInt(record.value('countOrgs')) + 1))
        else:
            cursor.insertText(u'\n7004 Общее число прошедших диспансеризацию инвалидов Великой Отечественной войны, лиц, награжденных знаком «Жителю блокадного Ленинграда»' \
                    u'и признанных инвалидами вследствие общего заболевания, трудового увечья и других причин (кроме лиц, инвалидность которых наступила вследствие их противоправных действий),'\
                    u'лиц награжденных знаком «Жителю блокадного Ленинграда», ветеранов, вдов (вдовцов) умерших инвалидов и ветеранов Великой Отечественной войны 1941–1945 годов, бывших несовершеннолетних узников концлагерей,'\
                    u'гетто, других мест принудительного содержания, созданных фашистами и их союзниками в период Второй мировой войны. %s человек.' % forceInt(record.value('countDiscount')))
            cursor.insertText(
                u'\n7005 Общее число прошедших диспансеризацию граждан, принадлежащих к коренным народам Севера, Сибири и дальнего Востока Российской Федерации ________ человек'
            )
            cursor.insertText(
                u'\n7006 Общее число медицинских организаций, принимавших участие в диспансеризации %d, из них имеют кабинеты или отделения медицинской профилактики ________ медицинских организаций'
                % (forceInt(record.value('countOrgs')) + 1))
        cursor.insertText(
            u'\n7007 Общее число мобильных медицинских бригад, принимавших участие в проведении диспансеризации ______'
        )
        cursor.insertText(
            u'\n7008 Общее число граждан, диспансеризация которых была проведена мобильными бригадами, _______ человек'
        )
        cursor.insertText(
            u'\n7009 Число письменных отказов от прохождения отдельных осмотров (консультаций), исследований в рамках диспансеризации %d'
            % forceInt(record.value('countDeclinedActions')))
        cursor.insertText(
            u'\n7010 Число письменных отказов от прохождения диспансеризации в целом %d'
            % forceInt(record.value('countDeclinedEvents')))
        countFirstStep = forceInt(record.value('countFirstStep'))
        cursor.insertText(
            u'\n7011 Число граждан, прошедших за отчетный период первый этап диспансеризации и не завершивших второй этап диспансеризации %d человек'
            % ((countFirstStep - forceInt(record.value('countSecondStep')))
               if countFirstStep else 0))
        cursor.insertText(
            u'\n7012 Число граждан, проживающих в сельской местности, прошедших диспансеризацию в отчетном периоде, %d человек'
            % forceInt(record.value('countVillagers')))

        return doc
コード例 #25
0
ファイル: AccountRegistryR51.py プロジェクト: dio4/vista_1
    def build(self, params):
        db = QtGui.qApp.db
        accountId = params.get('accountId', None)
        accountName = getAccountName(accountId)
        query = selectData(params)

        isLocRegistry = params.get('isLocRegistry', True)

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        format = QtGui.QTextCharFormat()

        cursor.insertBlock(CReportBase.AlignCenter)
        format.setFontPointSize(14)
        if isLocRegistry:
            cursor.insertText(u'РЕЕСТР СЧЕТОВ', format)
        else:
            cursor.insertText(u'РЕЕСТР СЧЕТА № %s' % accountName, format)

        cursor.insertBlock(CReportBase.AlignCenter)
        format.setFontPointSize(10)
        currentOrgInfo = getOrganisationInfo(QtGui.qApp.currentOrgId())
        cursor.insertText(u'%(fullName)s; ОГРН: %(OGRN)s' % currentOrgInfo,
                          format)

        cursor.insertBlock(CReportBase.AlignCenter)
        dateInterval = {
            'begDate': forceString(params.get('begDate', QtCore.QDate())),
            'endDate': forceString(params.get('endDate', QtCore.QDate()))
        }
        cursor.insertText(
            u'за период с %(begDate)s по %(endDate)s' % dateInterval, format)

        cursor.insertBlock(CReportBase.AlignCenter)
        if isLocRegistry:
            orgInsurerId = params.get('orgInsurerId', None)
            if orgInsurerId:
                insurerOrgInfo = getOrganisationInfo(orgInsurerId)
            else:
                insurerOrgInfo = {
                    'fullName': '______________________________________'
                }
            cursor.insertText(
                u'на оплату медицинской помощи, оказанной застрахованным лицам, в %(fullName)s'
                % insurerOrgInfo, format)
            format.setFontPointSize(7)
        else:
            cursor.insertText(
                u'на оплату медицинской помощи, оказанной застрахованным лицам за пределами субъекта Российской Федерации, на территории которого выдан полис обязательного медицинского страхования',
                format)
            format.setFontPointSize(8)

        cursor.insertBlock()
        cursor.insertBlock()

        tableColumns = []
        tableColumns.append(('10?', [u'№ позиции реестра',
                                     str(1)], CReportBase.AlignCenter))
        tableColumns.append(
            ('26?', [u'Фамилия,\nимя,\nотчество\n(при\nналичии)',
                     str(2)], CReportBase.AlignCenter))
        tableColumns.append(('6?', [u'Пол', str(3)], CReportBase.AlignCenter))
        tableColumns.append(('7?', [u'Дата\nрождения',
                                    str(4)], CReportBase.AlignCenter))
        tableColumns.append(('7?', [u'Место\nрождения',
                                    str(5)], CReportBase.AlignCenter))
        tableColumns.append(('7?', [
            u'Данные\nдоку-\nмента,\nудосто-\nверяю-\nщего\nличность',
            str(6)
        ], CReportBase.AlignCenter))
        colOffset = 0
        if isLocRegistry:
            tableColumns.append(('7?', [u'Место\nжитель-\nства',
                                        str(7)], CReportBase.AlignCenter))
            tableColumns.append(('7?', [u'Место\nрегист-\nрации',
                                        str(8)], CReportBase.AlignCenter))
            colOffset = 2
        tableColumns.append(
            ('7?', [u'СНИЛС\n(при\nналичии)',
                    str(7 + colOffset)], CReportBase.AlignCenter))
        tableColumns.append(('7?', [
            u'№ полиса\nобяза-\nтельного\nмеди-\nцинского\nстрахо-\nвания',
            str(8 + colOffset)
        ], CReportBase.AlignCenter))
        tableColumns.append(('7?', [
            u'Вид\nоказан-\nной\nмедицин-\nской\nпомощи\n(код)',
            str(9 + colOffset)
        ], CReportBase.AlignCenter))
        tableColumns.append(
            ('7?',
             [u'Диагноз\nв соот-\nветствии\nс МКБ-10',
              str(10 + colOffset)], CReportBase.AlignCenter))
        if isLocRegistry:
            tableColumns.append(('7?', [
                u'Дата\nначала\nи дата\nокон-\nчания\nлечения',
                str(11 + colOffset)
            ], CReportBase.AlignCenter))
            colOffset -= 1
        else:
            tableColumns.append(
                ('7?', [u'Дата\nначала\nлечения',
                        str(11 + colOffset)], CReportBase.AlignCenter))
            tableColumns.append(
                ('7?', [u'Дата\nоконча-\nния\nлечения',
                        str(12 + colOffset)], CReportBase.AlignCenter))
        tableColumns.append(('7?', [
            u'Объемы\nоказанной\nмедицин-\nской\nпомощи',
            str(13 + colOffset)
        ], CReportBase.AlignCenter))
        tableColumns.append(('7?', [
            u'Профиль\nоказанной\nмедицин-\nской\nпомощи\n(код)',
            str(14 + colOffset)
        ], CReportBase.AlignCenter))
        tableColumns.append(('7?', [
            u'Специ-\nальность\nмедицин-\nского\nработника,\nоказав-\nшего\nмедицин-\nскую\nпомощь\n(код)',
            str(15 + colOffset)
        ], CReportBase.AlignCenter))
        tableColumns.append(('7?', [
            u'Тариф\nна оплату\nмедицин-\nской\nпомощи,\nоказанной\nзастрахо-\nванному\nлицу',
            str(16 + colOffset)
        ], CReportBase.AlignCenter))
        tableColumns.append(('7?', [
            u'Стоимость\nоказанной\nмедицин-\nской\nпомощи',
            str(17 + colOffset)
        ], CReportBase.AlignCenter))
        tableColumns.append(('7?', [
            u'Результат\nобращения\nза меди-\nцинской\nпомощью\n(код)',
            str(18 + colOffset)
        ], CReportBase.AlignCenter))

        table = createTable(cursor, tableColumns, charFormat=format)
        count = 0
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            row = table.addRow()
            count += 1
            sum = forceDouble(record.value('sum'))
            federalSum = forceDouble(record.value('federalSum'))
            price = forceDouble(record.value('price'))
            federalPrice = forceDouble(record.value('federalPrice'))
            table.setText(row, 0, forceString(count), charFormat=format)
            table.setText(row,
                          1,
                          formatName(record.value('lastName'),
                                     record.value('firstName'),
                                     record.value('patrName')),
                          charFormat=format)
            table.setText(row,
                          2,
                          formatSex(record.value('sex')).upper(),
                          charFormat=format)
            table.setText(row,
                          3,
                          forceString(record.value('birthDate')),
                          charFormat=format)
            table.setText(row,
                          4,
                          forceString(record.value('birthPlace')),
                          charFormat=format)
            table.setText(row,
                          5,
                          forceString(record.value('document')),
                          charFormat=format)
            colOffset = 0
            if isLocRegistry:
                table.setText(row,
                              6,
                              forceString(record.value('residentAddress')),
                              charFormat=format)
                table.setText(row,
                              7,
                              forceString(record.value('registerAddress')),
                              charFormat=format)
                colOffset = 2
            table.setText(row,
                          6 + colOffset,
                          forceString(record.value('SNILS')),
                          charFormat=format)
            table.setText(row,
                          7 + colOffset,
                          forceString(record.value('policy')),
                          charFormat=format)
            table.setText(row,
                          8 + colOffset,
                          forceString(record.value('medicalKindCode')),
                          charFormat=format)
            table.setText(row,
                          9 + colOffset,
                          forceString(record.value('MKB')),
                          charFormat=format)
            if isLocRegistry:
                date = '%s - %s' % (forceString(record.value('begDate')),
                                    forceString(record.value('endDate')))
                table.setText(row, 10 + colOffset, date, charFormat=format)
                colOffset -= 1
            else:
                table.setText(row,
                              10 + colOffset,
                              forceString(record.value('begDate')),
                              charFormat=format)
                table.setText(row,
                              11 + colOffset,
                              forceString(record.value('endDate')),
                              charFormat=format)
            table.setText(row,
                          12 + colOffset,
                          forceString(record.value('amount')),
                          charFormat=format)
            table.setText(row,
                          13 + colOffset,
                          forceString(record.value('medicalProfile')),
                          charFormat=format)
            table.setText(row,
                          14 + colOffset,
                          forceString(record.value('specialityCode')),
                          charFormat=format)
            table.setText(row,
                          15 + colOffset,
                          QtCore.QString.number(price - federalPrice, 'g', 9),
                          charFormat=format)
            table.setText(row,
                          16 + colOffset,
                          QtCore.QString.number(sum - federalSum, 'g', 9),
                          charFormat=format)
            table.setText(row,
                          17 + colOffset,
                          forceString(record.value('resultCode')),
                          charFormat=format)

        cursor.movePosition(cursor.End)
        cursor.insertBlock(CReportBase.AlignLeft)
        titles = []
        names = []
        orgMainStaff = getOrganisationMainStaff(QtGui.qApp.currentOrgId())
        colCount = 1
        sealOverTitle = 1
        if not isLocRegistry:
            titles = [u'Руководитель медицинской\nорганизации']
            names = [orgMainStaff[0]]
            colCount = 2
            sealOverTitle = 2
        titles.append(u'Главный бухгалтер')
        names.append(orgMainStaff[1])
        titles.append(u'Исполнитель')
        names.append(None)
        cursor.movePosition(cursor.End)

        cursor.insertBlock(CReportBase.AlignLeft)
        createAutographField(cursor,
                             titles,
                             names,
                             sealOverTitle=sealOverTitle,
                             colCount=colCount,
                             signLabel=u'(подпись)',
                             transcriptLabel=u'(расшифровка подписи)',
                             charFormat=format)

        cursor.movePosition(cursor.End)

        cursor.insertBlock(CReportBase.AlignLeft)
        cursor.insertText(u'Дата  ______________________', format)
        return doc
コード例 #26
0
    def build(self, params):
        def processRecordWithCond(processedList, processedAIList, baseRow, cond=None):

            if (cond is None or socStatus.startswith(cond)):
                if not eventId in processedList:
                    processedList.append(eventId)
                    paidEvents[baseRow] += 1
                    if sex:
                        paidEvents[baseRow+sex] += 1
                    if eventKind in ['01', u'04']:
                        if resultCode == '49':
                            eventsSS[baseRow] += 1
                            if sex:
                                eventsSS[baseRow+sex] += 1
                        else:
                            if hgCode == '1':
                                hg1Col[baseRow] += 1
                                if sex:
                                    hg1Col[baseRow+sex] += 1
                            elif hgCode in ['2', '3', '4', '5']:
                                hg2Col[baseRow] += 1
                                if sex:
                                    hg2Col[baseRow+sex] += 1
                            elif hgCode == '6':
                                hg3Col[baseRow] += 1
                                if sex:
                                    hg3Col[baseRow+sex] += 1
                        paidEventsFS[baseRow] += 1
                        if sex:
                            paidEventsFS[baseRow+sex] += 1
                    elif eventKind == '02':
                        paidEventsSS[baseRow] += 1
                        if sex:
                            paidEventsSS[baseRow+sex] += 1
                        if hgCode == '1':
                            hg1Col[baseRow] += 1
                            if sex:
                                hg1Col[baseRow+sex] += 1
                        elif hgCode in ['2', '3', '4', '5']:
                            hg2Col[baseRow] += 1
                            if sex:
                                hg2Col[baseRow+sex] += 1
                        elif hgCode == '6':
                            hg3Col[baseRow] += 1
                            if sex:
                                hg3Col[baseRow+sex] += 1

                if not accountItemId in processedAIList:
                    if eventKind in ['01', '04']:
                        paidEventsFSSum[baseRow] += sum
                        if sex:
                            paidEventsFSSum[baseRow+sex] += sum
                    elif eventKind == '02':
                        paidEventsSSSum[baseRow] += sum
                        if sex:
                            paidEventsSSSum[baseRow+sex] += sum
                    processedAIList.append(accountItemId)

        groups = [u'Всего взрослых (в возрасте 18 лет и старше)\nиз них:',
                  u'\tмужчины',
                  u'\tженщины',
                  u'Работаюших граждан\nиз них:',
                  u'\tмужчины',
                  u'\tженщины',
                  u'Неработающих граждан\nиз них:',
                  u'\tмужчины',
                  u'\tженщины',
                  u'Справочно: из строки 1 обучающиеся в образовательных организациях по очной форме',
                  u'из строки 2 мужчины',
                  u'из строки 3 женщины']


        clientsCol = [0.0] * 12
        paidEvents = [0.0] * 12         # Всего предъявленных к оплате реестров счетов
        paidEventsFS = [0.0] * 12       # из них случаев в рамках первого этапа
        paidEventsFSSum = [0.0] * 12    # сумма оплаты
        paidEventsSS = [0.0] * 12       # из них случаев в рамках второго этапа
        paidEventsSSSum = [0.0] * 12    # сумма оплаты
        eventsSS = [0.0] * 12           # всего направленных на второй этап
        hg1Col = [0.0] * 12
        hg2Col = [0.0] * 12
        hg3Col = [0.0] * 12

        query = selectClientsData(params)
        if query.first():
            record = query.record()
            clientsCol[0] = forceInt(record.value('totalClients'))
            clientsCol[1] = forceDouble(record.value('totalMen'))
            clientsCol[2] = forceDouble(record.value('totalWomen'))
            clientsCol[3] = forceDouble(record.value('totalWorking'))
            clientsCol[4] = forceDouble(record.value('menWorking'))
            clientsCol[5] = forceDouble(record.value('womenWorking'))
            clientsCol[6] = forceDouble(record.value('totalUnemployed'))
            clientsCol[7] = forceDouble(record.value('menUnemployed'))
            clientsCol[8] = forceDouble(record.value('womenUunemployed'))
            clientsCol[9] = forceDouble(record.value('totalStudents'))
            clientsCol[10] = forceDouble(record.value('menStudents'))
            clientsCol[11] = forceDouble(record.value('womenStudents'))

        processedEvents = []
        processedEventsAI = []
        processedEmployed = []
        processedEmployedAI = []
        processedUnemployed = []
        processedUnemployedAI = []
        processedStudents = []
        processedStudentsAI = []

        query = selectEventsData(params)
        while query.next():

            record = query.record()
            eventId = forceRef(record.value('event_id'))
            eventKind = forceString(record.value('eventKindCode'))
            accountItemId = forceRef(record.value('accountItem_id'))
            sum = forceDouble(record.value('sum'))
            sex = forceInt(record.value('sex'))
            resultCode = forceString(record.value('resultCode'))
            hgCode = forceString(record.value('HGCode'))
            socStatus = forceString(record.value('socStatusName')).lower()

            processRecordWithCond(processedEvents, processedEventsAI, 0)
            processRecordWithCond(processedEmployed, processedEmployedAI, 3, u'работающ')
            processRecordWithCond(processedUnemployed, processedUnemployedAI, 6, u'неработающ')
            processRecordWithCond(processedStudents, processedStudentsAI, 9, u'студент')



        rowCount = 12

        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')


        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)


        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ( '10%', [u'Группы', u'', u'', u'1'], CReportBase.AlignLeft),
            ( '3%', [u'№ стр.', u'', u'', u'2'], CReportBase.AlignCenter),
            ( '5%', [u'Количество медицинских организаций, проводящих диспансеризацию в отчетном периоде', u'', u'', u'3'], CReportBase.AlignCenter),
            ( '5%', [u'Численность застрахованных лиц, прикрепленных к медицинским организациям, оказывающим первичную медико-санитарную помощь на отчетную дату, человек', u'', u'', u'4'], CReportBase.AlignCenter),
            ( '5%', [u'в том числе:', u'подлежащие диспансеризации в отчетном году, согласно утвержденному плану-графику, всего человек', u'', u'5'], CReportBase.AlignCenter),
            ( '5%', [u'', u'из них:', u'на отчетный период, человек', u'6'], CReportBase.AlignCenter),
            ( '5%', [u'Всего предъявленных к оплате реестров счетов в рамках диспансеризации на отчетную дату, тыс. рублей', u'', u'', u'7'], CReportBase.AlignCenter),
            ( '4%', [u'в том числе:', u'в рамках I этапа диспансеризации', u'кол-во случаев', u'8'], CReportBase.AlignCenter),
            ( '4%', [u'', u'', u'тыс. рублей', u'9'], CReportBase.AlignCenter),
            ( '4%', [u'', u'в рамках II этапа диспансеризации', u'кол-во случаев', u'10'], CReportBase.AlignCenter),
            ( '4%', [u'', u'', u'тыс. рублей', u'11'], CReportBase.AlignCenter),
            ( '5%', [u'Всего оплачено реестров счетов в рамках диспансеризации за отчетный период, тыс. рублей', u'', u'', u'12'], CReportBase.AlignCenter),
            ( '5%', [u'в том числе:', u'в рамках I этапа', u'кол-во случаев', u'13'], CReportBase.AlignCenter),
            ( '5%', [u'', u'', u'тыс. рублей', u'14'], CReportBase.AlignCenter),
            ( '5%', [u'', u'в рамках II этапа', u'кол-во случаев', u'15'], CReportBase.AlignCenter),
            ( '5%', [u'', u'', u'тыс. рублей', u'16'], CReportBase.AlignCenter),
            ( '6%', [u'Количество граждан, направенных на II этап диспансеризации по результатам I этапа диспансеризации, человек', u'', u'', u'17'], CReportBase.AlignCenter),
            ( '5%', [u'Группы состояния здоровья застрахованны лиц, прошедших диспансеризацию', u'I группа здоровья, человек', u'', u'18'], CReportBase.AlignCenter),
            ( '5%', [u'', u'II группа здоровья, человек', u'', u'19'], CReportBase.AlignCenter),
            ( '5%', [u'', u'III группа здоровья, человек', u'', u'20'], CReportBase.AlignCenter)
        ]

        table = createTable(cursor, tableColumns)

        table.mergeCells(0, 0, 3, 1)
        table.mergeCells(0, 1, 3, 1)
        table.mergeCells(0, 2, 3, 1)
        table.mergeCells(0, 3, 3, 1)
        table.mergeCells(0, 4, 1, 2)
        table.mergeCells(1, 4, 2, 1)
        table.mergeCells(0, 6, 3, 1)
        table.mergeCells(0, 7, 1, 4)
        table.mergeCells(1, 7, 1, 2)
        table.mergeCells(1, 9, 1, 2)
        table.mergeCells(0, 11, 3, 1)
        table.mergeCells(0, 12, 1, 4)
        table.mergeCells(1, 12, 1, 2)
        table.mergeCells(1, 14, 1, 2)
        table.mergeCells(0, 16, 3, 1)
        table.mergeCells(0, 17, 1, 3)
        table.mergeCells(1, 17, 2, 1)
        table.mergeCells(1, 18, 2, 1)
        table.mergeCells(1, 19, 2, 1)


        for k in range(rowCount):
            i = table.addRow()
            table.setText(i, 0, groups[k])
            table.setText(i, 1, k+1)
            table.setText(i, 2, 'X')
            table.setText(i, 3, '%d' % clientsCol[k])
            table.setText(i, 6, '%d' % paidEvents[k])
            table.setText(i, 7, '%d' % paidEventsFS[k])
            table.setText(i, 8, paidEventsFSSum[k])
            table.setText(i, 9, '%d' % paidEventsSS[k])
            table.setText(i, 10, paidEventsSSSum[k])
            table.setText(i, 16, '%d' % eventsSS[k])
            table.setText(i, 17, '%d' % hg1Col[k])
            table.setText(i, 18, '%d' % hg2Col[k])
            table.setText(i, 19, '%d' % hg3Col[k])

        return doc
コード例 #27
0
    def build(self, params):
        self.processedEvents = []
        self.resultSet = [
            [u'Психические растройства - всего', u'F00-F09, F20-F99', u'1', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Психозы и состояния слабоумия', u'', u'2', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  в том числе:\n  органические психозы и (или) слабоумие', u'F00-F05, F06, F09', u'3', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'    из них:\n    сосудистая деменция', u'F01', u'4', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'    др. формы старческого слабоумия', u'F00, F02.0, F02.2, F02.3, F03', u'5', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'    психозы и (или) слабоумие вследствие эпилепсии', u'F02.8, F04.2, F05.2, F06', u'6', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  шизофрения', u'F20', u'7', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  шизотипические расстройства', u'F21', u'8', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  шизоаффективные психозы, аффективные психозы с неконгруентным аффекту бредом', u'F25, F30-F39', u'9', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  острые и преходящие неорганические психозы', u'F23, F24', u'10', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  хронические неорганические психозы, детские психозы, неуточненные психот. рас-ва', u'F22, F28, F29, F84.0-F84.4, F99.1', u'11', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  аффективные психозы', u'F30-F39', u'12', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'    из них биполярные расстройства', u'F31.23, F31.28, F31.53, F31.58', u'13', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Психические рас-ва непсихотического характера', u'', u'14', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  в том числе:\n  органические непсихотические расстройства', u'F06, F07', u'15', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'    в т.ч. обусловленные эпилепсией', u'F06, F07', u'16', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  аффективные непсихотические расстройства', u'F30-F39', u'17', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'    из них биполярные расстройства', u'F31.0, F31.1, F31.3, F31.4, F31.6-F31.9', u'18', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  невротические, связанные со стрессом и соматоформные расстройства', u'F40-F48', u'19', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  другие непсихотические расстройства, поведенческие расстройства детского и подросткового возраста, неуточненные непсихотические расстойства', u'F50-F59, F80-F83, F84.5, F90-F98, F99.2-F99.9', u'20', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  расстройства зрелой личности и поведения у взрослых', u'F60-F69', u'21', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Умственная отсталость - всего', u'F70-F79', u'22', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'  в том числе:\n  легкая умственная отсталость', u'F70', u'23', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [u'Из стр. 3 - психические расстройства, классифицированные в других рубриках МКБ-10', u'A52.1, A81.0, B22.0, G10-G40', u'24', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        ]
        self.firstDiscoveredResultSet = deepcopy(self.resultSet)

        query = selectData(params)
        queryParts = [forceString(query.lastQuery())]
        while query.next():
            self.processRecord(query.record())

        for i in range(3, len(self.resultSet[0])):
            self.resultSet[1][i] = self.resultSet[2][i] + self.resultSet[6][i] + self.resultSet[7][i] + self.resultSet[8][i] \
                                    + self.resultSet[9][i] + self.resultSet[10][i] + self.resultSet[11][i]
            self.resultSet[13][i] = self.resultSet[14][i] + self.resultSet[16][i] + self.resultSet[18][i] + self.resultSet[19][i] + self.resultSet[20][i]

        query = selectData(params, True)
        queryParts.append(forceString(query.lastQuery()))
        self.setQueryText(u'\n\n'.join(queryParts))
        while query.next():
            self.processRecord(query.record(), True)
        for i in range(3, len(self.resultSet[0])):
            self.firstDiscoveredResultSet[1][i] = self.firstDiscoveredResultSet[2][i] + self.firstDiscoveredResultSet[6][i] + self.firstDiscoveredResultSet[7][i] + self.firstDiscoveredResultSet[8][i] \
                                    + self.firstDiscoveredResultSet[9][i] + self.firstDiscoveredResultSet[10][i] + self.firstDiscoveredResultSet[11][i]
            self.firstDiscoveredResultSet[13][i] = self.firstDiscoveredResultSet[14][i] + self.firstDiscoveredResultSet[16][i] + self.firstDiscoveredResultSet[18][i] + self.firstDiscoveredResultSet[19][i] + self.firstDiscoveredResultSet[20][i]


        # now text
        bf = QtGui.QTextBlockFormat()
        bf.setAlignment(QtCore.Qt.AlignCenter)

        orgId = QtGui.qApp.currentOrgId()
        orgInfo = getOrganisationInfo(orgId)
        if not orgInfo:
            QtGui.qApp.preferences.appPrefs['orgId'] = QtCore.QVariant()
        shortName = getVal(orgInfo, 'shortName', u'не задано')

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setBlockFormat(bf)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        #cursor.setCharFormat(CReportBase.ReportSubTitle)
        cursor.setBlockFormat(CReportBase.AlignLeft)
        cursor.insertText(u'\nЛПУ: ' + shortName)
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        self.drawDataTable(cursor)
        cursor.insertText('\n\n')
        self.drawDataTable(cursor, True)

        return doc