Ejemplo n.º 1
0
    def structActionsInfo(self, query):
        while query.next():
            record = query.record()

            orgStructureId = forceRef(record.value('orgStructureId'))
            personCode = forceString(record.value('personCode'))
            personName = forceString(record.value('personName'))
            clientId = forceRef(record.value('clientId'))
            personId = forceRef(record.value('personId'))
            eventId = forceRef(record.value('eventId'))
            actionClass = forceInt(record.value('actionClass'))

            if not orgStructureId in self._mapFullOrgStructureNameToId.values(
            ):
                orgStructureFullName = getOrgStructureFullName(orgStructureId)
                self._mapFullOrgStructureNameToId[
                    orgStructureFullName] = orgStructureId

            personInfoDict = self._mapOrgStructureToInfo.setdefault(
                orgStructureId, {})
            personInfoList = personInfoDict.get(personId, None)
            if personInfoList is None:
                personInfoHelper = {'clientIdList': [], 'eventIdList': []}
                personInfoList = [personCode, personName
                                  ] + [0] * 10 + [personInfoHelper]
                personInfoDict[personId] = personInfoList

            personInfoHelper = personInfoList[-1]
            personInfoList[8 + actionClass] += 1
            if not clientId in personInfoHelper['clientIdList']:
                personInfoList[2] += 1
                personInfoHelper['clientIdList'].append(clientId)
            if not eventId in personInfoHelper['eventIdList']:
                personInfoList[3] += 1
                personInfoHelper['eventIdList'].append(eventId)
Ejemplo n.º 2
0
    def getDescription(self, params):
        def dateRangeAsStr(begDate, endDate):
            result = ''
            if begDate:
                result += u' с ' + forceString(begDate)
            if endDate:
                result += u' по ' + forceString(endDate)
            return result

        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        financeId = params.get('financeId', None)
        orgStructureId = params.get('orgStructureId', None)
        reportDate = params.get('reportDate')
        rows = []
        if begDate or endDate:
            rows.append(u'за период' + dateRangeAsStr(begDate, endDate))
        if financeId:
            rows.append(u'Тип финансирования: ' + forceString(
                QtGui.qApp.db.translate('rbFinance', 'id', financeId, 'name')))
        if orgStructureId:
            rows.append(u'Подразделение: ' +
                        getOrgStructureFullName(orgStructureId))
        if reportDate:
            rows.append(u'отчёт составлен: ' + forceString(reportDate))
        else:
            rows.append(u'отчёт составлен: ' +
                        forceString(QtCore.QDateTime.currentDateTime()))

        return rows
Ejemplo n.º 3
0
 def getOrgStructureFullName(self, orgStructureId):
     orgStructureFullName = self._mapOrgStructureToFullName.get(
         orgStructureId, None)
     if not orgStructureFullName:
         orgStructureFullName = getOrgStructureFullName(orgStructureId)
         self._mapOrgStructureToFullName[
             orgStructureId] = orgStructureFullName
     return orgStructureFullName
Ejemplo n.º 4
0
    def produceReportDataDivided(self, query, reportRowSize, detailChildren,
                                 sceneIndexes, params):
        columnShift = 0 if detailChildren else 1
        reportData = {}
        personInfoList = []
        while query.next():
            record = query.record()
            personId = forceRef(record.value('person_id'))
            cnt = forceInt(record.value('cnt'))
            sceneId = forceInt(record.value('scene_id'))
            illness = forceBool(record.value('illness'))
            ageGroup = forceInt(record.value('ageGroup'))
            isWeekend = forceInt(record.value('weekend'))
            reportRow = reportData.get(personId, [])
            if not reportRow:
                reportRow = [0] * reportRowSize
                reportData[personId] = reportRow
                groupingRows = params.get('groupingRows', 0)
                specName = forceString(record.value('specName')) if groupingRows != 2 \
                    else getOrgStructureFullName(forceRef(record.value('whereId')))
                lastName = forceString(record.value('lastName'))
                firstName = forceString(record.value('firstName'))
                patrName = forceString(record.value('patrName'))
                personName = formatShortName(lastName, firstName, patrName)
                personInfoList.append((personId, specName, personName))
            if isWeekend:
                reportRow[1] += cnt
                if illness:
                    reportRow[3] += cnt
                    if not detailChildren:
                        if ageGroup in [0, 1]:
                            ageGroup = 0
                        else:
                            ageGroup = 1
                    reportRow[5 + ageGroup * 2] += cnt
                sceneIndex = sceneIndexes.get(sceneId, 0)
                reportRow[11 + sceneIndex * 4 - columnShift * 2] += cnt
                if illness:
                    reportRow[13 + sceneIndex * 4 - columnShift * 2] += cnt
            else:
                reportRow[0] += cnt
                if illness:
                    reportRow[2] += cnt
                    if not detailChildren:
                        if ageGroup in [0, 1]:
                            ageGroup = 0
                        else:
                            ageGroup = 1
                    reportRow[4 + ageGroup * 2] += cnt
                sceneIndex = sceneIndexes.get(sceneId, 0)
                reportRow[10 + sceneIndex * 4 - columnShift * 2] += cnt
                if illness:
                    reportRow[12 + sceneIndex * 4 - columnShift * 2] += cnt

        return reportData, personInfoList
Ejemplo n.º 5
0
    def dumpParams(self, cursor, params):
        description = []
        db = QtGui.qApp.db

        def dateRangeAsStr(begDate, endDate):
            result = ''
            if begDate:
                result += u' с ' + forceString(begDate)
            if endDate:
                result += u' по ' + forceString(endDate)
            return result

        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        begDateBeforeRecord = params.get('begDateBeforeRecord', QtCore.QDate())
        endDateBeforeRecord = params.get('endDateBeforeRecord', QtCore.QDate())
        orgStructureId = params.get('orgStructureId', None)
        specialityId = params.get('specialityId', None)
        personId = params.get('personId', None)
        chkPeriodRecord = params.get('chkPeriodRecord', None)
        chkPeriodBeforeRecord = params.get('chkPeriodBeforeRecord', None)
        if chkPeriodRecord:
            if begDate or endDate:
                description.append(u'за период' +
                                   dateRangeAsStr(begDate, endDate))
        if chkPeriodBeforeRecord:
            if begDateBeforeRecord or endDateBeforeRecord:
                description.append(
                    u'период предварительной записи' +
                    dateRangeAsStr(begDateBeforeRecord, endDateBeforeRecord))
        if orgStructureId:
            description.append(u'подразделение: ' +
                               getOrgStructureFullName(orgStructureId))
        else:
            description.append(u'подразделение: ЛПУ')
        if specialityId:
            description.append(u'специальность: ' + forceString(
                db.translate('rbSpeciality', 'id', specialityId, 'name')))
        if personId:
            personInfo = getPersonInfo(personId)
            description.append(u'врач: ' + personInfo['shortName'] + ', ' +
                               personInfo['specialityName'])
        description.append(u'отчёт составлен: ' +
                           forceString(QtCore.QDateTime.currentDateTime()))
        columns = [('100?', [], CReportBase.AlignLeft)]
        table = createTable(cursor,
                            columns,
                            headerRowCount=len(description),
                            border=0,
                            cellPadding=2,
                            cellSpacing=0)
        for i, row in enumerate(description):
            table.setText(i, 0, row)
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()
Ejemplo n.º 6
0
    def structVisitsInfo(self, query, params):
        begDate = params.get('begDate', None)
        endDate = params.get('endDate', None)
        AMB_SCENE_CODE_LIST = ['1']
        HOME_SCENE_CODE_LIST = ['2', '3']
        while query.next():
            record = query.record()

            orgStructureId = forceRef(record.value('orgStructureId'))
            personCode = forceString(record.value('personCode'))
            personName = forceString(record.value('personName'))
            clientId = forceRef(record.value('clientId'))
            personId = forceRef(record.value('personId'))
            eventId = forceRef(record.value('eventId'))
            sceneCode = forceString(record.value('sceneCode'))

            if not (sceneCode in AMB_SCENE_CODE_LIST
                    or sceneCode in HOME_SCENE_CODE_LIST):
                continue

            if not orgStructureId in self._mapFullOrgStructureNameToId.values(
            ):
                if orgStructureId:
                    orgStructureFullName = getOrgStructureFullName(
                        orgStructureId)
                else:
                    orgStructureFullName = u' Не определено'
                self._mapFullOrgStructureNameToId[
                    orgStructureFullName] = orgStructureId

            personInfoDict = self._mapOrgStructureToInfo.setdefault(
                orgStructureId, {})
            personInfoList = personInfoDict.get(personId, None)
            if personInfoList is None:
                personInfoHelper = {'clientIdList': [], 'eventIdList': []}
                personInfoList = [personCode, personName
                                  ] + [0] * 10 + [personInfoHelper]
                personInfoList[4] = self._getPersonPlan(
                    personId, atcAmbulance, begDate, endDate)
                personInfoList[5] = self._getPersonPlan(
                    personId, atcHome, begDate, endDate)
                personInfoDict[personId] = personInfoList

            personInfoHelper = personInfoList[-1]
            if not clientId in personInfoHelper['clientIdList']:
                personInfoList[2] += 1
                personInfoHelper['clientIdList'].append(clientId)
            if not eventId in personInfoHelper['eventIdList']:
                personInfoList[3] += 1
                personInfoHelper['eventIdList'].append(eventId)
            if sceneCode in AMB_SCENE_CODE_LIST:
                personInfoList[6] += 1
            elif sceneCode in HOME_SCENE_CODE_LIST:
                personInfoList[7] += 1
Ejemplo n.º 7
0
    def build(self, params):
        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        u'''№ п/п - порядковый номер записи в таблице
        Код пациента - client.id
        ФИО пациента - Фамилия имя отчество полностью
        Дата рождения - дата рождения пациента
        Период лечения - event.setDate-event.execDate
        Врач — Код, имя полностью
        Подразделение -(отображается полное наименование от головного до конечного)
        Контроль - отображается наименование сработавшего контроля.'''
        tableColumns = [
            (' 2%', [u'№'], CReportBase.AlignLeft),
            (' 8%', [u'Код пациента'], CReportBase.AlignLeft),
            ('15%', [u'ФИО'], CReportBase.AlignLeft),
            (' 10%', [u'Д/р'], CReportBase.AlignLeft),
            (' 2%', [u'Пол'], CReportBase.AlignLeft),
            ('10%', [u'Период лечения'], CReportBase.AlignLeft),
            ('15%', [u'Врач'], CReportBase.AlignLeft),
            ('20%', [u'Подразделение'], CReportBase.AlignLeft),
            ('20%', [u'Код и наименование услуги'], CReportBase.AlignLeft),
        ]
        table = createTable(cursor, tableColumns)

        while query.next():
            record = query.record()
            row = table.addRow()
            fields = (row, forceInt(record.value('clientId')),
                      forceString(record.value('name')),
                      forceString(record.value('birthDate')),
                      forceString(record.value('sex')),
                      forceString(
                          forceDate(record.value('startDate')).toString(
                              'dd.MM.yyyy') + ' - ' +
                          forceDate(record.value('finishDate')).toString(
                              'dd.MM.yyyy')),
                      forceString(record.value('personName')),
                      getOrgStructureFullName(record.value('orgId')),
                      forceString(record.value('service')))
            for col, val in enumerate(fields):
                table.setText(row, col, val)
        return doc
Ejemplo n.º 8
0
    def build(self, params):
        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        u'''№ п/п - порядковый номер записи в таблице
        Код - client.id
        Внешний идентификатор - внешний идентификатор истории болезни, при его отсутствии поле остается пустым
        ФИО пациента - Фамилия имя отчество полностью
        Дата рождения - дата рождения пациента
        Период лечения - event.setDate-event.execDate
        Подразделение - для ActionPoretyType.Name = 'Отделение пребывания'
        Врач - Event.execPerson_id - лечащий врач'''
        tableColumns = [
            ('4%', [u'№ п/п'], CReportBase.AlignLeft),
            ('4%', [u'Код'], CReportBase.AlignLeft),
            ('8%', [u'Внешний идентификатор'], CReportBase.AlignLeft),
            ('15%', [u'ФИО пациента'], CReportBase.AlignLeft),
            ('8%', [u'Д/р'], CReportBase.AlignLeft),
            ('10%', [u'Период лечения'], CReportBase.AlignLeft),
            ('20%', [u'Подразделение'], CReportBase.AlignLeft),
            ('20%', [u'Врач'], CReportBase.AlignLeft),
            ]
        table = createTable(cursor, tableColumns)
        while query.next():
            record = query.record()
            row = table.addRow()
            fields = (
                row,
                forceInt(record.value('clientId')),
                forceString(record.value('externalId')),
                forceString(record.value('clientName')),
                forceString(forceDate(record.value('birthDate')).toString('dd.MM.yyyy')),
                forceString(forceDate(record.value('setDate')).toString('dd.MM.yyyy') + ' - ' + forceDate(record.value('execDate')).toString('dd.MM.yyyy')),
                forceString(getOrgStructureFullName(record.value('orgStructureId'))),
                forceString((record.value('execPersonCode')).toString() + u' ' + (record.value('execPersonName')).toString())
            )

            for col, val in enumerate(fields):
                table.setText(row, col, val)
        return doc
