biller-cli 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. biller_cli/__init__.py +0 -0
  2. biller_cli/ai/__init__.py +397 -0
  3. biller_cli/ai/ingest.py +394 -0
  4. biller_cli/commands/down.py +96 -0
  5. biller_cli/commands/downgrade.py +142 -0
  6. biller_cli/commands/init.py +210 -0
  7. biller_cli/commands/up.py +138 -0
  8. biller_cli/commands/upgrade.py +271 -0
  9. biller_cli/main.py +34 -0
  10. biller_cli/templates/biller-user-layer/pom.xml +100 -0
  11. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/ApplicationContext.java +13 -0
  12. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/config/DatabaseConfig.java +35 -0
  13. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/config/WebCorsConfig.java +21 -0
  14. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/controller/BbpsRequestController.java +98 -0
  15. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/dao/impl/BillFetchDaoImpl.java +135 -0
  16. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/dao/impl/BillPaymentDaoImpl.java +100 -0
  17. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/provider/BillingProviderConfig.java +34 -0
  18. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/provider/BillingProviderProperties.java +92 -0
  19. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/provider/impl/CsvBillingProvider.java +257 -0
  20. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/provider/impl/ExcelBillingProvider.java +261 -0
  21. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/provider/impl/PostgresBillingProvider.java +210 -0
  22. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/service/impl/BillFetchServiceImpl.java +131 -0
  23. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/service/impl/BillPaymentServiceImpl.java +175 -0
  24. biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/service/impl/HeartbeatServiceImpl.java +136 -0
  25. biller_cli/templates/biller-user-layer/src/main/resources/application.properties +88 -0
  26. biller_cli/templates/pom.xml +33 -0
  27. biller_cli/utils/preflight.py +151 -0
  28. biller_cli/utils/secrets.py +37 -0
  29. biller_cli/utils/version_pin.py +67 -0
  30. biller_cli-0.1.0.dist-info/METADATA +17 -0
  31. biller_cli-0.1.0.dist-info/RECORD +33 -0
  32. biller_cli-0.1.0.dist-info/WHEEL +4 -0
  33. biller_cli-0.1.0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,88 @@
