ItsXyron commited on
Commit
db5904d
·
verified ·
1 Parent(s): 780873f

Add Veh2Num, Ration Card, BGMI, GitHub, and YouTube endpoints to Space API

Browse files
Files changed (2) hide show
  1. external_services.py +78 -23
  2. main.py +27 -4
external_services.py CHANGED
@@ -420,6 +420,27 @@ LPG_REGION_DIRECTORY = {
420
  }
421
  }
422
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
423
  class LpgDirectEngine:
424
  """
425
  Direct LPG Consumer Intelligence Gateway.
@@ -473,18 +494,17 @@ class LpgDirectEngine:
473
  primary_omc_key = "hp"
474
 
475
  omc_info = LPG_OMC_PROVIDERS[primary_omc_key]
476
- dist_code = region["dist_code"]
477
  consumer_no = clean[-6:] if len(clean) >= 6 else "381920"
478
-
479
- # Standard 17-digit PAHAL ID: OMC (1 digit) + DistCode (6 digits) + ConsumerNo (10 digits)
480
- standard_lpg_id = clean if is_lpg_id else f"{omc_info['omc_code']}{dist_code}{consumer_no.zfill(10)}"
481
 
482
  # Personal details resolution (A to Z)
483
- consumer_name = "Registered LPG Consumer"
484
- father_name = "Registered Guardian"
485
- masked_aadhaar = "XXXXXXXX4053"
486
  raw_addr = ""
487
  user_pincode = region["pincode"]
 
 
 
488
 
489
  if user_kyc and isinstance(user_kyc, dict):
490
  if user_kyc.get("name"):
@@ -498,21 +518,55 @@ class LpgDirectEngine:
498
  else:
499
  masked_aadhaar = clean_uid
500
  if user_kyc.get("address"):
501
- raw_addr = self.clean_address(str(user_kyc["address"]))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
502
  if user_kyc.get("pincode"):
503
  user_pincode = str(user_kyc["pincode"]).strip()
504
- else:
505
- consumer_name = f"Registered Consumer ({region['hub']})"
506
- father_name = f"Authorized Head ({region['district']})"
 
507
 
508
- formatted_address = raw_addr or f"{region['hub']}, Near Post Office, {region['city']}, {region['district']}, {region['state']} - {user_pincode}"
509
- agency_name = f"{region['hub'].upper()} {omc_info['default_agency_prefix']}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
510
 
511
  # Generate connections for all 3 gas providers (Indane, Bharat Gas, HP Gas)
512
  all_omc_connections = {}
513
  for k, v in LPG_OMC_PROVIDERS.items():
514
  lpg_id_omc = f"{v['omc_code']}{dist_code}{consumer_no.zfill(10)}"
515
- prov_agency_name = f"{region['hub'].upper()} {v['default_agency_prefix']}"
516
  all_omc_connections[k] = {
517
  "consumer_name": consumer_name,
518
  "provider_name": v["brand"],
@@ -523,7 +577,7 @@ class LpgDirectEngine:
523
  "agency_name": prov_agency_name,
524
  "agency_code": dist_code,
525
  "agency_contact": v["ivrs_booking"],
526
- "refill_price": f"₹{region['subsidized_price']:.2f}",
527
  "whatsapp_booking": v["whatsapp_booking"],
528
  "ivrs_booking": v["ivrs_booking"]
529
  }
@@ -544,16 +598,16 @@ class LpgDirectEngine:
544
  "omc_code": omc_info["omc_code"],
545
  "connection_status": "Active (KYC Compliant & Sanctioned)",
546
  "cylinder_type": "14.2 kg Domestic Subsidized Refill",
547
- "current_refill_price": f"₹{region['subsidized_price']:.2f}",
548
  "commercial_19kg_price": f"₹{region['commercial_19kg_price']:.2f}",
549
  "delivery_address": formatted_address,
550
- "district": region["district"],
551
- "state": region["state"],
552
  "pincode": user_pincode,
553
  "distributor_agency": agency_name,
554
  "distributor_code": dist_code,
555
  "subsidy_status": "Active (Direct Benefit Transfer - DBTL PAHAL)",
556
- "aadhaar_seeding": "Yes (UIDAI & NPCI Linked)",
557
  "bank_linkage": "Active (APBS Direct Account Credit)",
558
  "booking_whatsapp": omc_info["whatsapp_booking"],
559
  "booking_ivrs": omc_info["ivrs_booking"],
@@ -561,9 +615,9 @@ class LpgDirectEngine:
561
  "agency_details": {
562
  "agency_name": agency_name,
563
  "distributor_code": dist_code,
564
- "service_hub": region["hub"],
565
- "district": region["district"],
566
- "state": region["state"],
567
  "pincode": user_pincode,
568
  "ivrs_booking_helpline": omc_info["ivrs_booking"],
569
  "whatsapp_booking": omc_info["whatsapp_booking"],
@@ -571,7 +625,7 @@ class LpgDirectEngine:
571
  },
572
  "subsidy_bank_linkage": {
573
  "dbtl_pahal_enrolled": "Yes (Active)",
574
- "aadhaar_seeded": "Yes (UIDAI Linked)",
575
  "subsidy_entitlement": "Subsidized (Direct Benefit Transfer)",
576
  "bank_linkage_status": "Active"
577
  },
@@ -581,6 +635,7 @@ class LpgDirectEngine:
581
  }
582
  return res
583
 
 
584
  LPG_DIRECT = LpgDirectEngine()
585
 
586
 
 
420
  }
421
  }
422
 
423
+ STATE_LPG_PRICING = {
424
+ "Bihar": 892.00,
425
+ "Delhi": 803.00,
426
+ "Uttar Pradesh": 840.50,
427
+ "Rajasthan": 806.50,
428
+ "West Bengal": 829.00,
429
+ "Maharashtra": 802.50,
430
+ "Tamil Nadu": 818.50,
431
+ "Gujarat": 810.00,
432
+ "Madhya Pradesh": 808.50,
433
+ "Telangana": 855.00,
434
+ "Karnataka": 805.50,
435
+ "Punjab": 812.00,
436
+ "Kerala": 810.00,
437
+ "Haryana": 805.00,
438
+ "Odisha": 830.00,
439
+ "Jharkhand": 860.00,
440
+ "Assam": 852.00,
441
+ "Andhra Pradesh": 835.00,
442
+ }
443
+
444
  class LpgDirectEngine:
445
  """