Ejemplo n.º 9
0
 def getFilterAsText(self):
     db = QtGui.qApp.db
     return convertFilterToString(self.filter, [
         ('begDate', u'Дата оплаты с', forceString),
         ('endDate', u'Дата оплаты по', forceString),
         ('cashBox', u'Касса', forceString),
         ('cashKeeperId', u'Кассир', lambda id: forceString(
             db.translate('vrbPerson', 'id', id, 'name'))),
         ('cashOperationId', u'Кассовая операция', lambda id: forceString(
             db.translate('rbCashOperation', 'id', id, 'name'))),
         ('eventPurposeId', u'Назначение обращения', lambda id: forceString(
             db.translate('rbEventTypePurpose', 'id', id, 'name'))),
         ('eventTypeId', u'Тип обращения', lambda id: getEventName(id)),
         ('orgStructureId', u'Подразделение врача',
          lambda id: getOrgStructureFullName(id)),
         ('personId', u'Врач', lambda id: forceString(
             db.translate('vrbPersonWithSpeciality', 'id', id, 'name'))),
     ])
Ejemplo n.º 10
0
        def detailByDepartment(reportTable,
                               areaId,
                               endDate,
                               addressType,
                               isDetailByAge,
                               progressDialog=None):
            subAreaIdList = []
            db = QtGui.qApp.db
            tableOrgStructure = db.table('OrgStructure')
            whereCond = []
            if areaId:  #Если указан отдельный участок или группа участков
                whereCond.append(tableOrgStructure['parent_id'].eq(areaId))
            else:  #Если в качестве участка указан весь ЛПУ
                whereCond.append(tableOrgStructure['parent_id'].isNull())
                whereCond.append(tableOrgStructure['organisation_id'].eq(
                    QtGui.qApp.currentOrgId()))

            subAreaIdList = db.getIdList(table=tableOrgStructure,
                                         where=whereCond)
            if subAreaIdList:
                for subAreaId in subAreaIdList:
                    row = reportTable.addRow()
                    reportTable.mergeCells(row, 0, 1, reportRowSize[0] + 3)
                    charFormat = QtGui.QTextCharFormat()
                    charFormat.setFontWeight(QtGui.QFont.Bold)
                    subAreaName = getOrgStructureFullName(subAreaId)
                    reportTable.setText(row,
                                        0,
                                        subAreaName,
                                        charFormat=charFormat,
                                        blockFormat=CReportBase.AlignLeft)
                    if progressDialog:
                        progressDialog.setWindowTitle(u'Обработка %s' %
                                                      subAreaName)
                        progressDialog.step()
                        QtGui.qApp.processEvents(
                            QtCore.QEventLoop.ExcludeUserInputEvents)
                    detailByDepartment(reportTable, subAreaId, endDate,
                                       addressType, isDetailByAge,
                                       progressDialog)
            else:
                insertDataInTable(
                    reportTable,
                    getData(areaId, endDate, addressType, isDetailByAge))
Ejemplo n.º 11
0
    def getDescription(self, params):
        def dateRangeAsStr(begDate, endDate):
            result = ''
            if begDate:
                result += u' с ' + forceString(begDate)
            if endDate:
                result += u' по ' + forceString(endDate)
            return result

        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        personId = params.get('personId', None)
        if params.get('cmbOrgStructure', False):
            lstOrgStructure = params.get('lstOrgStructure', None)
            orgStructureId = None
        else:
            lstOrgStructure = None
            orgStructureId = params.get('orgStructureId', None)
        rowGrouping = params.get('rowGrouping', None)
        reportDate = params.get('reportDate', None)

        rows = []
        if begDate or endDate:
            rows.append(u'за период' + dateRangeAsStr(begDate, endDate))
        if personId:
            personInfo = getPersonInfo(personId)
            rows.append(u'врач: ' + personInfo['shortName'] + ', ' +
                        personInfo['specialityName'])
        if orgStructureId:
            rows.append(u'подразделение: ' +
                        getOrgStructureFullName(orgStructureId))
        if rowGrouping != None:
            rows.append(
                u'группировка: ' +
                [u'по подразделениям', u'по специальности', u'по врачам'
                 ][rowGrouping])
        if reportDate:
            rows.append(u'отчёт составлен: ' + forceString(reportDate))
        else:
            rows.append(u'отчёт составлен: ' +
                        forceString(QtCore.QDateTime.currentDateTime()))

        return rows
Ejemplo n.º 12
0
    def build(self, params):
        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [(' 2%', [u'№ п/п'], CReportBase.AlignLeft),
                        (' 8%', [u'Код пациента'], CReportBase.AlignLeft),
                        ('15%', [u'ФИО пациента'], CReportBase.AlignLeft),
                        ('10%', [u'Д/р'], CReportBase.AlignLeft),
                        ('10%', [u'Период лечения'], CReportBase.AlignLeft),
                        ('15%', [u'Врач'], CReportBase.AlignLeft),
                        ('20%', [u'Подразделение'], CReportBase.AlignLeft),
                        ('10%', [u'Договор'], CReportBase.AlignLeft),
                        ('10%', [u'Номер реестра'], CReportBase.AlignLeft)]

        table = createTable(cursor, tableColumns)

        while query.next():
            record = query.record()
            row = table.addRow()
            fields = (
                row, forceInt(record.value('clientId')),
                forceString(record.value('name')),
                forceString(record.value('birthDate')),
                forceString(
                    forceDate(record.value('start')).toString('dd.MM.yyyy') +
                    ' - ' +
                    forceDate(record.value('finish')).toString('dd.MM.yyyy')),
                forceString(record.value('doctor')),
                getOrgStructureFullName(record.value('orgStructure')),
                forceString(record.value('contract')),
                forceString(record.value('accountNumber')))
            for col, val in enumerate(fields):
                table.setText(row, col, val)

        return doc
Ejemplo n.º 13
0
    def structInfo(self, query, params):
        while query.next():
            record = query.record()
            
            actionId = forceRef(record.value('actionId'))
            orgStructureId = forceRef(record.value('orgStructureId'))
            amount = forceDouble(record.value('amount'))
            serviceType = forceInt(record.value('serviceType'))
            personId = forceRef(record.value('personId'))
            personCode = forceString(record.value('personCode')) 
            personName = forceString(record.value('personName')) if personId else u' Врач не известен'
            office = forceString(record.value('office'))
            clientId = forceRef(record.value('clientId'))
            eventId = forceRef(record.value('eventId'))

            personDict = self._mapOrgStructure2PersonDict.setdefault(orgStructureId, {})
            if not bool(personDict):
                orgStructureName = getOrgStructureFullName(orgStructureId) if orgStructureId else u' Не определено'
                self._mapOrgStructureName2Id[orgStructureName] = orgStructureId
            personLine = personDict.setdefault(personId, [personCode, personName]+[0]*16+[u'', 0])
            
            dataPoint = 3
            for c in [u'д', u'Д']:
                if c in office:
                    dataPoint = 10
            personLine[dataPoint+serviceType] += amount
            if serviceType in [CActionType.serviceTypeInitialInspection, 
                               CActionType.serviceTypeReinspection]:
                result = self._mapPersonId2InspectionCount.get(personId, 0)
                self._mapPersonId2InspectionCount[personId] = result+1
                
            self._setPersonPlan(personId, params, personLine)
            self._setEventId(eventId, personId)
            
            result = self._mapOrgStructure2Norm.setdefault(orgStructureId, [0, []])
            if not personId in result[1]:
                result[1].append(personId)
                result[0] += personLine[17]
            
                self._totalNorm += personLine[17]
Ejemplo n.º 14
0
        def printOrgStructures(reportData):
            total = [0, 0]
            orgStructures = reportData.keys()
            orgStructures.sort()
            for orgStructure in orgStructures:
                i = table.addRow()
                table.setText(i,
                              0,
                              getOrgStructureFullName(orgStructure) if
                              orgStructure else u'Подразделение не определено',
                              charFormat=boldChars,
                              blockFormat=CReportBase.AlignLeft)
                table.mergeCells(i, 0, 1, 4)

                i = table.addRow()
                table.setText(
                    i, 0, u'Номера реестров: ' +
                    u', '.join(sorted(orgStructureAccounts[orgStructure])))
                table.mergeCells(i, 0, 1, 4)

                totalByOrgStructure = printServices(reportData[orgStructure])
                total = map(add, total, totalByOrgStructure)

                i = table.addRow()
                table.setText(i,
                              0,
                              u'Итого по отделению:',
                              charFormat=boldChars,
                              blockFormat=CReportBase.AlignRight)
                table.mergeCells(i, 0, 1, 2)
                table.setText(i,
                              2,
                              totalByOrgStructure[0],
                              blockFormat=CReportBase.AlignRight)
                table.setText(i,
                              3,
                              "%.2f" % (totalByOrgStructure[1]),
                              blockFormat=CReportBase.AlignRight)
            return total
Ejemplo n.º 15
0
    def getDescription(self, params):
        date = params.get('begDate', QtCore.QDate())
        mode = params.get('mode', 0)
        orgStructureId = params.get('orgStructureId', None)
        times = u''
        if mode == 0:
            times = u'00.00 - 23.59'
        elif mode == 1:
            times = u'07.00 - 15.00'
        elif mode == 2:
            times = u'15.00 - 07.00'
        elif mode == 3:
            times = u'07.00 - 07.00'

        rows = []
        if date:
            rows.append(u'дата: ' + forceString(date))
        if times:
            rows.append(u'временной отрезок: ' + times)
        if orgStructureId:
            rows.append(u'подразделение: ' +
                        getOrgStructureFullName(orgStructureId))
        return rows
Ejemplo n.º 16
0
    def dumpParams(self, cursor, params, charFormat=QtGui.QTextCharFormat()):
        description = self.getDescription(params)

        query = self.getServiceParams(params)
        while query.next():
            record = query.record()
            description.append(
                u'Подразделение: ' +
                getOrgStructureFullName(record.value('orgStructId')))
            description.append(u'Услуга: ' +
                               forceString(record.value('serviceName')))

        columns = [('100%', [], CReportBase.AlignLeft)]
        table = createTable(cursor,
                            columns,
                            headerRowCount=len(description),
                            border=0,
                            cellPadding=2,
                            cellSpacing=0)
        for i, row in enumerate(description):
            table.setText(i, 0, row, charFormat=charFormat)
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()
Ejemplo n.º 17
0
    def build(self, params):
        group = params.get('groupOrgStructure')
        query = selectData(params)
        outputColumns = params.get('outputColumns')
        groupOrgStructure = params.get('chkGroupOrgStructure')
        query = selectData(params)
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        self.setQueryText(forceString(query.lastQuery()))
        if groupOrgStructure:
            cursor.insertText(u'Группировка: по отделениям')
        cursor.insertBlock()
        tableColumns = [
            (' 4%', [u'№ п/п'], CReportBase.AlignLeft),
            ('20%', [u'ФИО'], CReportBase.AlignLeft),
            ('10%', [u'Номер амб.карты'], CReportBase.AlignLeft),
            (' 8%', [u'Дата рождения'], CReportBase.AlignLeft),
            ('20%', [u'Врач'], CReportBase.AlignLeft),
            (' 8%', [u'МКБ'], CReportBase.AlignLeft),
            (' 8%', [u'Дата выполнения'], CReportBase.AlignLeft),
            ('10%', [u'Тип обращения'], CReportBase.AlignLeft),
            ('10%', [u'Район'], CReportBase.AlignLeft),
        ]

        table = createTable(cursor, tableColumns)
        currentOrgStructureId = 0
        orgStructureRow = 0
        totalOrgStructure = 0
        total = 0
        count = 1
        while query.next():
            record = query.record()
            if currentOrgStructureId != record.value(
                    'orgStructureId') and group:
                row = table.addRow()
                currentOrgStructureId = record.value('orgStructureId')
                table.setText(row, 1,
                              getOrgStructureFullName(currentOrgStructureId),
                              CReportBase.TableTotal, CReportBase.AlignLeft)
                if orgStructureRow:
                    table.setText(
                        orgStructureRow, 5, u'Итого поподразделению: %s' %
                        forceString(totalOrgStructure), CReportBase.TableTotal,
                        CReportBase.AlignLeft)
                    totalOrgStructure = 0
                orgStructureRow = row
                table.mergeCells(row, 0, 1, 5)
                table.mergeCells(row, 5, 1, 4)

            row = table.addRow()
            fields = (
                count,
                forceString(record.value('fullName')),
                forceString(record.value('clientId')),
                forceString(
                    forceDate(
                        record.value('birthDate')).toString('dd.MM.yyyy')),
                forceString(record.value('execPersonName')),
                forceString(record.value('MKB')),
                forceString(
                    forceDate(
                        record.value('execDate')).toString('dd.MM.yyyy')),
                forceString(record.value('eventType')),
                forceString(record.value('district')) if forceString(
                    record.value('district')) else u'не указано',
            )
            count += 1
            totalOrgStructure += 1
            total += 1
            for col, val in enumerate(fields):
                table.setText(row, col, val)
        if orgStructureRow and group:
            table.setText(
                orgStructureRow, 5,
                u'Итого поподразделению: %s' % forceString(totalOrgStructure),
                CReportBase.TableTotal, CReportBase.AlignLeft)

        row = table.addRow()
        table.setText(row, 1, u'Итого: %s' % forceString(total),
                      CReportBase.TableTotal, CReportBase.AlignLeft)
        table.mergeCells(row, 1, 1, 9)
        return doc
