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'
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'
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'
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