Quote Request Copy Rule Catalog

這份表只保留精簡索引,方便掃描目前 POST /quote_requests/copy/{quote_request_id}.json parity 範圍。詳細背景看 rule_details.md,逐步 code 對照看 step_by_step_compare.md

狀態定義:

  • 已對齊:新舊規則一致,且已有測試或 baseline 證據。
  • 已對齊 / 需環境證據:主線一致,但仍需要特定區域或 production-like 環境驗證。
  • 待補獨立測試:已有實作,缺少單獨針對該規則的測試。
  • 待確認:仍需要更多 caller、payload 或 baseline 證據。
規則Parity 要求現況備註
API session / request ownership 驗證必做已對齊session flow staging 已驗證;成功 response 含字串型 quote_request_id
hash 驗證複製必做已對齊body 帶 hash 可成功 copy;invalid hash 會 fallback session
blocked user 擋單必做已對齊legacy staging 實測是 error=5message=Blocked User、不帶 quote_request_id
reserve_type_a 過期不可複製必做已對齊error=9message=預約日期已過不可複製
category 必須 active必做已對齊quote_categories.is_active 必須是 2,否則 error=7
防重點擊必做待補獨立測試Redis key 為 copy_request__{id},TTL 20 秒
24 小時同 category 上限必做已對齊同 user/category、非 archived、非 closed,24 小時內第 4 筆回 error=4
缺 category fee 設定必做已對齊error=1message=no site_fee info
booking user fee 歸零必做已對齊booking_shop_users 命中時 fee 全 0,match_type=BOOKING_ADMIN_USER;已有 baseline 14241 -> 14306
一般 user fee set / variable fee必做已對齊已修正 variable fee helper;baseline 20212 -> 20213 驗 fee、discount、site_fee
建立新 quote_requests必做已對齊含 copied id、flags、tag、send_clientrequest_lang_idexpired_on
建立 quote_form_submissions / 複製 fields必做已對齊新 submission + source fields 全量複製,field count 對齊 source
reload summary必做已對齊copy 後重算 form_summary / language / job-center summary;baseline 有驗
recommend_source 紀錄有帶才必做已對齊支援 top-level 與 QuoteRequest[recommend_source],寫 quote_request_recommend_logs
auto quote legacy gate必做已對齊source 不能本來就是 copy,且 source created 必須晚於 getJPLastModified()
auto quote / matching side effects必做已對齊 / 需環境證據baseline 驗 bid/activity shape;重跑同 source 仍可能受 provider 資料漂移影響
HK newQuoteRequest task必做已對齊 / 需環境證據forced-HK integration test 已有;真 HK baseline 仍需 HK 區域環境
abnormal / keyword / overseas phone 掃描必做已對齊已有 forced case、abnormal baseline 14691 -> 17216、keyword baseline 10650 -> 10652
設定 expired_on必做已對齊due_date override,否則 category request_expired_days,再 fallback 30 天
建立 CreateRequest activity必做已對齊成功路徑建立;不能假設一定是第一筆 activity
更新 source last_copied_on必做已對齊allow_copy 會讀這欄;copied request 自己維持 null
寫入 copied_quote_request_id必做已對齊copied request 指向 source request id
重建 block_provider_ids必做已對齊 / 需環境證據legacy 會加已報價 provider;新版只在 site_environment=production 追加,非 production 測試固定保留 source 值
強制重設 request flags必做已對齊has_preserve=0is_allow_contact_charge=0is_expired=0
不沿用 source 特定欄位必做已對齊一般 copy 不沿用 source match_typespecific_user_tag 清空
寫入 multi-request tag必做已對齊ConstJobCenterLabel::MULTI_REQUEST 實際值是 回客,baseline 是 ["回客"]

Parity Required

若目標是 legacy parity,以上表列規則都不能被視為 optional。

差別只在:

  • 目前新專案是否已有穩定 code + test 證據
  • 是否仍需要額外 baseline / DB / log 對表
  • 現有行為是否已和 staging 20212 -> 20213 完全一致
    • 不能把「歷史 baseline 形狀」和「今天重跑同一 source 必定同數字」混在一起

實作順序建議

  1. 先看同步主線:guard、建單、clone、fee、summary、expired_on。
  2. 再看 side effects:abnormal scan、auto quote、HK task、activity。
  3. 最後看 baseline:歷史資料形狀是否能解釋,以及今天重跑是否受資料漂移影響。

待確認 / 待補證據

以下不是可不做,而是目前仍需要額外證據或實作前釐清:

  • hash copy 在舊流量中的實際使用情況
  • recommend_source 的 caller 與 payload 形狀
  • HK / area 分支是否需要用區域 baseline 分開驗
  • production 環境追加 quoted provider 到 block_provider_ids 的實際 baseline
  • 更多非 20212 -> 20213 的一般 copy baseline,確認 tag / summary / matching 在不同 category 下維持一致

編輯建議

若要頻繁補內容,優先改 rule_details.md

這份 rule_catalog.md 只維持:

  • 規則名稱
  • parity 要求
  • 現況一句話
  • 備註一句話