1
+ server.port=${SERVER_PORT:8111}
2
+ app.cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:3000}
3
+
4
+ # Database
5
+ spring.datasource.url=${DB_URL:jdbc:postgresql://localhost:5432/billerdb?currentSchema=billerdb}
6
+ spring.datasource.username=${DB_USERNAME:postgres}
7
+ spring.datasource.password=${DB_PASSWORD:postgres}
8
+ spring.datasource.driver-class-name=org.postgresql.Driver
9
+ spring.jpa.hibernate.ddl-auto=update
10
+ spring.jpa.show-sql=true
11
+ spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
12
+ spring.sql.init.schema-locations=classpath:schema.sql
13
+ spring.sql.init.mode=always
14
+ spring.main.allow-bean-definition-overriding=true
15
+
16
+ # BOU Connection
17
+ bou.domain=${BOU_DOMAIN:http://localhost:8112}
18
+ bou.billfetchrequest.url=/bbps/BillFetchRequest/1.0/urn:referenceId:
19
+ bou.billpaymentrequest.url=/bbps/BillPaymentRequest/1.0/urn:referenceId:
20
+ bou.billfetchresponse.url=/bbps/BillFetchResponse/1.0/urn:referenceId:
21
+ bou.billpaymentresponse.url=/bbps/BillPaymentResponse/1.0/urn:referenceId:
22
+
23
+ # BBPS
24
+ bbps.ip=${BBPS_IP:http://localhost:8113}
25
+ bbps.billfetchresponse.url=${bou.billfetchresponse.url}
26
+ bbps.billpaymentresponse.url=${bou.billpaymentresponse.url}
27
+ hbt.frequency=3
28
+
29
+ # OU Identity — set PENDING until BBPS assigns your OU ID
30
+ # Run 'biller activate' after receiving your OU ID from BBPS
31
+ ou.id=${OU_ID:PENDING}
32
+
33
+ # Certificate — never hardcode, never commit ousigner.p12
34
+ bbps.cert.path=${BBPS_CERT_PATH:config/certificate/OU/ousigner.p12}
35
+ bbps.cert.password=${BBPS_CERT_PASSWORD:changeit}
36
+ bbps.sign-method=RSA_SHA256
37
+
38
+ # Billing Provider
39
+ billing.provider.type=${BILLING_PROVIDER_TYPE:postgres}
40
+ billing.provider.date-format=yyyy-MM-ddx
41
+
42
+ billing.provider.postgres.tables.bill-details=bill_details
43
+ billing.provider.postgres.tables.payment-transactions=payment_transactions
44
+ billing.provider.postgres.bill-columns.bill-id=bill_id
45
+ billing.provider.postgres.bill-columns.customer-param-name=customer_param_name
46
+ billing.provider.postgres.bill-columns.customer-param-type=customer_param_type
47
+ billing.provider.postgres.bill-columns.customer-param-value=customer_param_value
48
+ billing.provider.postgres.bill-columns.bill-amount=bill_amount
49
+ billing.provider.postgres.bill-columns.bill-date=bill_date
50
+ billing.provider.postgres.bill-columns.due-date=due_date
51
+ billing.provider.postgres.bill-columns.bill-number=bill_number
52
+ billing.provider.postgres.bill-columns.bill-period=bill_period
53
+ billing.provider.postgres.bill-columns.bill-status=bill_status
54
+ billing.provider.postgres.bill-columns.additional-info=additional_info
55
+ billing.provider.postgres.bill-columns.created-at=created_at
56
+ billing.provider.postgres.bill-columns.updated-at=updated_at
57
+ billing.provider.postgres.payment-columns.bill-id=bill_id
58
+ billing.provider.postgres.payment-columns.bbps-txn-ref=bbps_txn_ref
59
+ billing.provider.postgres.payment-columns.amount-paid=amount_paid
60
+ billing.provider.postgres.payment-columns.payment-mode=payment_mode
61
+
62
+ billing.provider.csv.path=${CSV_PATH:}
63
+ billing.provider.csv.payment-log-path=${CSV_PAYMENT_LOG_PATH:}
64
+ billing.provider.csv.delimiter=,
65
+ billing.provider.csv.columns.bill-id=bill_id
66
+ billing.provider.csv.columns.customer-param-name=customer_param_name
67
+ billing.provider.csv.columns.customer-param-type=customer_param_type
68
+ billing.provider.csv.columns.customer-param-value=customer_param_value
69
+ billing.provider.csv.columns.bill-amount=bill_amount
70
+ billing.provider.csv.columns.bill-date=bill_date
71
+ billing.provider.csv.columns.due-date=due_date
72
+ billing.provider.csv.columns.bill-number=bill_number
73
+ billing.provider.csv.columns.bill-period=bill_period
74
+ billing.provider.csv.columns.bill-status=bill_status
75
+
76
+ billing.provider.excel.path=${EXCEL_PATH:}
77
+ billing.provider.excel.sheet-name=Sheet1
78
+ billing.provider.excel.payment-log-path=${EXCEL_PAYMENT_LOG_PATH:}
79
+ billing.provider.excel.columns.bill-id=bill_id
80
+ billing.provider.excel.columns.customer-param-name=customer_param_name
81
+ billing.provider.excel.columns.customer-param-type=customer_param_type
82
+ billing.provider.excel.columns.customer-param-value=customer_param_value
83
+ billing.provider.excel.columns.bill-amount=bill_amount
84
+ billing.provider.excel.columns.bill-date=bill_date
85
+ billing.provider.excel.columns.due-date=due_date
86
+ billing.provider.excel.columns.bill-number=bill_number
87
+ billing.provider.excel.columns.bill-period=bill_period
88
+ billing.provider.excel.columns.bill-status=bill_status
@@ -0,0 +1,33 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project xmlns="http://maven.apache.org/POM/4.0.0"
3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+ <modelVersion>4.0.0</modelVersion>
6
+
7
+ <parent>
8
+ <groupId>org.springframework.boot</groupId>
9
+ <artifactId>spring-boot-starter-parent</artifactId>
10
+ <version>3.2.0</version>
11
+ <relativePath/>
12
+ </parent>
13
+
14
+ <groupId>com.bharatconnect.biller</groupId>
15
+ <artifactId>test-biller-integrator</artifactId>
16
+ <version>1.0.0</version>
17
+ <packaging>pom</packaging>
18
+
19
+ <modules>
20
+ <module>biller-user-layer</module>
21
+ </modules>
22
+
23
+ <properties>
24
+ <java.version>17</java.version>
25
+ </properties>
26
+ <repositories>
27
+ <repository>
28
+ <id>github</id>
29
+ <url>https://maven.pkg.github.com/Dhru227/biller-core</url>
30
+ </repository>
31
+ </repositories>
32
+
33
+ </project>
@@ -0,0 +1,151 @@
1
+ import shutil, subprocess, sys
2
+ from rich.console import Console
3
+ from enum import Enum
4
+
5
+ console = Console()
6
+
7
+ class RuntimeMode(Enum):
8
+ DOCKER = "docker"
9
+ NATIVE = "native"
10
+ NONE = "none"
11
+
12
+ # ── Individual check functions ────────────────────────────────────────────────
13
+
14
+ def _check_python() -> bool:
15
+ return sys.version_info >= (3, 10)
16
+
17
+ def _check_git() -> bool:
18
+ return shutil.which("git") is not None
19
+
20
+ def _check_java() -> bool:
21
+ if not shutil.which("java"):
22
+ return False
23
+ result = subprocess.run(["java", "-version"], capture_output=True, text=True)
24
+ output = result.stderr + result.stdout
25
+ for line in output.splitlines():
26
+ if "version" in line:
27
+ try:
28
+ version_str = line.split('"')[1]
29
+ major = int(version_str.split(".")[0])
30
+ if major == 1: # legacy 1.8.x format
31
+ major = int(version_str.split(".")[1])
32
+ return major >= 17
33
+ except (IndexError, ValueError):
34
+ return False
35
+ return False
36
+
37
+ def _check_maven() -> bool:
38
+ return shutil.which("mvn") is not None
39
+
40
+ def _check_docker_installed() -> bool:
41
+ return shutil.which("docker") is not None
42
+
43
+ def _check_docker_daemon() -> bool:
44
+ if not _check_docker_installed():
45
+ return False
46
+ result = subprocess.run(["docker", "info"], capture_output=True)
47
+ return result.returncode == 0
48
+
49
+ # ── Runtime detection ─────────────────────────────────────────────────────────
50
+
51
+ def detect_runtime() -> RuntimeMode:
52
+ """
53
+ Returns the best available runtime:
54
+ docker — Docker installed AND daemon running
55
+ native — No Docker (or daemon down), but Java 17+ and Maven present
56
+ none — Neither viable
57
+ """
58
+ if _check_docker_daemon():
59
+ return RuntimeMode.DOCKER
60
+ if _check_java() and _check_maven():
61
+ return RuntimeMode.NATIVE
62
+ return RuntimeMode.NONE
63
+
64
+ # ── Pre-flight gate ───────────────────────────────────────────────────────────
65
+
66
+ UNIVERSAL_CHECKS = [
67
+ {
68
+ "name": "Python >= 3.10",
69
+ "check": _check_python,
70
+ "fix": "Upgrade Python: https://python.org",
71
+ },
72
+ {
73
+ "name": "Git",
74
+ "check": _check_git,
75
+ "fix": "Install Git: sudo apt-get install git",
76
+ },
77
+ ]
78
+
79
+ NATIVE_CHECKS = [
80
+ {
81
+ "name": "Java 17+",
82
+ "check": _check_java,
83
+ "fix": "Install Java: sudo apt-get install openjdk-17-jdk\n"
84
+ " Or: https://adoptium.net",
85
+ },
86
+ {
87
+ "name": "Maven",
88
+ "check": _check_maven,
89
+ "fix": "Install Maven: sudo apt-get install maven\n"
90
+ " Or: https://maven.apache.org/install.html",
91
+ },
92
+ ]
93
+
94
+ def run_preflight(require_runtime: bool = True) -> RuntimeMode:
95
+ """
96
+ Run all pre-flight checks. Returns the detected RuntimeMode.
97
+ Exits with a clear message if any universal check fails,
98
+ or if require_runtime=True and no runtime is viable.
99
+ """
100
+ # Universal checks — must always pass
101
+ failed = []
102
+ for item in UNIVERSAL_CHECKS:
103
+ try:
104
+ passed = item["check"]()
105
+ except Exception:
106
+ passed = False
107
+ if not passed:
108
+ failed.append(item)
109
+
110
+ if failed:
111
+ console.print("\n[red]Pre-flight failed:[/red]\n")
112
+ for item in failed:
113
+ console.print(f" [red]✗[/red] {item['name']}")
114
+ console.print(f" → {item['fix']}\n")
115
+ raise SystemExit(1)
116
+
117
+ # Runtime detection
118
+ runtime = detect_runtime()
119
+
120
+ if runtime == RuntimeMode.DOCKER:
121
+ console.print("[dim]Runtime: Docker ✓[/dim]")
122
+
123
+ elif runtime == RuntimeMode.NATIVE:
124
+ console.print("[yellow]Docker not available — using native Maven mode.[/yellow]")
125
+ failed_native = []
126
+ for item in NATIVE_CHECKS:
127
+ try:
128
+ passed = item["check"]()
129
+ except Exception:
130
+ passed = False
131
+ if not passed:
132
+ failed_native.append(item)
133
+ if failed_native:
134
+ console.print("\n[red]Native mode also unavailable:[/red]\n")
135
+ for item in failed_native:
136
+ console.print(f" [red]✗[/red] {item['name']}")
137
+ console.print(f" → {item['fix']}\n")
138
+ raise SystemExit(1)
139
+
140
+ elif runtime == RuntimeMode.NONE and require_runtime:
141
+ console.print("\n[red]No viable runtime found.[/red]")
142
+ console.print("biller-cli needs either:\n")
143
+ console.print(" [bold]Docker (recommended)[/bold]")
144
+ console.print(" sudo apt-get install docker.io")
145
+ console.print(" sudo systemctl start docker")
146
+ console.print(" sudo usermod -aG docker $USER # then log out and back in\n")
147
+ console.print(" [bold]OR: Java 17+ and Maven[/bold]")
148
+ console.print(" sudo apt-get install openjdk-17-jdk maven\n")
149
+ raise SystemExit(1)
150
+
151
+ return runtime
@@ -0,0 +1,37 @@
1
+ from pathlib import Path
2
+ from rich.console import Console
3
+
4
+ console = Console()
5
+
6
+ def write_env_file(project_dir: Path, secrets: dict):
7
+ """Write sensitive values to .env.biller. Never call yaml.dump on these."""
8
+ env_file = project_dir / ".env.biller"
9
+ lines = ["# Biller secrets — DO NOT COMMIT\n"]
10
+ for key, value in secrets.items():
11
+ lines.append(f"{key.upper()}={value}\n")
12
+ env_file.write_text("".join(lines))
13
+ _ensure_gitignore(project_dir)
14
+ console.print(f"[dim]Secrets → {env_file} (git-ignored)[/dim]")
15
+
16
+ def read_env_file(project_dir: Path) -> dict:
17
+ """Reads secrets back for native mode injection."""
18
+ env_file = project_dir / ".env.biller"
19
+ if not env_file.exists():
20
+ return {}
21
+ result = {}
22
+ for line in env_file.read_text().splitlines():
23
+ if "=" in line and not line.startswith("#"):
24
+ k, v = line.split("=", 1)
25
+ result[k.lower()] = v
26
+ return result
27
+
28
+ def _ensure_gitignore(project_dir: Path):
29
+ """Guarantees .env.biller is ignored in the user's generated repo."""
30
+ gitignore = project_dir / ".gitignore"
31
+ entry = ".env.biller"
32
+ if gitignore.exists():
33
+ if entry not in gitignore.read_text():
34
+ with gitignore.open("a") as f:
35
+ f.write(f"\n# Biller secrets — auto-added by biller-cli\n{entry}\n")
36
+ else:
37
+ gitignore.write_text(f"# Biller secrets\n{entry}\n")
@@ -0,0 +1,67 @@
1
+ """
2
+ Shared utility for reading and writing the biller-core version pin.
3
+
4
+ Used by both `biller-cli upgrade` and `biller-cli downgrade`.
5
+ Updates two files atomically:
6
+ - biller.yaml → core.version
7
+ - pom.xml → properties/biller.core.version
8
+
9
+ Uses an XML parser (not regex) so POM reformatting by IDEs or Maven
10
+ does not silently break the update.
11
+ """
12
+
13
+ import xml.etree.ElementTree as ET
14
+ from pathlib import Path
15
+ import yaml
16
+
17
+
18
+ MAVEN_NS = "http://maven.apache.org/POM/4.0.0"
19
+
20
+
21
+ def get_version_pin(project_dir: Path) -> str:
22
+ """Return the currently pinned biller-core version from biller.yaml."""
23
+ bp = project_dir / "biller.yaml"
24
+ if not bp.exists():
25
+ raise FileNotFoundError(f"biller.yaml not found in {project_dir}")
26
+ cfg = yaml.safe_load(bp.read_text())
27
+ version = cfg.get("core", {}).get("version")
28
+ if not version:
29
+ raise KeyError("core.version not found in biller.yaml")
30
+ return version
31
+
32
+
33
+ def set_version_pin(project_dir: Path, version: str) -> None:
34
+ """
35
+ Write version to both biller.yaml and pom.xml.
36
+
37
+ Raises RuntimeError if biller.core.version property is missing from pom.xml —
38
+ this means the pom.xml was not scaffolded correctly and should not be silently fixed.
39
+ """
40
+ # 1. biller.yaml
41
+ bp = project_dir / "biller.yaml"
42
+ cfg = yaml.safe_load(bp.read_text())
43
+ if "core" not in cfg:
44
+ cfg["core"] = {}
45
+ cfg["core"]["version"] = version
46
+ bp.write_text(yaml.dump(cfg, default_flow_style=False, sort_keys=False))
47
+
48
+ # 2. pom.xml — use XML parser, never regex
49
+ pom_path = project_dir / "pom.xml"
50
+ if not pom_path.exists():
51
+ raise FileNotFoundError(f"pom.xml not found in {project_dir}")
52
+
53
+ ET.register_namespace("", MAVEN_NS)
54
+ tree = ET.parse(pom_path)
55
+ root = tree.getroot()
56
+ ns = {"m": MAVEN_NS}
57
+
58
+ prop = root.find(".//m:properties/m:biller.core.version", ns)
59
+ if prop is None:
60
+ raise RuntimeError(
61
+ "biller.core.version not found in pom.xml <properties>. "
62
+ "The pom.xml may not have been scaffolded by biller-cli init. "
63
+ "Add: <biller.core.version>VERSION</biller.core.version> under <properties>."
64
+ )
65
+
66
+ prop.text = version
67
+ tree.write(str(pom_path), xml_declaration=True, encoding="unicode")
@@ -0,0 +1,17 @@
1
+ Metadata-Version: 2.4
2
+ Name: biller-cli
3
+ Version: 0.1.0
4
+ Requires-Python: >=3.10
5
+ Requires-Dist: gitpython>=3.1
6
+ Requires-Dist: packaging>=24.0
7
+ Requires-Dist: psutil>=5.9
8
+ Requires-Dist: pyyaml>=6
9
+ Requires-Dist: requests>=2.31
10
+ Requires-Dist: rich>=13
11
+ Requires-Dist: typer[all]>=0.12
12
+ Provides-Extra: dev
13
+ Requires-Dist: mypy; extra == 'dev'
14
+ Requires-Dist: pytest; extra == 'dev'
15
+ Requires-Dist: pytest-cov; extra == 'dev'
16
+ Requires-Dist: pytest-mock; extra == 'dev'
17
+ Requires-Dist: ruff; extra == 'dev'
@@ -0,0 +1,33 @@
1
+ biller_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ biller_cli/main.py,sha256=gFvdGyN_UlBy7Ht8WZWB6UobZnYB-JzS4CUihChO0ac,922
3
+ biller_cli/ai/__init__.py,sha256=Ejvyx2lme4yg2xCVs5ET8D09CE5hcBxJinkmGJS46n0,14011
4
+ biller_cli/ai/ingest.py,sha256=J-xZNq7Dc0n2HGI6kutg7AydN8NAMvoV5ORTNWko4x4,13760
5
+ biller_cli/commands/down.py,sha256=sfU_YfLui5h0a1goOQbQHhNLezQ5mElp_gt6F6Vc3tc,3134
6
+ biller_cli/commands/downgrade.py,sha256=lHXLDvoZTLVGni6rGcM6jqauyV0z_FtmaaNz7qim78Q,5581
7
+ biller_cli/commands/init.py,sha256=LWW7oZrkV_qea1ZbeZKMGqYptJyjvIzm5CS1NNjamBw,8272
8
+ biller_cli/commands/up.py,sha256=U_98YrILMGCGHPGuMd0K2h_G02GBiG1UUGLWBQXLuYA,5309
9
+ biller_cli/commands/upgrade.py,sha256=cnv0Lq8ampvghkPb6u8KHDn1fs2OXS3WPHwGzcmHBqs,10561
10
+ biller_cli/templates/pom.xml,sha256=Nyz1XFv9a88eOE2dTk1J8ILCnI5Vw0z1fynpTDNMgho,1001
11
+ biller_cli/templates/biller-user-layer/pom.xml,sha256=ulmmNEb9_zGleI8b7sqxAQ8eldh-h1TQkFhQsPx9C4g,3777
12
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/ApplicationContext.java,sha256=nOL_aDmnyHul2slLqVDmfYvFucXeNfGSwEtj2wjeA3o,458
13
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/config/DatabaseConfig.java,sha256=wAeuqP0xxp9e7mQqyF1Dg_IfX1Jaajgn5T8z2fbe9CA,1452
14
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/config/WebCorsConfig.java,sha256=vpMit5img8pHIljuZVRhFl8q_dhWqyioPdZuWf6Bt1w,756
15
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/controller/BbpsRequestController.java,sha256=EbqzPzo6B6zDS3wK8aNCUf6Rsw8ZAW6fuDjqx54najA,4518
16
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/dao/impl/BillFetchDaoImpl.java,sha256=Nq9LFrCz0VW2EKftofdKLo76a_IuuPT8_C6hhxZHBqI,6346
17
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/dao/impl/BillPaymentDaoImpl.java,sha256=s7ciaoUVZyg5Sh6whOvkCU8mFJs2qczndGvRrozGNdI,4441
18
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/provider/BillingProviderConfig.java,sha256=ZIqxuBaX91ulr-Wn6ZTfc-oji5LsC-P2MBU6k5n1tmY,1728
19
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/provider/BillingProviderProperties.java,sha256=DKlUbUrBJ1siYjyU6egOhiO8EcLiiO7lLMbHSel_Wlw,2992
20
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/provider/impl/CsvBillingProvider.java,sha256=3Vrq298FjqLxk0tqdj6XXZR4wiUZeGfuC6rfQI5S7Zo,10813
21
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/provider/impl/ExcelBillingProvider.java,sha256=Mzm0DIFRn6nNGdddBR8AkMBCxtuACgbdR9woL0cp76o,11647
22
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/provider/impl/PostgresBillingProvider.java,sha256=CJmMmx-ot5WWV6SKSz49tpBs7cqL73aF7GtFABHc9rw,9930
23
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/service/impl/BillFetchServiceImpl.java,sha256=YCFoBqFxH7KqKucf4JgC3FRuF8ilxUrtZaAKBew9d5I,5682
24
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/service/impl/BillPaymentServiceImpl.java,sha256=jvqD35Zm8bpBE99oGdton_Gv06TXpnWxw4d6wRiAi_w,7388
25
+ biller_cli/templates/biller-user-layer/src/main/java/bharat/connect/biller/service/impl/HeartbeatServiceImpl.java,sha256=38f2MXalCzaslKamp-Sc_sWTAiVXaZwLpvgAtvBhNuE,5755
26
+ biller_cli/templates/biller-user-layer/src/main/resources/application.properties,sha256=NCarEJ8hCD-tMACPCkJM_BLNKak5tpHGnj3fVY5NVAs,4331
27
+ biller_cli/utils/preflight.py,sha256=Bplsupr3jB_m6fIT7jY7vkyJJ0Z-hiAh5-cnK2pDyzI,5274
28
+ biller_cli/utils/secrets.py,sha256=jPO_aEJ4ZBjXbzPK0lVkFUrTZ8t23fq1MUUXfXToEqE,1407
29
+ biller_cli/utils/version_pin.py,sha256=8GJe56Hw-JmT8QdVKYfs4axZ74UIG8HYYJyVUF6bTew,2276
30
+ biller_cli-0.1.0.dist-info/METADATA,sha256=0jDxZE1f8UD-LQ0DXrG6TcJnNPMwr0ulZ-vRqOeCqtI,492
31
+ biller_cli-0.1.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
32
+ biller_cli-0.1.0.dist-info/entry_points.txt,sha256=CkwW_8TCDaqkvl2_lxt12SxJ3AQjWfgudXVYVIeA9mM,51
33
+ biller_cli-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.29.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ biller-cli = biller_cli.main:app