# 1688 Auto Procurement

## Supabase 原始文件上传

### 1. 安装依赖

项目使用 `pnpm` 管理 Node.js workspace，使用 `uv` 管理 Python 文档识别环境。

```bash
# 要求 Node.js >= 20
corepack enable   # 如已安装 pnpm，可跳过
pnpm install
```
#### uv 安装

curl -LsSf https://astral.sh/uv/install.sh | sh

#### markitdown 文档识别依赖

用于将 PDF、Word、图片等非 Excel 文件转换为 Markdown 并提取采购物料，需要使用 `uv` 同步 Python 环境：

```bash
# 要求 Python >= 3.10
cd markitdown
uv sync
cd ..
```

> 图片 OCR 识别依赖智谱 GLM-4V 视觉模型，需在 `.env` 中配置 `LLM_BASE_URL` 和 `LLM_API_KEY`，或在管理面板的 `llm_config` 表中配置。

如需本地运行 Playwright 自动化，可安装 Chromium：

```bash
pnpm exec playwright install chromium
```

### 2. 配置环境变量

在项目根目录创建 .env.local：

```bash
VITE_SUPABASE_URL=https://your-project-ref.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
VITE_SUPABASE_SOURCE_FILES_BUCKET=source-files
```

如果新服务器上的 Node 进程访问 Supabase 时出现 TLS 错误（例如 UNABLE_TO_GET_ISSUER_CERT_LOCALLY），可以只对服务端脚本额外配置以下变量之一：

```bash
# 推荐：指定 CA 证书文件
SUPABASE_TLS_CA_CERT_PATH=/etc/ssl/certs/your-ca-chain.pem

# 或者：直接提供 PEM 文本 / base64
SUPABASE_TLS_CA_CERT="-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----"
SUPABASE_TLS_CA_CERT_BASE64=LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...

# 仅限应急排障，不建议长期使用
SUPABASE_TLS_INSECURE_SKIP_VERIFY=1
```

优先方案仍然是修复服务器系统证书链；以上配置只会作用于 Node 侧 Supabase 客户端，不影响浏览器端。

### 3. 初始化 Supabase

```bash
# 把 supabase/migrations/ 下的全部脚本应用到目标项目
supabase db push
```

这会创建主业务库所需的全部 schema（`source_files` 元数据表、`source-files` bucket 策略、各业务表等）。如需独立的 prompt 库，再单独跑：

```bash
node --import tsx scripts/seed-prompt-store.ts
# 该脚本会用 supabase/sql/prompt-store-schema.sql 初始化 PROMPT_SUPABASE_URL 指向的库
```

> 关于 `supabase/migrations/` 中的 `*_remote_baseline_placeholder.sql` 文件，请参阅
> [supabase/migrations/README.md](supabase/migrations/README.md)。

### 4. 使用方式

启动项目后，进入侧边栏的“原始文件上传”页面：

- 填写 batch ID
- 选择一个或多个原始文件
- 点击“开始上传”
- 上传成功后，可在下方列表直接看到记录并下载

### 5. 当前实现范围

当前实现仅覆盖：
- 原始文件上传到 Supabase Storage
- 文件元数据写入 source_files 表
- 按批次查询已上传文件
- 生成下载 signed URL

尚未覆盖：
- 用户鉴权
- 细粒度按用户隔离 bucket 访问
- 从原始文件自动解析 materials 数据

### 6. 在线标准化 size 修改 最大 50
STANDARDIZE_ONLINE_BATCH_SIZE 
