Skip to content

Commit 2dfc9c3

Browse files
author
abrar2030
committed
Implement updates for better performance
1 parent beaf48d commit 2dfc9c3

25 files changed

Lines changed: 43235 additions & 1348 deletions

‎backend/src/ai/risk_assessment.py‎

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ def assess_user_risk(
143143
# Credit Risk Assessment
144144
credit_factors = self._assess_credit_risk(user_data)
145145
risk_factors.extend(credit_factors)
146-
category_scores[
147-
RiskCategory.CREDIT_RISK.value
148-
] = self._calculate_category_score(credit_factors)
146+
category_scores[RiskCategory.CREDIT_RISK.value] = (
147+
self._calculate_category_score(credit_factors)
148+
)
149149

150150
# Fraud Risk Assessment
151151
fraud_factors = self._assess_fraud_risk(user_data)
@@ -157,16 +157,16 @@ def assess_user_risk(
157157
# Liquidity Risk Assessment
158158
liquidity_factors = self._assess_liquidity_risk(user_data)
159159
risk_factors.extend(liquidity_factors)
160-
category_scores[
161-
RiskCategory.LIQUIDITY_RISK.value
162-
] = self._calculate_category_score(liquidity_factors)
160+
category_scores[RiskCategory.LIQUIDITY_RISK.value] = (
161+
self._calculate_category_score(liquidity_factors)
162+
)
163163

164164
# Operational Risk Assessment
165165
operational_factors = self._assess_operational_risk(user_data)
166166
risk_factors.extend(operational_factors)
167-
category_scores[
168-
RiskCategory.OPERATIONAL_RISK.value
169-
] = self._calculate_category_score(operational_factors)
167+
category_scores[RiskCategory.OPERATIONAL_RISK.value] = (
168+
self._calculate_category_score(operational_factors)
169+
)
170170

171171
# Calculate overall risk score
172172
overall_risk_score = self._calculate_overall_risk_score(category_scores)
@@ -249,9 +249,7 @@ def _assess_credit_risk(self, user_data: Dict[str, Any]) -> List[RiskFactor]:
249249
impact=(
250250
"High"
251251
if payment_score < 0.5
252-
else "Medium"
253-
if payment_score < 0.8
254-
else "Low"
252+
else "Medium" if payment_score < 0.8 else "Low"
255253
),
256254
mitigation_suggestions=(
257255
[
@@ -295,9 +293,7 @@ def _assess_credit_risk(self, user_data: Dict[str, Any]) -> List[RiskFactor]:
295293
impact=(
296294
"High"
297295
if utilization_ratio > 0.7
298-
else "Medium"
299-
if utilization_ratio > 0.3
300-
else "Low"
296+
else "Medium" if utilization_ratio > 0.3 else "Low"
301297
),
302298
mitigation_suggestions=(
303299
[
@@ -356,9 +352,7 @@ def _assess_fraud_risk(self, user_data: Dict[str, Any]) -> List[RiskFactor]:
356352
impact=(
357353
"High"
358354
if pattern_score < 0.3
359-
else "Medium"
360-
if pattern_score < 0.7
361-
else "Low"
355+
else "Medium" if pattern_score < 0.7 else "Low"
362356
),
363357
mitigation_suggestions=(
364358
[
@@ -386,9 +380,7 @@ def _assess_fraud_risk(self, user_data: Dict[str, Any]) -> List[RiskFactor]:
386380
impact=(
387381
"High"
388382
if device_score < 0.3
389-
else "Medium"
390-
if device_score < 0.7
391-
else "Low"
383+
else "Medium" if device_score < 0.7 else "Low"
392384
),
393385
mitigation_suggestions=(
394386
[
@@ -416,9 +408,7 @@ def _assess_fraud_risk(self, user_data: Dict[str, Any]) -> List[RiskFactor]:
416408
impact=(
417409
"High"
418410
if location_score < 0.3
419-
else "Medium"
420-
if location_score < 0.7
421-
else "Low"
411+
else "Medium" if location_score < 0.7 else "Low"
422412
),
423413
mitigation_suggestions=(
424414
[
@@ -454,9 +444,7 @@ def _assess_liquidity_risk(self, user_data: Dict[str, Any]) -> List[RiskFactor]:
454444
impact=(
455445
"High"
456446
if cash_flow_score < 0.3
457-
else "Medium"
458-
if cash_flow_score < 0.7
459-
else "Low"
447+
else "Medium" if cash_flow_score < 0.7 else "Low"
460448
),
461449
mitigation_suggestions=(
462450
[
@@ -486,9 +474,7 @@ def _assess_liquidity_risk(self, user_data: Dict[str, Any]) -> List[RiskFactor]:
486474
impact=(
487475
"High"
488476
if balance_score < 0.3
489-
else "Medium"
490-
if balance_score < 0.7
491-
else "Low"
477+
else "Medium" if balance_score < 0.7 else "Low"
492478
),
493479
mitigation_suggestions=(
494480
[
@@ -524,9 +510,7 @@ def _assess_operational_risk(self, user_data: Dict[str, Any]) -> List[RiskFactor
524510
impact=(
525511
"High"
526512
if len(security_incidents) > 3
527-
else "Medium"
528-
if len(security_incidents) > 1
529-
else "Low"
513+
else "Medium" if len(security_incidents) > 1 else "Low"
530514
),
531515
mitigation_suggestions=(
532516
[
@@ -557,9 +541,7 @@ def _assess_operational_risk(self, user_data: Dict[str, Any]) -> List[RiskFactor
557541
impact=(
558542
"High"
559543
if len(violations) > 2
560-
else "Medium"
561-
if len(violations) > 0
562-
else "Low"
544+
else "Medium" if len(violations) > 0 else "Low"
563545
),
564546
mitigation_suggestions=(
565547
[

‎backend/src/compliance/data_protection.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -831,9 +831,9 @@ async def _process_erasure_request(self, request: DataSubjectRequest):
831831
self.logger.info(f"Completed erasure request for {data_subject_id}")
832832
else:
833833
request.status = "rejected"
834-
request.request_details[
835-
"rejection_reason"
836-
] = "Legal obligation to retain data"
834+
request.request_details["rejection_reason"] = (
835+
"Legal obligation to retain data"
836+
)
837837
self.logger.info(
838838
f"Rejected erasure request for {data_subject_id}: legal obligation"
839839
)

‎backend/src/integrations/banking/open_banking_integration.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -373,9 +373,9 @@ async def initiate_payment_pis(
373373
}
374374

375375
if payment_request.scheduled_date:
376-
payment_data[
377-
"requestedExecutionDate"
378-
] = payment_request.scheduled_date.strftime("%Y-%m-%d")
376+
payment_data["requestedExecutionDate"] = (
377+
payment_request.scheduled_date.strftime("%Y-%m-%d")
378+
)
379379

380380
headers = {
381381
"Authorization": f"Bearer {self.access_token}",

‎backend/src/ml/fraud_detection/__init__.py‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -469,13 +469,13 @@ def explain_prediction(
469469

470470
# Generate summary
471471
if risk_score >= 0.8:
472-
explanation[
473-
"summary"
474-
] = "High fraud risk detected due to multiple suspicious indicators"
472+
explanation["summary"] = (
473+
"High fraud risk detected due to multiple suspicious indicators"
474+
)
475475
elif risk_score >= 0.6:
476-
explanation[
477-
"summary"
478-
] = "Elevated fraud risk - additional verification recommended"
476+
explanation["summary"] = (
477+
"Elevated fraud risk - additional verification recommended"
478+
)
479479
elif risk_score >= 0.3:
480480
explanation["summary"] = "Moderate fraud risk - monitor transaction"
481481
else:

‎backend/src/models/card.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from decimal import Decimal
77
from enum import Enum as PyEnum
88

9-
from sqlalchemy import password_security # Use internal security module
9+
import hashlib\nfrom src.security.password_security import check_password, hash_password\nfrom src.models.database import Base, db, Column, String, Integer, DateTime, Boolean, Numeric, Text, ForeignKey, Index, relationship\n\n\nclass CardType(PyEnum):
1010

1111

1212
class CardType(PyEnum):
@@ -71,10 +71,10 @@ class Card(Base):
7171
# Expiration and security
7272
expiry_month = Column(Integer, nullable=False)
7373
expiry_year = Column(Integer, nullable=False)
74-
# Note: CVV is NEVER stored as per PCI DSS requirements
74+
# Note: CVV is NEVER stored as per PCI DSS requirements\n cvv_hash = Column(String(255)) # Hashed CVV for internal verification (e.g., tokenization service)
7575

7676
# Limits and controls (using Numeric/Decimal)
77-
daily_limit = Column(Numeric(20, 2), default=Decimal("1000.00"))
77+
daily_limit = Column(Numeric(20, 2), default=Decimal("1000.00"))\n blocked_reason = Column(String(255))\n blocked_at = Column(DateTime)\n cancelled_reason = Column(String(255))\n cancelled_at = Column(DateTime)\n activated_at = Column(DateTime)
7878
monthly_limit = Column(Numeric(20, 2), default=Decimal("10000.00"))
7979
single_transaction_limit = Column(Numeric(20, 2), default=Decimal("500.00"))
8080

@@ -127,7 +127,7 @@ def generate_card_token():
127127
secrets.choice(string.ascii_uppercase + string.digits) for _ in range(32)
128128
)
129129

130-
def set_card_number(self, card_number):
130+
def set_card_number(self, card_number):\n """Set card number with proper tokenization and hashing"""\n # Store only last 4 digits\n self.last_four_digits = card_number[-4:]\n\n # Create hash of full PAN for verification\n self.card_hash = hashlib.sha256(card_number.encode()).hexdigest()\n\n # In production, you would call a tokenization service here\n if not self.card_token:\n self.card_token = self.generate_card_token()\n\n def verify_card_number(self, card_number):\n """Verify card number against stored hash"""\n return hashlib.sha256(card_number.encode()).hexdigest() == self.card_hash\n\n def set_cvv(self, cvv: str):\n """Set CVV with proper hashing (for internal use only)"""\n if len(cvv) not in [3, 4] or not cvv.isdigit():\n raise ValueError("CVV must be 3 or 4 digits")\n self.cvv_hash = hash_password(cvv)\n\n def verify_cvv(self, cvv: str) -> bool:\n """Verify CVV against stored hash"""\n if not self.cvv_hash:\n return False\n return check_password(self.cvv_hash, cvv)\n\n def set_pin(self, pin):
131131
"""Set card number with proper tokenization and hashing"""
132132
# Store only last 4 digits
133133
self.last_four_digits = card_number[-4:]

‎backend/src/nocode/rule_engine.py‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -258,19 +258,19 @@ def _register_action_handlers(self):
258258
self._action_handlers[ActionType.CALCULATE] = self._handle_calculate_action
259259
self._action_handlers[ActionType.SEND_EMAIL] = self._handle_send_email_action
260260
self._action_handlers[ActionType.CREATE_TASK] = self._handle_create_task_action
261-
self._action_handlers[
262-
ActionType.TRIGGER_WORKFLOW
263-
] = self._handle_trigger_workflow_action
261+
self._action_handlers[ActionType.TRIGGER_WORKFLOW] = (
262+
self._handle_trigger_workflow_action
263+
)
264264
self._action_handlers[ActionType.LOG_EVENT] = self._handle_log_event_action
265-
self._action_handlers[
266-
ActionType.BLOCK_TRANSACTION
267-
] = self._handle_block_transaction_action
268-
self._action_handlers[
269-
ActionType.REQUIRE_APPROVAL
270-
] = self._handle_require_approval_action
271-
self._action_handlers[
272-
ActionType.UPDATE_STATUS
273-
] = self._handle_update_status_action
265+
self._action_handlers[ActionType.BLOCK_TRANSACTION] = (
266+
self._handle_block_transaction_action
267+
)
268+
self._action_handlers[ActionType.REQUIRE_APPROVAL] = (
269+
self._handle_require_approval_action
270+
)
271+
self._action_handlers[ActionType.UPDATE_STATUS] = (
272+
self._handle_update_status_action
273+
)
274274

275275
def _create_default_templates(self):
276276
"""Create default rule templates."""

0 commit comments

Comments
 (0)