Kalkulator ubezpieczeń OC/AC · FastAPI + React SPA · Link4 fullAPI · Na serwerze znajdują się pliki z gałęzi beta. Aktualna strona znajduje się pod adresem: http://145.239.92.129/
  • JavaScript 90.9%
  • CSS 6.9%
  • HTML 1.8%
  • Python 0.4%
Find a file
2026-04-11 21:15:06 +02:00
.idea Etap - wstępnie stworzony backend. A przynajmniej jego takie w miarę konkretne ramy 2025-09-10 21:21:13 +02:00
.trae/documents test_piatkowy 2025-12-19 11:39:47 +01:00
app poprawa bledow 2026-04-11 21:15:06 +02:00
dodatkowe_wazne test 2026-02-08 13:22:10 +01:00
frontend obsluga zamowienia 2026-04-11 21:05:49 +02:00
memory zmiany 2026-04-01 11:47:08 +02:00
plikiodlink4 zmiany z dwoch chatow 2026-03-09 15:06:02 +01:00
tests zmiany z dwoch chatow 2026-03-09 15:06:02 +01:00
.DS_Store nowe zmiany 2026-04-01 11:33:13 +02:00
.env nowy env 2026-03-12 13:24:32 +01:00
.gitignore test 2026-02-08 13:22:10 +01:00
calc.db test_piatkowy 2025-12-19 11:39:47 +01:00
curl examples etap testowania api - działa - można dopieszczać 2025-11-20 08:41:12 +01:00
docker-compose.yml dodane wyświetlanie błędów 2026-03-12 21:41:41 +01:00
Dockerfile uruchamianie aplikacji 2025-12-11 12:48:23 +01:00
dowod.sh dodano test 2025-12-20 16:38:23 +01:00
instrukcja_korzystania_backend.md etap testowania api - działa - można dopieszczać 2025-11-20 08:41:12 +01:00
INSTRUKCJA_WERYFIKACJI_SLOWNIKOW.md testy 2026-03-11 07:56:12 +01:00
link4_auth_example.py etap testowania api - zobaczymy, czy działa. 2025-11-26 11:55:04 +01:00
README.md zmiany w formularzu 2026-04-09 22:47:59 +02:00
reproduce_xml.py w trakcie 2026-02-08 13:48:06 +01:00
requirements.txt test2 2025-12-19 10:49:47 +01:00
test_main.http Etap - wstępnie stworzony backend. A przynajmniej jego takie w miarę konkretne ramy 2025-09-10 21:20:52 +02:00
vps_ip_test.py nowy env 2025-12-20 08:22:44 +01:00
vps_test_debug.py zmiany 2026-01-17 11:54:42 +01:00

Kalkulator Ubezpieczeń Link4 Integration

System do kalkulacji ubezpieczeń komunikacyjnych zbudowany na bazie FastAPI, zintegrowany z zewnętrznym API Link4 (fullAPI / SOAP). Projekt obejmuje backend z logiką kalkulacji, bazę danych do przechowywania wyników oraz frontend w postaci statycznych stron HTML.


Stan projektu

Co jest zaimplementowane

  • Integracja z Link4 fullAPI komunikacja przez SOAP/XML z HTTP Basic Auth
  • Kalkulator OC / OC+AC obsługa formuł ubezpieczeniowych (11 = OC, 13 = OC+AC)
  • Wyszukiwanie pojazdów z katalogu endpoint /api/link4/vehicle-models z filtrowaniem po marce/modelu
  • Kalkulacja przez VIN / tablicę rejestracyjną tzw. short path (bez ręcznego podawania modelu)
  • Frontend z formularzem strona /kalkulacja-ubezpieczenia/ z wielokrokowym formularzem HTML/JS
  • Strona wyników /oferty-ubezpieczeniowe/ z prezentacją składki i danych kalkulacji
  • Zapis wyników do bazy danych SQLite (domyślnie), możliwość podmiany na Postgres przez .env
  • Endpoint zdrowia GET /health
  • Konteneryzacja pełna konfiguracja Docker + docker-compose z healthcheckiem i logowaniem

Architektura

kalkulator_link4/
├── app/
│   ├── main.py               # Punkt wejścia FastAPI, routing, middleware CORS
│   ├── config.py             # Ustawienia aplikacji (pydantic-settings, .env)
│   ├── api/
│   │   └── link4.py          # Endpointy REST API (/api/link4/...)
│   ├── core/                 # Narzędzia pomocnicze
│   ├── db/
│   │   └── database.py       # Silnik SQLAlchemy, sesje, inicjalizacja tabel
│   ├── models/
│   │   └── calculation.py    # Model ORM  tabela `calculation`
│   ├── schemas/
│   │   └── calculation.py    # Modele Pydantic  walidacja wejścia/wyjścia
│   └── services/
│       └── link4/
│           └── client.py     # Link4Client  komunikacja SOAP z API Link4
├── frontend/
│   ├── index.html                        # Strona główna
│   ├── kalkulacja-ubezpieczenia/         # Formularz kalkulatora
│   │   └── index.html
│   └── oferty-ubezpieczeniowe/           # Strona wyników
│       └── index.html
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── .env                      # Zmienne środowiskowe (nie wersjonowane)

