CoolFace
Apppublic

AKI106565/curtain-price-search

sourceHugging Faceupdated 4mo agoView on Hugging Face
0likes
App README

リリカラ FABRIC DECO 2026 カーテン価格検索アプリ

リリカラ FABRIC DECO 2026 の価格表PDFをもとに、品番・仕上り幅・仕上り丈・ヒダ倍率・数量から税抜上代価格を検索する Streamlit アプリです。

重要方針

  • —出力価格は税抜上代のみです。
  • —税込計算、消費税計算、値引き計算、掛け率計算は行いません。
  • —価格表にないサイズの比例計算、推測価格、仮価格、サンプル価格の本番DB投入は禁止です。
  • —本番DBへ入る価格は data/validation/verified_pdf_price_cells.csv に登録された、PDF目視確認済みデータだけです。
  • —開き方は価格条件に含めません。
  • —第一段階はドレープ、1.5倍ヒダ、2倍ヒダ、数量に対応します。

セットアップ

powershell
python -m pip install -r requirements.txt

起動

powershell
python -m streamlit run .\app\streamlit_app.py

公開用モード

Streamlit Community Cloud などで検索機能だけを公開する場合は、環境変数 APP_MODE=public を設定してください。

APP_MODE=public の場合、表示されるのは「価格検索」だけです。以下の管理機能は非表示になります。

  • —価格表登録
  • —PDF抽出候補レビュー
  • —DB確認
  • —検証ステータス
  • —一括承認などの管理操作

ローカルで管理機能も使う場合は、APP_MODE を未設定のまま起動するか、APP_MODE=admin を設定してください。

PowerShell で公開用モードを確認する例:

powershell
$env:APP_MODE="public"
python -m streamlit run .\app\streamlit_app.py

Streamlit Community Cloud へのデプロイ

  1. 1.GitHub リポジトリにこのプロジェクトをpushします。
  2. 2.Streamlit Community Cloud で「New app」を作成します。
  3. 3.Repository にこのリポジトリを選択します。
  4. 4.Branch を選択します。
  5. 5.Main file path に次を指定します。
text
app/streamlit_app.py
  1. 1.Advanced settings または Secrets/環境変数設定で、次を設定します。
text
APP_MODE=public
  1. 1.Deploy を実行します。

公開用デプロイに最低限必要な主なファイルは以下です。

  • —app/
  • —db/curtain_prices.sqlite3
  • —data/validation/
  • —requirements.txt
  • —README.md

data/extracted/pdf_price_candidates.csv や data/extracted/pdf_price_candidates.parquet は抽出・レビュー用の巨大な管理ファイルです。公開検索だけに使う場合はGitに含めない方針です。

Hugging Face Spaces へのデプロイ

Hugging Face Spaces では、この README.md 先頭の YAML header により Docker Space として認識されます。

設定内容:

yaml
sdk: docker
app_port: 8501

Dockerfile 内で APP_MODE=public を設定しているため、Hugging Face Spaces では価格検索だけが表示されます。管理機能は非表示です。

明示する場合は、Space の Settings → Variables and secrets で次を設定してもかまいません。

text
APP_MODE=public

アップロード手順:

  1. 1.Hugging Face にログインします。
  2. 2.New Space を作成します。
  3. 3.Space SDK は Docker を選択します。
  4. 4.このプロジェクトから、公開検索に必要な最低限のファイルをアップロードします。
text
app/
db/curtain_prices.sqlite3
data/validation/
requirements.txt
README.md
Dockerfile
  1. 1.data/extracted/ の巨大CSV/Parquet、data/raw/ のPDFはアップロード不要です。
  2. 2.Space が Dockerfile をビルドし、Streamlit を 0.0.0.0:8501 で起動します。

管理機能をSpacesで出したい場合は APP_MODE=admin を設定できますが、公開URLで運用する場合は public のままにしてください。

PDF補助スクリプト

powershell
python .\scripts\download_pdf.py
python .\scripts\inspect_pdf.py
python .\scripts\extract_tables_from_pdf.py
python .\scripts\extract_pdf_price_candidates.py
python .\scripts\validate_extracted_tables.py

extract_tables_from_pdf.py の出力は目視確認用です。抽出結果をそのまま本番DBに投入しません。

extract_pdf_price_candidates.py は PDF 内の価格表から候補データを data/extracted/pdf_price_candidates.csv に出力し、抽出ログを data/extracted/extraction_report.json に出力します。これは候補CSVであり、verified_pdf_price_cells.csv には自動で混ぜません。目視確認済みの行だけを verified_pdf_price_cells.csv に移してください。

価格表登録方法

  1. 1.Streamlit の「価格表登録」タブを開きます。
  2. 2.PDF価格表を目視確認したうえで、product_code、catalog_name、table_name、style、fullness、source_pdf_page を入力します。
  3. 3.width ranges と height ranges を 0-75,76-150 のように入力します。
  4. 4.price matrix に税抜上代をCSV貼り付け形式で入力します。行数は丈範囲、列数は幅範囲と一致させます。
  5. 5.プレビューを確認し、「verifiedpdfprice_cells.csv に追加」を押します。
  6. 6.検証用サンプルを20件以上 manual_check_samples.csv に追加します。
  7. 7.「normalize / import / verify を実行」を押します。

重複登録防止として、同じ product_code / table_name / style / fullness / width range / height range は追加しません。

検証方法

コマンドで実行する場合:

powershell
python .\scripts\normalize_price_tables.py
python .\scripts\import_to_db.py
python .\scripts\verify_manual_check_samples.py

verify_manual_check_samples.py は manual_check_samples.csv の expected_unit_price と expected_total_price を calculate_price の結果と照合します。

価格を返せる条件:

  • —data/validation/verification_status.json の is_verified が true
  • —verified_sample_count が20件以上
  • —20件以上の手動確認サンプルがすべて一致

verification_status.json は手動で true にしないでください。scripts/verify_manual_check_samples.py が条件を満たした場合だけ true に更新します。

テスト

powershell
pytest

初期状態では検証済み価格データが空のため、価格検索は次のメッセージを返します。

text
価格表データが未検証です。PDF価格表との照合が必要です。
AKI106565/curtain-price-search · CoolFace