Ejemplo n.º 18
0
    def getDescription(self, params):
        db = QtGui.qApp.db

        def dateRangeAsStr(begDate, endDate):
            result = ''
            if begDate:
                result += u' с ' + forceString(begDate)
            if endDate:
                result += u' по ' + forceString(endDate)
            return result

        def dateTimeRangeAsStr(begDate, begTime, endDate, endTime):
            result = ''
            if begDate:
                result += u' с '
                if begTime:
                    result += forceString(begTime) + u' '
                result += forceString(begDate)
            if endDate:
                result += u' по '
                if endTime:
                    result += forceString(endTime) + u' '
                result += forceString(endDate)
            return result

        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        begTime = params.get('begTime', QtCore.QTime())
        endTime = params.get('endTime', QtCore.QTime())

        byPeriod = params.get('byPeriod', None)
        begDateReestr = params.get('begDateReestr', QtCore.QDate())
        endDateReestr = params.get('endDateReestr', QtCore.QDate())

        accountNumbersList = params.get('accountNumbersList', [])

        useInputDate = bool(params.get('useInputDate', False))
        begInputDate = params.get('begInputDate', QtCore.QDate())
        endInputDate = params.get('endInputDate', QtCore.QDate())
        begDateBeforeRecord = params.get('begDateBeforeRecord', QtCore.QDate())
        endDateBeforeRecord = params.get('endDateBeforeRecord', QtCore.QDate())

        doctype = params.get('doctype', None)
        tempInvalidReason = params.get('tempInvalidReason', None)
        durationFrom = params.get('durationFrom', 0)
        durationTo = params.get('durationTo', 0)
        insuranceOfficeMark = params.get('insuranceOfficeMark', 0)
        sex = params.get('sex', 0)
        ageFrom = params.get('ageFrom', None)
        ageTo = params.get('ageTo', None)

        birthYearParam = params.get('birthYearParam', None)
        birthYearFrom = params.get('birthYearFrom', None)
        birthYearTo = params.get('birthYearTo', None)

        socStatusClassId = params.get('socStatusClassId', None)
        socStatusTypeId = params.get('socStatusTypeId', None)
        locationCardTypeId = params.get('locationCardTypeId', None)
        areaIdEnabled = params.get('areaIdEnabled', False)
        areaId = params.get('areaId', None)
        areaAddressType = getVal(params, 'areaAddressType', None)
        locality = params.get('locality', 0)
        onlyClosed = params.get('onlyClosed', None)
        MKBFilter = params.get('MKBFilter', 0)
        MKBFrom = params.get('MKBFrom', '')
        MKBTo = params.get('MKBTo', '')
        MKBExFilter = params.get('MKBExFilter', 0)
        MKBExFrom = params.get('MKBExFrom', '')
        MKBExTo = params.get('MKBExTo', '')
        stageId = params.get('stageId', None)

        eventPurposeId = params.get('eventPurposeId', None)
        eventTypeId = params.get('eventTypeId', None)
        eventTypes = params.get('eventTypes', None)
        if params.get('cmbOrgStructure', False):
            lstOrgStructure = params.get('lstOrgStructure', None)
            orgStructureId = None
        else:
            lstOrgStructure = None
            orgStructureId = params.get('orgStructureId', None)
        sceneId = params.get('sceneId', None)
        specialityId = params.get('specialityId', None)
        personId = params.get('personId', None)
        assistantId = params.get('assistantId', None)
        userProfileId = params.get('userProfileId', None)
        beforeRecordUserId = params.get('beforeRecordUserId', None)
        onlyPermanentAttach = params.get('onlyPermanentAttach', False)
        onlyPayedEvents = params.get('onlyPayedEvents', None)

        characterClass = params.get('characterClass', 0)
        onlyFirstTime = params.get('onlyFirstTime', None)
        registeredInPeriod = params.get('registeredInPeriod', None)
        notNullTraumaType = params.get('notNullTraumaType', None)
        accountAccomp = params.get('accountAccomp', None)

        busyness = params.get('busyness', 0)
        workOrgId = params.get('workOrgId', None)
        typeFinanceId = params.get('typeFinanceId', None)
        tariff = params.get('tariff', None)
        visitPayStatus = params.get('visitPayStatus', None)
        groupingRows = params.get('groupingRows', None)
        rowGrouping = params.get('rowGrouping', None)
        advancedRowGrouping = params.get('advancedRowGrouping', None)

        insurerId = params.get('insurerId', None)
        contractIdList = params.get('contractIdList', None)
        accountIdList = params.get('accountIdList', None)

        actionTypeClass = params.get('actionTypeClass', None)
        actionTypeId = params.get('actionTypeId', None)
        actionTypeCode = params.get('queueType', None)

        permanentAttach = params.get('PermanentAttach', None)

        deathPlace = params.get('deathPlace', '')
        deathCause = params.get('deathCause', '')
        deathFoundBy = params.get('deathFoundBy', '')
        deathFoundation = params.get('deathFoundation', '')

        reportDate = params.get('reportDate')
        confirmEISDate = params.get('confirmEISDate')

        detailServiceTypes = params.get('detailServiceTypes', None)
        serviceTypes = params.get('serviceTypes', None)
        profileBedId = params.get('profileBedId', None)

        rows = []
        if begDate or endDate:
            rows.append(u'за период' +
                        dateTimeRangeAsStr(begDate, begTime, endDate, endTime))
        if begDateReestr or endDateReestr:
            rows.append(u'По реестрам персональных счетов с расчетной датой:' +
                        dateRangeAsStr(begDateReestr, endDateReestr))
        if begDateBeforeRecord or endDateBeforeRecord:
            rows.append(
                u'период предварительной записи' +
                dateRangeAsStr(begDateBeforeRecord, endDateBeforeRecord))
        if useInputDate and (begInputDate or endInputDate):
            rows.append(u'дата ввода в период' +
                        dateRangeAsStr(begInputDate, endInputDate))
        if byPeriod is not None:
            if byPeriod:
                rows.append(u'отчёт по периоду случая')
            else:
                rows.append(u'отчёт по окончанию случая')
        if eventPurposeId:
            rows.append(u'Цель обращения: ' + forceString(
                db.translate('rbEventTypePurpose', 'id', eventPurposeId,
                             'name')))
        if eventTypeId:
            rows.append(u'тип обращения: ' + getEventTypeName(eventTypeId))
        if eventTypes:
            rows.append(u'тип обращения: ' +
                        ', '.join([getEventTypeName(x) for x in eventTypes]))
        if sceneId:
            rows.append(
                u'Место: ' +
                forceString(db.translate('rbScene', 'id', sceneId, 'name')))
        if orgStructureId:
            if isinstance(orgStructureId, list):
                rows.append(u'подразделение: ' +
                            getOrgStructureFullName(orgStructureId[0]))
            else:
                rows.append(u'подразделение: ' +
                            getOrgStructureFullName(orgStructureId))
        elif lstOrgStructure:
            rows.append(u'подразделения: ' + ', '.join([
                forceString(orgStructure)
                for orgStructure in lstOrgStructure.itervalues()
            ]))
        if specialityId:
            rows.append(u'специальность: ' + forceString(
                db.translate('rbSpeciality', 'id', specialityId, 'name')))
        if personId:
            personInfo = getPersonInfo(personId)
            rows.append(u'врач: ' + personInfo['shortName'] + ', ' +
                        personInfo['specialityName'])
        if assistantId:
            personInfo = getPersonInfo(assistantId)
            rows.append(u'ассистент: ' + personInfo['shortName'] + ', ' +
                        personInfo['specialityName'])
        if userProfileId:
            rows.append(u'профиль прав пользователя: ' + forceString(
                db.translate('rbUserProfile', 'id', userProfileId, 'name')))
        if beforeRecordUserId:
            personInfo = getPersonInfo(beforeRecordUserId)
            rows.append(u'пользователь: ' + personInfo['shortName'] + ', ' +
                        personInfo['specialityName'])
        if doctype != None:
            rows.append(u'тип документа: ' + forceString(
                db.translate('rbTempInvalidDocument', 'id', doctype, 'name')))
        if tempInvalidReason != None:
            rows.append(u'причина нетрудоспособности: ' + forceString(
                db.translate('rbTempInvalidReason', 'id', tempInvalidReason,
                             'name')))
        if durationTo:
            rows.append(u'длительность нетрудоспособности: c %d по %d дней' %
                        (durationFrom, durationTo))
        if insuranceOfficeMark in (1, 2):
            rows.append([
                u'без отметки страхового стола', u'с отметкой страхового стола'
            ][insuranceOfficeMark - 1])
        if sex:
            rows.append(u'пол: ' + formatSex(sex))
        if not birthYearParam and ageFrom != None and ageTo != None and ageFrom <= ageTo:
            rows.append(u'возраст: c %d по %d %s' %
                        (ageFrom, ageTo,
                         agreeNumberAndWord(ageTo, (u'год', u'года', u'лет'))))
        if birthYearParam and birthYearFrom != None and birthYearTo != None and birthYearFrom <= birthYearTo:
            rows.append(u'год рождения: c %d по %d ' %
                        (birthYearFrom, birthYearTo))
        if socStatusTypeId:
            rows.append(u'Тип соц.статуса:' + forceString(
                db.translate('vrbSocStatusType', 'id', socStatusTypeId,
                             'name')))
        elif socStatusClassId:
            rows.append(u'Класс соц.статуса:' + forceString(
                db.translate('rbSocStatusClass', 'id', socStatusClassId,
                             'name')))
        if locationCardTypeId:
            rows.append(u'Место нахождение амбулаторной карты: ' + forceString(
                db.translate('rbLocationCardType', 'id', locationCardTypeId,
                             'name')))
        if areaIdEnabled:
            rows.append(u'проживает на территории: ' + (
                getOrgStructureFullName(areaId) if areaId else u'ЛПУ'))
        if areaAddressType != None:
            rows.append(u'адрес ' +
                        (u'проживания', u'регистрации')[areaAddressType])
        if locality:
            rows.append(u'%s жители' %
                        ((u'городские', u'сельские')[locality - 1]))
        if insurerId:
            rows.append(u'СМО: ' + forceString(
                db.translate('Organisation', 'id', insurerId, 'shortName')))
        if onlyClosed:
            rows.append(u'только закрытые')
        if MKBFilter == 1:
            rows.append(u'код МКБ с "%s" по "%s"' % (MKBFrom, MKBTo))
        elif MKBFilter == 2:
            rows.append(u'код МКБ пуст')
        if MKBExFilter == 1:
            rows.append(u'доп.код МКБ с "%s" по "%s"' % (MKBExFrom, MKBExTo))
        elif MKBExFilter == 2:
            rows.append(u'доп.код МКБ пуст')
        if characterClass:
            rows.append(u'характер заболевания:' + [
                u'Любой', u'Острый', u'Хронический', u'Острый или хронический',
                u'Фактор', u'исправь меня'
            ][characterClass if 0 <= characterClass < 5 else -1])
        if stageId:
            rows.append(u'стадия заболевания:' + forceString(
                db.translate('rbDiseaseStage', 'id', stageId, 'name')))
        if onlyFirstTime:
            rows.append(u'зарегистрированные в период впервые')
        if registeredInPeriod:
            rows.append(u'зарегистрированные в период')
        if notNullTraumaType:
            rows.append(u'тип травмы указан')
        if accountAccomp:
            rows.append(u'учитывать сопутствующие')

        if onlyPermanentAttach:
            rows.append(u'имеющие постоянное прикрепление')

        if contractIdList:
            if len(contractIdList) == 1:
                rows.append(u'по договору № ' +
                            getContractName(contractIdList[0]))
            else:
                contractPath = params.get('contractPath', None)
                if contractPath:
                    rows.append(u'По договорам: %s' % contractPath)
                else:
                    rows.append(u'по договорам №№ ' + formatList([
                        getContractName(contractId)
                        for contractId in contractIdList
                    ]))

        if accountIdList:
            if len(accountIdList) == 1:
                rows.append(u'по счёту № ' + getAccountName(accountIdList[0]))
            else:
                rows.append(u'по счетам №№ ' + formatList(
                    [getAccountName(accountId)
                     for accountId in accountIdList]))

        if accountNumbersList:
            rows.append(u'Номера реестров счетов: ' +
                        formatList(accountNumbersList))

        if onlyPayedEvents:
            rows.append(u'только оплаченные обращения')
            if self.payPeriodVisible:
                begPayDate = getVal(params, 'begPayDate', None)
                endPayDate = getVal(params, 'endPayDate', None)
                row = ''
                if begPayDate and not begPayDate.isNull():
                    row = row + u' с ' + forceString(begPayDate)
                if endPayDate and not endPayDate.isNull():
                    row = row + u' по ' + forceString(endPayDate)
                if row:
                    rows.append(u'в период' + row)
        if self.workTypeVisible:
            workType = getVal(params, 'workType', 0)
            if 0 < workType < len(OKVEDList.rows):
                descr = OKVEDList.rows[workType]
                name = descr[0]
                code = descr[2]
            else:
                name = u'Любой'
                code = ''
            row = u'Вид деятельности: ' + name
            if code:
                row = row + u', код по ОКВЭД: ' + code
            rows.append(row)
        if self.ownershipVisible:
            ownership = getVal(params, 'ownership', 0)
            row = u'Собственность: ' + [
                u'Любая', u'Бюджетная', u'Частная', u'Cмешанная'
            ][min(ownership, 3)]
            rows.append(row)
        if busyness == 1:
            rows.append(u'занятость указана')
        elif busyness == 2:
            rows.append(u'занятость не указана')
        if workOrgId:
            rows.append(u'занятость: ' + getOrganisationShortName(workOrgId))
        if actionTypeClass is not None:
            actionTypeClassName = {
                0: u'статус',
                1: u'диагностика',
                2: u'лечение',
                3: u'прочие мероприятия'
            }.get(actionTypeClass, u'')
            rows.append(u'класс мероприятий: ' + actionTypeClassName)
        if actionTypeId:
            actionTypeName = forceString(
                db.translate('ActionType', 'id', actionTypeId, 'name'))
            rows.append(u'мероприятие: ' + actionTypeName)
        if actionTypeCode == 0:
            rows.append(u'мероприятие: Прием')
        elif actionTypeCode == 1:
            rows.append(u'мероприятие: Вызовы')
        if permanentAttach and permanentAttach > 0:
            lpu = forceString(
                db.translate('Organisation', 'id', permanentAttach,
                             'shortName'))
            rows.append(u'прикрепление: ' + lpu)
        if deathPlace:
            rows.append(u'смерть последовала: ' + deathPlace)
        if deathCause:
            rows.append(u'смерть произошла: ' + deathCause)
        if deathFoundBy:
            rows.append(u'причина смерти установлена: ' + deathFoundBy)
        if deathFoundation:
            rows.append(u'основание установления причины смерти: ' +
                        deathFoundation)
        if typeFinanceId != None:
            rows.append(u'тип финансирования: ' + forceString(
                db.translate('rbFinance', 'id', typeFinanceId, 'name')))
        if tariff != None:
            rows.append(
                u'тарификация: ' +
                [u'не учитывать', u'тарифицированные', u'не тарифицированные'
                 ][tariff])
        if visitPayStatus != None:
            rows.append(u'флаг финансирования: ' + [
                u'не задано', u'не выставлено', u'выставлено', u'отказано',
                u'оплачено'
            ][visitPayStatus])
        if groupingRows != None:
            rows.append(
                u'группировка: ' +
                [u'по специальности', u'по должности', u'по отделению'
                 ][groupingRows])
        if rowGrouping != None:
            rows.append(u'группировка: ' + [
                u'по датам', u'по врачам', u'по подразделениям',
                u'по специальности', u'по должности', u'по пациентам'
            ][rowGrouping])
        if advancedRowGrouping != None:
            rows.append(u'группировка: ' + [
                u'по датам', u'по персоналу', u'по подразделениям',
                u'по специальности', u'по должности', u'по врачам',
                u'по мед.сестрам'
            ][advancedRowGrouping])
        if confirmEISDate:
            rows.append(u'дата подтверждения ЕИС: ' +
                        forceString(confirmEISDate))
        if self.additionalDescription:
            rows.append(self.additionalDescription)
        if reportDate:
            rows.append(u'отчёт составлен: ' + forceString(reportDate))
        else:
            rows.append(u'отчёт составлен: ' +
                        forceString(QtCore.QDateTime.currentDateTime()))
        if detailServiceTypes and serviceTypes:
            rows.append(u'Типы услуг: ' + u', '.join(
                map(lambda x: serviceTypeNames[x + 1], serviceTypes)))
        if profileBedId:
            rows.append(u'профиль койки: %s' % (forceString(
                QtGui.qApp.db.translate('rbHospitalBedProfile', 'id',
                                        profileBedId, 'name'))))
        """
        if profileDayStatId:
            #rows.append(u'профиль ДС: %s' % (
                #forceString(QtGui.qApp.db.translate('rbEventProfile', 'id', profileDayStatId, 'name'))))
            rows.append(
                u'Профиль ДС: ' + forceString(
                    [u'Дневной стационар', u'Стационар дневного пребывание'][profileDayStatId]))
        """

        return rows
