示例#1
0
class ClaimItem(core_models.VersionedModel, ClaimDetail):
    model_prefix = "item"
    id = models.AutoField(db_column='ClaimItemID', primary_key=True)
    claim = models.ForeignKey(Claim, models.DO_NOTHING,
                              db_column='ClaimID', related_name='items')
    item = models.ForeignKey(
        medical_models.Item, models.DO_NOTHING, db_column='ItemID')
    product = models.ForeignKey(product_models.Product,
                                models.DO_NOTHING, db_column='ProdID',
                                blank=True, null=True,
                                related_name="claim_items")
    status = models.SmallIntegerField(db_column='ClaimItemStatus')
    availability = models.BooleanField(db_column='Availability')
    qty_provided = models.DecimalField(
        db_column='QtyProvided', max_digits=18, decimal_places=2)
    qty_approved = models.DecimalField(
        db_column='QtyApproved', max_digits=18, decimal_places=2, blank=True, null=True)
    price_asked = models.DecimalField(
        db_column='PriceAsked', max_digits=18, decimal_places=2)
    price_adjusted = models.DecimalField(
        db_column='PriceAdjusted', max_digits=18, decimal_places=2, blank=True, null=True)
    price_approved = models.DecimalField(
        db_column='PriceApproved', max_digits=18, decimal_places=2, blank=True, null=True)
    price_valuated = models.DecimalField(
        db_column='PriceValuated', max_digits=18, decimal_places=2, blank=True, null=True)
    explanation = models.TextField(
        db_column='Explanation', blank=True, null=True)
    justification = models.TextField(
        db_column='Justification', blank=True, null=True)
    rejection_reason = models.SmallIntegerField(
        db_column='RejectionReason', blank=True, null=True)
    audit_user_id = models.IntegerField(db_column='AuditUserID')
    validity_from_review = fields.DateTimeField(
        db_column='ValidityFromReview', blank=True, null=True)
    validity_to_review = fields.DateTimeField(
        db_column='ValidityToReview', blank=True, null=True)
    audit_user_id_review = models.IntegerField(
        db_column='AuditUserIDReview', blank=True, null=True)
    limitation_value = models.DecimalField(
        db_column='LimitationValue', max_digits=18, decimal_places=2, blank=True, null=True)
    limitation = models.CharField(
        db_column='Limitation', max_length=1, blank=True, null=True)
    policy = models.ForeignKey(
        policy_models.Policy, models.DO_NOTHING, db_column='PolicyID', blank=True, null=True)
    remunerated_amount = models.DecimalField(
        db_column='RemuneratedAmount', max_digits=18, decimal_places=2, blank=True, null=True)
    deductable_amount = models.DecimalField(
        db_column='DeductableAmount', max_digits=18, decimal_places=2, blank=True, null=True)
    exceed_ceiling_amount = models.DecimalField(
        db_column='ExceedCeilingAmount', max_digits=18, decimal_places=2, blank=True, null=True)
    price_origin = models.CharField(
        db_column='PriceOrigin', max_length=1, blank=True, null=True)
    exceed_ceiling_amount_category = models.DecimalField(
        db_column='ExceedCeilingAmountCategory', max_digits=18, decimal_places=2, blank=True, null=True)
    objects = ClaimDetailManager()

    class Meta:
        managed = False
        db_table = 'tblClaimItems'
示例#2
0
class Feedback(core_models.VersionedModel):
    id = models.AutoField(db_column='FeedbackID', primary_key=True)
    uuid = models.CharField(db_column='FeedbackUUID', max_length=36, default=uuid.uuid4, unique=True)
    claim = models.OneToOneField(
        "Claim", models.DO_NOTHING, db_column='ClaimID', blank=True, null=True, related_name="+")
    care_rendered = models.NullBooleanField(db_column='CareRendered', blank=True, null=True)
    payment_asked = models.NullBooleanField(db_column='PaymentAsked', blank=True, null=True)
    drug_prescribed = models.NullBooleanField(db_column='DrugPrescribed', blank=True, null=True)
    drug_received = models.NullBooleanField(db_column='DrugReceived', blank=True, null=True)
    asessment = models.SmallIntegerField(db_column='Asessment', blank=True, null=True)
    # No FK in database (so value may not be an existing officer.id !)
    officer_id = models.IntegerField(db_column='CHFOfficerCode', blank=True, null=True)
    feedback_date = fields.DateTimeField(db_column='FeedbackDate', blank=True, null=True)
    audit_user_id = models.IntegerField(db_column='AuditUserID')

    class Meta:
        managed = False
        db_table = 'tblFeedback'

    @classmethod
    def get_queryset(cls, queryset, user):
        queryset = cls.filter_queryset(queryset)
        # GraphQL calls with an info object while Rest calls with the user itself
        if isinstance(user, ResolveInfo):
            user = user.context.user
        if settings.ROW_SECURITY and user.is_anonymous:
            return queryset.filter(id=-1)
        if settings.ROW_SECURITY:
            dist = UserDistrict.get_user_districts(user._u)
            return queryset.filter(
                claim__health_facility__location_id__in=[l.location_id for l in dist]
            )
        return queryset