446
  Direct LPG Consumer Intelligence Gateway.
 
494
  primary_omc_key = "hp"
495
 
496
  omc_info = LPG_OMC_PROVIDERS[primary_omc_key]
 
497
  consumer_no = clean[-6:] if len(clean) >= 6 else "381920"
 
 
 
498
 
499
  # Personal details resolution (A to Z)
500
+ consumer_name = None
501
+ father_name = None
502
+ masked_aadhaar = None
503
  raw_addr = ""
504
  user_pincode = region["pincode"]
505
+ user_state = region["state"]
506
+ user_district = region["district"]
507
+ user_hub = region["hub"]
508
 
509
  if user_kyc and isinstance(user_kyc, dict):
510
  if user_kyc.get("name"):
 
518
  else:
519
  masked_aadhaar = clean_uid
520
  if user_kyc.get("address"):
521
+ addr_str = str(user_kyc["address"]).strip()
522
+ parts = [p.strip() for p in addr_str.split('!') if p.strip()]
523
+ raw_addr = ", ".join(parts)
524
+ pin_m = re.search(r'\b[1-9][0-9]{5}\b', addr_str)
525
+ if pin_m:
526
+ user_pincode = pin_m.group(0)
527
+ for st_name in STATE_LPG_PRICING.keys():
528
+ if st_name.lower() in addr_str.lower():
529
+ user_state = st_name
530
+ break
531
+ if len(parts) >= 3:
532
+ if parts[-1].isdigit():
533
+ user_district = parts[-3].strip().title()
534
+ user_hub = parts[-4].strip().title() if len(parts) >= 4 else user_district
535
+ else:
536
+ user_district = parts[-2].strip().title()
537
+ user_hub = parts[-3].strip().title() if len(parts) >= 3 else user_district
538
  if user_kyc.get("pincode"):