Ejemplo n.º 19
0
    def build(self, params):
        areaId = params.get('areaId', None)
        endDate = params.get('endDate', QtCore.QDate())
        addressType = params.get('addressType', 0)
        isDetailByDepartment = params.get('detailByDepartment', False)
        isDetailByAge = params.get('detailByAge', False)

        rowNumber = [1]

        employableColBases = {
            19: 10,
            24: 12,
            29: 14,
            34: 16,
            39: 18,
            44: 20,
            49: 22,
            54: 24,
            59: 26,
            64: 28,
            69: 30,
            74: 32,
            79: 34
        }
        #Количество столбцов с данными (за исключением столбцов "Категория населения", "№": 10 на детские возраста, 28 или 4 на взрослые и 1 на поле "Всего")
        reportRowSize = [39 if isDetailByAge else 15]

        def insertDataInTable(reportTable, reportData, charFormat=None):
            for rowIndex, rowName in enumerate(
                [u'ИТОГО', u'работающие', u'неработающие']):
                i = reportTable.addRow()
                reportTable.setText(i, 0, rowName, charFormat=charFormat)
                reportTable.setText(i, 1, rowNumber[0], charFormat=charFormat)
                rowNumber[0] += 1
                for j in xrange(len(reportData[rowIndex])):
                    reportTable.setText(i,
                                        2 + j,
                                        reportData[rowIndex][j],
                                        charFormat=charFormat)

        #end insertDataInTable

        def getData(areaId, endDate, addressType, isDetailByAge=False):
            if areaId:
                areaIdList = getOrgStructureDescendants(areaId)
            else:
                areaIdList = getOrgStructures(QtGui.qApp.currentOrgId())

            query = selectData(endDate, areaIdList, addressType)

            reportData = [[0] * reportRowSize[0] for row in xrange(3)]
            self.setQueryText(forceString(query.lastQuery()))
            while query.next():
                record = query.record()
                cnt = forceInt(record.value('cnt'))
                age = forceInt(record.value('clientAge'))
                sex = forceInt(record.value('clientSex'))
                busy = forceBool(record.value('busy'))
                if age < 1:
                    colBase = 0
                elif age == 1:
                    colBase = 2
                elif age <= 6:
                    colBase = 4
                elif age <= 14:
                    colBase = 6
                elif age <= 17:
                    colBase = 8
                else:
                    if isDetailByAge:
                        minAgeHigh = 150
                        colBase = 36
                        for ageHigh in employableColBases.keys():
                            if age <= ageHigh and ageHigh < minAgeHigh:
                                minAgeHigh = ageHigh
                                colBase = employableColBases[ageHigh]
                    else:
                        if (sex == 1 and age < 60) or (sex != 1 and age < 55):
                            colBase = 10
                        else:
                            colBase = 12
                cols = [colBase + (0 if sex == 1 else 1), reportRowSize[0] - 1]
                rows = [0, 1 if busy else 2]
                if cols[0] < 0 or cols[0] > reportRowSize[0] - 1:
                    print cols[0]
                for row in rows:
                    for col in cols:
                        reportData[row][col] += cnt
            return reportData

        #end getData

        def detailByDepartment(reportTable,
                               areaId,
                               endDate,
                               addressType,
                               isDetailByAge,
                               progressDialog=None):
            subAreaIdList = []
            db = QtGui.qApp.db
            tableOrgStructure = db.table('OrgStructure')
            whereCond = []
            if areaId:  #Если указан отдельный участок или группа участков
                whereCond.append(tableOrgStructure['parent_id'].eq(areaId))
            else:  #Если в качестве участка указан весь ЛПУ
                whereCond.append(tableOrgStructure['parent_id'].isNull())
                whereCond.append(tableOrgStructure['organisation_id'].eq(
                    QtGui.qApp.currentOrgId()))

            subAreaIdList = db.getIdList(table=tableOrgStructure,
                                         where=whereCond)
            if subAreaIdList:
                for subAreaId in subAreaIdList:
                    row = reportTable.addRow()
                    reportTable.mergeCells(row, 0, 1, reportRowSize[0] + 3)
                    charFormat = QtGui.QTextCharFormat()
                    charFormat.setFontWeight(QtGui.QFont.Bold)
                    subAreaName = getOrgStructureFullName(subAreaId)
                    reportTable.setText(row,
                                        0,
                                        subAreaName,
                                        charFormat=charFormat,
                                        blockFormat=CReportBase.AlignLeft)
                    if progressDialog:
                        progressDialog.setWindowTitle(u'Обработка %s' %
                                                      subAreaName)
                        progressDialog.step()
                        QtGui.qApp.processEvents(
                            QtCore.QEventLoop.ExcludeUserInputEvents)
                    detailByDepartment(reportTable, subAreaId, endDate,
                                       addressType, isDetailByAge,
                                       progressDialog)
            else:
                insertDataInTable(
                    reportTable,
                    getData(areaId, endDate, addressType, isDetailByAge))

        #end detailByDepartment

        # now text
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('15?', [u'Категории населения', u''], CReportBase.AlignLeft),
            ('5?', [u'№ стр.', u''], CReportBase.AlignRight),
            ('5?', [
                u'Численность прикреплённого населения по возрастному составу',
                u'дети', u'', u'до 1 года', u'М'
            ], CReportBase.AlignRight),
            ('5?', [u'', u'', u'', u'', u'Ж'], CReportBase.AlignRight),
            ('5?', [u'', u'', u'', u'1 год', u'М'], CReportBase.AlignRight),
            ('5?', [u'', u'', u'', u'', u'Ж'], CReportBase.AlignRight),
            ('5?', [u'', u'', u'', u'2-6 лет', u'М'], CReportBase.AlignRight),
            ('5?', [u'', u'', u'', u'', u'Ж'], CReportBase.AlignRight),
            ('5?', [u'', u'', u'', u'7-14 лет', u'М'], CReportBase.AlignRight),
            ('5?', [u'', u'', u'', u'', u'Ж'], CReportBase.AlignRight),
            ('5?', [u'', u'', u'', u'15-17 лет',
                    u'М'], CReportBase.AlignRight),
            ('5?', [u'', u'', u'', u'', u'Ж'], CReportBase.AlignRight)
        ]
        if isDetailByAge:
            ageHighKeys = employableColBases.keys()
            ageHighKeys.sort()
            for ageHigh in ageHighKeys:
                index = ageHighKeys.index(ageHigh)
                if index <= 0:
                    startAge = '18'
                else:
                    startAge = '%d' % (ageHighKeys[index - 1] + 1)
                ageRangeText = u'%s - %d лет' % (startAge, ageHigh)
                ageState = u'взрослые' if ageHigh == 19 else u''
                employableState = u'трудосп. возраста' if ageHigh == 59 else u''
                tableColumns.append(
                    ('5?',
                     [u'', ageState, employableState, ageRangeText,
                      u'М'], CReportBase.AlignRight))
                employableState = u'нетрудосп. возраста' if ageHigh == 59 else u''
                tableColumns.append(
                    ('5?', [u'', u'', employableState, u'',
                            u'Ж'], CReportBase.AlignRight))
            tableColumns.append(('5?', [u'', u'', u'', u'80 и ст.',
                                        u'М'], CReportBase.AlignRight))
            tableColumns.append(('5?', [u'', u'', u'', u'',
                                        u'Ж'], CReportBase.AlignRight))
        else:
            tableColumns.append(
                ('5?',
                 [u'', u'взрослые', u'трудосп. возраста', u'18-59 лет',
                  u'М'], CReportBase.AlignRight))
            tableColumns.append(('5?', [u'', u'', u'', u'18-54 лет',
                                        u'Ж'], CReportBase.AlignRight))
            tableColumns.append(
                ('5?', [u'', u'', u'нетрудосп. возраста', u'60 и ст.',
                        u'М'], CReportBase.AlignRight))
            tableColumns.append(('5?', [u'', u'', u'', u'55 и ст.',
                                        u'Ж'], CReportBase.AlignRight))

        tableColumns.append(('5?', [
            u'Всего',
        ], CReportBase.AlignRight))

        table = createTable(cursor, tableColumns)
        table.mergeCells(0, 0, 4, 1)  # Категории населения
        table.mergeCells(0, 1, 4, 1)  # № стр.
        table.mergeCells(0, 2, 1, reportRowSize[0] - 1)  # Численность...
        table.mergeCells(1, 2, 2, 10)  # дети
        table.mergeCells(3, 2, 1, 2)  # <1
        table.mergeCells(3, 4, 1, 2)  # 1
        table.mergeCells(3, 6, 1, 2)  # 2-6
        table.mergeCells(3, 8, 1, 2)  # 7-14
        table.mergeCells(3, 10, 1, 2)  # 15-17
        if isDetailByAge:
            for i in xrange(27):
                table.mergeCells(3, 12 + i * 2, 1, 2)
                table.mergeCells(3, 12 + i * 2 + 1, 1, 2)
            table.mergeCells(1, 12, 1, 28)  # взрослые
            table.mergeCells(2, 12, 1, 17)  # тр.
            table.mergeCells(2, 29, 1, 11)  # нетр.
            table.mergeCells(0, 40, 4, 1)  # всего
        else:
            table.mergeCells(1, 12, 1, 4)  # взрослые
            table.mergeCells(2, 12, 1, 2)  # тр.
            table.mergeCells(2, 14, 1, 2)  # нетр.
            table.mergeCells(0, 16, 4, 1)  # всего

        reportData = getData(areaId, endDate, addressType, isDetailByAge)

        charFormat = None
        if isDetailByDepartment:
            if areaId:
                areaIdList = getOrgStructureDescendants(areaId)
            else:
                areaIdList = getOrgStructures(QtGui.qApp.currentOrgId())
            progressBar = CProgressBar(
            )  #QtGui.QProgressDialog(u'Обработка данных по участкам', 'Отмена', 0, len(areaIdList))
            progressBar.setMinimum(0)
            progressBar.setMaximum(len(areaIdList))
            parentCenter = QtGui.QDesktopWidget().availableGeometry().center()
            progressBar.setWindowFlags(progressBar.windowFlags()
                                       | QtCore.Qt.WindowCloseButtonHint)
            progressBar.setGeometry(parentCenter.x() - 250,
                                    parentCenter.y() - 40, 500, 80)
            progressBar.setText('%v/%m')
            progressBar.show()
            QtGui.qApp.processEvents(QtCore.QEventLoop.ExcludeUserInputEvents)

            detailByDepartment(table, areaId, endDate, addressType,
                               isDetailByAge, progressBar)
            progressBar.hide()
            charFormat = QtGui.QTextCharFormat()
            charFormat.setFontWeight(QtGui.QFont.Bold)
            row = table.addRow()
            table.mergeCells(row, 0, 1, reportRowSize[0] + 3)
            table.setText(row,
                          0,
                          getOrgStructureFullName(areaId),
                          charFormat=charFormat,
                          blockFormat=CReportBase.AlignLeft)
        insertDataInTable(table, reportData, charFormat=charFormat)

        return doc
    def makeStruct(self, query):
        #        print query.size()
        while query.next():
            record = query.record()

            clientId = forceRef(record.value('clientId'))
            fio = formatName(record.value('lastName'),
                             record.value('firstName'),
                             record.value('patrName'))
            eventId = forceRef(record.value('eventId'))
            clientAddress = forceString(record.value('clientAddress'))
            KLADRCode = forceString(record.value('KLADRCode'))
            mkb = forceString(record.value('MKB'))
            financeType = forceString(record.value('financeType'))
            orgStructureId = forceRef(record.value('orgStructureId'))
            medicalHistory = forceString(record.value('medicalHistory'))
            ambCard = forceString(record.value('ambCard'))
            medicalAidTypeCode = forceString(
                record.value('medicalAidTypeCode'))
            eventSetDate = forceDate(record.value('eventSetDate'))
            eventExecDate = forceDate(record.value('eventExecDate'))
            quotaTypeCode = forceString(record.value('quotaTypeCode'))
            needDateForReport = forceString(record.value('needDateForReport'))

            if eventExecDate.isValid():
                if eventExecDate > QtCore.QDate.currentDate():
                    topDate = QtCore.QDate.currentDate()
                else:
                    topDate = eventExecDate
            else:
                topDate = QtCore.QDate.currentDate()

            dCount = eventSetDate.daysTo(topDate)
            if medicalAidTypeCode in ['1', '2', '3']:
                if dCount == 0:
                    dCount = 1
            else:
                dCount += 1

            if (clientId, eventId) in self._existEventClients:
                continue
            self._existEventClients.append((clientId, eventId))
            fullOrgStructureName = self._orgStructureIdToFullName.get(
                orgStructureId, None)
            if not fullOrgStructureName:
                if not orgStructureId:
                    fullOrgStructureName = u'Подразделение не определено'
                else:
                    fullOrgStructureName = getOrgStructureFullName(
                        orgStructureId)
                self._orgStructureIdToFullName[
                    orgStructureId] = fullOrgStructureName
            key = (orgStructureId, fullOrgStructureName)
            orgStructureValueList = self._mapOrgStructureToClientValues.setdefault(
                key, [])
            orgStructureValue = [
                clientId, ambCard, fio, medicalHistory,
                KLADRCode + ', ' + clientAddress, mkb, quotaTypeCode,
                financeType, needDateForReport, dCount
            ]
            orgStructureValueList.append(orgStructureValue)