Specyfikacja techniczna

Backend

Element Technologia / Szczegół
Framework FastAPI 0.116
Serwer ASGI Uvicorn
Klient SOAP Zeep 4.3 + ręczny XML fallback (lxml)
HTTP Client HTTPX (async)
Baza danych SQLite (dev) / dowolna baza SQL (prod via .env)
ORM SQLModel (SQLAlchemy 2.0 + Pydantic)
Walidacja / Schematy Pydantic v2
Konfiguracja pydantic-settings + python-dotenv
Testy pytest + pytest-asyncio

Link4 API

Parametr Wartość
Protokół SOAP / XML nad HTTPS
Autentykacja HTTP Basic Auth (Base64)
Metody prepareCalculation, calculate
Formuły ubezpieczenia 11 = OC, 13 = OC+AC
Identyfikacja pojazdu tablicą rej. (short path) lub ID z katalogu
Kontakt parametry contact.dateOfBirth, contact.gender, contact.drivingLicenseYear, contact.livingZipCode
Leasing obsługiwany przez obiekt cession (nie vehicle.leasing)

Frontend

Statyczne strony HTML/CSS/JS serwowane przez FastAPI (StaticFiles). Komunikacja z backendem przez HTML <form> POST oraz fetch do endpointów REST API.


Endpointy

Metoda Ścieżka Opis
GET / Strona główna
GET /kalkulacja-ubezpieczenia/ Formularz kalkulatora
POST /oferta Przetworzenie formularza, kalkulacja, wynik
GET /health Status aplikacji
GET /api/link4/vehicle-models Lista modeli z katalogu Link4
GET /docs Swagger UI (automatyczny)
GET /redoc ReDoc (automatyczny)

Uruchomienie lokalne

Wymagania

  • Python 3.11+
  • Dostęp do środowiska Link4 (login, hasło, partner ID)

Konfiguracja

Utwórz plik .env w katalogu głównym projektu:

LINK4_BASE_URL=https://api.link4.pl/gate
LINK4_PARTNER_ID=TWOJ_PARTNER_ID
LINK4_LOGIN=TWOJ_LOGIN
LINK4_PASSWORD=TWOJE_HASLO
LINK4_AGENT_ID=            # opcjonalne
LINK4_SOURCE_IP=           # opcjonalne  wymuszenie wychodzącego IP
DATABASE_URL=sqlite:///./calc.db
ENVIRONMENT=development
DEBUG_SOAP=0

Instalacja i uruchomienie

# 1. Utwórz i aktywuj środowisko wirtualne
python -m venv venv
source venv/bin/activate       # Linux/macOS
# lub: venv\Scripts\activate   # Windows

# 2. Zainstaluj zależności
pip install -r requirements.txt

# 3. Uruchom serwer
uvicorn app.main:app --reload --port 8000

Aplikacja będzie dostępna pod adresem: http://localhost:8000

Dokumentacja Swagger: http://localhost:8000/docs


Uruchomienie przez Docker

# Zbuduj i uruchom kontener
docker-compose up --build

# Uruchomienie w tle
docker-compose up -d

Aplikacja będzie dostępna na porcie 80 (mapowany z 8000 wewnątrz kontenera).

Zmienne środowiskowe w Docker

Docker Compose ładuje plik .env automatycznie przez dyrektywę env_file. Upewnij się, że plik .env istnieje przed uruchomieniem.

Health check

Docker Compose wykonuje automatyczny health check co 30 sekund:

docker inspect insurance-fastapi --format='{{.State.Health.Status}}'

Baza danych

Domyślnie aplikacja używa SQLite (calc.db w katalogu głównym). Tabela calculation przechowuje:

Kolumna Typ Opis
id int PK Auto-inkrementowane ID
calculation_id string Unikalny ID kalkulacji
start_date date Data początku polisy
license_plate string Numer rejestracyjny
insurance_formula int Formuła (11=OC, 13=OC+AC)
premium float Składka roczna (PLN)

Aby przełączyć na PostgreSQL, wystarczy zmienić DATABASE_URL w .env:

DATABASE_URL=postgresql://user:password@host:5432/dbname

Zmienne środowiskowe pełna lista

Zmienna Domyślna wartość Opis
LINK4_BASE_URL https://api.link4.pl/gate Główny URL API Link4
LINK4_VEHICLE_MODELS_URL https://api.link4.pl/gate/api/ws/VehicleModelsService/v2_2 URL serwisu słownikowego pojazdów
LINK4_PARTNER_ID ID partnera nadane przez Link4
LINK4_LOGIN Login Basic Auth
LINK4_PASSWORD Hasło Basic Auth
LINK4_AGENT_ID ID agenta (dla partnerów MULTI)
LINK4_SOURCE_IP Wymuszenie wychodzącego adresu IP
DATABASE_URL sqlite:///./calc.db Connection string bazy danych
ENVIRONMENT production Środowisko (development/production)
DEBUG_SOAP 0 Logowanie surowych SOAP XML (1 = włącz)

Testy

# Uruchomienie testów
pytest

# Z verbose output
pytest -v

Testy jednostkowe i integracyjne znajdują się w katalogu app/ (pliki test_*.py) oraz tests/.