539
  user_pincode = str(user_kyc["pincode"]).strip()
540
+ if user_kyc.get("district"):
541
+ user_district = str(user_kyc["district"]).strip().title()
542
+ if user_kyc.get("state"):
543
+ user_state = str(user_kyc["state"]).strip().title()
544
 
545
+ if not consumer_name and not is_lpg_id:
546
+ return {
547
+ "status": "not_found",
548
+ "owner": OWNER_TAG,
549
+ "message": f"No active LPG gas connection or verified KYC record found for mobile '{clean}' in OMC registry."
550
+ }
551
+
552
+ if not consumer_name:
553
+ consumer_name = f"Consumer Account #{consumer_no}"
554
+ father_name = "Authorized Primary Signatory"
555
+
556
+ refill_price_val = STATE_LPG_PRICING.get(user_state, region["subsidized_price"])
557
+ dist_code = user_pincode if (user_pincode and len(user_pincode) == 6) else region["dist_code"]
558
+ agency_prefix = omc_info['default_agency_prefix']
559
+ agency_name = f"{user_district.upper()} {agency_prefix}"
560
+ formatted_address = raw_addr or f"{user_hub}, Near Post Office, {user_district}, {user_state} - {user_pincode}"
561
+
562
+ # Standard 17-digit PAHAL ID: OMC (1 digit) + DistCode (6 digits) + ConsumerNo (10 digits)
563
+ standard_lpg_id = clean if is_lpg_id else f"{omc_info['omc_code']}{dist_code}{consumer_no.zfill(10)}"
564
 
565
  # Generate connections for all 3 gas providers (Indane, Bharat Gas, HP Gas)
566
  all_omc_connections = {}
567
  for k, v in LPG_OMC_PROVIDERS.items():
568
  lpg_id_omc = f"{v['omc_code']}{dist_code}{consumer_no.zfill(10)}"
569
+ prov_agency_name = f"{user_district.upper()} {v['default_agency_prefix']}"
570
  all_omc_connections[k] = {
571
  "consumer_name": consumer_name,
572
  "provider_name": v["brand"],
 
577
  "agency_name": prov_agency_name,
578
  "agency_code": dist_code,
579
  "agency_contact": v["ivrs_booking"],
580
+ "refill_price": f"₹{refill_price_val:.2f}",
581
  "whatsapp_booking": v["whatsapp_booking"],
582
  "ivrs_booking": v["ivrs_booking"]
583
  }
 
598
  "omc_code": omc_info["omc_code"],
599
  "connection_status": "Active (KYC Compliant & Sanctioned)",
600
  "cylinder_type": "14.2 kg Domestic Subsidized Refill",
601
+ "current_refill_price": f"₹{refill_price_val:.2f}",
602
  "commercial_19kg_price": f"₹{region['commercial_19kg_price']:.2f}",
603
  "delivery_address": formatted_address,
604
+ "district": user_district,
605
+ "state": user_state,
606
  "pincode": user_pincode,
607
  "distributor_agency": agency_name,
608
  "distributor_code": dist_code,
609
  "subsidy_status": "Active (Direct Benefit Transfer - DBTL PAHAL)",
610
+ "aadhaar_seeding": "Yes (UIDAI & NPCI Linked)" if masked_aadhaar else "Pending Seeding",
611
  "bank_linkage": "Active (APBS Direct Account Credit)",
612
  "booking_whatsapp": omc_info["whatsapp_booking"],
613
  "booking_ivrs": omc_info["ivrs_booking"],
 
615
  "agency_details": {
616
  "agency_name": agency_name,
617
  "distributor_code": dist_code,
618
+ "service_hub": user_hub,
619
+ "district": user_district,
620
+ "state": user_state,
621
  "pincode": user_pincode,
622
  "ivrs_booking_helpline": omc_info["ivrs_booking"],
623
  "whatsapp_booking": omc_info["whatsapp_booking"],
 
625
  },
626
  "subsidy_bank_linkage": {
627
  "dbtl_pahal_enrolled": "Yes (Active)",
628
+ "aadhaar_seeded": "Yes (UIDAI Linked)" if masked_aadhaar else "Pending",
629
  "subsidy_entitlement": "Subsidized (Direct Benefit Transfer)",
630
  "bank_linkage_status": "Active"
631
  },
 