Ejemplo n.º 21
0
    def build(self, params):
        begDate             = getVal(params, 'begDate', QtCore.QDate())
        endDate             = getVal(params, 'endDate', QtCore.QDate())
        eventTypeId         = getVal(params, 'eventTypeId', None)
        sex                 = params.get('sex', 0)
        ageFrom             = params.get('ageFrom', 0)
        ageTo               = params.get('ageTo', 150)
        actionTypeClass     = params.get('actionTypeClass', None)
        actionTypeId        = params.get('actionTypeId', None)
        onlyPermanentAttach = params.get('onlyPermanentAttach', None)
        MKBFilter           = params.get('MKBFilter', 0)
        MKBFrom             = params.get('MKBFrom', '')
        MKBTo               = params.get('MKBTo', '')
        onlyPayedEvents     = params.get('onlyPayedEvents', False)
        begPayDate          = params.get('begPayDate', QtCore.QDate())
        endPayDate          = params.get('endPayDate', QtCore.QDate())
        detailPerson        = params.get('detailPerson', False)
        personId            = params.get('personId', None)
        specialityId        = params.get('specialityId', None)
        orgStructureId      = params.get('orgStructureId', None)
        insurerId           = params.get('insurerId', None)
        condFinanceId       = params.get('financeId', None)
        condFinanceCode     = params.get('financeCode', '0')

        query = selectData(begDate, endDate, eventTypeId, sex, ageFrom, ageTo, actionTypeClass, actionTypeId, onlyPermanentAttach, MKBFilter, MKBFrom, MKBTo, onlyPayedEvents, begPayDate, endPayDate, detailPerson, personId, specialityId, orgStructureId, insurerId)

        reportData = {}
        mapOrgStructureToFullName = {}
        origActionIdList = []
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            actionId               = forceRef(record.value('actionId'))
            if actionId in origActionIdList:
                continue
            origActionIdList.append(actionId)
            orgStructureId         = forceString(record.value('orgStructureId'))
            financeId              = forceRef(record.value('finance_id'))
            actionPayStatus        = forceInt(record.value('actionPayStatus'))
            eventPayStatus         = forceInt(record.value('eventPayStatus'))
            actionTypeCode         = forceString(record.value('actionTypeCode'))
            actionTypeName         = forceString(record.value('actionTypeName'))
            serviceCode            = forceString(record.value('serviceCode'))
            amount                 = forceInt(record.value('actionAmount'))
            uetDoctor              = forceDouble(record.value('uetDoctor'))
            uetAverageMedWorker    = forceDouble(record.value('uetAverageMedWorker'))
            personName             = formatName(record.value('personLastName'),
                                                record.value('personFirstName'),
                                                record.value('personPatrName'))
            specialityName         = forceString(record.value('specialityName'))

            if condFinanceId:
                if financeId:
                    if condFinanceId != financeId:
                        continue
                else:
                    payStatus = actionPayStatus if actionPayStatus else eventPayStatus
                    if not payStatusCheck(payStatus, forceInt(condFinanceCode)):
                        continue

            if specialityName:
                personName = personName + ' | ' + specialityName

            orgStructureName = mapOrgStructureToFullName.get(orgStructureId, None)
            if not orgStructureName:
                orgStructureName = getOrgStructureFullName(orgStructureId)
                mapOrgStructureToFullName[orgStructureId] = orgStructureName

            if not orgStructureName:
                continue

            existsData = reportData.get(orgStructureName, None)

            if detailPerson:
                if not existsData:
                    existsData = {}
                    personData = {}
                    actionAmount = 1
                    personData[(actionTypeName, actionTypeCode, serviceCode)] =  [actionAmount, amount, amount*uetDoctor, uetAverageMedWorker*amount]
                    existsData[personName] = personData
                    reportData[orgStructureName] = existsData
                else:
                    personData = existsData.get(personName, None)
                    if not personData:
                        personData = {}
                        actionAmount = 1
                        personData[(actionTypeName, actionTypeCode, serviceCode)] =  [actionAmount, amount, amount*uetDoctor, uetAverageMedWorker*amount]
                        existsData[personName] = personData
                    else:
                        existsValue = personData.get((actionTypeName, actionTypeCode, serviceCode), None)
                        if not existsValue:
                            actionAmount = 1
                            personData[(actionTypeName, actionTypeCode, serviceCode)] =  [actionAmount, amount, amount*uetDoctor, uetAverageMedWorker*amount]
                            existsData[personName] = personData
                        else:
                            existsValue[0] += 1
                            existsValue[1] += amount
                            existsValue[2] += uetDoctor*amount
                            existsValue[3] += uetAverageMedWorker*amount
                            personData[(actionTypeName, actionTypeCode, serviceCode)] = existsValue
                            existsData[personName] = personData
                    reportData[orgStructureName] = existsData
            else:
                if not existsData:
                    existsData = {}
                    actionAmount = 1
                    existsData[(actionTypeName, actionTypeCode, serviceCode)] =  [actionAmount, amount, amount*uetDoctor, uetAverageMedWorker*amount]
                    reportData[orgStructureName] = existsData
                else:
                    existsValue = existsData.get((actionTypeName, actionTypeCode, serviceCode), None)
                    if not existsValue:
                        actionAmount = 1
                        existsData[(actionTypeName, actionTypeCode, serviceCode)] = [actionAmount, amount, amount*uetDoctor, amount*uetAverageMedWorker]
                    else:
                        existsValue[0] += 1
                        existsValue[1] += amount
                        existsValue[2] += uetDoctor*amount
                        existsValue[3] += uetAverageMedWorker*amount
                        existsData[(actionTypeName, actionTypeCode, serviceCode)] = existsValue
                    reportData[orgStructureName] = existsData

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

        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ( '6%', [u'№ п/п'], CReportBase.AlignRight),
            ( '25%', [u'Наименование типа действия'], CReportBase.AlignLeft),
            ( '13%', [u'Код типа действия'], CReportBase.AlignLeft),
            ( '13%', [u'Код профиля'], CReportBase.AlignLeft),
            ( '10%', [u'Количество действий'], CReportBase.AlignRight),
            ( '10%', [u'Количество'], CReportBase.AlignRight),
            ( '10%', [u'УЕТ врача'], CReportBase.AlignRight),
            ( '13%', [u'УЕТ ср.мед.персонала'], CReportBase.AlignRight)
        ]

        table = createTable(cursor, tableColumns)

        headerCount = 0
        headerList  = []


        if detailPerson:
            orgStructureList = reportData.keys()
            orgStructureList.sort()
            resume = [0, 0, 0, 0]
            for orgStructure in orgStructureList:
                orgStructureResult = [0, 0, 0, 0]
                i = table.addRow()
                currentOrgStructureRow = i
                table.setText(i, 1, orgStructure)
                headerList.append(i)
                headerCount += 1
                persons = reportData.get(orgStructure, {})
                personsKeys = persons.keys()
                personsKeys.sort()
                for personKey in personsKeys:
                    personResult = [0, 0, 0, 0]
                    i = table.addRow()
                    currentPersonRow = i
                    table.setText(i, 1, personKey)
                    headerList.append(i)
                    headerCount += 1
                    existsData = persons.get(personKey, {})
                    existsDataKeys = existsData.keys()
                    existsDataKeys.sort()
                    for existsDataKey in existsDataKeys:
                        i = table.addRow()
                        table.setText(i, 0, i-headerCount)
                        column = 1
                        for key in existsDataKey:
                            table.setText(i, column, key)
                            column += 1
                        values = existsData.get(existsDataKey)
                        for value in values:
                            orgStructureResult[column-4] += value
                            personResult[column-4] += value
                            resume[column-4] += value
                            table.setText(i, column, value)
                            column += 1
                    for column, val in enumerate(personResult):
                        table.setText(currentPersonRow, column+4, val)
                for column, val in enumerate(orgStructureResult):
                    table.setText(currentOrgStructureRow, column+4, val)
            for headerRow in headerList:
                table.mergeCells(headerRow, 0, 1, 3)
        else:
            orgStructureList = reportData.keys()
            orgStructureList.sort()
            resume = [0, 0, 0, 0]
            for orgStructure in orgStructureList:
                orgStructureResult = [0, 0, 0, 0]
                i = table.addRow()
                currentOrgStructureRow = i
                table.setText(i, 1, orgStructure)
                headerList.append(i)
                headerCount += 1
                existsData = reportData.get(orgStructure, {})
                existsDataKeys = existsData.keys()
                existsDataKeys.sort()
                for existsDataKey in existsDataKeys:
                    i = table.addRow()
                    table.setText(i, 0, i-headerCount)
                    column = 1
                    for key in existsDataKey:
                        table.setText(i, column, key)
                        column += 1
                    values = existsData.get(existsDataKey)
                    for value in values:
                        orgStructureResult[column-4] += value
                        resume[column-4] += value
                        table.setText(i, column, value)
                        column += 1
                for column, val in enumerate(orgStructureResult):
                    table.setText(currentOrgStructureRow, column+4, val)
            for headerRow in headerList:
                table.mergeCells(headerRow, 0, 1, 3)
        i = table.addRow()
        table.setText(i, 1, u'Итого')
        for column, val in enumerate(resume):
            table.setText(i, column+4, val)
        return doc
