node_types:
- company
- supplier
- project
- contract
- contract_change
- construction_task
- construction_task_detail
- material
- material_detail
- contract_settlement
- contract_settlement_detail
- personnel
- personnel_detail
- preparation
- production
- lar
- lar_change
- project_detail_data
- units
local_datasource:
  type: jsonl
  jsonl_dir: ${PROJECT_ROOT}/filtered_datasource/datasource/filtered
  read_only: false
  handler_configs:
    project:
      data_id_filter:
        - "0f9c3e22-f4bb-4803-825a-4f238eeb06d5"
        - "f3e02e84-e81c-4aa6-88d4-f5aa108c8227"
remote_datasource:
  type: api
  api_base_url: http://localhost:8000/api/third/v2
  api_uid: 6b18c681-92d5-4c7f-802c-df413b6504c8
  api_secret: jTk5gSHTqDIZng1zh2z6jrT8JjVgCKsmV8_7NyESbQk
  api_debug: true
  api_rate_limit_max_requests: 30
  api_rate_limit_window_seconds: 10.0
  poll_max_retries: 1
  poll_interval: 0.5
  handler_configs:
    project:
      data_id_filter:
      # 请替换为实际的项目ID，至少需要一个
        - "0f9c3e22-f4bb-4803-825a-4f238eeb06d5"
        - "f3e02e84-e81c-4aa6-88d4-f5aa108c8227"
    supplier: {}
persist:
  backend: sqlite
  db_path: ${PROJECT_ROOT}/test_results/sync_state_machine/simple_pipeline_sm.db
  enable: true
  wipe_on_start: false
logging:
  initialize: true
  file_dir: ${PROJECT_ROOT}/test_results/sync_state_machine
  file_name_pattern: simple_pipeline_sm_{timestamp}.log
  level: 20
strategies:
  company:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - credit_code
      depend_fields: {}
      local_orphan_action: none
      remote_orphan_action: create_local
      update_direction: pull
  supplier:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - credit_code
      depend_fields: {}
      local_orphan_action: none
      remote_orphan_action: create_local
      update_direction: pull
  project:
    skip_sync: false
    config:
      auto_bind: false
      auto_bind_fields: []
      pre_bind_data_id: []
      depend_fields:
        company_id: company
      local_orphan_action: none
      remote_orphan_action: none
      update_direction: push
  contract:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - project_id
      - company_id
      - code
      depend_fields:
        project_id: project
        company_id: supplier
      local_orphan_action: create_remote
      remote_orphan_action: none
      update_direction: push
  contract_change:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - contract_id
      - change_time
      - title
      depend_fields:
        project_id: project
        contract_id: contract
      local_orphan_action: create_remote
      remote_orphan_action: none
      update_direction: push
  construction_task:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - contract_id
      - task_type
      depend_fields:
        contract_id: contract
        project_id: project
      local_orphan_action: create_remote
      remote_orphan_action: none
      update_direction: push
  construction_task_detail:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - parent_id
      - date
      depend_fields:
        parent_id: construction_task
      local_orphan_action: create_remote
      remote_orphan_action: none
      update_direction: push
  material:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - contract_id
      - material_type
      depend_fields:
        contract_id: contract
        project_id: project
      local_orphan_action: create_remote
      remote_orphan_action: none
      update_direction: push
  material_detail:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - parent_id
      - date
      depend_fields:
        parent_id: material
      local_orphan_action: create_remote
      remote_orphan_action: none
      update_direction: push
  contract_settlement:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - contract_id
      depend_fields:
        contract_id: contract
        project_id: project
      local_orphan_action: create_remote
      remote_orphan_action: none
      update_direction: push
  contract_settlement_detail:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - parent_id
      - date
      depend_fields:
        parent_id: contract_settlement
      local_orphan_action: create_remote
      remote_orphan_action: none
      update_direction: push
  personnel:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - project_id
      - code
      depend_fields:
        project_id: project
        contract_id: contract
      local_orphan_action: create_remote
      remote_orphan_action: none
      update_direction: push
  personnel_detail:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - parent_id
      - date
      depend_fields:
        parent_id: personnel
      local_orphan_action: create_remote
      remote_orphan_action: none
      update_direction: push
  preparation:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - project_id
      - code
      depend_fields:
        project_id: project
      local_orphan_action: none
      remote_orphan_action: none
      update_direction: push
  production:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - project_id
      - code
      depend_fields:
        project_id: project
      local_orphan_action: none
      remote_orphan_action: none
      update_direction: push
  lar:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - project_id
      depend_fields:
        project_id: project
      local_orphan_action: none
      remote_orphan_action: none
      update_direction: push
  lar_change:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - project_id
      - change_time
      - title
      depend_fields:
        project_id: project
      local_orphan_action: none
      remote_orphan_action: none
      update_direction: push
  project_detail_data:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - project_id
      - key
      depend_fields:
        project_id: project
      local_orphan_action: none
      remote_orphan_action: none
      update_direction: push        # 未在 field_direction_overrides 中列出的 key 默认 push
      field_direction_key: key      # 以节点 data.key 字段值作为方向查表键
      field_direction_overrides:
        ensure_production: pull     # 远程 → 本地
        climb_production: pull      # 远程 → 本地
        challenge_production: pull  # 远程 → 本地
  units:
    skip_sync: false
    config:
      auto_bind: true
      auto_bind_fields:
      - project_id
      - serial_number
      depend_fields:
        project_id: project
      local_orphan_action: none
      remote_orphan_action: none
      update_direction: push
