invoice party 정보를 입력받아 sanctions DB에서 제재 대상 후보를 검색하는 FastAPI 서버
- Docker / Docker Compose
- Python 3.10+
python3 -m pip install -U pandas psycopggit clone https://github.com/DSLab-MJU/sanction_project.git
cd sanction_projectcp server/.env.example server/.envserver/.env:
POSTGRES_USER=dslab
POSTGRES_PASSWORD=PASSWORD
POSTGRES_DB=sanction
POSTGRES_HOST=sanction-postgres
POSTGRES_PORT=5432cd server
docker compose up --build -d지금 단계까지는 DB schema/data가 아직 없으므로 /search는 데이터 로드 후 정상 동작합니다.
새 DB volume에서 1회만 실행:
cd ..
docker cp pipeline/schema_pg.sql sanction-postgres:/tmp/schema_pg.sql
docker exec -i sanction-postgres psql -U dslab -d sanction -f /tmp/schema_pg.sqlOFAC/UK/UN/EU source를 다운로드하고, 16개 schema CSV 생성, 검증, append-only DB load를 수행
cd pipeline
PIPELINE_USER_AGENT='SanctionPipeline/1.0 (+mailto:jeongho@mju.ac.kr)' \
SANCTION_DOCKER_CONTAINER=sanction-postgres \
SANCTION_DB_USER=dslab \
SANCTION_DB_NAME=sanction \
PGHOST=localhost \
PGPORT=5432 \
PGDATABASE=sanction \
PGUSER=dslab \
PGPASSWORD='PASSWORD' \
./server_run_all_sources_update.sh --trigger manual --skip-embedding검증만 실행:
PIPELINE_USER_AGENT='SanctionPipeline/1.0 (+mailto:admin@example.com)' \
./server_run_all_sources_update.sh --trigger manual --skip-embedding --skip-load이미 받은 raw snapshot으로 재실행:
./server_run_all_sources_update.sh \
--skip-download \
--input-dir ./all_sources_raw_snapshots/<batch-name> \
--batch-name all_sources_reload_testHealth:
curl http://localhost:8000/healthSearch:
curl -X POST http://localhost:8000/search \
-H 'Content-Type: application/json' \
--data-binary @../server_test/test_request1.jsonPOST /search는 invoice JSON을 받습니다. parties[]에 파싱된 정보를 담아서 넘겨야 합니다.
{
"invoice_number": "0090880005",
"invoice_date": "2026-02-11",
"currency": "CAD",
"total_amount": 1264.0,
"parties": [
{
"role": "ISSUER",
"name": "AEROCARIBBEAN AIRLINES",
"address": "Havana, Cuba",
"country": "Cuba",
"registration_number": "",
"tax_id": "",
"phone": "",
"email": "",
"bank_accounts": [
{
"account_holder": "",
"bank_name": "",
"account_number": "",
"iban": "",
"swift": ""
}
]
}
]
}Role enum:
ISSUER
BILL_TO
REMIT_TO
BANK_BENEFICIARY
OTHER
- API 검색은 PostgreSQL
pg_trgm기반 fuzzy search를 사용합니다. load_batch_append_only.sql은 기존 row를 update/delete하지 않고 없는 primary key만 insert합니다.