Ejemplo n.º 22
0
    def makeStructAction(self, query, params):
        # chkAllOrgStructure:: если True - при структурировании по подразделениям к которым относится действие,
        # действие может относится ко многим подразделениям, а если False мы учитываем только первое.
        chkAllOrgStructure = params.get('chkAllOrgStructure', False)
        chkPatientInfo = params.get('chkPatientInfo', False)
        chkOrgStructure = params.get('chkOrgStructure', False)
        chkPerson = params.get('chkPerson', False)
        detailServiceTypes = params.get('detailServiceTypes', False)
        strongOrgStructureId = params.get('orgStructureId', None)
        enterPost = params.get('enterPost', False)
        existsOrgStructureActions = []
        while query.next():
            record = query.record()

            modifyDatetime = forceDate(record.value('modifyDatetime'))
            endDate = forceDate(record.value('endDate'))
            actionId = forceRef(record.value('id'))
            actionTypeCode = forceString(record.value('code'))
            actionTypeName = forceString(record.value('name'))
            amount = forceInt(record.value('amount'))
            orgStructureId = forceRef(record.value('orgStructureId'))
            #            orgStructureName = forceString(record.value('orgStructureName'))
            price = forceDouble(record.value('price'))

            if chkAllOrgStructure:
                if (orgStructureId, actionId) in existsOrgStructureActions:
                    continue
                existsOrgStructureActions.append((orgStructureId, actionId))
            else:
                if actionId in existsOrgStructureActions:
                    continue
                existsOrgStructureActions.append(actionId)

            result, orgStructureId = self.orgStructureFilterByParams(
                chkOrgStructure, strongOrgStructureId, orgStructureId)
            if not result:
                continue

            fullOrgStructureName = self._mapOrgStructureIdToFullName.get(
                orgStructureId, None)
            if not fullOrgStructureName:
                if not orgStructureId:
                    if chkOrgStructure:
                        fullOrgStructureName = u'Головное подразделение'
                    else:
                        fullOrgStructureName = u'Подразделение не определено'
                else:
                    fullOrgStructureName = getOrgStructureFullName(
                        orgStructureId)
                self._mapOrgStructureIdToFullName[
                    orgStructureId] = fullOrgStructureName

            actionValues = smartDict()
            actionValues.actionId = actionId
            actionValues.orgStructureId = orgStructureId
            actionValues.number = 0
            values = [actionTypeCode, actionTypeName, amount, price * amount]

            if chkPatientInfo:
                clientName = formatName(record.value('lastName'),
                                        record.value('firstName'),
                                        record.value('patrName'))
                clientId = forceRef(record.value('clientId'))
                actionMKB = forceString(record.value('actionMKB'))
                endDate = endDate if endDate.isValid() else modifyDatetime

                values.insert(2, actionMKB)
                values.insert(2, clientName)
                values.insert(0, forceString(endDate))

            if chkPerson:
                personName = forceString(record.value('personName'))
                personId = forceString(record.value('personId'))
                self._mapPersonIdToName[personId] = personName
                if enterPost:
                    personPost = forceString(record.value('personPost'))
                    self._mapPersonIdToName[personId] = {}
                    self._mapPersonIdToName[personId]['name'] = personName
                    self._mapPersonIdToName[personId]['post'] = personPost

            if detailServiceTypes:
                serviceType = forceInt(record.value('serviceType'))

            actionValues.values = values

            orgStructureDict = self._mapRowValues.setdefault(
                orgStructureId, {})
            personDict = orgStructureDict.setdefault(
                personId if chkPerson else None, {})
            serviceTypeDict = personDict.setdefault(
                serviceType if detailServiceTypes else None, {})
            clientDict = serviceTypeDict.setdefault(
                clientId if chkPatientInfo else None, {})
            existActionValues = clientDict.setdefault(
                (actionTypeCode, actionTypeName), actionValues)

            if existActionValues != actionValues:
                existActionValues.values[-2] += actionValues.values[-2]
                existActionValues.values[-1] += actionValues.values[-1]

        # set numbers within each orgStructure unit
        self.fillOrgStructureRows()
Ejemplo n.º 23
0
    def build(self, params):
        doc = QtGui.QTextDocument()

        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(
            u'Проверка результатов лечения и обращения в событии')
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('3%', [u'№ п/п'], CReportBase.AlignLeft),
            ('5%', [u'Код пациента'], CReportBase.AlignLeft),
            ('20%', [u'ФИО пациента'], CReportBase.AlignLeft),
            ('10%', [u'Дата рождения'], CReportBase.AlignLeft),
            ('10%', [u'Период лечения'], CReportBase.AlignLeft),
            ('20%', [u'Врач'], CReportBase.AlignLeft),
            ('10%', [u'Подразделение'], CReportBase.AlignLeft),
            ('10%', [u'Контроль'], CReportBase.AlignLeft),
        ]
        table = createTable(cursor, tableColumns)

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

        # ep - eventProfileCode, r - resultCode, dr - diagnosticResultCode
        checks = [
            (u'Результат лечения не соответствует условию оказания мед помощи',
             lambda ep, r, dr: ep in ['11', '12', '301', '302', '401', '402']
             and dr not in [str(x) for x in range(101, 106)] or ep in [
                 '41', '42', '43', '51', '52', '71', '72', '90'
             ] and dr not in [str(x) for x in range(201, 206)] or ep in [
                 '01', '02', '21', '22', '31', '32', '60', '111', '112', '201',
                 '202', '211', '232', '241', '242', '252', '261', '262'
             ] and dr not in [str(x) for x in range(301, 308)] or ep in
             ['801', '802'] and dr not in [str(x) for x in range(401, 405)]),
            (u'Результат обращения не соответствует условию оказания мед помощи',
             lambda ep, r, dr: ep in ['11', '12', '301', '302', '401', '402']
             and r not in [str(x) for x in range(101, 111)] or ep in [
                 '41', '42', '43', '51', '52', '71', '72', '90'
             ] and r not in [str(x) for x in range(201, 209)] or ep in [
                 '01', '02', '21', '22', '31', '32', '60', '111', '112', '201',
                 '202', '211', '232', '241', '242', '252', '261', '262'
             ] and r not in [str(x) for x in range(301, 317)] or ep in
             ['801', '802'] and dr not in [str(x) for x in range(401, 417)]),
            (u'Результат лечения не применяется для диспансеризации',
             lambda ep, r, dr: ep in ['211', '232', '252', '261', '262'
                                      ] and dr not in ['304', '306']),
            (u'Результат обращения не применяется для диспансеризации взрослого населения',
             lambda ep, r, dr: ep in ['211', '261'] and r not in
             ['317', '318', '355', '356']),
            (u'Результат обращения не применяется для диспансеризации детского населения',
             lambda ep, r, dr: ep in ['232', '252', '262'] and r not in
             ['317', '318', '319', '320', '321'])
        ]

        while query.next():
            record = query.record()
            eventProfileCode = forceString(record.value('eventProfileCode'))
            resultCode = forceString(record.value('resultCode'))
            diagnosticResultCode = forceString(
                record.value('diagnosticResultCode'))
            if any([
                    check[1](eventProfileCode, resultCode,
                             diagnosticResultCode) for check in checks
            ]):
                i = table.addRow()
                table.setText(i, 0, i)
                table.setText(i, 1, forceString(record.value('clientId')))
                table.setText(i, 2, forceString(record.value('clientName')))
                table.setText(i, 3, forceString(record.value('birthDate')))
                table.setText(
                    i, 4,
                    forceDate(record.value('setDate')).toString('dd.MM.yyyy') +
                    '-' +
                    forceDate(record.value('execDate')).toString('dd.MM.yyyy'))
                table.setText(i, 5, forceString(record.value('person')))
                table.setText(
                    i, 6,
                    getOrgStructureFullName(
                        forceInt(record.value('orgStructure_id'))))
                table.setText(
                    i, 7, u'\n'.join([
                        check[0] for check in checks if check[1](
                            eventProfileCode, resultCode, diagnosticResultCode)
                    ]))

        return doc
Ejemplo n.º 24
0
    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
Ejemplo n.º 25
0
    def build(self, params):
        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        eventTypeId = params.get('eventTypeId', None)
        onlyPermanentAttach =  params.get('onlyPermanentAttach', False)
        onlyPayedEvents = params.get('onlyPayedEvents', False)
        begPayDate = params.get('begPayDate', QtCore.QDate())
        endPayDate = params.get('endPayDate', QtCore.QDate())
        diagnosisType = params.get('diagnosisType', False)
        orgStructureAttachTypeId = params.get('orgStructureAttachTypeId', None)

        db = QtGui.qApp.db
        mapRows = createMapCodeToRowIdx( [row[2] for row in Rows] )
        reportRowSize = 4
        reportData = [ [0] * reportRowSize for row in Rows ]
        query = selectDiagnostics(begDate, endDate, eventTypeId, onlyPermanentAttach, onlyPayedEvents, begPayDate, endPayDate, diagnosisType, orgStructureAttachTypeId)
        self.setQueryText(forceString(query.lastQuery()))
        eventClosed = 0
        eventClosedTeenager = 0
        eventClosedPayed = 0
        eventClosedPayedTeenager = 0
        eventIdList = []
        while query.next():
            record = query.record()
            eventId = forceRef(record.value('eventId'))
            clientId = forceRef(record.value('client_id'))
            isPrimary = forceInt(record.value('isPrimary'))
            MKBRec = normalizeMKB(forceString(record.value('MKB')))
            ageTeenager = forceInt(record.value('ageTeenager'))
            sex = forceInt(record.value('sex'))
            payedEvent = forceInt(record.value('payedEvent'))
            eventClosedPayedRec = forceInt(record.value('eventClosedPayed'))
            for row in mapRows.get(MKBRec, []):
                reportLine = reportData[row]
                reportLine[0] += 1
                if sex == 1:
                    reportLine[1] += 1
                    if isPrimary:
                        reportLine[3] += 1
                reportLine[2] += isPrimary
            if eventId and eventId not in eventIdList:
                eventIdList.append(eventId)
                eventClosed += 1
                eventClosedTeenager += ageTeenager
                if eventClosedPayedRec:
                    eventClosedPayed += 1
                    eventClosedPayedTeenager += ageTeenager

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertText(u'подразделение: ' + getOrgStructureFullName(orgStructureAttachTypeId))
        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertText(u'''1. Число детей подлежащих диспансеризации: %s (человек), из них:
                                                        14-ти летних: %s (человек),'''%(str(eventClosed), str(eventClosedTeenager)))
        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertText(u'''2. Число детей прошедших диспансеризацию: %s (человек), из них:
                                                       14-ти летних: %s (человек)'''%(str(eventClosedPayed), str(eventClosedPayedTeenager)))
        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertText(u'''3. Структура выявленной патологии у подростков:''')
        cursor.insertBlock()
        tableColumns = [
            ('18%', [u'Наименование заболевания (по классам и отдельным нозологиям)', u'1'], CReportBase.AlignLeft),
            ('2%',  [u'№ строки', u'2'], CReportBase.AlignCenter),
            ('16%', [u'Код по МКБ-10', u'3'], CReportBase.AlignCenter),
            ('16%', [u'Всего зарегистрировано заболеваний', u'4'], CReportBase.AlignRight),
            ('16%', [u'в том числе у юношей (из графы 4)', u'5'], CReportBase.AlignRight),
            ('16%', [u'Из числа зарегистрированных заболеваний выявлено впервые (из графы 4)', u'6'], CReportBase.AlignRight),
            ('16%', [u'в том числе у юношей (из графы 6)', u'7'], CReportBase.AlignRight)
            ]
        table = createTable(cursor, tableColumns)
        for iRow, row in enumerate(Rows):
            i = table.addRow()
            for j in xrange(3):
                table.setText(i, j, row[j])
            for j in xrange(reportRowSize):
                table.setText(i, 3+j, reportData[iRow][j])
        return doc