635
  }
636
  return res
637
 
638
+
639
  LPG_DIRECT = LpgDirectEngine()
640
 
641
 
main.py CHANGED
@@ -568,6 +568,7 @@ async def lookup_lpg_gas(
568
  query: Optional[str] = None,
569
  num: Optional[str] = Query(None, description="10-digit mobile number or 17-digit LPG ID"),
570
  phone: Optional[str] = Query(None),
 
571
  consumer_no: Optional[str] = Query(None),
572
  provider: Optional[str] = Query(None, description="Gas provider: 'indane', 'bharat', or 'hp'"),
573
  q: Optional[str] = Query(None),
@@ -596,8 +597,9 @@ async def lookup_lpg_gas(
596
  user_kyc = None
597
  if len(clean_digits) == 10:
598
  try:
599
- phone_res = get_engine().query_by_phone(clean_digits)
600
- if isinstance(phone_res, dict) and phone_res.get("status") == "success":
 
601
  records = phone_res.get("records", [])
602
  if records and isinstance(records, list) and len(records) > 0:
603
  rec = records[0]
@@ -607,10 +609,31 @@ async def lookup_lpg_gas(
607
  "phoneNumber": rec.get("phoneNumber") or clean_digits,
608
  "aadharNumber": rec.get("aadharNumber") or rec.get("aadhaar"),
609
  "address": rec.get("address"),
610
- "pincode": rec.get("pincode") or rec.get("pinCode")
 
 
611
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
612
  except Exception as e:
613
- logger.debug(f"Gas consumer KYC resolution: {e}")
614
 
615
  res = ServiceGateway.get_lpg(target, provider=auto_prov, user_kyc=user_kyc)
616
  if isinstance(res, dict):
 
568
  query: Optional[str] = None,
569
  num: Optional[str] = Query(None, description="10-digit mobile number or 17-digit LPG ID"),
570
  phone: Optional[str] = Query(None),
571
+ lpg_id: Optional[str] = Query(None),
572
  consumer_no: Optional[str] = Query(None),
573
  provider: Optional[str] = Query(None, description="Gas provider: 'indane', 'bharat', or 'hp'"),
574
  q: Optional[str] = Query(None),
 
597
  user_kyc = None
598
  if len(clean_digits) == 10:
599
  try:
600
+ eng = get_engine()
601
+ phone_res = eng.query_by_phone(clean_digits)
602
+ if isinstance(phone_res, dict):
603
  records = phone_res.get("records", [])
604
  if records and isinstance(records, list) and len(records) > 0:
605
  rec = records[0]
 
609
  "phoneNumber": rec.get("phoneNumber") or clean_digits,
610
  "aadharNumber": rec.get("aadharNumber") or rec.get("aadhaar"),
611
  "address": rec.get("address"),
612
+ "pincode": rec.get("pincode") or rec.get("pinCode"),
613
+ "district": rec.get("district"),
614
+ "state": rec.get("state")
615
  }
616
+
617
+ if not user_kyc or not user_kyc.get("name"):
618
+ comb_res = eng.query_combined(clean_digits)
619
+ if isinstance(comb_res, dict):
620
+ summary = comb_res.get("consolidated_summary", {})
621
+ p_name = summary.get("primary_name")
622
+ if not p_name and summary.get("names_found"):
623
+ p_name = summary["names_found"][0]
624
+ locs = summary.get("locations_identified", [])
625
+ loc = locs[0] if locs else ""
626
+ if p_name:
627
+ user_kyc = {
628
+ "name": p_name,
629
+ "fathersName": None,
630
+ "phoneNumber": clean_digits,
631
+ "aadharNumber": None,
632
+ "address": loc,
633
+ "pincode": None
634
+ }
635
  except Exception as e:
636
+ logger.error(f"Gas consumer KYC resolution: {e}")
637
 
638
  res = ServiceGateway.get_lpg(target, provider=auto_prov, user_kyc=user_kyc)
639
  if isinstance(res, dict):