class Policy(models.Model):
    id = models.AutoField(db_column='PolicyID', primary_key=True)
    legacy_id = models.IntegerField(db_column='LegacyID',
                                    blank=True,
                                    null=True)

    stage = models.CharField(db_column='PolicyStage',
                             max_length=1,
                             blank=True,
                             null=True)
    status = models.SmallIntegerField(db_column='PolicyStatus',
                                      blank=True,
                                      null=True)
    value = models.DecimalField(db_column='PolicyValue',
                                max_digits=18,
                                decimal_places=2,
                                blank=True,
                                null=True)

    # familyid = models.ForeignKey(Tblfamilies, models.DO_NOTHING, db_column='FamilyID')
    enroll_date = fields.DateField(db_column='EnrollDate')
    start_date = fields.DateField(db_column='StartDate')
    effective_date = fields.DateField(db_column='EffectiveDate',
                                      blank=True,
                                      null=True)
    expiry_date = fields.DateField(db_column='ExpiryDate',
                                   blank=True,
                                   null=True)

    # prodid = models.ForeignKey('Tblproduct', models.DO_NOTHING, db_column='ProdID')
    # officerid = models.ForeignKey(Tblofficer, models.DO_NOTHING, db_column='OfficerID', blank=True, null=True)

    validity_from = fields.DateTimeField(db_column='ValidityFrom')
    validity_to = fields.DateTimeField(db_column='ValidityTo',
                                       blank=True,
                                       null=True)

    offline = models.BooleanField(db_column='isOffline', blank=True, null=True)
    audit_user_id = models.IntegerField(db_column='AuditUserID')
    row_id = models.BinaryField(db_column='RowID', blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'tblPolicy'
示例#4
0
class BatchRun(core_models.VersionedModel):
    id = models.AutoField(db_column='RunID', primary_key=True)
    location = models.ForeignKey(location_models.Location,
                                 models.DO_NOTHING,
                                 db_column='LocationId',
                                 blank=True,
                                 null=True)
    run_date = fields.DateTimeField(db_column='RunDate')
    audit_user_id = models.IntegerField(db_column='AuditUserID')
    run_year = models.IntegerField(db_column='RunYear')
    run_month = models.SmallIntegerField(db_column='RunMonth')

    class Meta:
        managed = False
        db_table = 'tblBatchRun'
示例#5
0
class Claim(core_models.VersionedModel):
    id = models.AutoField(db_column='ClaimID', primary_key=True)
    uuid = models.CharField(db_column='ClaimUUID',
                            max_length=36,
                            default=uuid.uuid4,
                            unique=True)
    category = models.CharField(db_column='ClaimCategory',
                                max_length=1,
                                blank=True,
                                null=True)
    insuree = models.ForeignKey(insuree_models.Insuree,
                                models.DO_NOTHING,
                                db_column='InsureeID')
    code = models.CharField(db_column='ClaimCode', max_length=8, unique=True)
    date_from = fields.DateField(db_column='DateFrom')
    date_to = fields.DateField(db_column='DateTo', blank=True, null=True)
    status = models.SmallIntegerField(db_column='ClaimStatus')
    adjuster = models.ForeignKey(core_models.InteractiveUser,
                                 models.DO_NOTHING,
                                 db_column='Adjuster',
                                 blank=True,
                                 null=True)
    adjustment = models.TextField(db_column='Adjustment',
                                  blank=True,
                                  null=True)
    claimed = models.DecimalField(db_column='Claimed',
                                  max_digits=18,
                                  decimal_places=2,
                                  blank=True,
                                  null=True)
    approved = models.DecimalField(db_column='Approved',
                                   max_digits=18,
                                   decimal_places=2,
                                   blank=True,
                                   null=True)
    reinsured = models.DecimalField(db_column='Reinsured',
                                    max_digits=18,
                                    decimal_places=2,
                                    blank=True,
                                    null=True)
    valuated = models.DecimalField(db_column='Valuated',
                                   max_digits=18,
                                   decimal_places=2,
                                   blank=True,
                                   null=True)
    date_claimed = fields.DateField(db_column='DateClaimed')
    date_processed = fields.DateField(db_column='DateProcessed',
                                      blank=True,
                                      null=True)
    # Django uses the feedback_id column to create the feedback column, which conflicts with the boolean field
    feedback_available = models.BooleanField(db_column='Feedback',
                                             default=False)
    feedback = models.OneToOneField(Feedback,
                                    models.DO_NOTHING,
                                    db_column='FeedbackID',
                                    blank=True,
                                    null=True,
                                    related_name="+")
    explanation = models.TextField(db_column='Explanation',
                                   blank=True,
                                   null=True)
    feedback_status = models.SmallIntegerField(db_column='FeedbackStatus',
                                               blank=True,
                                               null=True)
    review_status = models.SmallIntegerField(db_column='ReviewStatus',
                                             blank=True,
                                             null=True)
    approval_status = models.SmallIntegerField(db_column='ApprovalStatus',
                                               blank=True,
                                               null=True)
    rejection_reason = models.SmallIntegerField(db_column='RejectionReason',
                                                blank=True,
                                                null=True)

    batch_run = models.ForeignKey(claim_batch_models.BatchRun,
                                  models.DO_NOTHING,
                                  db_column='RunID',
                                  blank=True,
                                  null=True)
    audit_user_id = models.IntegerField(db_column='AuditUserID')
    validity_from_review = fields.DateTimeField(db_column='ValidityFromReview',
                                                blank=True,
                                                null=True)
    validity_to_review = fields.DateTimeField(db_column='ValidityToReview',
                                              blank=True,
                                              null=True)

    health_facility = models.ForeignKey(location_models.HealthFacility,
                                        models.DO_NOTHING,
                                        db_column='HFID')

    submit_stamp = fields.DateTimeField(db_column='SubmitStamp',
                                        blank=True,
                                        null=True)
    process_stamp = fields.DateTimeField(db_column='ProcessStamp',
                                         blank=True,
                                         null=True)
    remunerated = models.DecimalField(db_column='Remunerated',
                                      max_digits=18,
                                      decimal_places=2,
                                      blank=True,
                                      null=True)
    guarantee_id = models.CharField(db_column='GuaranteeId',
                                    max_length=50,
                                    blank=True,
                                    null=True)
    admin = models.ForeignKey(ClaimAdmin,
                              models.DO_NOTHING,
                              db_column='ClaimAdminId',
                              blank=True,
                              null=True)
    icd = models.ForeignKey(medical_models.Diagnosis,
                            models.DO_NOTHING,
                            db_column='ICDID',
                            related_name="claim_icds")
    icd_1 = models.ForeignKey(medical_models.Diagnosis,
                              models.DO_NOTHING,
                              db_column='ICDID1',
                              related_name="claim_icd1s",
                              blank=True,
                              null=True)
    icd_2 = models.ForeignKey(medical_models.Diagnosis,
                              models.DO_NOTHING,
                              db_column='ICDID2',
                              related_name="claim_icd2s",
                              blank=True,
                              null=True)
    icd_3 = models.ForeignKey(medical_models.Diagnosis,
                              models.DO_NOTHING,
                              db_column='ICDID3',
                              related_name="claim_icd3s",
                              blank=True,
                              null=True)
    icd_4 = models.ForeignKey(medical_models.Diagnosis,
                              models.DO_NOTHING,
                              db_column='ICDID4',
                              related_name="claim_icd4s",
                              blank=True,
                              null=True)

    visit_type = models.CharField(db_column='VisitType',
                                  max_length=1,
                                  blank=True,
                                  null=True)
    audit_user_id_review = models.IntegerField(db_column='AuditUserIDReview',
                                               blank=True,
                                               null=True)
    audit_user_id_submit = models.IntegerField(db_column='AuditUserIDSubmit',
                                               blank=True,
                                               null=True)
    audit_user_id_process = models.IntegerField(db_column='AuditUserIDProcess',
                                                blank=True,
                                                null=True)
    scheme_type = models.IntegerField(db_column='SchemeType',
                                      blank=True,
                                      null=True)
    subProduct_id = models.IntegerField(db_column='subProduct_id',
                                        blank=True,
                                        null=True)

    # row_id = models.BinaryField(db_column='RowID', blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'tblClaim'

    STATUS_REJECTED = 1
    STATUS_ENTERED = 2
    STATUS_CHECKED = 4
    STATUS_PROCESSED = 8
    STATUS_VALUATED = 16

    FEEDBACK_IDLE = 1
    FEEDBACK_NOT_SELECTED = 2
    FEEDBACK_SELECTED = 4
    FEEDBACK_DELIVERED = 8
    FEEDBACK_BYPASSED = 16

    REVIEW_IDLE = 1
    REVIEW_NOT_SELECTED = 2
    REVIEW_SELECTED = 4
    REVIEW_DELIVERED = 8
    REVIEW_BYPASSED = 16

    def reject(self, rejection_code):
        updated_items = self.items.filter(validity_to__isnull=True).update(
            rejection_reason=rejection_code)
        updated_services = self.services.filter(
            validity_to__isnull=True).update(rejection_reason=rejection_code)
        signal_claim_rejection.send(sender=self.__class__, claim=self)
        return updated_items + updated_services

    def save_history(self, **kwargs):
        prev_id = super(Claim, self).save_history()
        if prev_id:
            prev_items = []
            for item in self.items.all():
                prev_items.append(item.save_history())
            ClaimItem.objects.filter(id__in=prev_items).update(
                claim_id=prev_id)
            prev_services = []
            for service in self.services.all():
                prev_services.append(service.save_history())
            ClaimService.objects.filter(id__in=prev_services).update(
                claim_id=prev_id)
        return prev_id

    @classmethod
    def get_queryset(cls, queryset, user):
        queryset = Claim.filter_queryset(queryset)
        # GraphQL calls with an info object while Rest calls with the user itself
        if isinstance(user, ResolveInfo):
            user = user.context.user
        if settings.ROW_SECURITY and user.is_anonymous:
            return queryset.filter(id=-1)
        if settings.ROW_SECURITY:
            # TechnicalUsers don't have health_facility_id attribute
            if hasattr(user._u,
                       'health_facility_id') and user._u.health_facility_id:
                return queryset.filter(
                    health_facility_id=user._u.health_facility_id)
            else:
                dist = UserDistrict.get_user_districts(user._u)
                return queryset.filter(health_facility__location_id__in=[
                    l.location_id for l in dist
                ])
        return queryset
class Contract(core_models.HistoryBusinessModel):
    code = models.CharField(db_column='Code', max_length=64, null=False)
    policy_holder = models.ForeignKey(PolicyHolder,
                                      db_column="PolicyHolderUUID",
                                      on_delete=models.deletion.DO_NOTHING,
                                      blank=True,
                                      null=True)
    amount_notified = models.FloatField(db_column='AmountNotified',
                                        blank=True,
                                        null=True)
    amount_rectified = models.FloatField(db_column='AmountRectified',
                                         blank=True,
                                         null=True)
    amount_due = models.FloatField(db_column='AmountDue',
                                   blank=True,
                                   null=True)
    date_approved = fields.DateTimeField(db_column='DateApproved',
                                         blank=True,
                                         null=True)
    date_payment_due = fields.DateField(db_column='DatePaymentDue',
                                        blank=True,
                                        null=True)
    state = models.SmallIntegerField(db_column='State', blank=True, null=True)
    payment_reference = models.CharField(db_column='PaymentReference',
                                         max_length=255,
                                         blank=True,
                                         null=True)
    amendment = models.IntegerField(db_column='Amendment',
                                    blank=False,
                                    null=False,
                                    default=0)

    objects = ContractManager()

    @property
    def amount(self):
        amount = 0
        if self.state in [1, 2]:
            amount = self.amount_notified
        elif self.state in [4, 11, 3]:
            amount = self.amount_rectified
        elif self.state in [5, 6, 7, 8, 9, 10]:
            amount = self.amount_due
        else:
            amount = self.amount_due
        return amount

    @classmethod
    def get_queryset(cls, queryset, user):
        queryset = cls.filter_queryset(queryset)
        if isinstance(user, ResolveInfo):
            user = user.context.user
        if settings.ROW_SECURITY and user.is_anonymous:
            return queryset.filter(id=-1)
        if settings.ROW_SECURITY:
            pass
        return queryset

    class Meta:
        db_table = 'tblContract'

    STATE_REQUEST_FOR_INFORMATION = 1
    STATE_DRAFT = 2
    STATE_OFFER = 3
    STATE_NEGOTIABLE = 4
    STATE_EXECUTABLE = 5
    STATE_ADDENDUM = 6
    STATE_EFFECTIVE = 7
    STATE_EXECUTED = 8
    STATE_DISPUTED = 9
    STATE_TERMINATED = 10
    STATE_COUNTER = 11