{"id":50697402,"url":"https://github.com/ysocrius/django-credit-approval","last_synced_at":"2026-06-09T07:32:50.022Z","repository":{"id":314573086,"uuid":"1056018881","full_name":"ysocrius/django-credit-approval","owner":"ysocrius","description":"Django-based REST API for automated credit approval and loan management with PostgreSQL, Redis, Celery, and Docker. Features credit score calculation, loan eligibility assessment, interest rate correction, and comprehensive API documentation with Swagger/OpenAPI integration.","archived":false,"fork":false,"pushed_at":"2026-01-24T21:42:45.000Z","size":521,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-25T09:59:14.392Z","etag":null,"topics":["api-documentation","banking","celery","containerization","credit-approval","credit-scoring","django","django-rest-framework","docker","docker-compose","financial-services","fintech","loan-management","postgresql","python","redis","rest-api","risk-assessment","swagger-ui","unit-testing"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ysocrius.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-13T08:15:47.000Z","updated_at":"2026-01-24T21:38:46.000Z","dependencies_parsed_at":"2025-09-13T10:57:49.378Z","dependency_job_id":"cbc2cb3f-ae49-45fe-9498-fd60aa0edc52","html_url":"https://github.com/ysocrius/django-credit-approval","commit_stats":null,"previous_names":["ysocrius/django-credit-approval"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ysocrius/django-credit-approval","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ysocrius%2Fdjango-credit-approval","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ysocrius%2Fdjango-credit-approval/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ysocrius%2Fdjango-credit-approval/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ysocrius%2Fdjango-credit-approval/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ysocrius","download_url":"https://codeload.github.com/ysocrius/django-credit-approval/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ysocrius%2Fdjango-credit-approval/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34096950,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-documentation","banking","celery","containerization","credit-approval","credit-scoring","django","django-rest-framework","docker","docker-compose","financial-services","fintech","loan-management","postgresql","python","redis","rest-api","risk-assessment","swagger-ui","unit-testing"],"created_at":"2026-06-09T07:32:49.022Z","updated_at":"2026-06-09T07:32:50.005Z","avatar_url":"https://github.com/ysocrius.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Credit Approval System\n\nA simple Django-based REST API for managing customer loans and credit approvals.\n\n## Features\n\n- Customer registration with automatic credit limit calculation\n- Credit score-based loan eligibility checking\n- Loan creation with interest rate correction\n- View loan details and active loans\n- Background data ingestion from Excel files\n\n## Demo\n\n### 1. Customer Registration\n![Register Customer](docs/screenshots/register_form.png)\n*Registration Form with Validation*\n\n![Registration Success](docs/screenshots/register_success.png)\n*Successful Registration Check*\n\n### 2. Check Eligibility\n![Loan Eligibility](docs/screenshots/eligibility_approved.png)\n*Loan Eligibility Check \u0026 Approval*\n\n### 3. View Loans Dashboard\n![View Loans](docs/screenshots/view_loans.png)\n*Customer Loan Dashboard*\n\n## Tech Stack\n\n### Backend\n- Django 4.2+\n- Django REST Framework\n- PostgreSQL\n- Redis\n- Celery\n- Docker \u0026 Docker Compose\n\n### Frontend (Optional)\n- React 18 + TypeScript\n- Tailwind CSS\n- React Query\n- React Hook Form + Zod\n- Vite\n\n## Quick Start\n\n### Prerequisites\n\n- Docker Desktop installed and running\n- Git installed\n- Excel files (`customer_data.xlsx` and `loan_data.xlsx`) for data ingestion (optional)\n\n### Running the Application\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/ysocrius/django-credit-approval.git\n   cd django-credit-approval\n   ```\n\n2. **Set up environment variables**\n   ```bash\n   # Copy the example environment file\n   cp .env.example .env\n   \n   # Edit .env file if needed (default values work for development)\n   # For production, use .env.prod.example as template\n   ```\n\n3. **Place Excel files (if available)**\n   - Copy `customer_data.xlsx` and `loan_data.xlsx` to the `data/` directory\n   - See `data/README.md` for file format specifications\n\n4. **Start all services**\n   ```bash\n   docker compose up --build -d\n   ```\n   Note: Migrations run automatically on startup.\n\n5. **Load initial data from Excel files (if available)**\n   \n   Option 1: Using management command (recommended)\n   ```bash\n   # Async via Celery (default)\n   docker compose exec web python manage.py ingest_data\n   \n   # Or synchronously if Celery is not available\n   docker compose exec web python manage.py ingest_data --sync\n   ```\n   \n   Option 2: Using Django shell\n   ```bash\n   docker compose exec web python manage.py shell\n   \u003e\u003e\u003e from api.tasks import ingest_data\n   \u003e\u003e\u003e ingest_data.delay()  # Async\n   # OR\n   \u003e\u003e\u003e ingest_data()  # Sync\n   ```\n\n## Frontend Application\n\nA modern React frontend is available for the Credit Approval System.\n\n### Access Frontend\n- **URL**: `http://localhost:3000`\n- Available when running with Docker Compose\n\n### Frontend Features\n- ✅ Customer Registration Form\n- ✅ Loan Eligibility Checker\n- ✅ Loan Creation Interface\n- ✅ Customer Loans Dashboard\n- ✅ Real-time API Integration\n- ✅ Form Validation\n- ✅ Responsive Design\n\n### Running Frontend Locally (Development)\n\n```bash\ncd frontend\nnpm install\nnpm run dev\n```\n\nSee `frontend/README.md` for detailed frontend documentation.\n\n## API Documentation\n\n### Swagger/OpenAPI Documentation\nInteractive API documentation is available at:\n- Swagger UI: `http://localhost:8000/swagger/` or `http://localhost:8000/`\n- ReDoc: `http://localhost:8000/redoc/`\n- OpenAPI Schema: `http://localhost:8000/swagger.json`\n\n## API Endpoints\n\n### 1. Register Customer\n- **URL**: `/register`\n- **Method**: POST\n- **Body**:\n  ```json\n  {\n    \"first_name\": \"John\",\n    \"last_name\": \"Doe\",\n    \"age\": 30,\n    \"monthly_income\": 50000,\n    \"phone_number\": \"9876543210\"\n  }\n  ```\n\n### 2. Check Loan Eligibility\n- **URL**: `/check-eligibility`\n- **Method**: POST\n- **Body**:\n  ```json\n  {\n    \"customer_id\": 1,\n    \"loan_amount\": 500000,\n    \"interest_rate\": 10.5,\n    \"tenure\": 24\n  }\n  ```\n\n### 3. Create Loan\n- **URL**: `/create-loan`\n- **Method**: POST\n- **Body**:\n  ```json\n  {\n    \"customer_id\": 1,\n    \"loan_amount\": 500000,\n    \"interest_rate\": 10.5,\n    \"tenure\": 24\n  }\n  ```\n\n### 4. View Loan Details\n- **URL**: `/view-loan/\u003cloan_id\u003e`\n- **Method**: GET\n\n### 5. View Customer's Active Loans\n- **URL**: `/view-loans/\u003ccustomer_id\u003e`\n- **Method**: GET\n\n### 6. Health Check Endpoints\n- **Basic Health**: `/health/` - Simple health status\n- **Detailed Health**: `/health/detailed/` - Checks all dependencies (DB, Redis, Celery)\n- **Readiness Check**: `/health/ready/` - Kubernetes readiness probe\n- **Liveness Check**: `/health/live/` - Kubernetes liveness probe\n\n## Business Logic\n\n### Credit Score Calculation\n- Base score: 50 points\n- On-time payments: +30 points maximum\n- Recent loans: -5 points per loan in current year\n- If current debt \u003e approved limit: score = 0\n\n### Loan Approval Rules\n- If credit_rating \u003e 50: Approve loan with any interest rate\n- If 50 \u003e credit_rating \u003e 30: Approve loans with interest rate \u003e 12%\n- If 30 \u003e credit_rating \u003e 10: Approve loans with interest rate \u003e 16%\n- If 10 \u003e credit_rating: Don't approve any loans\n- If sum of all current EMIs \u003e 50% of monthly salary: Don't approve any loans\n\n### EMI Calculation\nUses compound interest formula:\n```\nEMI = P × r × (1+r)^n / ((1+r)^n - 1)\n```\nWhere:\n- P = Principal amount\n- r = Monthly interest rate\n- n = Number of months\n\n## Stopping the Application\n\n```bash\ndocker compose down\n```\n\n## Running Tests\n\n```bash\n# Run all unit tests\ndocker compose exec web python manage.py test\n\n# Run specific test modules\ndocker compose exec web python manage.py test api.tests.HelpersTestCase\ndocker compose exec web python manage.py test api.tests.ApiEndpointsTestCase\n```\n\n## Viewing Logs\n\n```bash\n# Django logs\ndocker compose logs web\n\n# Celery worker logs\ndocker compose logs worker\n\n# Database logs\ndocker compose logs db\n\n# Follow logs in real-time\ndocker compose logs -f web worker\n```\n\n## Testing\n\n### Unit Tests\n```bash\n# Run all tests\ndocker compose exec web python manage.py test\n\n# Run with coverage\ndocker compose exec web coverage run --source='.' manage.py test\ndocker compose exec web coverage report\n```\n\n### API Testing with Postman\n1. Import `Credit_Approval_API.postman_collection.json` into Postman\n2. Set the `base_url` variable to `http://localhost:8000`\n3. Run the collection to test all endpoints\n\n## Production Deployment\n\n### Using Production Configuration\n```bash\n# Copy production environment template\ncp .env.prod.example .env.prod\n\n# Edit .env.prod with your production values\nvim .env.prod\n\n# Start production services\ndocker compose -f docker-compose.prod.yml up -d\n```\n\n### Database Management\n\n#### Backup Database\n```bash\n# Development environment\n./scripts/backup_db.sh\n\n# Production environment\n./scripts/backup_db.sh prod\n```\n\n#### Restore Database\n```bash\n# Restore from backup\n./scripts/restore_db.sh ./backups/backup_dev_credit_approval_db_20240101_120000.sql.gz\n```\n\n## CI/CD Pipeline\n\nThe project includes GitHub Actions workflow that automatically:\n- Runs unit tests on every push/PR\n- Checks code formatting with Black\n- Validates imports with isort\n- Performs security checks with Bandit\n- Builds and tests Docker images\n- Generates test coverage reports\n\n## Recent Improvements\n\n### Testing\n- ✅ Comprehensive test coverage for all business rules\n- ✅ Edge case testing (boundary values, invalid inputs)\n- ✅ Concurrent loan creation testing\n- ✅ Credit score component testing\n- ✅ Interest rate correction validation\n\n### API Documentation\n- ✅ Swagger/OpenAPI integration with drf-yasg\n- ✅ Interactive API testing interface\n- ✅ Auto-generated API documentation\n\n### Data Validation\n- ✅ Enhanced input validation with detailed error messages\n- ✅ Name validation (letters only)\n- ✅ Phone number sanitization\n- ✅ Cross-field validation for loans\n- ✅ Boundary value checks\n\n### Monitoring \u0026 Health\n- ✅ Comprehensive logging configuration\n- ✅ Health check endpoints for all services\n- ✅ Kubernetes-ready health probes\n- ✅ Service dependency monitoring\n\n### Docker Optimization\n- ✅ Multi-stage build for smaller images\n- ✅ Non-root user for security\n- ✅ Health checks for all containers\n- ✅ Optimized dependency caching\n- ✅ Log volume persistence\n\n### Security\n- ✅ Non-root container execution\n- ✅ Input sanitization\n- ✅ Environment variable configuration\n- ✅ Secure defaults\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fysocrius%2Fdjango-credit-approval","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fysocrius%2Fdjango-credit-approval","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fysocrius%2Fdjango-credit-approval/lists"}