added bankwise file monitoring and calling the ach_api_txn_post procedure after each run

This commit is contained in:
2026-02-05 11:58:59 +05:30
parent ca3095b8f5
commit 81ad34fd65
2 changed files with 49 additions and 8 deletions

View File

@@ -68,20 +68,30 @@ class Scheduler:
logger.error("Failed to connect to SFTP server")
return
# Get list of already processed files
processed_files = set()
for bank_code in self.config.bank_codes:
bank_processed = repository.get_processed_files(bank_code)
processed_files.update(bank_processed)
# Scan for new files
# Scan for new files across all banks
monitor = FileMonitor(sftp_client)
new_files = monitor.scan_for_new_files(list(processed_files))
new_files = []
for bank_code in self.config.bank_codes:
# Get list of files already processed for this specific bank
bank_processed = repository.get_processed_files(bank_code)
remote_path = f"{self.config.sftp_base_path}/{bank_code}/NACH"
files = sftp_client.list_files(remote_path, pattern='ACH_*.txt')
for filename in files:
if filename not in bank_processed:
full_path = f"{remote_path}/{filename}"
new_files.append((filename, bank_code, full_path))
logger.info(f"Found new file: {filename} (bank: {bank_code})")
else:
logger.debug(f"Skipping already processed file for {bank_code}: {filename}")
if not new_files:
logger.info("No new files to process")
return
logger.info(f"Found {len(new_files)} new files to process")
# Process files
processor = FileProcessor(repository, sftp_client)
stats = processor.process_files(new_files)
@@ -92,6 +102,14 @@ class Scheduler:
logger.info(f" Successful: {stats['successful']}")
logger.info(f" Failed: {stats['failed']}")
# Call ach_api_txn_post procedure once per cycle to process all inserted transactions
if stats['successful'] > 0:
logger.info("Calling ach_api_txn_post procedure for all inserted transactions...")
if repository.call_ach_api_txn_post():
logger.info("Transaction post-processing completed successfully")
else:
logger.error("Transaction post-processing failed")
except Exception as e:
logger.error(f"Error in processing cycle: {e}", exc_info=True)