Ejemplo n.º 26
0
    def build(self, params):
        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        eventTypeId = params.get('eventTypeId', None)
        onlyPermanentAttach = params.get('onlyPermanentAttach', False)
        onlyPayedEvents = params.get('onlyPayedEvents', False)
        begPayDate = params.get('begPayDate', QtCore.QDate())
        endPayDate = params.get('endPayDate', QtCore.QDate())
        orgStructureAttachTypeId = params.get('orgStructureAttachTypeId', None)

        reportRowSize = 6
        reportData = [0] * reportRowSize
        reportRowSize2 = 6
        reportData2 = [0] * reportRowSize2
        reportRowSize3 = 5
        reportData3 = [0] * reportRowSize3

        query = selectDiagnostics(begDate, endDate, eventTypeId,
                                  onlyPermanentAttach, onlyPayedEvents,
                                  begPayDate, endPayDate,
                                  orgStructureAttachTypeId)
        self.setQueryText(forceString(query.lastQuery()))
        eventClosed = 0
        eventClosedPayed = 0
        eventIdList = []
        clientIdList = []
        specialityIdCount = {}
        actionTypeIdCount = {}
        while query.next():
            record = query.record()
            isSanatorium = forceInt(record.value('isSanatorium'))
            isHospital = forceInt(record.value('isHospital'))
            eventId = forceRef(record.value('eventId'))
            clientId = forceRef(record.value('client_id'))
            isPrimary = forceInt(record.value('isPrimary'))
            isDiagnosisType = forceInt(record.value('isDiagnosisType'))
            isHealthGroup = forceString(record.value('isHealthGroup'))
            payedEvent = forceInt(record.value('payedEvent'))
            eventClosedPayedRec = forceInt(record.value('eventClosedPayed'))
            if eventId and eventId not in eventIdList:
                eventIdList.append(eventId)
                if isHealthGroup:
                    if isHealthGroup == '3':
                        reportData[0] += 1
                        if eventClosedPayedRec:
                            reportData[1] += 1
                        #reportData[2] += 1
                        #reportData[3] += 1
                        #reportData[4] += 1
                        #reportData[5] += 1
                    if isHealthGroup == '3' or isHealthGroup == '4' or isHealthGroup == '5':
                        reportData2[0] += 1
                    if isHealthGroup == '3':
                        reportData2[1] += 1
                        if isHospital:
                            reportData2[2] += 1
                    if isHealthGroup == '4':
                        reportData2[3] += 1
                    if isHealthGroup == '5':
                        reportData2[4] += 1
                    if isSanatorium and isHealthGroup:
                        reportData2[5] += 1
                if isDiagnosisType:
                    reportData3[0] += 1
                    if isPrimary:
                        reportData3[1] += 1
                if isHealthGroup and clientId and clientId not in clientIdList:
                    clientIdList.append(clientId)
                    if isHealthGroup == '1':
                        reportData3[2] += 1
                    if isHealthGroup == '2':
                        reportData3[3] += 1
                    if isHealthGroup == '3' or isHealthGroup == '4' or isHealthGroup == '5':
                        reportData3[4] += 1
                eventClosed += 1
                if eventClosedPayedRec:
                    eventClosedPayed += 1

        if eventIdList:
            db = QtGui.qApp.db
            tableETA = db.table('EventType_Action')
            tableETD = db.table('EventType_Diagnostic')
            tableActionType = db.table('ActionType')
            tableRBSpeciality = db.table('rbSpeciality')
            tableAction = db.table('Action')
            tableVisit = db.table('Visit')
            tablePerson = db.table('Person')

            recordsETA = db.getRecordList(
                tableETA.innerJoin(
                    tableActionType,
                    tableActionType['id'].eq(tableETA['actionType_id'])),
                [tableActionType['id'], tableActionType['name']], [
                    tableETA['eventType_id'].eq(eventTypeId),
                    tableActionType['deleted'].eq(0)
                ])
            actionTypeIdList = []
            specialityIdList = []
            actionIdList = []
            visitIdList = []
            for record in recordsETA:
                name = forceString(record.value('name'))
                actionTypeId = forceRef(record.value('id'))
                if actionTypeId and actionTypeId not in actionTypeIdCount.keys(
                ):
                    actionTypeIdCount[actionTypeId] = (name, 0)
                if actionTypeId and actionTypeId not in actionTypeIdList:
                    actionTypeIdList.append(actionTypeId)
            if actionTypeIdList and actionTypeIdCount:
                recordActions = db.getRecordListGroupBy(
                    tableAction,
                    [tableAction['id'], tableAction['actionType_id']], [
                        tableAction['actionType_id'].inlist(actionTypeIdList),
                        tableAction['event_id'].inlist(eventIdList),
                        tableAction['deleted'].eq(0)
                    ], 'Action.id')
                for record in recordActions:
                    actionId = forceRef(record.value('id'))
                    if actionId and actionId not in actionIdList:
                        actionIdList.append(actionId)
                        actionTypeId = forceRef(record.value('actionType_id'))
                        result = actionTypeIdCount.get(actionTypeId, ())
                        if result:
                            nameAction = result[0]
                            actionTypeCount = result[1]
                            actionTypeCount += 1
                            actionTypeIdCount[actionTypeId] = (nameAction,
                                                               actionTypeCount)
            recordsETD = db.getRecordList(
                tableETD.innerJoin(
                    tableRBSpeciality,
                    tableRBSpeciality['id'].eq(tableETD['speciality_id'])),
                [tableETD['speciality_id'], tableRBSpeciality['name']],
                [tableETD['eventType_id'].eq(eventTypeId)])
            for record in recordsETD:
                name = forceString(record.value('name'))
                specialityId = forceRef(record.value('speciality_id'))
                if specialityId and specialityId not in specialityIdCount.keys(
                ):
                    specialityIdCount[specialityId] = (name, 0)
                if specialityId and specialityId not in specialityIdList:
                    specialityIdList.append(specialityId)
            if specialityIdList and specialityIdCount:
                recordVisits = db.getRecordListGroupBy(
                    tableVisit.innerJoin(
                        tablePerson,
                        tablePerson['id'].eq(tableVisit['person_id'])),
                    [tableVisit['id'], tablePerson['speciality_id']], [
                        tablePerson['speciality_id'].inlist(specialityIdList),
                        tableVisit['event_id'].inlist(eventIdList),
                        tableVisit['deleted'].eq(0),
                        tablePerson['deleted'].eq(0)
                    ], 'Visit.id')
                for record in recordVisits:
                    visitId = forceRef(record.value('id'))
                    if visitId and visitId not in visitIdList:
                        visitIdList.append(visitId)
                        specialityId = forceRef(record.value('speciality_id'))
                        result = specialityIdCount.get(specialityId, ())
                        if result:
                            visitAction = result[0]
                            visitIdCount = result[1]
                            visitIdCount += 1
                            specialityIdCount[specialityId] = (visitAction,
                                                               visitIdCount)

        # now text
        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertText(u'подразделение: ' +
                          getOrgStructureFullName(orgStructureAttachTypeId))
        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertText(
            u'''1. Число детей подлежащих диспансеризации: %s (человек),''' %
            (str(eventClosed)))
        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertText(
            u'''2. Число детей прошедших диспансеризацию: %s (человек)''' %
            (str(eventClosedPayed)))
        cursor.insertBlock()
        if specialityIdCount:
            cursor.insertText(u'''Осмотры:''')
            cursor.insertBlock()
            for value in specialityIdCount.values():
                if value:
                    cursor.insertText(value[0] + ' - ' + forceString(value[1]))
                    cursor.insertBlock()
        if actionTypeIdCount:
            cursor.insertText(u'''Мероприятия:''')
            cursor.insertBlock()
            for value in actionTypeIdCount.values():
                if value:
                    cursor.insertText('        - ' + value[0] + ' - ' +
                                      forceString(value[1]))
                    cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertText(u'''3. Из числа прошедших диспансеризацию детей:''')
        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertText(
            u'''3.1. Дополнительное обследование детей по результатам диспансеризации (человек)'''
        )
        cursor.insertBlock()

        tableColumns = [
            ('18%', [u'Нуждались(человек)', u'', u'1'], CReportBase.AlignLeft),
            ('16.5%', [u'Прошли (человек)', u'',
                       u'2'], CReportBase.AlignCenter),
            ('16.5%', [
                u'на уровне субъекта Российской Федерации',
                u'Нуждались(человек)', u'3'
            ], CReportBase.AlignRight),
            ('16.5%', [u'', u'Прошли (человек)',
                       u'4'], CReportBase.AlignRight),
            ('16.5%', [u'на федеральном уровне', u'Нуждались(человек)',
                       u'5'], CReportBase.AlignRight),
            ('16.5%', [u'', u'Прошли (человек)',
                       u'6'], CReportBase.AlignRight),
        ]
        table = createTable(cursor, tableColumns)
        table.mergeCells(0, 0, 2, 1)
        table.mergeCells(0, 1, 2, 1)
        table.mergeCells(0, 2, 1, 2)
        table.mergeCells(0, 4, 1, 2)

        i = table.addRow()
        for j in xrange(reportRowSize):
            table.setText(i, j, reportData[j])

        cursor.insertBlock()
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertText(
            u'3.2. Рекомендовано лечение по результатам диспансеризации (человек)'
        )
        cursor.insertBlock()
        cursor.insertBlock()

        tableColumns = [
            ('10%', [u'Всего (человек)'], CReportBase.AlignLeft),
            ('18%', [u'в амбулаторно-поликлинической сети'],
             CReportBase.AlignLeft),
            ('18%', [u'в стационаре муниципального уровня'],
             CReportBase.AlignLeft),
            ('18%', [u'в стационаре субъекта Российской Федерации'],
             CReportBase.AlignRight),
            ('18%', [u'в стационаре федерального  уровня'],
             CReportBase.AlignRight),
            ('18%', [u'в санатории'], CReportBase.AlignRight),
        ]

        table = createTable(cursor, tableColumns)
        i = table.addRow()
        for j in xrange(reportRowSize2):
            table.setText(i, j, reportData2[j])

        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()
        cursor.insertBlock()
        cursor.insertText(u'4. Результаты:')
        cursor.insertBlock()
        cursor.insertBlock()

        tableColumns = [('20%', [u'Всего выявлено заболеваний',
                                 u''], CReportBase.AlignLeft),
                        ('20%', [u'Из них выявлено впервые',
                                 u''], CReportBase.AlignLeft),
                        ('20%', [u'Имеют группу здоровья',
                                 u'I'], CReportBase.AlignLeft),
                        ('20%', [u'', u'II'], CReportBase.AlignRight),
                        ('20%', [u'', u'III'], CReportBase.AlignRight)]

        table = createTable(cursor, tableColumns)
        table.mergeCells(0, 0, 2, 1)
        table.mergeCells(0, 1, 2, 1)
        table.mergeCells(0, 2, 1, 3)
        i = table.addRow()
        for j in xrange(reportRowSize3):
            table.setText(i, j, reportData3[j])
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()

        return doc
Ejemplo n.º 27
0
    def build(self, params):
        db = QtGui.qApp.db
        doc = QtGui.QTextDocument()

        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        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'Код льготной категории граждан: ')
        socStatusId = params.get('socStatusType', None)
        if socStatusId:
            socStatusCode = forceString(
                db.translate('rbSocStatusType', 'id', socStatusId, 'code'))
            socStatusName = forceString(
                db.translate('rbSocStatusType', 'id', socStatusId, 'name'))
            cursor.insertText(socStatusCode + u' ' + socStatusName)
        else:
            cursor.insertText(u'все')
        cursor.insertBlock()
        cursor.insertText(u'Подразделение: ' + (getOrgStructureFullName(
            orgStructureId) if orgStructureId else u'ЛПУ'))
        cursor.insertBlock()
        cursor.insertText(u'Врач: ')
        personId = params.get('personId', None)
        if personId:
            personInfo = getPersonInfo(personId)
            cursor.insertText(personInfo['fullName'] + u', ' +
                              personInfo['specialityName'] + u', ' +
                              personInfo['code'])
        else:
            cursor.insertText(u'все')
        cursor.insertBlock()
        cursor.insertText(u'Статус рецепта: ' +
                          recipeStatusNames[recipeStatus])
        cursor.insertBlock()
        cursor.insertBlock()

        tableColumns = [
            ('5%', [u'Код пациента', u''], CReportBase.AlignLeft),
            ('13%', [u'Ф.И.О. пациента', u''], CReportBase.AlignLeft),
            ('7%', [u'Дата рождения', u''], CReportBase.AlignLeft),
            ('11%', [u'СНИЛС', u''], CReportBase.AlignLeft),
            ('5%', [u'Код льготной категории', u''], CReportBase.AlignLeft),
            ('7%', [u'№ карты беременной', u''], CReportBase.AlignLeft),
            ('11%', [u'Серия и номер рецепта', u''], CReportBase.AlignLeft),
            ('7%', [u'Дата выписки', u''], CReportBase.AlignLeft),
            ('5%', [u'Код МКБ', u''], CReportBase.AlignLeft),
            ('7%', [u'Лекарственное средство', u'МНН'], CReportBase.AlignLeft),
            ('8%', [u'', u'Торговое наименование'], CReportBase.AlignLeft),
            ('7%', [u'', u'Количество единиц'], CReportBase.AlignLeft),
            ('13%', [u'Ф.И.О., спец-ть врача, таб. №'], CReportBase.AlignLeft),
            ('3%', [u'ВК'], CReportBase.AlignLeft),
        ]
        table = createTable(cursor, tableColumns)
        table.mergeCells(0, 9, 1, 2)
        table.mergeCells(0, 0, 2, 1)
        table.mergeCells(0, 1, 2, 1)
        table.mergeCells(0, 2, 2, 1)
        table.mergeCells(0, 3, 2, 1)
        table.mergeCells(0, 4, 2, 1)
        table.mergeCells(0, 5, 2, 1)
        table.mergeCells(0, 6, 2, 1)
        table.mergeCells(0, 7, 2, 1)
        table.mergeCells(0, 8, 2, 1)
        table.mergeCells(0, 9, 1, 3)
        # table.mergeCells(0, 11, 1, 2)
        table.mergeCells(0, 12, 2, 1)
        table.mergeCells(0, 13, 2, 1)
        rowSize = len(tableColumns)

        clientIdSet = set()
        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            clientId = forceInt(record.value('clientId'))
            clientIdSet.add(clientId)
            i = table.addRow()
            table.setText(i, 0, clientId)
            table.setText(i, 1, forceString(record.value('clientName')))
            table.setText(i, 2, forceString(record.value('birthDate')))
            table.setText(i, 3, forceString(record.value('SNILS')))
            table.setText(i, 4, forceString(record.value('socCode')))
            table.setText(i, 5, forceString(record.value('pregCard')))
            table.setText(i, 6, forceString(record.value('recipeNumber')))
            table.setText(i, 7, forceString(record.value('recipeDate')))
            table.setText(i, 8, forceString(record.value('mkb')))
            table.setText(i, 9, forceString(record.value('drugMNN')))
            table.setText(i, 10, forceString(record.value('drugTrade')))
            table.setText(i, 11, forceString(record.value('drugCount')))
            table.setText(i, 12, forceString(record.value('person')))
            table.setText(i, 13, forceString(record.value('isVk')))

        i = table.addRow()
        table.mergeCells(i, 0, 1, rowSize)
        table.setText(i,
                      0,
                      u'Количество пациентов: ' + str(len(clientIdSet)),
                      charFormat=CReportBase.TableTotal)
        i = table.addRow()
        table.mergeCells(i, 0, 1, rowSize)
        table.setText(i,
                      0,
                      u'Количество рецептов: ' + str((i - 3)),
                      charFormat=CReportBase.TableTotal)
        return doc
Ejemplo n.º 28
0
    def dumpParams(self, cursor, params):
        def dateRangeAsStr(begDate, endDate):
            result = ''
            if begDate:
                result += u' с ' + forceString(begDate)
            if endDate:
                result += u' по ' + forceString(endDate)
            return result

        description = []
        begDate = params.get('begDateVisitBeforeRecord', QtCore.QDate())
        endDate = params.get('endDateVisitBeforeRecord', QtCore.QDate())
        orgStructureId = params.get('orgStructureId', None)
        specialityId = params.get('specialityId', None)
        personId = params.get('personId', None)
        nextVisit = params.get('nextVisit', False)
        noVisit = params.get('noVisit', False)
        visitOtherSpeciality = params.get('visitOtherSpeciality', False)
        visitSorting = params.get('visitSorting', 0)
        if begDate or endDate:
            description.append(u'за период' + dateRangeAsStr(begDate, endDate))
        if orgStructureId:
            description.append(u'подразделение: ' +
                               getOrgStructureFullName(orgStructureId))
        else:
            description.append(u'подразделение: ЛПУ')
        if specialityId:
            specialityName = forceString(
                QtGui.qApp.db.translate('rbSpeciality', 'id', specialityId,
                                        'name'))
            description.append(u'Специальность ' + specialityName)
        if personId:
            personName = forceString(
                QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id',
                                        personId, 'name'))
            description.append(u'Врач ' + personName)
        if nextVisit:
            description.append(u'Учитывать назначение следующей явки')
        if noVisit:
            description.append(u'Учитывать только не явившихся на прием')
        if visitOtherSpeciality:
            description.append(
                u'Не учитывать явившихся к другому врачу данной специальности')
        description.append(
            u'Сортировка ' +
            [u'по дате', u'по ФИО пациента', u'по идентификатору пациента'
             ][visitSorting])

        description.append(u'отчёт составлен: ' +
                           forceString(QtCore.QDateTime.currentDateTime()))
        columns = [('100%', [], CReportBase.AlignLeft)]
        table = createTable(cursor,
                            columns,
                            headerRowCount=len(description),
                            border=0,
                            cellPadding=2,
                            cellSpacing=0)
        for i, row in enumerate(description):
            table.setText(i, 0, row)
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()
Ejemplo n.º 29
0
    def __init__(self, parent):
        CDialogBase.__init__(self, parent)
        self.addModels('Motions', CMyMotionsModel(self))
        self.mnuMotions = QtGui.QMenu(self)
        self.mnuMotions.setObjectName('mnuMotions')
        self.actAddInvoice = QtGui.QAction(u'Создать накладную', self)
        self.actAddInvoice.setObjectName('actAddInvoice')
        self.actAddInventory = QtGui.QAction(u'Создать инвентаризацию', self)
        self.actAddInventory.setObjectName('actAddInventory')
        self.actAddFinTransfer = QtGui.QAction(u'Создать фин.перенос', self)
        self.actAddFinTransfer.setObjectName('actAddFinTransfer')
        self.actAddProduction = QtGui.QAction(u'Создать производство', self)
        self.actAddProduction.setObjectName('actAddProduction')
        self.actEditMotion = QtGui.QAction(u'Редактировать движение', self)
        self.actEditMotion.setObjectName('actEditMotion')

        self.mnuMotions.addAction(self.actAddInvoice)
        self.mnuMotions.addAction(self.actAddInventory)
        self.mnuMotions.addAction(self.actAddFinTransfer)
        self.mnuMotions.addAction(self.actAddProduction)
        self.mnuMotions.addSeparator()
        self.mnuMotions.addAction(self.actEditMotion)

        self.addModels('Remainings', CRemainingsModel(self))

        self.addModels('MRs', CMyRequisitionsModel(self))
        self.mnuMRs = QtGui.QMenu(self)
        self.mnuMRs.setObjectName('mnuMRs')
        self.actAddRequisition = QtGui.QAction(u'Создать требование', self)
        self.actAddRequisition.setObjectName('actAddRequisition')
        self.actEditRequisition = QtGui.QAction(u'Редактировать требование',
                                                self)
        self.actEditRequisition.setObjectName('actEditRequisition')
        self.actRevokeRequisition = QtGui.QAction(u'Отменить требование', self)
        self.actRevokeRequisition.setObjectName('actRevokeRequisition')
        self.mnuMRs.addAction(self.actAddRequisition)
        self.mnuMRs.addAction(self.actEditRequisition)
        self.mnuMRs.addAction(self.actRevokeRequisition)
        self.addModels('MRContent', CRequisitionContentModel(self))

        self.addModels('RTMs', CRequisitionsToMeModel(self))
        self.mnuRTMs = QtGui.QMenu(self)
        self.mnuRTMs.setObjectName('mnuRTMs')
        #        self.addObject('actOpenClient', QtGui.QAction(u'Открыть регистрационную карточку', self))
        self.actCreateMotionByRequisition = QtGui.QAction(
            u'Создать движение по требованию', self)
        self.actCreateMotionByRequisition.setObjectName(
            'actCreateMotionByRequisition')
        #        self.addObject('actRejectRequisition', QtGui.QAction(u'Отказать в требование', self))
        self.mnuRTMs.addAction(self.actCreateMotionByRequisition)
        #        self.mnuRTMs.addAction(self.actRejectRequisition)
        self.addModels('RTMContent', CRequisitionContentModel(self))

        self.btnPrint = QtGui.QPushButton(u'Печать', self)

        self.btnPrint.setObjectName('btnPrint')
        self.btnPrint.setShortcut('F6')
        self.setupUi(self)
        self.setWindowFlags(QtCore.Qt.Dialog
                            | QtCore.Qt.WindowMaximizeButtonHint
                            | QtCore.Qt.WindowCloseButtonHint)

        if QtGui.qApp.currentOrgStructureId():
            self.setWindowTitle(
                u'Склад ЛСиИМН: %s' %
                getOrgStructureFullName(QtGui.qApp.currentOrgStructureId()))

        self.bbxMotionsFilter.button(
            QtGui.QDialogButtonBox.Apply).setDefault(True)
        self.bbxRemainingsFilter.button(
            QtGui.QDialogButtonBox.Apply).setDefault(True)
        self.bbxMRsFilter.button(QtGui.QDialogButtonBox.Apply).setDefault(True)
        self.bbxRTMsFilter.button(
            QtGui.QDialogButtonBox.Apply).setDefault(True)

        self.cmbMotionsFilterNomenclature.setTable('rbNomenclature',
                                                   order='name')
        self.cmbMotionsFilterFinance.setTable('rbFinance', True)

        self.cmbRemainingsFilterNomenclature.setTable('rbNomenclature',
                                                      order='name')
        self.cmbRemainingsFilterFinance.setTable('rbFinance', True)

        self.cmbMRsFilterNomenclature.setTable('rbNomenclature', order='name')
        self.cmbRTMsFilterNomenclature.setTable('rbNomenclature', order='name')

        self.tblMotions.setModel(self.modelMotions)
        self.tblMotions.setSelectionModel(self.selectionModelMotions)
        self.tblMotions.setPopupMenu(self.mnuMotions)

        self.tblRemainings.setModel(self.modelRemainings)
        self.tblRemainings.setSelectionModel(self.selectionModelRemainings)

        self.tblMRs.setModel(self.modelMRs)
        self.tblMRs.setSelectionModel(self.selectionModelMRs)
        self.tblMRs.setPopupMenu(self.mnuMRs)
        self.tblMRContent.setModel(self.modelMRContent)
        self.tblMRContent.setSelectionModel(self.selectionModelMRContent)

        self.tblRTMs.setModel(self.modelRTMs)
        self.tblRTMs.setSelectionModel(self.selectionModelRTMs)
        self.tblRTMs.setPopupMenu(self.mnuRTMs)

        self.tblRTMContent.setModel(self.modelRTMContent)
        self.tblRTMContent.setSelectionModel(self.selectionModelRTMContent)

        self.buttonBox.addButton(self.btnPrint,
                                 QtGui.QDialogButtonBox.ActionRole)

        self.motionsFilter = smartDict()
        self.remainingsFilter = smartDict()
        self.MRsFilter = smartDict()
        self.RTMsFilter = smartDict()

        self.controlSplitter = None
        #        self.visitedMotions = False
        self.visitedMRs = False
        self.visitedRTMs = False
Ejemplo n.º 30
0
    def dumpParams(self, cursor, params):
        description = []
        db = QtGui.qApp.db

        def dateRangeAsStr(begDate, endDate):
            result = ''
            if begDate:
                result += u' с ' + forceString(begDate)
            if endDate:
                result += u' по ' + forceString(endDate)
            return result

        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        begDateBeforeRecord = params.get('begDateBeforeRecord', QtCore.QDate())
        endDateBeforeRecord = params.get('endDateBeforeRecord', QtCore.QDate())
        orgStructureId = params.get('orgStructureId', None)
        specialityId = params.get('specialityId', None)
        personId = params.get('personId', None)
        userProfileId = params.get('userProfileId', None)
        beforeRecordUserId = params.get('beforeRecordUserId', None)
        actionTypeCode = params.get('queueType', None)
        chkPeriodRecord = params.get('chkPeriodRecord', None)
        chkPeriodBeforeRecord = params.get('chkPeriodBeforeRecord', None)
        chkOrgStructure = params.get('chkOrgStructure', None)
        chkDetailCallCentr = params.get('detailCallCentr', None)
        chkDetailExternalIS = params.get('detailExternalIS', None)
        chkShowNote = params.get('chkShowNote', False)

        if chkPeriodRecord:
            if begDate or endDate:
                description.append(u'за период' +
                                   dateRangeAsStr(begDate, endDate))
        if chkPeriodBeforeRecord:
            if begDateBeforeRecord or endDateBeforeRecord:
                description.append(
                    u'период предварительной записи' +
                    dateRangeAsStr(begDateBeforeRecord, endDateBeforeRecord))
        if beforeRecordUserId:
            personInfo = getPersonInfo(beforeRecordUserId)
            description.append(u'пользователь: ' + personInfo['shortName'] +
                               ', ' + personInfo['specialityName'])
        if userProfileId:
            description.append(u'профиль прав пользователя: ' + forceString(
                db.translate('rbUserProfile', 'id', userProfileId, 'name')))
        if chkOrgStructure:
            if orgStructureId:
                description.append(u'подразделение: ' +
                                   getOrgStructureFullName(orgStructureId))
            else:
                description.append(u'подразделение: ЛПУ')
            if specialityId:
                description.append(u'специальность: ' + forceString(
                    db.translate('rbSpeciality', 'id', specialityId, 'name')))
            if personId:
                personInfo = getPersonInfo(personId)
                description.append(u'врач: ' + personInfo['shortName'] + ', ' +
                                   personInfo['specialityName'])
        if actionTypeCode == 0:
            description.append(u'мероприятие: Прием')
        elif actionTypeCode == 1:
            description.append(u'мероприятие: Вызовы')
        if chkDetailCallCentr:
            description.append(u'Детализировать Call-центр')
        if chkDetailExternalIS:
            description.append(u'Детализировать запись через внешние ИС')
        if chkShowNote:
            description.append(u'Выводить жалобы')
        description.append(u'отчёт составлен: ' +
                           forceString(QtCore.QDateTime.currentDateTime()))
        columns = [('100%', [], CReportBase.AlignLeft)]
        table = createTable(cursor,
                            columns,
                            headerRowCount=len(description),
                            border=0,
                            cellPadding=2,
                            cellSpacing=0)
        for i, row in enumerate(description):
            table.setText(i, 0, row)
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()