Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
afea5b6335 | ||
|
|
89ccaa8b16 | ||
|
|
92943e84d3 |
131
.trae/documents/估值审核联动与估值次数扣减实现方案.md
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
## 目标概述
|
||||||
|
|
||||||
|
* 加强“交易管理-发票附件与发送邮箱”能力,完善数据记录与事务保障。
|
||||||
|
|
||||||
|
* 改进“开票弹窗附件上传”支持多文件上传(后端存储结构)。
|
||||||
|
|
||||||
|
* 优化“用户管理备注与操作记录”,区分备注维度并完善日志。
|
||||||
|
|
||||||
|
* 覆盖单元/集成测试、数据库迁移、API文档与审计日志。
|
||||||
|
|
||||||
|
## 数据库与模型变更
|
||||||
|
|
||||||
|
* EmailSendLog
|
||||||
|
|
||||||
|
* 新增:`extra: JSONField(null=True)` 完整记录发送邮箱的请求数据(收件人、主题、正文、附件列表、重试信息等)。
|
||||||
|
|
||||||
|
* Invoice(或与开票弹窗相关的业务模型)
|
||||||
|
|
||||||
|
* 新增:`attachments: JSONField(null=True)` 支持多个附件URL(与弹窗上传对应)。
|
||||||
|
|
||||||
|
* <br />
|
||||||
|
|
||||||
|
* 迁移脚本:创建/修改上述字段;保留历史数据不丢失。
|
||||||
|
|
||||||
|
## 事务与原子性
|
||||||
|
|
||||||
|
* 发送邮箱流程(交易管理)
|
||||||
|
|
||||||
|
* 封装在 `tortoise.transactions.in_transaction()` 中:邮件发送、EmailSendLog写入(含attachments/extra)原子提交;失败回滚。
|
||||||
|
|
||||||
|
* extra写入内容:完整`SendEmailRequest`(收件人、主题、正文、附件URL/文件名、重试次数、客户端UA等)。
|
||||||
|
|
||||||
|
* 多文件上传至发票附件(开票弹窗)
|
||||||
|
|
||||||
|
* 更新发票的 `attachments` 字段在同一事务内写入;如任一URL校验失败则回滚。
|
||||||
|
|
||||||
|
## 后端接口改造
|
||||||
|
|
||||||
|
* 上传组件(后端)
|
||||||
|
|
||||||
|
* 新增:`POST /api/v1/upload/files` 接收 `files: List[UploadFile]`,统一返回 `urls: string[]`;保留现有单文件接口向后兼容。
|
||||||
|
|
||||||
|
* 交易管理(管理员)
|
||||||
|
|
||||||
|
* `POST /api/v1/transactions/send-email` 扩展:
|
||||||
|
|
||||||
|
* 入参支持 `file_urls: string[]`(与/或单文件),服务端聚合附件;
|
||||||
|
|
||||||
|
* 在事务中记录 EmailSendLog(含attachments与extra),返回log\_id与状态;
|
||||||
|
|
||||||
|
* 回显接口(详情/列表)新增 `extra` 字段完整展示发送记录。
|
||||||
|
|
||||||
|
* 开票弹窗附件(管理员/或对应端)
|
||||||
|
|
||||||
|
* 新增/改造:`PUT /api/v1/invoice/{id}/attachments` 入参 `urls: string[]`,更新发票 `attachments`。
|
||||||
|
|
||||||
|
* 列表/详情回显 `attachments: string[]`。
|
||||||
|
|
||||||
|
* 用户管理备注优化(管理员端)
|
||||||
|
|
||||||
|
* 新接口:`PUT /api/v1/app-user-admin/{user_id}/notes`
|
||||||
|
|
||||||
|
* 入参:`system_notes?: string`、`user_notes?: string`(可选择性更新)
|
||||||
|
|
||||||
|
* 逻辑:仅更新提供的字段;不影响其他字段。
|
||||||
|
|
||||||
|
* 修复:`POST /api/v1/app-user-admin/quota` 仅调整次数,不再自动写入 `user.notes`。
|
||||||
|
|
||||||
|
* 操作日志:在调整配额、更新备注、停用启用等操作时写入 `AppUserOperationLog`。
|
||||||
|
|
||||||
|
## 前端改造(要点)
|
||||||
|
|
||||||
|
* 多文件上传组件
|
||||||
|
|
||||||
|
* 改为多选/拖拽支持;对每个文件显示上传进度与失败重试;
|
||||||
|
|
||||||
|
* 成功后收集URL数组写入发票 `attachments` 或作为邮件附件来源;
|
||||||
|
|
||||||
|
* 兼容旧接口:若后端仅返回单URL,前端仍正常显示(降级为单文件模式)。
|
||||||
|
|
||||||
|
* 开票弹窗
|
||||||
|
|
||||||
|
* 支持附件列表预览与移除;提交时调用 `PUT /invoice/{id}/attachments`;
|
||||||
|
|
||||||
|
* 邮件发送弹窗
|
||||||
|
|
||||||
|
* 选择附件来源(已上传的附件/本地文件再上传);提交后在详情页面完整回显 `extra`(含附件清单与正文等)。
|
||||||
|
|
||||||
|
## 审计与日志
|
||||||
|
|
||||||
|
* 关键操作:邮件发送、发票附件更新、用户备注更新、配额调整
|
||||||
|
|
||||||
|
* 统一调用审计记录(路由中间件已存在,补充结构化日志:`logger.info()` + DB审计表/操作日志表写入)。
|
||||||
|
|
||||||
|
## 测试方案
|
||||||
|
|
||||||
|
* 单元测试
|
||||||
|
|
||||||
|
* Email发送控制器:事务成功/失败回滚(模拟抛错)
|
||||||
|
|
||||||
|
* 多文件上传:文件类型校验、URL数组返回、尾随空白处理
|
||||||
|
|
||||||
|
* 备注更新:选择性字段更新、不影响其他字段
|
||||||
|
|
||||||
|
* 集成测试(FastAPI + httpx.AsyncClient)
|
||||||
|
|
||||||
|
* 发送邮箱:请求→持久化校验(attachments/extra)→回显接口校验
|
||||||
|
|
||||||
|
* 附件上传:批量上传、更新发票、列表/详情回显
|
||||||
|
|
||||||
|
* 用户备注:接口调用→DB值校验→操作日志存在
|
||||||
|
|
||||||
|
## 迁移与兼容
|
||||||
|
|
||||||
|
* 使用现有迁移工具(如Aerich)生成并应用迁移:新增JSON/Text字段;
|
||||||
|
|
||||||
|
* 前端保留旧接口兼容:若上传仍走单文件,后端返回数组长度1;
|
||||||
|
|
||||||
|
* API文档(OpenAPI)
|
||||||
|
|
||||||
|
* 补充/更新以上端点的schema说明、示例请求/响应、错误码约定;
|
||||||
|
|
||||||
|
## 实施步骤与交付
|
||||||
|
|
||||||
|
1. 数据模型与迁移脚本编写与应用(EmailSendLog、Invoice、AppUser/OperationLog)。
|
||||||
|
2. 后端接口改造与事务封装(邮件发送、多文件上传、发票附件更新、备注接口)。
|
||||||
|
3. 前端组件与弹窗改造(多文件上传、进度与错误处理、回显extra)。
|
||||||
|
4. 审计日志与结构化日志补充。
|
||||||
|
5. 单元与集成测试编写,覆盖核心路径。
|
||||||
|
6. 更新接口文档与部署回归验证。
|
||||||
|
|
||||||
34
.trae/documents/修复添加发票抬头必填项校验.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
## 目标
|
||||||
|
|
||||||
|
* 添加抬头时将 `公司名称`、`公司税号`、`电子邮箱`设为必填,其他字段可为空。
|
||||||
|
|
||||||
|
* 现状确认(代码引用)
|
||||||
|
|
||||||
|
- 后端必填:`app/schemas/invoice.py:6–12` 中 `InvoiceHeaderCreate` 已要求 `company_name`、`tax_number` 为必填,`email: EmailStr` 为必填。
|
||||||
|
|
||||||
|
- API 入口:`app/api/v1/app_invoices/app_invoices.py:55–58` 新增抬头接口使用 `InvoiceHeaderCreate`,后端将严格校验三项必填。
|
||||||
|
|
||||||
|
## 修改方案
|
||||||
|
|
||||||
|
1. 统一前端校验文案
|
||||||
|
|
||||||
|
* 统一三项必填的错误提示为简洁中文,如:“请输入公司名称 / 公司税号 / 电子邮箱”。
|
||||||
|
|
||||||
|
* 邮箱格式提示统一为:“请输入有效的电子邮箱”。
|
||||||
|
|
||||||
|
2. 后端校验与返回确认
|
||||||
|
|
||||||
|
* 保持 `InvoiceHeaderCreate` 的必填与格式限制不变(`app/schemas/invoice.py:6–12`)。
|
||||||
|
|
||||||
|
* 确认更新接口 `InvoiceHeaderUpdate`(`app/schemas/invoice.py:32–39`)允许局部更新、但不影响创建必填逻辑。
|
||||||
|
|
||||||
|
3. 验证与测试
|
||||||
|
|
||||||
|
* 后端接口验证:对 `POST /app-invoices/headers`(`app/api/v1/app_invoices/app_invoices.py:55–58`)进行用例:缺失任一必填字段应返回 422;全部正确应 200/201。
|
||||||
|
|
||||||
|
* 可补充最小化单元测试:Pydantic 校验用例覆盖必填与格式。
|
||||||
|
|
||||||
|
## 交付内容。
|
||||||
|
|
||||||
|
* 完成基本交互与接口验证,确保行为符合预期。
|
||||||
|
|
||||||
225
DEPLOYMENT.md
@ -1,225 +0,0 @@
|
|||||||
# 非遗资产估值系统 - 部署文档
|
|
||||||
|
|
||||||
## 项目概述
|
|
||||||
|
|
||||||
非遗资产估值系统是一个基于 Vue.js + FastAPI 的全栈应用,用于非物质文化遗产资产的价值评估。
|
|
||||||
|
|
||||||
- **前端**: Vue.js + Vite + pnpm
|
|
||||||
- **后端**: Python 3.11 + FastAPI + Tortoise ORM
|
|
||||||
- **数据库**: MySQL
|
|
||||||
- **容器化**: Docker
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 目录结构
|
|
||||||
|
|
||||||
```
|
|
||||||
youshu-guzhi/
|
|
||||||
├── app/ # 后端 FastAPI 应用
|
|
||||||
│ ├── api/ # API 路由
|
|
||||||
│ ├── controllers/ # 业务控制器
|
|
||||||
│ ├── models/ # 数据库模型
|
|
||||||
│ ├── schemas/ # Pydantic 数据模型
|
|
||||||
│ ├── settings/ # 配置文件
|
|
||||||
│ └── utils/ # 工具函数和计算引擎
|
|
||||||
├── web/ # 前端 Vue.js 应用
|
|
||||||
├── deploy/ # 部署相关文件
|
|
||||||
│ ├── entrypoint.sh # 容器启动脚本
|
|
||||||
│ └── web.conf # Nginx 配置
|
|
||||||
├── Dockerfile # Docker 构建文件
|
|
||||||
├── requirements.txt # Python 依赖
|
|
||||||
└── run.py # 应用启动入口
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 环境配置
|
|
||||||
|
|
||||||
### 数据库配置
|
|
||||||
|
|
||||||
#### 使用 Docker 部署 MySQL
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 创建数据目录
|
|
||||||
mkdir -p ~/mysql-data
|
|
||||||
|
|
||||||
# 启动 MySQL 容器
|
|
||||||
docker run -d \
|
|
||||||
--name mysql-valuation \
|
|
||||||
-p 3306:3306 \
|
|
||||||
-e MYSQL_ROOT_PASSWORD=your_password \
|
|
||||||
-e MYSQL_DATABASE=valuation_service \
|
|
||||||
-v ~/mysql-data:/var/lib/mysql \
|
|
||||||
--restart=unless-stopped \
|
|
||||||
mysql:8.0
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 应用配置
|
|
||||||
|
|
||||||
配置文件位置: `app/settings/config.py`
|
|
||||||
|
|
||||||
```python
|
|
||||||
TORTOISE_ORM = {
|
|
||||||
"connections": {
|
|
||||||
"mysql": {
|
|
||||||
"engine": "tortoise.backends.mysql",
|
|
||||||
"credentials": {
|
|
||||||
"host": "your_mysql_host", # 数据库主机地址
|
|
||||||
"port": 3306, # 数据库端口
|
|
||||||
"user": "root", # 数据库用户名
|
|
||||||
"password": "your_password", # 数据库密码
|
|
||||||
"database": "valuation_service", # 数据库名称
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 第三方服务配置
|
|
||||||
|
|
||||||
| 服务 | 配置项 | 说明 |
|
|
||||||
|-----|-------|------|
|
|
||||||
| 阿里云短信 | `ALIBABA_CLOUD_ACCESS_KEY_ID/SECRET` | 短信验证码发送 |
|
|
||||||
| 阿里云邮件 | `SMTP_*` | 邮件发送 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 本地开发
|
|
||||||
|
|
||||||
### 1. 安装依赖
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 安装 Python 依赖
|
|
||||||
pip install -r requirements.txt
|
|
||||||
|
|
||||||
# 安装前端依赖
|
|
||||||
cd web
|
|
||||||
pnpm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. 启动服务
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 启动后端 (端口 9999)
|
|
||||||
python run.py
|
|
||||||
|
|
||||||
# 启动前端开发服务器 (另一个终端)
|
|
||||||
cd web
|
|
||||||
pnpm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Docker 部署
|
|
||||||
|
|
||||||
### 1. 构建镜像
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 设置平台 (M1/M2 Mac 需要)
|
|
||||||
export DOCKER_DEFAULT_PLATFORM=linux/amd64
|
|
||||||
|
|
||||||
# 构建镜像
|
|
||||||
docker build -t zfc931912343/guzhi-fastapi-admin:v3.9 .
|
|
||||||
|
|
||||||
# 推送到 Docker Hub
|
|
||||||
docker push zfc931912343/guzhi-fastapi-admin:v3.9
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. 部署到服务器
|
|
||||||
|
|
||||||
#### 生产环境
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 创建数据目录
|
|
||||||
mkdir -p ~/guzhi-data/static/images
|
|
||||||
|
|
||||||
# 拉取并运行
|
|
||||||
docker pull nbg2akd8w5diy8.xuanyuan.run/zfc931912343/guzhi-fastapi-admin:v3.9 \
|
|
||||||
&& docker rm -f guzhi_pro \
|
|
||||||
&& docker run -itd \
|
|
||||||
--name=guzhi_pro \
|
|
||||||
-p 8080:9999 \
|
|
||||||
-v ~/guzhi-data/static/images:/opt/vue-fastapi-admin/app/static/images \
|
|
||||||
--restart=unless-stopped \
|
|
||||||
-e TZ=Asia/Shanghai \
|
|
||||||
nbg2akd8w5diy8.xuanyuan.run/zfc931912343/guzhi-fastapi-admin:v3.9
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 开发/测试环境
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker pull nbg2akd8w5diy8.xuanyuan.run/zfc931912343/guzhi-fastapi-admin:v3.9 \
|
|
||||||
&& docker rm -f guzhi_dev \
|
|
||||||
&& docker run -itd \
|
|
||||||
--name=guzhi_dev \
|
|
||||||
-p 9990:9999 \
|
|
||||||
-v ~/guzhi-data/static:/opt/vue-fastapi-admin/app/static \
|
|
||||||
--restart=unless-stopped \
|
|
||||||
-e TZ=Asia/Shanghai \
|
|
||||||
nbg2akd8w5diy8.xuanyuan.run/zfc931912343/guzhi-fastapi-admin:v3.9
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 端口说明
|
|
||||||
|
|
||||||
| 环境 | 容器名 | 主机端口 | 容器端口 |
|
|
||||||
|-----|-------|---------|---------|
|
|
||||||
| 生产 | guzhi_pro | 8080 | 9999 |
|
|
||||||
| 开发 | guzhi_dev | 9990 | 9999 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 数据持久化
|
|
||||||
|
|
||||||
容器挂载的数据目录:
|
|
||||||
|
|
||||||
```
|
|
||||||
~/guzhi-data/static/images -> /opt/vue-fastapi-admin/app/static/images
|
|
||||||
```
|
|
||||||
|
|
||||||
用于存储用户上传的图片文件(如非遗纹样图片、证书图片等)。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 常用运维命令
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 查看容器日志
|
|
||||||
docker logs -f guzhi_pro
|
|
||||||
|
|
||||||
# 进入容器
|
|
||||||
docker exec -it guzhi_pro bash
|
|
||||||
|
|
||||||
# 重启容器
|
|
||||||
docker restart guzhi_pro
|
|
||||||
|
|
||||||
# 查看容器状态
|
|
||||||
docker ps | grep guzhi
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## API 接口说明
|
|
||||||
|
|
||||||
| 模块 | 路径前缀 | 说明 |
|
|
||||||
|-----|---------|------|
|
|
||||||
| 用户端估值 | `/api/v1/app-valuations/` | 用户提交估值请求 |
|
|
||||||
| 管理端估值 | `/api/v1/valuations/` | 管理后台查看/审核 |
|
|
||||||
| 计算报告 | `/api/v1/valuations/{id}/report` | 获取计算过程报告 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 版本历史
|
|
||||||
|
|
||||||
| 版本 | 日期 | 说明 |
|
|
||||||
|-----|------|------|
|
|
||||||
| v3.9 | 2025-12-18 | 修复风险调整系数B3显示问题,添加计算过程详情 |
|
|
||||||
| v3.8 | 2025-12-18 | 修复历史传承度HI权重计算 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 联系信息
|
|
||||||
|
|
||||||
如有问题,请联系项目负责人。
|
|
||||||
10
Dockerfile
@ -1,14 +1,8 @@
|
|||||||
FROM node:18-alpine AS web
|
FROM node:18.12.0-alpine3.16 AS web
|
||||||
|
|
||||||
WORKDIR /opt/vue-fastapi-admin
|
WORKDIR /opt/vue-fastapi-admin
|
||||||
COPY /web ./web
|
COPY /web ./web
|
||||||
|
RUN npm install -g pnpm && cd /opt/vue-fastapi-admin/web && pnpm install --registry=https://registry.npmmirror.com && pnpm run build
|
||||||
# 安装pnpm并设置配置
|
|
||||||
RUN npm install -g pnpm && \
|
|
||||||
cd /opt/vue-fastapi-admin/web && \
|
|
||||||
pnpm config set registry https://registry.npmmirror.com && \
|
|
||||||
pnpm install && \
|
|
||||||
pnpm run build
|
|
||||||
|
|
||||||
|
|
||||||
FROM python:3.11-slim-bullseye
|
FROM python:3.11-slim-bullseye
|
||||||
|
|||||||
29
aaa.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
2025-11-17 18:13:15.766 | INFO | app.api.v1.app_valuations.app_valuations:calculate_valuation:284 - valuation.task_queued user_id=30 asset_name=蜀锦 industry=纺织业
|
||||||
|
2025-11-17 18:13:15.768 | INFO | app.api.v1.app_valuations.app_valuations:_perform_valuation_calculation:44 - valuation.calc_start user_id=30 asset_name=蜀锦 industry=纺织业
|
||||||
|
2025-11-17 18:13:15 - INFO - 14.145.4.28:0 - "POST /api/v1/app-valuations/ HTTP/1.0" 200 OK
|
||||||
|
2025-11-17 18:13:16,048 - INFO - API请求成功: dajiala.web_search
|
||||||
|
2025-11-17 18:13:16,049 - ERROR - 微信指数API返回错误: {'code': 20001, 'msg': '金额不足,请充值', 'data': ''}
|
||||||
|
2025-11-17 18:13:16,049 - WARNING - 没有指数数据用于计算平均值
|
||||||
|
2025-11-17 18:13:16.049 | INFO | app.api.v1.app_valuations.app_valuations:_extract_calculation_params_b1:336 - 资产 '蜀锦' 的微信指数近30天平均值: 0.0
|
||||||
|
2025-11-17 18:13:16,051 - INFO - 行业 纺织业 S2计算: S2=2200.0
|
||||||
|
{'orderNo': '202511171813162420295', 'rc': '0001', 'msg': '查询成功,无数据'}
|
||||||
|
2025-11-17 18:13:16,827 - INFO - API请求成功: chinaz.judgement
|
||||||
|
{'orderNo': '202511171813169260297', 'rc': '0002', 'msg': '查询企业不存在,请检查后再试'}
|
||||||
|
2025-11-17 18:13:17,428 - INFO - API请求成功: chinaz.patent
|
||||||
|
2025-11-17 18:13:17.428 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_complete_final_value_a:80 - final_value_a.calculation_start input_data_keys=['model_data', 'market_data'] model_data_keys=['economic_data', 'cultural_data', 'risky_data'] market_data_keys=['weighted_average_price', 'manual_bids', 'expert_valuations', 'daily_browse_volume', 'collection_count', 'issuance_level', 'recent_market_activity']
|
||||||
|
2025-11-17 18:13:17.429 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_complete_final_value_a:89 - final_value_a.economic_data 经济价值B1参数: 近三年机构收益=[169.0, 169.0, 169.0] 专利分=3.0 普及地域分=7.0 侵权分=0.0 创新投入比=18.93491124260355 ESG分=5.0 专利使用量=0.0 行业修正系数=-0.5
|
||||||
|
2025-11-17 18:13:17.429 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_complete_final_value_a:101 - final_value_a.cultural_data 文化价值B2参数: 传承人等级系数=0.7 跨境深度=0.3 线下教学次数=50.0 抖音浏览量=67000.0 快手浏览量=0 哔哩哔哩浏览量=0 结构复杂度=1.5 归一化信息熵=9 历史传承度=0.0
|
||||||
|
2025-11-17 18:13:17.429 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_complete_final_value_a:114 - final_value_a.risky_data 风险调整B3参数: 最高价=3980.0 最低价=1580.0 诉讼状态=0.0 传承人年龄=[0, 0, 2]
|
||||||
|
2025-11-17 18:13:17.429 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_complete_final_value_a:122 - final_value_a.market_data 市场估值C参数: 平均交易价=None 手动出价=[3980.0, 1580.0, 2780.0] 专家估值=[] 日浏览量=296000.0 收藏数量=67000 发行等级=限量:总发行份数 ≤100份 最近市场活动=近一周
|
||||||
|
2025-11-17 18:13:17.429 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_complete_final_value_a:132 - final_value_a.calculating_model_value_b 开始计算模型估值B
|
||||||
|
2025-11-17 18:13:17.429 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_complete_final_value_a:142 - final_value_a.model_value_b_calculated 模型估值B计算完成: 模型估值B=336.37180882339413万元 耗时=0ms 返回字段=['economic_value_b1', 'cultural_value_b2', 'risk_value_b3', 'model_value_b']
|
||||||
|
2025-11-17 18:13:17.429 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_complete_final_value_a:152 - final_value_a.calculating_market_value_c 开始计算市场估值C
|
||||||
|
浏览热度分:
|
||||||
|
2025-11-17 18:13:17.430 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_complete_final_value_a:162 - final_value_a.market_value_c_calculated 市场估值C计算完成: 市场估值C=9452.0万元 耗时=0ms 返回字段=['market_bidding_c1', 'heat_coefficient_c2', 'scarcity_multiplier_c3', 'temporal_decay_c4', 'market_value_c']
|
||||||
|
2025-11-17 18:13:17.430 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_complete_final_value_a:172 - final_value_a.calculating_final_value_a 开始计算最终估值A: 模型估值B=336.37180882339413万元 市场估值C=9452.0万元
|
||||||
|
2025-11-17 18:13:17.430 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_final_value_a:50 - final_value_a.calculate_final_value_a 开始计算最终估值A: 模型估值B=336.37180882339413万元 市场估值C=9452.0万元
|
||||||
|
2025-11-17 18:13:17.430 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_final_value_a:57 - final_value_a.weighted_values 加权计算: 模型估值B加权值=235.46026617637588万元(权重0.7) 市场估值C加权值=2835.6万元(权重0.3)
|
||||||
|
2025-11-17 18:13:17.430 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_final_value_a:62 - final_value_a.final_calculation 最终估值A计算: 模型估值B=336.37180882339413万元 市场估值C=9452.0万元 模型加权值=235.46026617637588万元 市场加权值=2835.6万元 最终估值AB=3071.060266176376万元
|
||||||
|
2025-11-17 18:13:17.430 | INFO | app.utils.calculation_engine.final_value_ab.final_value_a:calculate_complete_final_value_a:183 - final_value_a.calculation_completed 最终估值A计算完成: 最终估值AB=3071.060266176376万元 模型估值B=336.37180882339413万元 市场估值C=9452.0万元 总耗时=1ms 模型计算耗时=0ms 市场计算耗时=0ms
|
||||||
|
2025-11-17 18:13:17.430 | INFO | app.api.v1.app_valuations.app_valuations:_perform_valuation_calculation:160 - valuation.calc_done user_id=30 duration_ms=1662 model_value_b=336.37180882339413 market_value_c=9452.0 final_value_ab=3071.060266176376
|
||||||
|
Traceback (most recent call last):
|
||||||
@ -117,23 +117,13 @@ async def create_with_receipt(payload: AppCreateInvoiceWithReceipt, current_user
|
|||||||
)
|
)
|
||||||
inv = await invoice_controller.create(inv_data)
|
inv = await invoice_controller.create(inv_data)
|
||||||
if payload.receipt_urls:
|
if payload.receipt_urls:
|
||||||
urls = payload.receipt_urls
|
receipts = []
|
||||||
main_url = urls[0] if isinstance(urls, list) and urls else None
|
for url in payload.receipt_urls:
|
||||||
receipt = await invoice_controller.create_receipt(
|
receipt = await invoice_controller.create_receipt(inv.id, PaymentReceiptCreate(url=url, note=payload.note))
|
||||||
inv.id,
|
detail = await invoice_controller.get_receipt_by_id(receipt.id)
|
||||||
PaymentReceiptCreate(url=main_url, note=payload.note, extra=urls)
|
if detail:
|
||||||
)
|
receipts.append(detail)
|
||||||
detail = await invoice_controller.get_receipt_by_id(receipt.id)
|
return Success(data={"invoice_id": inv.id, "receipts": receipts}, msg="创建并上传成功")
|
||||||
return Success(data={"invoice_id": inv.id, "receipts": [detail] if detail else []}, msg="创建并上传成功")
|
|
||||||
if isinstance(payload.receipt_url, list) and payload.receipt_url:
|
|
||||||
urls = payload.receipt_url
|
|
||||||
main_url = urls[0]
|
|
||||||
receipt = await invoice_controller.create_receipt(
|
|
||||||
inv.id,
|
|
||||||
PaymentReceiptCreate(url=main_url, note=payload.note, extra=urls)
|
|
||||||
)
|
|
||||||
detail = await invoice_controller.get_receipt_by_id(receipt.id)
|
|
||||||
return Success(data={"invoice_id": inv.id, "receipts": [detail] if detail else []}, msg="创建并上传成功")
|
|
||||||
if payload.receipt_url:
|
if payload.receipt_url:
|
||||||
receipt = await invoice_controller.create_receipt(inv.id, PaymentReceiptCreate(url=payload.receipt_url, note=payload.note))
|
receipt = await invoice_controller.create_receipt(inv.id, PaymentReceiptCreate(url=payload.receipt_url, note=payload.note))
|
||||||
detail = await invoice_controller.get_receipt_by_id(receipt.id)
|
detail = await invoice_controller.get_receipt_by_id(receipt.id)
|
||||||
|
|||||||
@ -16,7 +16,6 @@ admin_app_users_router = APIRouter(dependencies=[DependAuth, DependPermission],
|
|||||||
async def list_app_users(
|
async def list_app_users(
|
||||||
phone: Optional[str] = Query(None),
|
phone: Optional[str] = Query(None),
|
||||||
wechat: Optional[str] = Query(None),
|
wechat: Optional[str] = Query(None),
|
||||||
include_deleted: Optional[bool] = Query(False),
|
|
||||||
id: Optional[str] = Query(None),
|
id: Optional[str] = Query(None),
|
||||||
created_start: Optional[str] = Query(None),
|
created_start: Optional[str] = Query(None),
|
||||||
created_end: Optional[str] = Query(None),
|
created_end: Optional[str] = Query(None),
|
||||||
@ -25,8 +24,6 @@ async def list_app_users(
|
|||||||
page_size: int = Query(10, ge=1, le=100),
|
page_size: int = Query(10, ge=1, le=100),
|
||||||
):
|
):
|
||||||
qs = AppUser.filter()
|
qs = AppUser.filter()
|
||||||
if not include_deleted:
|
|
||||||
qs = qs.filter(is_deleted=False)
|
|
||||||
if id is not None and id.strip().isdigit():
|
if id is not None and id.strip().isdigit():
|
||||||
qs = qs.filter(id=int(id.strip()))
|
qs = qs.filter(id=int(id.strip()))
|
||||||
if phone:
|
if phone:
|
||||||
@ -136,11 +133,3 @@ async def update_app_user(user_id: int, data: AppUserUpdateSchema):
|
|||||||
"updated_at": user.updated_at.isoformat() if user.updated_at else "",
|
"updated_at": user.updated_at.isoformat() if user.updated_at else "",
|
||||||
"remaining_quota": int(getattr(user, "remaining_quota", 0) or 0),
|
"remaining_quota": int(getattr(user, "remaining_quota", 0) or 0),
|
||||||
}, msg="更新成功")
|
}, msg="更新成功")
|
||||||
|
|
||||||
|
|
||||||
@admin_app_users_router.delete("/{user_id}", summary="注销App用户", response_model=BasicResponse[dict])
|
|
||||||
async def admin_delete_app_user(user_id: int):
|
|
||||||
ok = await app_user_controller.delete_user_account(user_id)
|
|
||||||
if not ok:
|
|
||||||
raise HTTPException(status_code=404, detail="用户不存在")
|
|
||||||
return Success(data={"user_id": user_id}, msg="账号已注销")
|
|
||||||
|
|||||||
@ -15,20 +15,11 @@ from app.schemas.base import BasicResponse, MessageOut, Success
|
|||||||
from app.utils.app_user_jwt import (
|
from app.utils.app_user_jwt import (
|
||||||
create_app_user_access_token,
|
create_app_user_access_token,
|
||||||
get_current_app_user,
|
get_current_app_user,
|
||||||
ACCESS_TOKEN_EXPIRE_MINUTES,
|
ACCESS_TOKEN_EXPIRE_MINUTES
|
||||||
verify_app_user_token
|
|
||||||
)
|
)
|
||||||
from app.models.user import AppUser
|
from app.models.user import AppUser
|
||||||
from app.controllers.user_valuation import user_valuation_controller
|
from app.controllers.user_valuation import user_valuation_controller
|
||||||
from app.controllers.invoice import invoice_controller
|
from app.controllers.invoice import invoice_controller
|
||||||
from app.core.token_blacklist import add_to_blacklist
|
|
||||||
from fastapi import Header
|
|
||||||
from pydantic import BaseModel, Field
|
|
||||||
from typing import Optional
|
|
||||||
import time
|
|
||||||
from app.models.valuation import ValuationAssessment
|
|
||||||
from app.services.sms_store import store
|
|
||||||
from app.settings import settings
|
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@ -87,50 +78,6 @@ async def logout(current_user: AppUser = Depends(get_current_app_user)):
|
|||||||
return Success(data={"message": "登出成功"})
|
return Success(data={"message": "登出成功"})
|
||||||
|
|
||||||
|
|
||||||
class DeleteAccountRequest(BaseModel):
|
|
||||||
code: Optional[str] = Field(None, description="短信验证码或绕过码")
|
|
||||||
|
|
||||||
|
|
||||||
@router.delete("/account", summary="注销用户信息", response_model=BasicResponse[dict])
|
|
||||||
async def delete_account(current_user: AppUser = Depends(get_current_app_user), token: str = Header(None), payload: Optional[DeleteAccountRequest] = None):
|
|
||||||
if payload and payload.code:
|
|
||||||
if settings.SMS_BYPASS_CODE and payload.code == settings.SMS_BYPASS_CODE:
|
|
||||||
store.mark_verified(current_user.phone)
|
|
||||||
else:
|
|
||||||
ok, reason = store.can_verify(current_user.phone)
|
|
||||||
if not ok:
|
|
||||||
raise HTTPException(status_code=423, detail=str(reason))
|
|
||||||
record = store.get_code(current_user.phone)
|
|
||||||
if not record:
|
|
||||||
raise HTTPException(status_code=400, detail="验证码已过期")
|
|
||||||
code_stored, expires_at = record
|
|
||||||
if time.time() > expires_at:
|
|
||||||
store.clear_code(current_user.phone)
|
|
||||||
raise HTTPException(status_code=400, detail="验证码已过期")
|
|
||||||
if payload.code != code_stored:
|
|
||||||
count, locked = store.record_verify_failure(current_user.phone)
|
|
||||||
if locked:
|
|
||||||
raise HTTPException(status_code=423, detail="尝试次数过多,已锁定")
|
|
||||||
raise HTTPException(status_code=401, detail="验证码错误")
|
|
||||||
store.clear_code(current_user.phone)
|
|
||||||
store.reset_failures(current_user.phone)
|
|
||||||
store.mark_verified(current_user.phone)
|
|
||||||
else:
|
|
||||||
if not store.is_recently_verified(current_user.phone):
|
|
||||||
raise HTTPException(status_code=403, detail="请先完成手机号验证码验证")
|
|
||||||
remaining_quota = int(getattr(current_user, "remaining_quota", 0) or 0)
|
|
||||||
if remaining_quota > 0:
|
|
||||||
raise HTTPException(status_code=400, detail="当前剩余估值次数大于0,无法注销账号")
|
|
||||||
ok = await app_user_controller.delete_user_account(current_user.id)
|
|
||||||
if token:
|
|
||||||
payload = verify_app_user_token(token)
|
|
||||||
exp = getattr(payload, "exp", None) if payload else None
|
|
||||||
await add_to_blacklist(token, current_user.id, exp)
|
|
||||||
if not ok:
|
|
||||||
raise HTTPException(status_code=404, detail="用户不存在")
|
|
||||||
return Success(data={"message": "账号已注销"})
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/profile", response_model=BasicResponse[dict], summary="获取用户信息")
|
@router.get("/profile", response_model=BasicResponse[dict], summary="获取用户信息")
|
||||||
async def get_profile(current_user: AppUser = Depends(get_current_app_user)):
|
async def get_profile(current_user: AppUser = Depends(get_current_app_user)):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -37,13 +37,13 @@ from app.utils.wechat_index_calculator import wechat_index_calculator
|
|||||||
app_valuations_router = APIRouter(tags=["用户端估值评估"])
|
app_valuations_router = APIRouter(tags=["用户端估值评估"])
|
||||||
|
|
||||||
|
|
||||||
async def _perform_valuation_calculation(user_id: int, valuation_id: int, data: UserValuationCreate):
|
async def _perform_valuation_calculation(user_id: int, data: UserValuationCreate):
|
||||||
"""
|
"""
|
||||||
后台任务:执行估值计算
|
后台任务:执行估值计算
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
start_ts = time.monotonic()
|
start_ts = time.monotonic()
|
||||||
logger.info("valuation.calc_start user_id={} valuation_id={} asset_name={} industry={}", user_id, valuation_id,
|
logger.info("valuation.calc_start user_id={} asset_name={} industry={}", user_id,
|
||||||
getattr(data, 'asset_name', None), getattr(data, 'industry', None))
|
getattr(data, 'asset_name', None), getattr(data, 'industry', None))
|
||||||
|
|
||||||
# 根据行业查询 ESG 基准分(优先用行业名称匹配,如用的是行业代码就把 name 改成 code)
|
# 根据行业查询 ESG 基准分(优先用行业名称匹配,如用的是行业代码就把 name 改成 code)
|
||||||
@ -84,53 +84,25 @@ async def _perform_valuation_calculation(user_id: int, valuation_id: int, data:
|
|||||||
# 政策匹配度
|
# 政策匹配度
|
||||||
input_data_by_b1["policy_match_score"] = policy_match_score
|
input_data_by_b1["policy_match_score"] = policy_match_score
|
||||||
|
|
||||||
# 法律风险/侵权记录:通过司法API查询诉讼状态
|
# 侵权分 默认 6
|
||||||
# 评分规则:无诉讼(10分), 已解决诉讼(7分), 未解决诉讼(0分)
|
|
||||||
lawsuit_status_text = "无诉讼" # 默认无诉讼
|
|
||||||
judicial_api_response = {} # 保存API原始返回用于日志
|
|
||||||
try:
|
try:
|
||||||
judicial_data = universal_api.query_judicial_data(data.institution)
|
judicial_data = universal_api.query_judicial_data(data.institution)
|
||||||
_data = judicial_data.get("data", {})
|
_data = judicial_data["data"].get("target", None) # 诉讼标的
|
||||||
judicial_api_response = _data # 保存原始返回
|
if _data:
|
||||||
target = _data.get("target", None) # 诉讼标的
|
infringement_score = 0.0
|
||||||
total = _data.get("total", 0) # 诉讼总数
|
|
||||||
|
|
||||||
if target or total > 0:
|
|
||||||
# 有诉讼记录,检查是否已解决
|
|
||||||
settled = _data.get("settled", False)
|
|
||||||
if settled:
|
|
||||||
lawsuit_status_text = "已解决诉讼"
|
|
||||||
infringement_score = 7.0
|
|
||||||
else:
|
|
||||||
lawsuit_status_text = "未解决诉讼"
|
|
||||||
infringement_score = 0.0
|
|
||||||
else:
|
else:
|
||||||
lawsuit_status_text = "无诉讼"
|
|
||||||
infringement_score = 10.0
|
infringement_score = 10.0
|
||||||
|
except:
|
||||||
logger.info(f"法律风险查询结果: 机构={data.institution} 诉讼状态={lawsuit_status_text} 评分={infringement_score}")
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning(f"法律风险查询失败: {e}")
|
|
||||||
lawsuit_status_text = "查询失败"
|
|
||||||
infringement_score = 0.0
|
infringement_score = 0.0
|
||||||
judicial_api_response = {"error": str(e)}
|
|
||||||
|
|
||||||
input_data_by_b1["infringement_score"] = infringement_score
|
input_data_by_b1["infringement_score"] = infringement_score
|
||||||
# 保存诉讼状态文本,用于前端展示
|
|
||||||
lawsuit_status_for_display = lawsuit_status_text
|
|
||||||
|
|
||||||
# 获取专利信息
|
# 获取专利信息 TODO 参数
|
||||||
patent_api_response = {} # 保存API原始返回用于日志
|
|
||||||
patent_matched_count = 0
|
|
||||||
patent_years_total = 0
|
|
||||||
try:
|
try:
|
||||||
patent_data = universal_api.query_patent_info(data.industry)
|
patent_data = universal_api.query_patent_info(data.industry)
|
||||||
patent_api_response = patent_data # 保存原始返回
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning("valuation.patent_api_error err={}", repr(e))
|
logger.warning("valuation.patent_api_error err={}", repr(e))
|
||||||
input_data_by_b1["patent_count"] = 0.0
|
input_data_by_b1["patent_count"] = 0.0
|
||||||
input_data_by_b1["patent_score"] = 0.0
|
input_data_by_b1["patent_score"] = 0.0
|
||||||
patent_api_response = {"error": str(e)}
|
|
||||||
|
|
||||||
patent_dict = patent_data if isinstance(patent_data, dict) else {}
|
patent_dict = patent_data if isinstance(patent_data, dict) else {}
|
||||||
inner_data = patent_dict.get("data", {}) if isinstance(patent_dict.get("data", {}), dict) else {}
|
inner_data = patent_dict.get("data", {}) if isinstance(patent_dict.get("data", {}), dict) else {}
|
||||||
@ -141,17 +113,16 @@ async def _perform_valuation_calculation(user_id: int, valuation_id: int, data:
|
|||||||
# 查询匹配申请号的记录集合
|
# 查询匹配申请号的记录集合
|
||||||
matched = [item for item in data_list if
|
matched = [item for item in data_list if
|
||||||
isinstance(item, dict) and item.get("SQH") == getattr(data, 'patent_application_no', None)]
|
isinstance(item, dict) and item.get("SQH") == getattr(data, 'patent_application_no', None)]
|
||||||
patent_matched_count = len(matched)
|
|
||||||
if matched:
|
if matched:
|
||||||
patent_count_score = min(len(matched) * 2.5, 10.0)
|
patent_count_score = min(len(matched) * 2.5, 10.0)
|
||||||
input_data_by_b1["patent_count"] = float(patent_count_score)
|
input_data_by_b1["patent_count"] = float(patent_count_score)
|
||||||
else:
|
else:
|
||||||
input_data_by_b1["patent_count"] = 0.0
|
input_data_by_b1["patent_count"] = 0.0
|
||||||
|
|
||||||
patent_years_total = calculate_total_years(data_list)
|
years_total = calculate_total_years(data_list)
|
||||||
if patent_years_total > 10:
|
if years_total > 10:
|
||||||
patent_score = 10.0
|
patent_score = 10.0
|
||||||
elif patent_years_total >= 5:
|
elif years_total >= 5:
|
||||||
patent_score = 7.0
|
patent_score = 7.0
|
||||||
else:
|
else:
|
||||||
patent_score = 3.0
|
patent_score = 3.0
|
||||||
@ -181,10 +152,21 @@ async def _perform_valuation_calculation(user_id: int, valuation_id: int, data:
|
|||||||
}
|
}
|
||||||
|
|
||||||
calculator = FinalValueACalculator()
|
calculator = FinalValueACalculator()
|
||||||
|
# 先创建估值记录以获取ID,方便步骤落库关联
|
||||||
|
initial_detail = await user_valuation_controller.create_valuation(
|
||||||
|
user_id=user_id,
|
||||||
|
data=data,
|
||||||
|
calculation_result=None,
|
||||||
|
calculation_input=None,
|
||||||
|
drp_result=None,
|
||||||
|
status='pending'
|
||||||
|
)
|
||||||
|
valuation_id = initial_detail.id
|
||||||
|
logger.info("valuation.init_created user_id={} valuation_id={}", user_id, valuation_id)
|
||||||
|
|
||||||
# 步骤1:立即更新计算输入参数(不管后续是否成功)
|
# 步骤1:立即更新计算输入参数(不管后续是否成功)
|
||||||
try:
|
try:
|
||||||
await valuation_controller.update_calc(
|
await valuation_controller.update(
|
||||||
valuation_id,
|
valuation_id,
|
||||||
ValuationAssessmentUpdate(
|
ValuationAssessmentUpdate(
|
||||||
calculation_input=input_data,
|
calculation_input=input_data,
|
||||||
@ -205,9 +187,10 @@ async def _perform_valuation_calculation(user_id: int, valuation_id: int, data:
|
|||||||
# 政策匹配度
|
# 政策匹配度
|
||||||
api_calc_fields["policy_matching"] = str(policy_match_score) if policy_match_score is not None else None
|
api_calc_fields["policy_matching"] = str(policy_match_score) if policy_match_score is not None else None
|
||||||
|
|
||||||
# 侵权记录/法律风险 - 使用实际查询到的诉讼状态
|
# 侵权记录/法律风险
|
||||||
api_calc_fields["infringement_record"] = lawsuit_status_for_display
|
infringement_record_value = "有侵权记录" if infringement_score == 0.0 else "无侵权记录"
|
||||||
api_calc_fields["legal_risk"] = lawsuit_status_for_display
|
api_calc_fields["infringement_record"] = infringement_record_value
|
||||||
|
api_calc_fields["legal_risk"] = infringement_record_value
|
||||||
|
|
||||||
# 专利使用量
|
# 专利使用量
|
||||||
patent_count_value = input_data_by_b1.get("patent_count", 0.0)
|
patent_count_value = input_data_by_b1.get("patent_count", 0.0)
|
||||||
@ -229,7 +212,7 @@ async def _perform_valuation_calculation(user_id: int, valuation_id: int, data:
|
|||||||
# api_calc_fields["flow_correction"] = None
|
# api_calc_fields["flow_correction"] = None
|
||||||
|
|
||||||
if api_calc_fields:
|
if api_calc_fields:
|
||||||
await valuation_controller.update_calc(
|
await valuation_controller.update(
|
||||||
valuation_id,
|
valuation_id,
|
||||||
ValuationAssessmentUpdate(**api_calc_fields)
|
ValuationAssessmentUpdate(**api_calc_fields)
|
||||||
)
|
)
|
||||||
@ -237,136 +220,12 @@ async def _perform_valuation_calculation(user_id: int, valuation_id: int, data:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning("valuation.failed_to_update_api_calc_fields valuation_id={} err={}", valuation_id, repr(e))
|
logger.warning("valuation.failed_to_update_api_calc_fields valuation_id={} err={}", valuation_id, repr(e))
|
||||||
|
|
||||||
# 步骤1.6:记录所有API查询结果和参数映射(便于检查参数匹配)
|
|
||||||
try:
|
|
||||||
# 1. ESG评分查询记录
|
|
||||||
await valuation_controller.log_formula_step(
|
|
||||||
valuation_id, "API_ESG_QUERY",
|
|
||||||
status="completed",
|
|
||||||
input_params={"industry": data.industry},
|
|
||||||
output_result={"esg_score": esg_score, "source": "ESG表"}
|
|
||||||
)
|
|
||||||
|
|
||||||
# 2. 行业系数查询记录
|
|
||||||
await valuation_controller.log_formula_step(
|
|
||||||
valuation_id, "API_INDUSTRY_QUERY",
|
|
||||||
status="completed",
|
|
||||||
input_params={"industry": data.industry},
|
|
||||||
output_result={"industry_coefficient": fix_num_score, "source": "Industry表"}
|
|
||||||
)
|
|
||||||
|
|
||||||
# 3. 政策匹配度查询记录
|
|
||||||
await valuation_controller.log_formula_step(
|
|
||||||
valuation_id, "API_POLICY_QUERY",
|
|
||||||
status="completed",
|
|
||||||
input_params={"industry": data.industry},
|
|
||||||
output_result={"policy_match_score": policy_match_score, "source": "Policy表"}
|
|
||||||
)
|
|
||||||
|
|
||||||
# 4. 司法诉讼查询记录
|
|
||||||
await valuation_controller.log_formula_step(
|
|
||||||
valuation_id, "API_JUDICIAL_QUERY",
|
|
||||||
status="completed",
|
|
||||||
input_params={"institution": data.institution},
|
|
||||||
output_result={
|
|
||||||
"api_response": judicial_api_response, # API原始返回
|
|
||||||
"lawsuit_status": lawsuit_status_for_display,
|
|
||||||
"infringement_score": infringement_score,
|
|
||||||
"calculation": f"诉讼标的={judicial_api_response.get('target', '无')}, 诉讼总数={judicial_api_response.get('total', 0)} → {lawsuit_status_for_display} → {infringement_score}分",
|
|
||||||
"score_rule": "无诉讼:10分, 已解决:7分, 未解决:0分"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# 5. 专利信息查询记录
|
|
||||||
await valuation_controller.log_formula_step(
|
|
||||||
valuation_id, "API_PATENT_QUERY",
|
|
||||||
status="completed",
|
|
||||||
input_params={
|
|
||||||
"industry": data.industry,
|
|
||||||
"patent_application_no": data.patent_application_no
|
|
||||||
},
|
|
||||||
output_result={
|
|
||||||
"api_data_count": len(patent_api_response.get("data", {}).get("dataList", []) if isinstance(patent_api_response.get("data"), dict) else []),
|
|
||||||
"matched_count": patent_matched_count,
|
|
||||||
"years_total": patent_years_total,
|
|
||||||
"patent_count": input_data_by_b1.get("patent_count", 0),
|
|
||||||
"patent_score": input_data_by_b1.get("patent_score", 0),
|
|
||||||
"calculation": f"匹配专利数={patent_matched_count} → 专利数分={input_data_by_b1.get('patent_count', 0)}, 剩余年限合计={patent_years_total}年 → 专利分={patent_score}",
|
|
||||||
"score_rule": "剩余年限>10年:10分, 5-10年:7分, <5年:3分"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# 6. 微信指数查询记录
|
|
||||||
await valuation_controller.log_formula_step(
|
|
||||||
valuation_id, "API_WECHAT_INDEX",
|
|
||||||
status="completed",
|
|
||||||
input_params={"asset_name": data.asset_name},
|
|
||||||
output_result={
|
|
||||||
"search_index_s1": input_data_by_b1.get("search_index_s1", 0),
|
|
||||||
"formula": "S1 = 微信指数 / 10"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# 7. 跨界合作深度映射记录
|
|
||||||
await valuation_controller.log_formula_step(
|
|
||||||
valuation_id, "MAPPING_CROSS_BORDER_DEPTH",
|
|
||||||
status="completed",
|
|
||||||
input_params={
|
|
||||||
"user_input": getattr(data, 'cooperation_depth', None),
|
|
||||||
"mapping": {"0":"无(0分)", "1":"品牌联名(3分)", "2":"科技载体(5分)", "3":"国家外交礼品(10分)"}
|
|
||||||
},
|
|
||||||
output_result={"cross_border_depth": input_data_by_b2.get("cross_border_depth", 0)}
|
|
||||||
)
|
|
||||||
|
|
||||||
# 8. 传承人等级映射记录
|
|
||||||
await valuation_controller.log_formula_step(
|
|
||||||
valuation_id, "MAPPING_INHERITOR_LEVEL",
|
|
||||||
status="completed",
|
|
||||||
input_params={
|
|
||||||
"user_input": data.inheritor_level,
|
|
||||||
"mapping": {"国家级传承人":"10分", "省级传承人":"7分", "市级传承人及以下":"4分"}
|
|
||||||
},
|
|
||||||
output_result={"inheritor_level_coefficient": input_data_by_b2.get("inheritor_level_coefficient", 0)}
|
|
||||||
)
|
|
||||||
|
|
||||||
# 9. 历史传承度HI计算记录
|
|
||||||
await valuation_controller.log_formula_step(
|
|
||||||
valuation_id, "CALC_HISTORICAL_INHERITANCE",
|
|
||||||
status="completed",
|
|
||||||
input_params={
|
|
||||||
"historical_evidence": data.historical_evidence,
|
|
||||||
"weights": {"出土实物":1.0, "古代文献":0.8, "传承人佐证":0.6, "现代研究":0.4}
|
|
||||||
},
|
|
||||||
output_result={
|
|
||||||
"historical_inheritance": input_data_by_b2.get("historical_inheritance", 0),
|
|
||||||
"formula": "HI = 出土实物×1.0 + 古代文献×0.8 + 传承人佐证×0.6 + 现代研究×0.4"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
# 11. 市场风险价格波动记录
|
|
||||||
await valuation_controller.log_formula_step(
|
|
||||||
valuation_id, "CALC_MARKET_RISK",
|
|
||||||
status="completed",
|
|
||||||
input_params={
|
|
||||||
"price_fluctuation": data.price_fluctuation,
|
|
||||||
"highest_price": input_data_by_b3.get("highest_price", 0),
|
|
||||||
"lowest_price": input_data_by_b3.get("lowest_price", 0)
|
|
||||||
},
|
|
||||||
output_result={
|
|
||||||
"volatility_rule": "波动率≤5%:10分, 5-15%:5分, >15%:0分"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
logger.info("valuation.param_mapping_logged valuation_id={}", valuation_id)
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning("valuation.failed_to_log_param_mapping valuation_id={} err={}", valuation_id, repr(e))
|
|
||||||
|
|
||||||
# 计算最终估值A(统一计算),传入估值ID以关联步骤落库
|
# 计算最终估值A(统一计算),传入估值ID以关联步骤落库
|
||||||
calculation_result = await calculator.calculate_complete_final_value_a(valuation_id, input_data)
|
calculation_result = await calculator.calculate_complete_final_value_a(valuation_id, input_data)
|
||||||
|
|
||||||
# 步骤2:更新计算结果字段(模型估值B、市场估值C、最终估值AB、完整计算结果)
|
# 步骤2:更新计算结果字段(模型估值B、市场估值C、最终估值AB、完整计算结果)
|
||||||
try:
|
try:
|
||||||
await valuation_controller.update_calc(
|
await valuation_controller.update(
|
||||||
valuation_id,
|
valuation_id,
|
||||||
ValuationAssessmentUpdate(
|
ValuationAssessmentUpdate(
|
||||||
model_value_b=calculation_result.get('model_value_b'),
|
model_value_b=calculation_result.get('model_value_b'),
|
||||||
@ -421,7 +280,7 @@ async def _perform_valuation_calculation(user_id: int, valuation_id: int, data:
|
|||||||
base_pledge_rate_value = "0.5" # 固定值:基础质押率 = 0.5
|
base_pledge_rate_value = "0.5" # 固定值:基础质押率 = 0.5
|
||||||
flow_correction_value = "0.3" # 固定值:流量修正系数 = 0.3
|
flow_correction_value = "0.3" # 固定值:流量修正系数 = 0.3
|
||||||
|
|
||||||
await valuation_controller.update_calc(
|
await valuation_controller.update(
|
||||||
valuation_id,
|
valuation_id,
|
||||||
ValuationAssessmentUpdate(
|
ValuationAssessmentUpdate(
|
||||||
dynamic_pledge_rate=drp_result,
|
dynamic_pledge_rate=drp_result,
|
||||||
@ -448,13 +307,19 @@ async def _perform_valuation_calculation(user_id: int, valuation_id: int, data:
|
|||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# 步骤4:计算完成,保持状态为 pending,等待后台审核
|
# 步骤4:最后更新状态为成功
|
||||||
try:
|
try:
|
||||||
result = await valuation_controller.get_by_id(valuation_id)
|
result = await valuation_controller.update(
|
||||||
logger.info("valuation.calc_finished valuation_id={} status=pending", valuation_id)
|
valuation_id,
|
||||||
|
ValuationAssessmentUpdate(
|
||||||
|
status='success'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
logger.info("valuation.status_updated valuation_id={} status=success", valuation_id)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning("valuation.failed_to_fetch_after_calc valuation_id={} err={}", valuation_id, repr(e))
|
logger.warning("valuation.failed_to_update_status valuation_id={} err={}", valuation_id, repr(e))
|
||||||
result = None
|
# 即使状态更新失败,也尝试获取结果用于日志
|
||||||
|
result = await valuation_controller.get_by_id(valuation_id)
|
||||||
|
|
||||||
logger.info("valuation.background_calc_success user_id={} valuation_id={}", user_id, valuation_id)
|
logger.info("valuation.background_calc_success user_id={} valuation_id={}", user_id, valuation_id)
|
||||||
|
|
||||||
@ -480,12 +345,8 @@ async def _perform_valuation_calculation(user_id: int, valuation_id: int, data:
|
|||||||
api_calc_fields["esg_value"] = str(esg_score) if esg_score is not None else None
|
api_calc_fields["esg_value"] = str(esg_score) if esg_score is not None else None
|
||||||
if 'policy_match_score' in locals():
|
if 'policy_match_score' in locals():
|
||||||
api_calc_fields["policy_matching"] = str(policy_match_score) if policy_match_score is not None else None
|
api_calc_fields["policy_matching"] = str(policy_match_score) if policy_match_score is not None else None
|
||||||
if 'lawsuit_status_for_display' in locals():
|
if 'infringement_score' in locals():
|
||||||
api_calc_fields["infringement_record"] = lawsuit_status_for_display
|
infringement_record_value = "有侵权记录" if infringement_score == 0.0 else "无侵权记录"
|
||||||
api_calc_fields["legal_risk"] = lawsuit_status_for_display
|
|
||||||
elif 'infringement_score' in locals():
|
|
||||||
# 兼容旧逻辑
|
|
||||||
infringement_record_value = "无诉讼" if infringement_score == 10.0 else ("已解决诉讼" if infringement_score == 7.0 else "未解决诉讼")
|
|
||||||
api_calc_fields["infringement_record"] = infringement_record_value
|
api_calc_fields["infringement_record"] = infringement_record_value
|
||||||
api_calc_fields["legal_risk"] = infringement_record_value
|
api_calc_fields["legal_risk"] = infringement_record_value
|
||||||
if 'input_data_by_b1' in locals():
|
if 'input_data_by_b1' in locals():
|
||||||
@ -501,7 +362,7 @@ async def _perform_valuation_calculation(user_id: int, valuation_id: int, data:
|
|||||||
fail_update_fields.update(api_calc_fields)
|
fail_update_fields.update(api_calc_fields)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
await valuation_controller.update_calc(
|
await valuation_controller.update(
|
||||||
valuation_id,
|
valuation_id,
|
||||||
ValuationAssessmentUpdate(**fail_update_fields)
|
ValuationAssessmentUpdate(**fail_update_fields)
|
||||||
)
|
)
|
||||||
@ -511,7 +372,7 @@ async def _perform_valuation_calculation(user_id: int, valuation_id: int, data:
|
|||||||
# 如果保存失败,至少更新状态
|
# 如果保存失败,至少更新状态
|
||||||
try:
|
try:
|
||||||
fail_update = ValuationAssessmentUpdate(status='rejected')
|
fail_update = ValuationAssessmentUpdate(status='rejected')
|
||||||
await valuation_controller.update_calc(valuation_id, fail_update)
|
await valuation_controller.update(valuation_id, fail_update)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
@ -613,30 +474,17 @@ async def calculate_valuation(
|
|||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# 先创建估值记录以获取ID,方便用户查询
|
background_tasks.add_task(_perform_valuation_calculation, user_id, data)
|
||||||
initial_detail = await user_valuation_controller.create_valuation(
|
|
||||||
user_id=user_id,
|
|
||||||
data=data,
|
|
||||||
calculation_result=None,
|
|
||||||
calculation_input=None,
|
|
||||||
drp_result=None,
|
|
||||||
status='pending'
|
|
||||||
)
|
|
||||||
valuation_id = initial_detail.id
|
|
||||||
|
|
||||||
background_tasks.add_task(_perform_valuation_calculation, user_id, valuation_id, data)
|
logger.info("valuation.task_queued user_id={} asset_name={} industry={}",
|
||||||
|
user_id, getattr(data, 'asset_name', None), getattr(data, 'industry', None))
|
||||||
logger.info("valuation.task_queued user_id={} valuation_id={} asset_name={} industry={}",
|
|
||||||
user_id, valuation_id, getattr(data, 'asset_name', None), getattr(data, 'industry', None))
|
|
||||||
|
|
||||||
return Success(
|
return Success(
|
||||||
data={
|
data={
|
||||||
"task_status": "queued",
|
"task_status": "queued",
|
||||||
"message": "估值计算任务已提交,正在后台处理中",
|
"message": "估值计算任务已提交,正在后台处理中",
|
||||||
"user_id": user_id,
|
"user_id": user_id,
|
||||||
"asset_name": getattr(data, 'asset_name', None),
|
"asset_name": getattr(data, 'asset_name', None)
|
||||||
"valuation_id": valuation_id,
|
|
||||||
"order_no": str(valuation_id)
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -683,7 +531,8 @@ async def _extract_calculation_params_b1(
|
|||||||
innovation_ratio = 0.0
|
innovation_ratio = 0.0
|
||||||
|
|
||||||
# 流量因子B12相关参数
|
# 流量因子B12相关参数
|
||||||
# 近30天搜索指数S1 - 使用微信指数除以10计算
|
# 近30天搜索指数S1 - 从社交媒体数据计算 TODO 需要使用第三方API
|
||||||
|
baidu_index = 1
|
||||||
|
|
||||||
# 获取微信指数并计算近30天平均值
|
# 获取微信指数并计算近30天平均值
|
||||||
try:
|
try:
|
||||||
@ -692,9 +541,10 @@ async def _extract_calculation_params_b1(
|
|||||||
logger.info(f"资产 '{data.asset_name}' 的微信指数近30天平均值: {wechat_index}")
|
logger.info(f"资产 '{data.asset_name}' 的微信指数近30天平均值: {wechat_index}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"获取微信指数失败: {e}")
|
logger.error(f"获取微信指数失败: {e}")
|
||||||
wechat_index = 10 # 失败时默认值,使得 S1 = 1
|
wechat_index = 1
|
||||||
|
|
||||||
search_index_s1 = calculate_search_index_s1(wechat_index) # S1 = 微信指数 / 10
|
weibo_index = 1
|
||||||
|
search_index_s1 = calculate_search_index_s1(baidu_index, wechat_index, weibo_index) # 默认值,实际应从API获取
|
||||||
|
|
||||||
# 行业均值S2 - 从数据库查询行业数据计算
|
# 行业均值S2 - 从数据库查询行业数据计算
|
||||||
from app.utils.industry_calculator import calculate_industry_average_s2
|
from app.utils.industry_calculator import calculate_industry_average_s2
|
||||||
@ -741,7 +591,6 @@ async def _extract_calculation_params_b1(
|
|||||||
'likes': safe_float(info["likes"]),
|
'likes': safe_float(info["likes"]),
|
||||||
'comments': safe_float(info["comments"]),
|
'comments': safe_float(info["comments"]),
|
||||||
'shares': safe_float(info["shares"]),
|
'shares': safe_float(info["shares"]),
|
||||||
'views': safe_float(info.get("views", 0)),
|
|
||||||
# followers 非当前计算用键,先移除避免干扰
|
# followers 非当前计算用键,先移除避免干扰
|
||||||
|
|
||||||
# click_count 与 view_count 目前未参与计算,先移除
|
# click_count 与 view_count 目前未参与计算,先移除
|
||||||
@ -786,18 +635,10 @@ async def _extract_calculation_params_b2(data: UserValuationCreate) -> Dict[str,
|
|||||||
kuaishou_views = safe_float(rs.get("kuaishou", None).get("likes", 0)) if rs.get("kuaishou", None) else 0
|
kuaishou_views = safe_float(rs.get("kuaishou", None).get("likes", 0)) if rs.get("kuaishou", None) else 0
|
||||||
bilibili_views = safe_float(rs.get("bilibili", None).get("likes", 0)) if rs.get("bilibili", None) else 0
|
bilibili_views = safe_float(rs.get("bilibili", None).get("likes", 0)) if rs.get("bilibili", None) else 0
|
||||||
|
|
||||||
# 跨界合作深度:将枚举映射为分值
|
# 跨界合作深度:将枚举映射为项目数;若为数值字符串则直接取数值
|
||||||
# 前端传入的是数字字符串 ("0", "1", "2", "3"),后端也支持中文标签
|
|
||||||
try:
|
try:
|
||||||
val = getattr(data, 'cooperation_depth', None)
|
val = getattr(data, 'cooperation_depth', None)
|
||||||
mapping = {
|
mapping = {
|
||||||
# 前端传入的数字字符串
|
|
||||||
"0": 0.0, # 无
|
|
||||||
"1": 3.0, # 品牌联名
|
|
||||||
"2": 5.0, # 科技载体
|
|
||||||
"3": 10.0, # 国家外交礼品
|
|
||||||
# 兼容中文标签(以防其他入口传入)
|
|
||||||
"无": 0.0,
|
|
||||||
"品牌联名": 3.0,
|
"品牌联名": 3.0,
|
||||||
"科技载体": 5.0,
|
"科技载体": 5.0,
|
||||||
"国家外交礼品": 10.0,
|
"国家外交礼品": 10.0,
|
||||||
@ -812,28 +653,14 @@ async def _extract_calculation_params_b2(data: UserValuationCreate) -> Dict[str,
|
|||||||
# 纹样基因值B22相关参数
|
# 纹样基因值B22相关参数
|
||||||
|
|
||||||
# 以下三项需由后续模型/服务计算;此处提供默认可计算占位
|
# 以下三项需由后续模型/服务计算;此处提供默认可计算占位
|
||||||
|
#
|
||||||
# 历史传承度HI(用户填写)
|
# 历史传承度HI(用户填写)
|
||||||
# HI = 证据数量 × 对应权重后加总
|
|
||||||
# 权重分配:出土实物(1.0) + 古代文献(0.8) + 传承人佐证(0.6) + 现代研究(0.4)
|
|
||||||
# 示例: (2*1 + 5*0.8 + 5*0.6 + 6*0.4) = 11.4
|
|
||||||
historical_inheritance = 0.0
|
historical_inheritance = 0.0
|
||||||
try:
|
try:
|
||||||
evidence_weights = {
|
|
||||||
"artifacts": 1.0, # 出土实物
|
|
||||||
"ancient_literature": 0.8, # 古代文献
|
|
||||||
"inheritor_testimony": 0.6, # 传承人佐证
|
|
||||||
"modern_research": 0.4, # 现代研究
|
|
||||||
}
|
|
||||||
if isinstance(data.historical_evidence, dict):
|
if isinstance(data.historical_evidence, dict):
|
||||||
for key, weight in evidence_weights.items():
|
historical_inheritance = sum([safe_float(v) for v in data.historical_evidence.values()])
|
||||||
count = safe_float(data.historical_evidence.get(key, 0))
|
|
||||||
historical_inheritance += count * weight
|
|
||||||
elif isinstance(data.historical_evidence, (list, tuple)):
|
elif isinstance(data.historical_evidence, (list, tuple)):
|
||||||
# 列表顺序:[出土实物, 古代文献, 传承人佐证, 现代研究]
|
historical_inheritance = sum([safe_float(i) for i in data.historical_evidence])
|
||||||
weights = [1.0, 0.8, 0.6, 0.4]
|
|
||||||
for i, weight in enumerate(weights):
|
|
||||||
if i < len(data.historical_evidence):
|
|
||||||
historical_inheritance += safe_float(data.historical_evidence[i]) * weight
|
|
||||||
except Exception:
|
except Exception:
|
||||||
historical_inheritance = 0.0
|
historical_inheritance = 0.0
|
||||||
structure_complexity = 1.5 # 默认值 纹样基因熵值B22(系统计算)
|
structure_complexity = 1.5 # 默认值 纹样基因熵值B22(系统计算)
|
||||||
@ -865,36 +692,17 @@ async def _extract_calculation_params_b2(data: UserValuationCreate) -> Dict[str,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# 获取 风险调整系数B3 相关参数
|
# 获取 文化价值B2 相关参数
|
||||||
async def _extract_calculation_params_b3(data: UserValuationCreate) -> Dict[str, Any]:
|
async def _extract_calculation_params_b3(data: UserValuationCreate) -> Dict[str, Any]:
|
||||||
# 过去30天最高价格 过去30天最低价格
|
# 过去30天最高价格 过去30天最低价格 TODO 需要根据字样进行切分获取最高价和最低价 转换成 float 类型
|
||||||
price_fluctuation = [float(i) for i in data.price_fluctuation]
|
price_fluctuation = [float(i) for i in data.price_fluctuation]
|
||||||
highest_price, lowest_price = max(price_fluctuation), min(price_fluctuation)
|
highest_price, lowest_price = max(price_fluctuation), min(price_fluctuation)
|
||||||
|
# lawsuit_status = "无诉讼" # 诉讼状态 TODO (API获取)
|
||||||
# 传承风险:根据各年龄段传承人数量计算
|
inheritor_ages = [float(i) for i in data.inheritor_age_count] # [45, 60, 75] # 传承人年龄列表
|
||||||
# 前端传入: inheritor_age_count = [≤50岁人数, 50-70岁人数, ≥70岁人数]
|
|
||||||
# 评分规则: ≤50岁(10分), 50-70岁(5分), >70岁(0分),取有传承人的最高分
|
|
||||||
inheritor_age_count = data.inheritor_age_count or [0, 0, 0]
|
|
||||||
|
|
||||||
# 根据年龄段人数生成虚拟年龄列表(用于风险计算)
|
|
||||||
# 如果有≤50岁的传承人,添加一个45岁的代表
|
|
||||||
# 如果有50-70岁的传承人,添加一个60岁的代表
|
|
||||||
# 如果有>70岁的传承人,添加一个75岁的代表
|
|
||||||
inheritor_ages = []
|
|
||||||
if len(inheritor_age_count) > 0 and safe_float(inheritor_age_count[0]) > 0:
|
|
||||||
inheritor_ages.append(45) # ≤50岁代表 → 10分
|
|
||||||
if len(inheritor_age_count) > 1 and safe_float(inheritor_age_count[1]) > 0:
|
|
||||||
inheritor_ages.append(60) # 50-70岁代表 → 5分
|
|
||||||
if len(inheritor_age_count) > 2 and safe_float(inheritor_age_count[2]) > 0:
|
|
||||||
inheritor_ages.append(75) # >70岁代表 → 0分
|
|
||||||
|
|
||||||
# 如果没有任何传承人,默认给一个高风险年龄
|
|
||||||
if not inheritor_ages:
|
|
||||||
inheritor_ages = [75] # 默认高风险
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"highest_price": highest_price,
|
"highest_price": highest_price,
|
||||||
"lowest_price": lowest_price,
|
"lowest_price": lowest_price,
|
||||||
|
|
||||||
"inheritor_ages": inheritor_ages,
|
"inheritor_ages": inheritor_ages,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -989,7 +797,6 @@ async def _extract_calculation_params_c(data: UserValuationCreate) -> Dict[str,
|
|||||||
"expert_valuations": expert_valuations, # 专家估值列表 (系统配置)
|
"expert_valuations": expert_valuations, # 专家估值列表 (系统配置)
|
||||||
# 计算热度系数C2
|
# 计算热度系数C2
|
||||||
"daily_browse_volume": daily_browse_volume, # 近7日日均浏览量 (API获取)
|
"daily_browse_volume": daily_browse_volume, # 近7日日均浏览量 (API获取)
|
||||||
"platform_views": daily_browse_volume, # 从 platform_accounts/views 或 link_views 获取的浏览量
|
|
||||||
"collection_count": collection_count, # 收藏数
|
"collection_count": collection_count, # 收藏数
|
||||||
"issuance_level": circulation, # 默认 限量发行 计算稀缺性乘数C3
|
"issuance_level": circulation, # 默认 限量发行 计算稀缺性乘数C3
|
||||||
"recent_market_activity": recent_market_activity, # 默认 '近一月' 计算市场估值C
|
"recent_market_activity": recent_market_activity, # 默认 '近一月' 计算市场估值C
|
||||||
|
|||||||
@ -276,9 +276,11 @@ async def _extract_calculation_params_b1(data: UserValuationCreate) -> Dict[str,
|
|||||||
|
|
||||||
|
|
||||||
# 流量因子B12相关参数
|
# 流量因子B12相关参数
|
||||||
# 近30天搜索指数S1 - 使用微信指数除以10计算
|
# 近30天搜索指数S1 - 从社交媒体数据计算 TODO 需要使用第三方API
|
||||||
wechat_index = wechat_index_calculator.process_wechat_index_response(universal_api.wx_index(data.asset_name)) # 通过资产信息获取微信指数
|
baidu_index = 0.0
|
||||||
search_index_s1 = calculate_search_index_s1(wechat_index) # S1 = 微信指数 / 10
|
wechat_index = wechat_index_calculator.process_wechat_index_response(universal_api.wx_index(data.asset_name)) # 通过资产信息获取微信指数 TODO 这里返回的没确认指数参数,有可能返回的图示是指数信息
|
||||||
|
weibo_index = 0.0
|
||||||
|
search_index_s1 = calculate_search_index_s1(baidu_index,wechat_index,weibo_index) # 默认值,实际应从API获取
|
||||||
# 行业均值S2 TODO 系统内置 未找到相关内容
|
# 行业均值S2 TODO 系统内置 未找到相关内容
|
||||||
industry_average_s2 = 0.0
|
industry_average_s2 = 0.0
|
||||||
# 社交媒体传播度S3 - TODO 需要使用第三方API,click_count view_count 未找到对应参数
|
# 社交媒体传播度S3 - TODO 需要使用第三方API,click_count view_count 未找到对应参数
|
||||||
@ -342,22 +344,8 @@ async def _extract_calculation_params_b2(data: UserValuationCreate) -> Dict[str,
|
|||||||
douyin_views = 0
|
douyin_views = 0
|
||||||
kuaishou_views= 0
|
kuaishou_views= 0
|
||||||
bilibili_views= 0
|
bilibili_views= 0
|
||||||
# 跨界合作深度:将枚举映射为分值
|
# 跨界合作深度 品牌联名0.3,科技载体0.5,国家外交礼品1.0
|
||||||
# 前端传入的是数字字符串 ("0", "1", "2", "3"),后端也支持中文标签
|
cross_border_depth = float(data.cooperation_depth)
|
||||||
depth_mapping = {
|
|
||||||
# 前端传入的数字字符串
|
|
||||||
"0": 0.0, # 无
|
|
||||||
"1": 3.0, # 品牌联名
|
|
||||||
"2": 5.0, # 科技载体
|
|
||||||
"3": 10.0, # 国家外交礼品
|
|
||||||
# 兼容中文标签(以防其他入口传入)
|
|
||||||
"无": 0.0,
|
|
||||||
"品牌联名": 3.0,
|
|
||||||
"科技载体": 5.0,
|
|
||||||
"国家外交礼品": 10.0,
|
|
||||||
}
|
|
||||||
depth_val = str(data.cooperation_depth) if data.cooperation_depth else "0"
|
|
||||||
cross_border_depth = depth_mapping.get(depth_val, 0.0)
|
|
||||||
|
|
||||||
# 纹样基因值B22相关参数
|
# 纹样基因值B22相关参数
|
||||||
|
|
||||||
|
|||||||
@ -135,7 +135,6 @@ async def verify_code(payload: VerifyCodeRequest) -> BasicResponse[dict]:
|
|||||||
from app.settings import settings
|
from app.settings import settings
|
||||||
if settings.SMS_BYPASS_CODE and payload.code == settings.SMS_BYPASS_CODE:
|
if settings.SMS_BYPASS_CODE and payload.code == settings.SMS_BYPASS_CODE:
|
||||||
logger.info("sms.verify_code bypass phone={}", payload.phone)
|
logger.info("sms.verify_code bypass phone={}", payload.phone)
|
||||||
store.mark_verified(payload.phone)
|
|
||||||
return Success(data={"status": "OK", "message": "verified"})
|
return Success(data={"status": "OK", "message": "verified"})
|
||||||
ok, reason = store.can_verify(payload.phone)
|
ok, reason = store.can_verify(payload.phone)
|
||||||
if not ok:
|
if not ok:
|
||||||
@ -155,7 +154,6 @@ async def verify_code(payload: VerifyCodeRequest) -> BasicResponse[dict]:
|
|||||||
store.clear_code(payload.phone)
|
store.clear_code(payload.phone)
|
||||||
store.reset_failures(payload.phone)
|
store.reset_failures(payload.phone)
|
||||||
logger.info("sms.verify_code success phone={}", payload.phone)
|
logger.info("sms.verify_code success phone={}", payload.phone)
|
||||||
store.mark_verified(payload.phone)
|
|
||||||
return Success(data={"status": "OK", "message": "verified"})
|
return Success(data={"status": "OK", "message": "verified"})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -85,11 +85,6 @@ async def send_email(payload: SendEmailRequest = Body(...)):
|
|||||||
raise HTTPException(status_code=400, detail="收件方地址域名不可用或未正确解析")
|
raise HTTPException(status_code=400, detail="收件方地址域名不可用或未正确解析")
|
||||||
if payload.file_urls:
|
if payload.file_urls:
|
||||||
urls.extend([u.strip().strip('`') for u in payload.file_urls if isinstance(u, str)])
|
urls.extend([u.strip().strip('`') for u in payload.file_urls if isinstance(u, str)])
|
||||||
if payload.file_url:
|
|
||||||
if isinstance(payload.file_url, str):
|
|
||||||
urls.append(payload.file_url.strip().strip('`'))
|
|
||||||
elif isinstance(payload.file_url, list):
|
|
||||||
urls.extend([u.strip().strip('`') for u in payload.file_url if isinstance(u, str)])
|
|
||||||
if urls:
|
if urls:
|
||||||
try:
|
try:
|
||||||
async with httpx.AsyncClient(timeout=10) as client:
|
async with httpx.AsyncClient(timeout=10) as client:
|
||||||
@ -127,25 +122,20 @@ async def send_email(payload: SendEmailRequest = Body(...)):
|
|||||||
else:
|
else:
|
||||||
logger.error("transactions.email_send_fail email={} err={}", payload.email, error)
|
logger.error("transactions.email_send_fail email={} err={}", payload.email, error)
|
||||||
|
|
||||||
if payload.receipt_id:
|
if status == "OK" and payload.receipt_id:
|
||||||
try:
|
try:
|
||||||
r = await PaymentReceipt.filter(id=payload.receipt_id).first()
|
r = await PaymentReceipt.filter(id=payload.receipt_id).first()
|
||||||
if r:
|
if r:
|
||||||
|
r.extra = (r.extra or {}) | payload.model_dump()
|
||||||
|
await r.save()
|
||||||
try:
|
try:
|
||||||
inv = await r.invoice
|
inv = await r.invoice
|
||||||
if inv:
|
if inv:
|
||||||
s = str(payload.status or "").lower()
|
inv.status = "invoiced"
|
||||||
if s in {"invoiced", "success"}:
|
|
||||||
target = "invoiced"
|
|
||||||
elif s in {"refunded", "rejected", "pending"}:
|
|
||||||
target = s
|
|
||||||
else:
|
|
||||||
target = "invoiced"
|
|
||||||
inv.status = target
|
|
||||||
await inv.save()
|
await inv.save()
|
||||||
logger.info("transactions.invoice_status_updated receipt_id={} invoice_id={} status={}", payload.receipt_id, inv.id, target)
|
logger.info("transactions.invoice_mark_invoiced receipt_id={} invoice_id={}", payload.receipt_id, inv.id)
|
||||||
except Exception as e2:
|
except Exception as e2:
|
||||||
logger.warning("transactions.invoice_status_update_fail receipt_id={} err={}", payload.receipt_id, str(e2))
|
logger.warning("transactions.invoice_mark_invoiced_fail receipt_id={} err={}", payload.receipt_id, str(e2))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("transactions.email_extra_save_fail id={} err={}", payload.receipt_id, str(e))
|
logger.error("transactions.email_extra_save_fail id={} err={}", payload.receipt_id, str(e))
|
||||||
|
|
||||||
|
|||||||
@ -21,15 +21,6 @@ class AppUserController(CRUDBase[AppUser, AppUserRegisterSchema, AppUserUpdateSc
|
|||||||
# 检查手机号是否已存在
|
# 检查手机号是否已存在
|
||||||
existing_user = await self.model.filter(phone=register_data.phone).first()
|
existing_user = await self.model.filter(phone=register_data.phone).first()
|
||||||
if existing_user:
|
if existing_user:
|
||||||
if getattr(existing_user, "is_deleted", False):
|
|
||||||
default_password = register_data.phone[-6:]
|
|
||||||
hashed_password = get_password_hash(default_password)
|
|
||||||
existing_user.is_deleted = False
|
|
||||||
existing_user.deleted_at = None
|
|
||||||
existing_user.is_active = True
|
|
||||||
existing_user.password = hashed_password
|
|
||||||
await existing_user.save()
|
|
||||||
return existing_user
|
|
||||||
raise HTTPException(status_code=400, detail="手机号已存在")
|
raise HTTPException(status_code=400, detail="手机号已存在")
|
||||||
|
|
||||||
# 生成默认密码:手机号后六位
|
# 生成默认密码:手机号后六位
|
||||||
@ -51,7 +42,7 @@ class AppUserController(CRUDBase[AppUser, AppUserRegisterSchema, AppUserUpdateSc
|
|||||||
用户认证
|
用户认证
|
||||||
"""
|
"""
|
||||||
user = await self.model.filter(
|
user = await self.model.filter(
|
||||||
phone=login_data.phone, is_active=True, is_deleted=False
|
phone=login_data.phone, is_active=True
|
||||||
).first()
|
).first()
|
||||||
|
|
||||||
if not user:
|
if not user:
|
||||||
@ -66,13 +57,13 @@ class AppUserController(CRUDBase[AppUser, AppUserRegisterSchema, AppUserUpdateSc
|
|||||||
"""
|
"""
|
||||||
根据ID获取用户
|
根据ID获取用户
|
||||||
"""
|
"""
|
||||||
return await self.model.filter(id=user_id, is_active=True, is_deleted=False).first()
|
return await self.model.filter(id=user_id, is_active=True).first()
|
||||||
|
|
||||||
async def get_user_by_phone(self, phone: str) -> Optional[AppUser]:
|
async def get_user_by_phone(self, phone: str) -> Optional[AppUser]:
|
||||||
"""
|
"""
|
||||||
根据手机号获取用户
|
根据手机号获取用户
|
||||||
"""
|
"""
|
||||||
return await self.model.filter(phone=phone, is_active=True, is_deleted=False).first()
|
return await self.model.filter(phone=phone, is_active=True).first()
|
||||||
|
|
||||||
async def update_last_login(self, user_id: int) -> bool:
|
async def update_last_login(self, user_id: int) -> bool:
|
||||||
"""
|
"""
|
||||||
@ -158,27 +149,6 @@ class AppUserController(CRUDBase[AppUser, AppUserRegisterSchema, AppUserUpdateSc
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
async def delete_user_account(self, user_id: int) -> bool:
|
|
||||||
user = await self.model.filter(id=user_id).first()
|
|
||||||
if not user:
|
|
||||||
return False
|
|
||||||
user.is_active = False
|
|
||||||
user.is_deleted = True
|
|
||||||
user.deleted_at = datetime.now()
|
|
||||||
masked = f"deleted_{user.id}"
|
|
||||||
user.username = None
|
|
||||||
user.alias = None
|
|
||||||
user.email = None
|
|
||||||
user.password = ""
|
|
||||||
user.company_name = None
|
|
||||||
user.company_address = None
|
|
||||||
user.company_contact = None
|
|
||||||
user.company_phone = None
|
|
||||||
user.company_email = None
|
|
||||||
user.phone = masked
|
|
||||||
await user.save()
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
# 创建控制器实例
|
# 创建控制器实例
|
||||||
app_user_controller = AppUserController()
|
app_user_controller = AppUserController()
|
||||||
|
|||||||
@ -271,23 +271,20 @@ class InvoiceController(CRUDBase[Invoice, InvoiceCreate, InvoiceUpdate]):
|
|||||||
items = []
|
items = []
|
||||||
for r in rows:
|
for r in rows:
|
||||||
inv = await r.invoice
|
inv = await r.invoice
|
||||||
urls = []
|
|
||||||
if isinstance(r.extra, list):
|
|
||||||
urls = [str(u) for u in r.extra if u]
|
|
||||||
elif isinstance(r.extra, dict):
|
|
||||||
v = r.extra.get("urls")
|
|
||||||
if isinstance(v, list):
|
|
||||||
urls = [str(u) for u in v if u]
|
|
||||||
if not urls:
|
|
||||||
urls = [r.url] if r.url else []
|
|
||||||
receipts = [{"id": r.id, "url": u, "note": r.note, "verified": r.verified} for u in urls]
|
|
||||||
items.append({
|
items.append({
|
||||||
"id": r.id,
|
"id": r.id,
|
||||||
"invoice_id": getattr(inv, "id", None),
|
"invoice_id": getattr(inv, "id", None),
|
||||||
"submitted_at": r.created_at.isoformat() if r.created_at else "",
|
"submitted_at": r.created_at.isoformat() if r.created_at else "",
|
||||||
"receipt_uploaded_at": r.updated_at.isoformat() if getattr(r, "updated_at", None) else "",
|
"receipt_uploaded_at": r.updated_at.isoformat() if getattr(r, "updated_at", None) else "",
|
||||||
"extra": r.extra,
|
"extra": r.extra,
|
||||||
"receipts": receipts,
|
"receipts": [
|
||||||
|
{
|
||||||
|
"id": r.id,
|
||||||
|
"url": r.url,
|
||||||
|
"note": r.note,
|
||||||
|
"verified": r.verified,
|
||||||
|
}
|
||||||
|
],
|
||||||
"phone": inv.phone,
|
"phone": inv.phone,
|
||||||
"wechat": inv.wechat,
|
"wechat": inv.wechat,
|
||||||
"company_name": inv.company_name,
|
"company_name": inv.company_name,
|
||||||
@ -316,23 +313,20 @@ class InvoiceController(CRUDBase[Invoice, InvoiceCreate, InvoiceUpdate]):
|
|||||||
if not r:
|
if not r:
|
||||||
return None
|
return None
|
||||||
inv = await r.invoice
|
inv = await r.invoice
|
||||||
urls = []
|
|
||||||
if isinstance(r.extra, list):
|
|
||||||
urls = [str(u) for u in r.extra if u]
|
|
||||||
elif isinstance(r.extra, dict):
|
|
||||||
v = r.extra.get("urls")
|
|
||||||
if isinstance(v, list):
|
|
||||||
urls = [str(u) for u in v if u]
|
|
||||||
if not urls:
|
|
||||||
urls = [r.url] if r.url else []
|
|
||||||
receipts = [{"id": r.id, "url": u, "note": r.note, "verified": r.verified} for u in urls]
|
|
||||||
return {
|
return {
|
||||||
"id": r.id,
|
"id": r.id,
|
||||||
"invoice_id": getattr(inv, "id", None),
|
"invoice_id": getattr(inv, "id", None),
|
||||||
"submitted_at": r.created_at.isoformat() if r.created_at else "",
|
"submitted_at": r.created_at.isoformat() if r.created_at else "",
|
||||||
"receipt_uploaded_at": r.updated_at.isoformat() if getattr(r, "updated_at", None) else "",
|
"receipt_uploaded_at": r.updated_at.isoformat() if getattr(r, "updated_at", None) else "",
|
||||||
"extra": r.extra,
|
"extra": r.extra,
|
||||||
"receipts": receipts,
|
"receipts": [
|
||||||
|
{
|
||||||
|
"id": r.id,
|
||||||
|
"url": r.url,
|
||||||
|
"note": r.note,
|
||||||
|
"verified": r.verified,
|
||||||
|
}
|
||||||
|
],
|
||||||
"phone": inv.phone,
|
"phone": inv.phone,
|
||||||
"wechat": inv.wechat,
|
"wechat": inv.wechat,
|
||||||
"company_name": inv.company_name,
|
"company_name": inv.company_name,
|
||||||
|
|||||||
@ -127,7 +127,7 @@ class UserValuationController:
|
|||||||
inheritor_ages=valuation.inheritor_ages,
|
inheritor_ages=valuation.inheritor_ages,
|
||||||
inheritor_age_count=valuation.inheritor_age_count,
|
inheritor_age_count=valuation.inheritor_age_count,
|
||||||
inheritor_certificates=valuation.inheritor_certificates,
|
inheritor_certificates=valuation.inheritor_certificates,
|
||||||
heritage_level=getattr(valuation, "heritage_level", None),
|
heritage_level=valuation.heritage_level,
|
||||||
heritage_asset_level=valuation.heritage_asset_level,
|
heritage_asset_level=valuation.heritage_asset_level,
|
||||||
patent_application_no=valuation.patent_application_no,
|
patent_application_no=valuation.patent_application_no,
|
||||||
patent_remaining_years=valuation.patent_remaining_years,
|
patent_remaining_years=valuation.patent_remaining_years,
|
||||||
@ -197,7 +197,7 @@ class UserValuationController:
|
|||||||
inheritor_ages=valuation.inheritor_ages,
|
inheritor_ages=valuation.inheritor_ages,
|
||||||
inheritor_age_count=valuation.inheritor_age_count,
|
inheritor_age_count=valuation.inheritor_age_count,
|
||||||
inheritor_certificates=valuation.inheritor_certificates,
|
inheritor_certificates=valuation.inheritor_certificates,
|
||||||
heritage_level=getattr(valuation, "heritage_level", None),
|
heritage_level=valuation.heritage_level,
|
||||||
heritage_asset_level=valuation.heritage_asset_level,
|
heritage_asset_level=valuation.heritage_asset_level,
|
||||||
patent_application_no=valuation.patent_application_no,
|
patent_application_no=valuation.patent_application_no,
|
||||||
patent_remaining_years=valuation.patent_remaining_years,
|
patent_remaining_years=valuation.patent_remaining_years,
|
||||||
|
|||||||
@ -444,30 +444,6 @@ class ValuationController:
|
|||||||
lines.append("```")
|
lines.append("```")
|
||||||
lines.append("")
|
lines.append("")
|
||||||
|
|
||||||
# 计算过程部分(显示详细的计算步骤)
|
|
||||||
if output_result and isinstance(output_result, dict):
|
|
||||||
# 首先检查 calculation_detail 字段
|
|
||||||
calculation_detail = output_result.get('calculation_detail')
|
|
||||||
if calculation_detail and isinstance(calculation_detail, dict):
|
|
||||||
lines.append("**计算过程:**")
|
|
||||||
lines.append("")
|
|
||||||
# 按步骤顺序显示
|
|
||||||
steps = []
|
|
||||||
for key in sorted(calculation_detail.keys()):
|
|
||||||
if key.startswith('step'):
|
|
||||||
steps.append(f"> {calculation_detail[key]}")
|
|
||||||
if steps:
|
|
||||||
lines.extend(steps)
|
|
||||||
lines.append("")
|
|
||||||
|
|
||||||
# 然后检查旧的 calculation 字段
|
|
||||||
calculation = output_result.get('calculation')
|
|
||||||
if calculation and not calculation_detail:
|
|
||||||
lines.append("**计算过程:**")
|
|
||||||
lines.append("")
|
|
||||||
lines.append(f"> {calculation}")
|
|
||||||
lines.append("")
|
|
||||||
|
|
||||||
# 结果部分
|
# 结果部分
|
||||||
if output_result:
|
if output_result:
|
||||||
# 提取主要结果值
|
# 提取主要结果值
|
||||||
@ -545,14 +521,6 @@ class ValuationController:
|
|||||||
if not output_result or not isinstance(output_result, dict):
|
if not output_result or not isinstance(output_result, dict):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# 调试:打印B3的output_result
|
|
||||||
if 'risk_value_b3' in str(output_result) or 'legal_risk' in str(output_result):
|
|
||||||
print(f"=== _extract_main_result 调试 ===")
|
|
||||||
print(f"formula_name: {formula_name}")
|
|
||||||
print(f"output_result keys: {list(output_result.keys())}")
|
|
||||||
print(f"output_result: {output_result}")
|
|
||||||
print(f"================================")
|
|
||||||
|
|
||||||
# 移除 duration_ms 等元数据字段
|
# 移除 duration_ms 等元数据字段
|
||||||
filtered_result = {k: v for k, v in output_result.items()
|
filtered_result = {k: v for k, v in output_result.items()
|
||||||
if k not in ['duration_ms', 'duration', 'timestamp', 'status']}
|
if k not in ['duration_ms', 'duration', 'timestamp', 'status']}
|
||||||
@ -570,47 +538,6 @@ class ValuationController:
|
|||||||
else:
|
else:
|
||||||
return json.dumps(value, ensure_ascii=False)
|
return json.dumps(value, ensure_ascii=False)
|
||||||
|
|
||||||
# 优先查找常见的结果字段(优先级从高到低)
|
|
||||||
# 这个列表的顺序很重要,确保正确的结果字段优先被选中
|
|
||||||
common_result_keys = [
|
|
||||||
# 计算引擎实际使用的结果字段名
|
|
||||||
'risk_value_b3', # 风险调整系数B3
|
|
||||||
'risk_adjustment_b3', # 风险调整系数B3(备选)
|
|
||||||
'economic_value_b1', # 经济价值B1
|
|
||||||
'cultural_value_b2', # 文化价值B2
|
|
||||||
'model_value_b', # 模型估值B
|
|
||||||
'market_value_c', # 市场估值C
|
|
||||||
'final_value_a', # 最终估值A
|
|
||||||
'final_value_ab', # 最终估值AB
|
|
||||||
'basic_value_b11', # 基础价值B11
|
|
||||||
'traffic_factor_b12', # 流量因子B12
|
|
||||||
'policy_multiplier_b13', # 政策乘数B13
|
|
||||||
'living_heritage_b21', # 活态传承系数B21
|
|
||||||
'pattern_gene_b22', # 纹样基因值B22
|
|
||||||
# 通用结果字段
|
|
||||||
'result', 'value', 'output', 'final_value', 'calculated_value',
|
|
||||||
# 子计算结果字段
|
|
||||||
'financial_value_f', 'legal_strength_l', 'development_potential_d',
|
|
||||||
'social_media_spread_s3', 'interaction_index', 'coverage_index', 'conversion_efficiency',
|
|
||||||
'market_bid_c1', 'heat_coefficient_c2', 'scarcity_multiplier_c3', 'timeliness_decay_c4',
|
|
||||||
'teaching_frequency', 'inheritor_level_coefficient',
|
|
||||||
'risk_score_sum', # 风险评分总和R
|
|
||||||
'dynamic_pledge_rate', # 动态质押率
|
|
||||||
]
|
|
||||||
|
|
||||||
# 首先检查常见结果字段(这个优先级最高,避免错误匹配子风险值)
|
|
||||||
for key in common_result_keys:
|
|
||||||
if key in filtered_result:
|
|
||||||
value = filtered_result[key]
|
|
||||||
if isinstance(value, (int, float)):
|
|
||||||
if 'risk' in formula_name.lower() or 'b3' in formula_name.lower():
|
|
||||||
print(f"=== 返回值调试 (common_keys) ===")
|
|
||||||
print(f"formula_name: {formula_name}")
|
|
||||||
print(f"matched key: {key}")
|
|
||||||
print(f"返回值: {value}")
|
|
||||||
print(f"================================")
|
|
||||||
return str(value)
|
|
||||||
|
|
||||||
# 尝试根据公式名称匹配字段
|
# 尝试根据公式名称匹配字段
|
||||||
# 例如:"财务价值 F" -> 查找 "financial_value_f", "财务价值F" 等
|
# 例如:"财务价值 F" -> 查找 "financial_value_f", "财务价值F" 等
|
||||||
# 提取公式名称中的关键部分(通常是最后一个字母或单词)
|
# 提取公式名称中的关键部分(通常是最后一个字母或单词)
|
||||||
@ -650,6 +577,14 @@ class ValuationController:
|
|||||||
if isinstance(value, (int, float)):
|
if isinstance(value, (int, float)):
|
||||||
return str(value)
|
return str(value)
|
||||||
|
|
||||||
|
# 查找常见的结果字段
|
||||||
|
common_result_keys = ['result', 'value', 'output', 'final_value', 'calculated_value']
|
||||||
|
for key in common_result_keys:
|
||||||
|
if key in filtered_result:
|
||||||
|
value = filtered_result[key]
|
||||||
|
if isinstance(value, (int, float)):
|
||||||
|
return str(value)
|
||||||
|
|
||||||
# 返回第一个数值类型的值
|
# 返回第一个数值类型的值
|
||||||
for key, value in filtered_result.items():
|
for key, value in filtered_result.items():
|
||||||
if isinstance(value, (int, float)):
|
if isinstance(value, (int, float)):
|
||||||
@ -878,7 +813,7 @@ class ValuationController:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
update_data = {"status": "success", "audited_at": datetime.now(), "updated_at": datetime.now()}
|
update_data = {"status": "pending", "audited_at": datetime.now(), "updated_at": datetime.now()}
|
||||||
if admin_notes:
|
if admin_notes:
|
||||||
update_data["admin_notes"] = admin_notes
|
update_data["admin_notes"] = admin_notes
|
||||||
|
|
||||||
@ -912,18 +847,6 @@ class ValuationController:
|
|||||||
out = ValuationAssessmentOut.model_validate(valuation)
|
out = ValuationAssessmentOut.model_validate(valuation)
|
||||||
return await self._attach_user_phone(out)
|
return await self._attach_user_phone(out)
|
||||||
|
|
||||||
async def update_calc(self, valuation_id: int, data: ValuationAssessmentUpdate) -> Optional[ValuationAssessmentOut]:
|
|
||||||
valuation = await self.model.filter(id=valuation_id, is_active=True).first()
|
|
||||||
if not valuation:
|
|
||||||
return None
|
|
||||||
update_data = data.model_dump(exclude_unset=True)
|
|
||||||
valuation.status ="pending"
|
|
||||||
if update_data:
|
|
||||||
await valuation.update_from_dict(update_data)
|
|
||||||
await valuation.save()
|
|
||||||
out = ValuationAssessmentOut.model_validate(valuation)
|
|
||||||
return await self._attach_user_phone(out)
|
|
||||||
|
|
||||||
async def _attach_user_phone(self, out: ValuationAssessmentOut) -> ValuationAssessmentOut:
|
async def _attach_user_phone(self, out: ValuationAssessmentOut) -> ValuationAssessmentOut:
|
||||||
user = await AppUser.filter(id=out.user_id).first()
|
user = await AppUser.filter(id=out.user_id).first()
|
||||||
out.user_phone = getattr(user, "phone", None) if user else None
|
out.user_phone = getattr(user, "phone", None) if user else None
|
||||||
|
|||||||
@ -1,13 +0,0 @@
|
|||||||
from datetime import datetime
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from app.models.token_blacklist import TokenBlacklist
|
|
||||||
|
|
||||||
|
|
||||||
async def add_to_blacklist(token: str, user_id: int, exp: Optional[datetime] = None, jti: Optional[str] = None) -> None:
|
|
||||||
await TokenBlacklist.create(token=token, user_id=user_id, exp=exp, jti=jti)
|
|
||||||
|
|
||||||
|
|
||||||
async def is_blacklisted(token: str) -> bool:
|
|
||||||
return await TokenBlacklist.filter(token=token).exists()
|
|
||||||
|
|
||||||
@ -6,5 +6,4 @@ from .industry import *
|
|||||||
from .policy import *
|
from .policy import *
|
||||||
from .user import *
|
from .user import *
|
||||||
from .valuation import *
|
from .valuation import *
|
||||||
from .invoice import *
|
from .invoice import *
|
||||||
from .token_blacklist import *
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
from tortoise import fields
|
|
||||||
|
|
||||||
from .base import BaseModel, TimestampMixin
|
|
||||||
|
|
||||||
|
|
||||||
class TokenBlacklist(BaseModel, TimestampMixin):
|
|
||||||
token = fields.TextField(description="JWT令牌")
|
|
||||||
jti = fields.CharField(max_length=64, null=True, description="令牌唯一ID", index=True)
|
|
||||||
user_id = fields.IntField(description="用户ID", index=True)
|
|
||||||
exp = fields.DatetimeField(null=True, description="过期时间", index=True)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
table = "token_blacklist"
|
|
||||||
table_description = "JWT令牌黑名单"
|
|
||||||
|
|
||||||
@ -21,8 +21,6 @@ class AppUser(BaseModel, TimestampMixin):
|
|||||||
last_login = fields.DatetimeField(null=True, description="最后登录时间", index=True)
|
last_login = fields.DatetimeField(null=True, description="最后登录时间", index=True)
|
||||||
remaining_quota = fields.IntField(default=0, description="剩余估值次数", index=True)
|
remaining_quota = fields.IntField(default=0, description="剩余估值次数", index=True)
|
||||||
notes = fields.CharField(max_length=256, null=True, description="备注")
|
notes = fields.CharField(max_length=256, null=True, description="备注")
|
||||||
is_deleted = fields.BooleanField(default=False, description="是否已注销", index=True)
|
|
||||||
deleted_at = fields.DatetimeField(null=True, description="注销时间", index=True)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
table = "app_user"
|
table = "app_user"
|
||||||
@ -40,4 +38,4 @@ class AppUserQuotaLog(BaseModel, TimestampMixin):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
table = "app_user_quota_log"
|
table = "app_user_quota_log"
|
||||||
table_description = "App用户估值次数操作日志"
|
table_description = "App用户估值次数操作日志"
|
||||||
@ -1,4 +1,4 @@
|
|||||||
from typing import Optional, List, Union, Dict, Any
|
from typing import Optional, List
|
||||||
from pydantic import BaseModel, Field, EmailStr, field_validator, model_validator
|
from pydantic import BaseModel, Field, EmailStr, field_validator, model_validator
|
||||||
|
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ class UpdateType(BaseModel):
|
|||||||
class PaymentReceiptCreate(BaseModel):
|
class PaymentReceiptCreate(BaseModel):
|
||||||
url: str = Field(..., min_length=1, max_length=512)
|
url: str = Field(..., min_length=1, max_length=512)
|
||||||
note: Optional[str] = Field(None, max_length=256)
|
note: Optional[str] = Field(None, max_length=256)
|
||||||
extra: Optional[Union[List[str], Dict[str, Any]]] = None
|
extra: Optional[dict] = None
|
||||||
|
|
||||||
|
|
||||||
class PaymentReceiptOut(BaseModel):
|
class PaymentReceiptOut(BaseModel):
|
||||||
@ -124,7 +124,7 @@ class PaymentReceiptOut(BaseModel):
|
|||||||
note: Optional[str]
|
note: Optional[str]
|
||||||
verified: bool
|
verified: bool
|
||||||
created_at: str
|
created_at: str
|
||||||
extra: Optional[Union[List[str], Dict[str, Any]]] = None
|
extra: Optional[dict] = None
|
||||||
|
|
||||||
|
|
||||||
class AppCreateInvoiceWithReceipt(BaseModel):
|
class AppCreateInvoiceWithReceipt(BaseModel):
|
||||||
@ -133,7 +133,7 @@ class AppCreateInvoiceWithReceipt(BaseModel):
|
|||||||
invoice_type: Optional[str] = Field(None, pattern=r"^(special|normal)$")
|
invoice_type: Optional[str] = Field(None, pattern=r"^(special|normal)$")
|
||||||
# 兼容前端索引字段:"0"→normal,"1"→special
|
# 兼容前端索引字段:"0"→normal,"1"→special
|
||||||
invoiceTypeIndex: Optional[str] = None
|
invoiceTypeIndex: Optional[str] = None
|
||||||
receipt_url: Optional[Union[str, List[str]]] = Field(None)
|
receipt_url: Optional[str] = Field(None, max_length=512)
|
||||||
receipt_urls: Optional[List[str]] = None
|
receipt_urls: Optional[List[str]] = None
|
||||||
note: Optional[str] = Field(None, max_length=256)
|
note: Optional[str] = Field(None, max_length=256)
|
||||||
|
|
||||||
@ -145,26 +145,14 @@ class AppCreateInvoiceWithReceipt(BaseModel):
|
|||||||
@field_validator('receipt_url', mode='before')
|
@field_validator('receipt_url', mode='before')
|
||||||
@classmethod
|
@classmethod
|
||||||
def _clean_receipt_url(cls, v):
|
def _clean_receipt_url(cls, v):
|
||||||
if isinstance(v, list):
|
if isinstance(v, list) and v:
|
||||||
cleaned: List[str] = []
|
v = v[0]
|
||||||
for item in v:
|
|
||||||
if isinstance(item, str):
|
|
||||||
s = item.strip()
|
|
||||||
if s.startswith('`') and s.endswith('`'):
|
|
||||||
s = s[1:-1].strip()
|
|
||||||
while s.endswith('\\'):
|
|
||||||
s = s[:-1].strip()
|
|
||||||
if s:
|
|
||||||
cleaned.append(s)
|
|
||||||
return cleaned or None
|
|
||||||
if isinstance(v, str):
|
if isinstance(v, str):
|
||||||
s = v.strip()
|
s = v.strip()
|
||||||
if s.startswith('`') and s.endswith('`'):
|
if s.startswith('`') and s.endswith('`'):
|
||||||
s = s[1:-1].strip()
|
s = s[1:-1].strip()
|
||||||
while s.endswith('\\'):
|
|
||||||
s = s[:-1].strip()
|
|
||||||
return s or None
|
return s or None
|
||||||
return None
|
return v
|
||||||
|
|
||||||
@field_validator('receipt_urls', mode='before')
|
@field_validator('receipt_urls', mode='before')
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -174,18 +162,10 @@ class AppCreateInvoiceWithReceipt(BaseModel):
|
|||||||
if isinstance(v, str):
|
if isinstance(v, str):
|
||||||
v = [v]
|
v = [v]
|
||||||
if isinstance(v, list):
|
if isinstance(v, list):
|
||||||
seen = set()
|
|
||||||
cleaned = []
|
cleaned = []
|
||||||
for item in v:
|
for item in v:
|
||||||
if isinstance(item, str):
|
if isinstance(item, str) and item.strip():
|
||||||
s = item.strip()
|
cleaned.append(item.strip())
|
||||||
if s.startswith('`') and s.endswith('`'):
|
|
||||||
s = s[1:-1].strip()
|
|
||||||
while s.endswith('\\'):
|
|
||||||
s = s[:-1].strip()
|
|
||||||
if s and s not in seen:
|
|
||||||
seen.add(s)
|
|
||||||
cleaned.append(s)
|
|
||||||
return cleaned or None
|
return cleaned or None
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|||||||
@ -8,8 +8,6 @@ class SendEmailRequest(BaseModel):
|
|||||||
subject: Optional[str] = Field(None, description="邮件主题")
|
subject: Optional[str] = Field(None, description="邮件主题")
|
||||||
body: str = Field(..., description="文案内容")
|
body: str = Field(..., description="文案内容")
|
||||||
file_urls: Optional[List[str]] = Field(None, description="附件URL列表")
|
file_urls: Optional[List[str]] = Field(None, description="附件URL列表")
|
||||||
file_url: Optional[Union[str, List[str]]] = Field(None, description="附件URL或列表(兼容前端传参)")
|
|
||||||
status: Optional[str] = Field(None, description="开票状态标记: success|invoiced|rejected|refunded")
|
|
||||||
|
|
||||||
|
|
||||||
class SendEmailBody(BaseModel):
|
class SendEmailBody(BaseModel):
|
||||||
|
|||||||
@ -193,7 +193,7 @@ class ValuationAssessmentOut(ValuationAssessmentBase):
|
|||||||
status: str = Field(..., description="评估状态")
|
status: str = Field(..., description="评估状态")
|
||||||
admin_notes: Optional[str] = Field(None, description="管理员备注")
|
admin_notes: Optional[str] = Field(None, description="管理员备注")
|
||||||
created_at: datetime = Field(..., description="创建时间")
|
created_at: datetime = Field(..., description="创建时间")
|
||||||
updated_at: Optional[datetime] = Field(None, description="更新时间")
|
updated_at: datetime = Field(..., description="更新时间")
|
||||||
audited_at: Optional[datetime] = Field(None, description="审核时间")
|
audited_at: Optional[datetime] = Field(None, description="审核时间")
|
||||||
is_active: bool = Field(..., description="是否激活")
|
is_active: bool = Field(..., description="是否激活")
|
||||||
|
|
||||||
@ -246,7 +246,7 @@ class UserValuationOut(ValuationAssessmentBase):
|
|||||||
status: str = Field(..., description="评估状态")
|
status: str = Field(..., description="评估状态")
|
||||||
admin_notes: Optional[str] = Field(None, description="管理员备注")
|
admin_notes: Optional[str] = Field(None, description="管理员备注")
|
||||||
created_at: datetime = Field(..., description="创建时间")
|
created_at: datetime = Field(..., description="创建时间")
|
||||||
updated_at: Optional[datetime] = Field(None, description="更新时间")
|
updated_at: datetime = Field(..., description="更新时间")
|
||||||
is_active: Optional[bool] = Field(None, description="是否激活")
|
is_active: Optional[bool] = Field(None, description="是否激活")
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
@ -290,7 +290,7 @@ class UserValuationDetail(ValuationAssessmentBase):
|
|||||||
status: str = Field(..., description="评估状态")
|
status: str = Field(..., description="评估状态")
|
||||||
admin_notes: Optional[str] = Field(None, description="管理员备注")
|
admin_notes: Optional[str] = Field(None, description="管理员备注")
|
||||||
created_at: datetime = Field(..., description="创建时间")
|
created_at: datetime = Field(..., description="创建时间")
|
||||||
updated_at: Optional[datetime] = Field(None, description="更新时间")
|
updated_at: datetime = Field(..., description="更新时间")
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
from_attributes = True
|
from_attributes = True
|
||||||
@ -422,7 +422,7 @@ class ValuationCalculationStepOut(ValuationCalculationStepBase):
|
|||||||
id: int = Field(..., description="主键ID")
|
id: int = Field(..., description="主键ID")
|
||||||
valuation_id: int = Field(..., description="关联的估值评估ID")
|
valuation_id: int = Field(..., description="关联的估值评估ID")
|
||||||
created_at: datetime = Field(..., description="创建时间")
|
created_at: datetime = Field(..., description="创建时间")
|
||||||
updated_at: Optional[datetime] = Field(None, description="更新时间")
|
updated_at: datetime = Field(..., description="更新时间")
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
from_attributes = True
|
from_attributes = True
|
||||||
|
|||||||
@ -28,7 +28,6 @@ class VerificationStore:
|
|||||||
self.codes: Dict[str, Tuple[str, float]] = {}
|
self.codes: Dict[str, Tuple[str, float]] = {}
|
||||||
self.sends: Dict[str, Dict[str, float]] = {}
|
self.sends: Dict[str, Dict[str, float]] = {}
|
||||||
self.failures: Dict[str, Dict[str, float]] = {}
|
self.failures: Dict[str, Dict[str, float]] = {}
|
||||||
self.verified: Dict[str, float] = {}
|
|
||||||
|
|
||||||
def generate_code(self) -> str:
|
def generate_code(self) -> str:
|
||||||
"""生成数字验证码
|
"""生成数字验证码
|
||||||
@ -145,13 +144,5 @@ class VerificationStore:
|
|||||||
"""
|
"""
|
||||||
self.failures.pop(phone, None)
|
self.failures.pop(phone, None)
|
||||||
|
|
||||||
def mark_verified(self, phone: str, ttl_seconds: int = 300) -> None:
|
|
||||||
until = time.time() + ttl_seconds
|
|
||||||
self.verified[phone] = until
|
|
||||||
|
|
||||||
def is_recently_verified(self, phone: str) -> bool:
|
store = VerificationStore()
|
||||||
until = self.verified.get(phone, 0.0)
|
|
||||||
return until > time.time()
|
|
||||||
|
|
||||||
|
|
||||||
store = VerificationStore()
|
|
||||||
@ -3,7 +3,6 @@ from typing import Optional
|
|||||||
import jwt
|
import jwt
|
||||||
from fastapi import HTTPException, status, Depends, Header
|
from fastapi import HTTPException, status, Depends, Header
|
||||||
from app.controllers.app_user import app_user_controller
|
from app.controllers.app_user import app_user_controller
|
||||||
from app.core.token_blacklist import is_blacklisted
|
|
||||||
from app.schemas.app_user import AppUserJWTPayload
|
from app.schemas.app_user import AppUserJWTPayload
|
||||||
from app.settings import settings
|
from app.settings import settings
|
||||||
|
|
||||||
@ -49,24 +48,18 @@ def verify_app_user_token(token: str) -> Optional[AppUserJWTPayload]:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
async def get_current_app_user_id(token: str = Header(None)) -> int:
|
def get_current_app_user_id(token: str = Header(None)) -> int:
|
||||||
"""
|
"""
|
||||||
从令牌中获取当前AppUser ID
|
从令牌中获取当前AppUser ID
|
||||||
"""
|
"""
|
||||||
credentials_exception = HTTPException(
|
credentials_exception = HTTPException(
|
||||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||||
detail="未登录,请重新登录",
|
detail="无效的认证凭据",
|
||||||
headers={"WWW-Authenticate": "Bearer"},
|
headers={"WWW-Authenticate": "Bearer"},
|
||||||
)
|
)
|
||||||
|
|
||||||
if not token:
|
if not token:
|
||||||
raise credentials_exception
|
raise credentials_exception
|
||||||
if token and token != "dev":
|
|
||||||
try:
|
|
||||||
if await is_blacklisted(token):
|
|
||||||
raise credentials_exception
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
payload = verify_app_user_token(token)
|
payload = verify_app_user_token(token)
|
||||||
if payload is None:
|
if payload is None:
|
||||||
@ -87,4 +80,4 @@ async def get_current_app_user(
|
|||||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||||
detail="用户不存在或已被停用"
|
detail="用户不存在或已被停用"
|
||||||
)
|
)
|
||||||
return user
|
return user
|
||||||
@ -9,7 +9,7 @@
|
|||||||
2. pattern_gene_b22: 纹样基因值B22计算
|
2. pattern_gene_b22: 纹样基因值B22计算
|
||||||
- 结构复杂度SC = Σ(元素权重 × 复杂度系数) / 总元素数
|
- 结构复杂度SC = Σ(元素权重 × 复杂度系数) / 总元素数
|
||||||
- 归一化信息熵H = -Σ(p_i × log2(p_i)) / log2(n)
|
- 归一化信息熵H = -Σ(p_i × log2(p_i)) / log2(n)
|
||||||
- 历史传承度HI = 出土实物×1.0 + 古代文献×0.8 + 传承人佐证×0.6 + 现代研究×0.4
|
- 历史传承度HI = 传承年限权重 × 0.4 + 文化意义权重 × 0.3 + 保护状况权重 × 0.3
|
||||||
- 纹样基因值B22 = (结构复杂度SC × 0.6 + 归一化信息熵H × 0.4) × 历史传承度HI × 10
|
- 纹样基因值B22 = (结构复杂度SC × 0.6 + 归一化信息熵H × 0.4) × 历史传承度HI × 10
|
||||||
- 文化价值B2 = 活态传承系数B21 × 0.6 + (纹样基因值B22 / 10) × 0.4
|
- 文化价值B2 = 活态传承系数B21 × 0.6 + (纹样基因值B22 / 10) × 0.4
|
||||||
|
|
||||||
|
|||||||
@ -277,19 +277,26 @@ def calculate_heat_score(daily_views: float, favorites: int) -> float:
|
|||||||
return 0.0
|
return 0.0
|
||||||
|
|
||||||
# 30天搜索指数S1
|
# 30天搜索指数S1
|
||||||
def calculate_search_index_s1(wechat_index: float) -> float:
|
def calculate_search_index_s1(baidu_index: float,
|
||||||
|
wechat_index: float,
|
||||||
|
weibo_index: float) -> float:
|
||||||
"""
|
"""
|
||||||
计算近30天搜索指数S1
|
计算近30天搜索指数S1
|
||||||
|
|
||||||
近30天搜索指数S1 = 微信指数 / 10
|
近30天搜索指数S1 = 百度搜索指数 × 0.4 + 微信搜索指数 × 0.3 + 微博搜索指数 × 0.3
|
||||||
|
|
||||||
args:
|
args:
|
||||||
|
baidu_index: 百度搜索指数 (API获取)
|
||||||
wechat_index: 微信搜索指数 (API获取)
|
wechat_index: 微信搜索指数 (API获取)
|
||||||
|
weibo_index: 微博搜索指数 (API获取)
|
||||||
|
|
||||||
returns:
|
returns:
|
||||||
float: 近30天搜索指数S1
|
float: 近30天搜索指数S1
|
||||||
"""
|
"""
|
||||||
search_index = wechat_index / 10.0
|
#
|
||||||
|
search_index = (baidu_index * 0.4 +
|
||||||
|
wechat_index * 0.3 +
|
||||||
|
weibo_index * 0.3)
|
||||||
|
|
||||||
return search_index
|
return search_index
|
||||||
# 示例使用
|
# 示例使用
|
||||||
@ -299,8 +306,10 @@ if __name__ == "__main__":
|
|||||||
processor = PlatformDataProcessor()
|
processor = PlatformDataProcessor()
|
||||||
|
|
||||||
# 示例数据
|
# 示例数据
|
||||||
# 微信指数数据 (API获取)
|
# 搜索指数数据 (API获取)
|
||||||
|
baidu_index = 6000.0
|
||||||
wechat_index = 4500.0
|
wechat_index = 4500.0
|
||||||
|
weibo_index = 3000.0
|
||||||
|
|
||||||
# 行业均值 (系统配置)
|
# 行业均值 (系统配置)
|
||||||
industry_average = 5000.0
|
industry_average = 5000.0
|
||||||
@ -330,7 +339,7 @@ if __name__ == "__main__":
|
|||||||
view_count = 200
|
view_count = 200
|
||||||
|
|
||||||
# 计算各项指标
|
# 计算各项指标
|
||||||
search_index_s1 = calculate_search_index_s1(wechat_index) # S1 = 微信指数 / 10
|
search_index_s1 = calculate_search_index_s1(baidu_index, wechat_index, weibo_index)
|
||||||
interaction_index, coverage_index = processor.calculate_multi_platform_interaction(platform_data)
|
interaction_index, coverage_index = processor.calculate_multi_platform_interaction(platform_data)
|
||||||
conversion_efficiency = calculator.calculate_conversion_efficiency(click_count, view_count)
|
conversion_efficiency = calculator.calculate_conversion_efficiency(click_count, view_count)
|
||||||
# 互动量指数 × 0.4 + 覆盖人群指数 × 0.3 + 转化效率 × 0.3
|
# 互动量指数 × 0.4 + 覆盖人群指数 × 0.3 + 转化效率 × 0.3
|
||||||
|
|||||||
@ -231,86 +231,6 @@ FORMULA_TREE: List[FormulaTreeNode] = [
|
|||||||
"40",
|
"40",
|
||||||
group="DYNAMIC_PLEDGE",
|
group="DYNAMIC_PLEDGE",
|
||||||
),
|
),
|
||||||
# API查询结果记录
|
|
||||||
_node(
|
|
||||||
"API_ESG_QUERY",
|
|
||||||
"ESG评分查询",
|
|
||||||
"根据行业名称查询ESG基准分",
|
|
||||||
"50.1",
|
|
||||||
group="API_QUERY",
|
|
||||||
),
|
|
||||||
_node(
|
|
||||||
"API_INDUSTRY_QUERY",
|
|
||||||
"行业系数查询",
|
|
||||||
"根据行业名称查询行业修正系数I",
|
|
||||||
"50.2",
|
|
||||||
group="API_QUERY",
|
|
||||||
),
|
|
||||||
_node(
|
|
||||||
"API_POLICY_QUERY",
|
|
||||||
"政策匹配度查询",
|
|
||||||
"根据行业名称查询政策匹配度评分",
|
|
||||||
"50.3",
|
|
||||||
group="API_QUERY",
|
|
||||||
),
|
|
||||||
_node(
|
|
||||||
"API_JUDICIAL_QUERY",
|
|
||||||
"司法诉讼查询",
|
|
||||||
"根据机构名称查询诉讼状态,映射为法律风险评分(无诉讼:10分, 已解决:7分, 未解决:0分)",
|
|
||||||
"50.4",
|
|
||||||
group="API_QUERY",
|
|
||||||
),
|
|
||||||
_node(
|
|
||||||
"API_PATENT_QUERY",
|
|
||||||
"专利信息查询",
|
|
||||||
"根据专利申请号查询专利数量和剩余年限,计算专利评分",
|
|
||||||
"50.5",
|
|
||||||
group="API_QUERY",
|
|
||||||
),
|
|
||||||
_node(
|
|
||||||
"API_WECHAT_INDEX",
|
|
||||||
"微信指数查询",
|
|
||||||
"根据资产名称查询微信指数,计算搜索指数S1 = 微信指数 / 10",
|
|
||||||
"50.6",
|
|
||||||
group="API_QUERY",
|
|
||||||
),
|
|
||||||
# 参数映射记录
|
|
||||||
_node(
|
|
||||||
"MAPPING_CROSS_BORDER_DEPTH",
|
|
||||||
"跨界合作深度映射",
|
|
||||||
"用户选项映射为评分:无(0分), 品牌联名(3分), 科技载体(5分), 国家外交礼品(10分)",
|
|
||||||
"51.1",
|
|
||||||
group="PARAM_MAPPING",
|
|
||||||
),
|
|
||||||
_node(
|
|
||||||
"MAPPING_INHERITOR_LEVEL",
|
|
||||||
"传承人等级映射",
|
|
||||||
"用户选项映射为系数:国家级(10分), 省级(7分), 市级及以下(4分)",
|
|
||||||
"51.2",
|
|
||||||
group="PARAM_MAPPING",
|
|
||||||
),
|
|
||||||
# 权重计算记录
|
|
||||||
_node(
|
|
||||||
"CALC_HISTORICAL_INHERITANCE",
|
|
||||||
"历史传承度计算",
|
|
||||||
"HI = 出土实物×1.0 + 古代文献×0.8 + 传承人佐证×0.6 + 现代研究×0.4",
|
|
||||||
"52.1",
|
|
||||||
group="PARAM_CALC",
|
|
||||||
),
|
|
||||||
_node(
|
|
||||||
"CALC_INHERITANCE_RISK",
|
|
||||||
"传承风险年龄转换",
|
|
||||||
"根据各年龄段传承人数量计算传承风险评分:≤50岁(10分), 50-70岁(5分), >70岁(0分), 取最高分",
|
|
||||||
"52.2",
|
|
||||||
group="PARAM_CALC",
|
|
||||||
),
|
|
||||||
_node(
|
|
||||||
"CALC_MARKET_RISK",
|
|
||||||
"市场风险价格波动",
|
|
||||||
"根据30天价格波动计算市场风险评分:波动率≤5%(10分), 5-15%(5分), >15%(0分)",
|
|
||||||
"52.3",
|
|
||||||
group="PARAM_CALC",
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|||||||
@ -222,10 +222,7 @@ class RiskAdjustmentB3Calculator:
|
|||||||
valuation_id,
|
valuation_id,
|
||||||
"MODEL_B_RISK_B3_INHERITANCE",
|
"MODEL_B_RISK_B3_INHERITANCE",
|
||||||
status="completed",
|
status="completed",
|
||||||
input_params={
|
input_params={"inheritor_ages": input_data.get("inheritor_ages")},
|
||||||
"inheritor_ages": input_data.get("inheritor_ages"),
|
|
||||||
"score_rule": "≤50岁:10分, 50-70岁:5分, >70岁:0分, 取最高分"
|
|
||||||
},
|
|
||||||
output_result={'inheritance_risk': inheritance_risk},
|
output_result={'inheritance_risk': inheritance_risk},
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -235,30 +232,12 @@ class RiskAdjustmentB3Calculator:
|
|||||||
# 计算风险调整系数B3
|
# 计算风险调整系数B3
|
||||||
risk_adjustment_b3 = self.calculate_risk_adjustment_b3(risk_score_sum)
|
risk_adjustment_b3 = self.calculate_risk_adjustment_b3(risk_score_sum)
|
||||||
|
|
||||||
# 调试输出:打印B3计算的关键值
|
|
||||||
print(f"=== B3计算调试 ===")
|
|
||||||
print(f"市场风险: {market_risk}")
|
|
||||||
print(f"法律风险: {legal_risk}")
|
|
||||||
print(f"传承风险: {inheritance_risk}")
|
|
||||||
print(f"风险评分总和R: {risk_score_sum}")
|
|
||||||
print(f"风险调整系数B3: {risk_adjustment_b3}")
|
|
||||||
print(f"=== B3计算完成 ===")
|
|
||||||
|
|
||||||
result = {
|
result = {
|
||||||
"risk_value_b3": risk_adjustment_b3,
|
"risk_value_b3": risk_adjustment_b3,
|
||||||
"risk_score_sum": risk_score_sum,
|
"risk_score_sum": risk_score_sum,
|
||||||
"market_risk": market_risk,
|
"market_risk": market_risk,
|
||||||
"legal_risk": legal_risk,
|
"legal_risk": legal_risk,
|
||||||
"inheritance_risk": inheritance_risk,
|
"inheritance_risk": inheritance_risk,
|
||||||
# 详细计算过程
|
|
||||||
"calculation_detail": {
|
|
||||||
"step1_market_risk": f"市场风险 = {market_risk}分 (波动率评分)",
|
|
||||||
"step2_legal_risk": f"法律风险 = {legal_risk}分 (诉讼状态评分)",
|
|
||||||
"step3_inheritance_risk": f"传承风险 = {inheritance_risk}分 (年龄评分)",
|
|
||||||
"step4_risk_score_sum": f"R = ({market_risk}×0.3 + {legal_risk}×0.4 + {inheritance_risk}×0.3) / 10 = {risk_score_sum}",
|
|
||||||
"step5_risk_adjustment_b3": f"B3 = 0.8 + {risk_score_sum}×0.4 = {risk_adjustment_b3}",
|
|
||||||
"formula": "风险调整系数B3 = 0.8 + R × 0.4, R = (市场风险×0.3 + 法律风险×0.4 + 传承风险×0.3) / 10"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
await self.valuation_controller.log_formula_step(
|
await self.valuation_controller.log_formula_step(
|
||||||
valuation_id,
|
valuation_id,
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# nginx
|
nginx
|
||||||
|
|
||||||
python run.py
|
python run.py
|
||||||
74
menu_init.sql
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
-- 完整菜单初始化SQL
|
||||||
|
-- 创建时间: 2025-11-20
|
||||||
|
-- 说明: 包含所有新增的菜单项和权限分配
|
||||||
|
|
||||||
|
-- ========================================
|
||||||
|
-- 1. 工作台菜单
|
||||||
|
-- ========================================
|
||||||
|
INSERT INTO menu (id, name, menu_type, icon, path, "order", parent_id, is_hidden, component, keepalive, redirect, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
(22, '工作台', 'menu', 'carbon:dashboard', '/workbench', 1, 0, 0, '/workbench', 1, NULL, datetime('now'), datetime('now'));
|
||||||
|
|
||||||
|
-- ========================================
|
||||||
|
-- 2. 交易管理菜单
|
||||||
|
-- ========================================
|
||||||
|
-- 插入一级目录:交易管理
|
||||||
|
INSERT INTO menu (id, name, menu_type, icon, path, "order", parent_id, is_hidden, component, keepalive, redirect, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
(16, '交易管理', 'catalog', 'carbon:receipt', '/transaction', 3, 0, 0, 'Layout', 0, '/transaction/invoice', datetime('now'), datetime('now'));
|
||||||
|
|
||||||
|
-- 插入二级菜单:交易管理
|
||||||
|
INSERT INTO menu (id, name, menu_type, icon, path, "order", parent_id, is_hidden, component, keepalive, redirect, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
(17, '交易管理', 'menu', 'carbon:document', 'invoice', 1, 16, 0, '/transaction/invoice', 0, NULL, datetime('now'), datetime('now'));
|
||||||
|
|
||||||
|
-- ========================================
|
||||||
|
-- 3. 估值管理菜单
|
||||||
|
-- ========================================
|
||||||
|
-- 插入一级目录:估值管理
|
||||||
|
INSERT INTO menu (id, name, menu_type, icon, path, "order", parent_id, is_hidden, component, keepalive, redirect, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
(18, '估值管理', 'catalog', 'carbon:calculator', '/valuation', 4, 0, 0, 'Layout', 0, '/valuation/audit', datetime('now'), datetime('now'));
|
||||||
|
|
||||||
|
-- 插入二级菜单:审核列表
|
||||||
|
INSERT INTO menu (id, name, menu_type, icon, path, "order", parent_id, is_hidden, component, keepalive, redirect, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
(19, '审核列表', 'menu', 'carbon:task-approved', 'audit', 1, 18, 0, '/valuation/audit', 0, NULL, datetime('now'), datetime('now'));
|
||||||
|
|
||||||
|
-- ========================================
|
||||||
|
-- 4. 用户管理菜单
|
||||||
|
-- ========================================
|
||||||
|
-- 插入一级目录:用户管理
|
||||||
|
INSERT INTO menu (id, name, menu_type, icon, path, "order", parent_id, is_hidden, component, keepalive, redirect, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
(20, '用户管理', 'catalog', 'carbon:user-multiple', '/user-management', 5, 0, 0, 'Layout', 0, '/user-management/user-list', datetime('now'), datetime('now'));
|
||||||
|
|
||||||
|
-- 插入二级菜单:用户列表
|
||||||
|
INSERT INTO menu (id, name, menu_type, icon, path, "order", parent_id, is_hidden, component, keepalive, redirect, created_at, updated_at)
|
||||||
|
VALUES
|
||||||
|
(21, '用户列表', 'menu', 'carbon:user', 'user-list', 1, 20, 0, '/user-management/user-list', 0, NULL, datetime('now'), datetime('now'));
|
||||||
|
|
||||||
|
-- ========================================
|
||||||
|
-- 角色权限分配
|
||||||
|
-- ========================================
|
||||||
|
|
||||||
|
-- 为管理员角色(role_id=1)分配所有菜单权限
|
||||||
|
INSERT INTO role_menu (role_id, menu_id)
|
||||||
|
VALUES
|
||||||
|
(1, 22), -- 工作台
|
||||||
|
(1, 16), -- 交易管理
|
||||||
|
(1, 17), -- 交易管理
|
||||||
|
(1, 18), -- 估值管理
|
||||||
|
(1, 19), -- 审核列表
|
||||||
|
(1, 20), -- 用户管理
|
||||||
|
(1, 21); -- 用户列表
|
||||||
|
|
||||||
|
-- 为普通用户角色(role_id=2)分配基础菜单权限
|
||||||
|
INSERT INTO role_menu (role_id, menu_id)
|
||||||
|
VALUES
|
||||||
|
(2, 22), -- 工作台
|
||||||
|
(2, 16), -- 交易管理
|
||||||
|
(2, 17), -- 交易管理
|
||||||
|
(2, 18), -- 估值管理
|
||||||
|
(2, 19); -- 审核列表
|
||||||
|
-- 注意:普通用户不分配用户管理权限
|
||||||
@ -189,7 +189,7 @@ def build_sample_payload() -> Dict[str, Any]:
|
|||||||
"market_activity_time": "近一周",
|
"market_activity_time": "近一周",
|
||||||
"monthly_transaction_amount": "月交易额>100万<500万",
|
"monthly_transaction_amount": "月交易额>100万<500万",
|
||||||
"platform_accounts": {
|
"platform_accounts": {
|
||||||
"douyin": {"account": "成都文交所", "likes": "500000", "comments": "89222", "shares": "97412", "views": "100000"}
|
"douyin": {"account": "成都文交所", "likes": "500000", "comments": "89222", "shares": "97412"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# 若 application_coverage 为占位,则用 coverage_area 回填
|
# 若 application_coverage 为占位,则用 coverage_area 回填
|
||||||
|
|||||||
@ -346,18 +346,6 @@ async def main() -> None:
|
|||||||
d_ok = (d_code == 200 and isinstance(d_data, dict) and d_data.get("data", {}).get("deleted"))
|
d_ok = (d_code == 200 and isinstance(d_data, dict) and d_data.get("data", {}).get("deleted"))
|
||||||
results.append({"name": "删除估值", "status": "PASS" if d_ok else "FAIL", "message": "删除成功" if d_ok else "删除失败", "detail": {"http": d_code, "body": d_data}})
|
results.append({"name": "删除估值", "status": "PASS" if d_ok else "FAIL", "message": "删除成功" if d_ok else "删除失败", "detail": {"http": d_code, "body": d_data}})
|
||||||
|
|
||||||
# 注销账号
|
|
||||||
da_resp = await client.delete(make_url(base, "/app-user/account"), headers={"token": use_token})
|
|
||||||
da_code = da_resp.status_code
|
|
||||||
da_data = _ensure_dict(da_resp.json() if da_resp.headers.get("content-type", "").startswith("application/json") else {"raw": da_resp.text})
|
|
||||||
da_ok = (da_code == 200 and isinstance(da_data, dict))
|
|
||||||
results.append({"name": "注销账号", "status": "PASS" if da_ok else "FAIL", "message": "注销成功" if da_ok else "注销失败", "detail": {"http": da_code, "body": da_data}})
|
|
||||||
|
|
||||||
# 注销后旧token访问应失败
|
|
||||||
vt2_code, vt2_data = await api_get(client, make_url(base, "/app-user/validate-token"), headers={"token": use_token})
|
|
||||||
vt2_ok = (vt2_code in (401, 403))
|
|
||||||
results.append({"name": "注销后token访问", "status": "PASS" if vt2_ok else "FAIL", "message": "拒绝访问" if vt2_ok else "未拒绝", "detail": {"http": vt2_code, "body": vt2_data}})
|
|
||||||
|
|
||||||
# 登出
|
# 登出
|
||||||
lo_code, lo_data = await api_post_json(client, make_url(base, "/app-user/logout"), {}, headers={"token": use_token})
|
lo_code, lo_data = await api_post_json(client, make_url(base, "/app-user/logout"), {}, headers={"token": use_token})
|
||||||
lo_ok = (lo_code == 200)
|
lo_ok = (lo_code == 200)
|
||||||
@ -390,4 +378,4 @@ async def api_put_json(client: httpx.AsyncClient, url: str, payload: Dict[str, A
|
|||||||
data = r.json()
|
data = r.json()
|
||||||
except Exception:
|
except Exception:
|
||||||
data = {"raw": r.text}
|
data = {"raw": r.text}
|
||||||
return r.status_code, data
|
return r.status_code, data
|
||||||
0
smtp_test_output.txt
Normal file
@ -5,5 +5,6 @@ VITE_PUBLIC_PATH = '/'
|
|||||||
VITE_USE_PROXY = true
|
VITE_USE_PROXY = true
|
||||||
|
|
||||||
# base api
|
# base api
|
||||||
VITE_BASE_API = 'http://139.224.70.152:9990/api/v1'
|
# VITE_BASE_API = 'http://139.224.70.152:9990/api/v1'
|
||||||
|
VITE_BASE_API = 'https://manage-value.cdcee.net/api/v1'
|
||||||
# VITE_BASE_API = 'http://127.0.0.1:9999/api/v1'
|
# VITE_BASE_API = 'http://127.0.0.1:9999/api/v1'
|
||||||
|
|||||||
@ -20,6 +20,15 @@
|
|||||||
"axios": "^1.4.0",
|
"axios": "^1.4.0",
|
||||||
"dayjs": "^1.11.9",
|
"dayjs": "^1.11.9",
|
||||||
"docxtemplater": "^3.67.5",
|
"docxtemplater": "^3.67.5",
|
||||||
|
"@tiptap/core": "^2.6.6",
|
||||||
|
"@tiptap/starter-kit": "^2.6.6",
|
||||||
|
"@tiptap/extension-color": "^2.6.6",
|
||||||
|
"@tiptap/extension-text-style": "^2.6.6",
|
||||||
|
"@tiptap/extension-text-align": "^2.6.6",
|
||||||
|
"@tiptap/extension-underline": "^2.6.6",
|
||||||
|
"@tiptap/extension-image": "^2.6.6",
|
||||||
|
"@tiptap/extension-link": "^2.6.6",
|
||||||
|
"@tiptap/vue-3": "^2.6.6",
|
||||||
"dotenv": "^16.3.1",
|
"dotenv": "^16.3.1",
|
||||||
"eslint": "^8.46.0",
|
"eslint": "^8.46.0",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
|
|||||||
614
web/pnpm-lock.yaml
generated
@ -14,6 +14,33 @@ importers:
|
|||||||
'@iconify/vue':
|
'@iconify/vue':
|
||||||
specifier: ^4.1.1
|
specifier: ^4.1.1
|
||||||
version: 4.1.2(vue@3.4.34(typescript@5.5.4))
|
version: 4.1.2(vue@3.4.34(typescript@5.5.4))
|
||||||
|
'@tiptap/core':
|
||||||
|
specifier: ^2.6.6
|
||||||
|
version: 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/extension-color':
|
||||||
|
specifier: ^2.6.6
|
||||||
|
version: 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/extension-text-style@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)))
|
||||||
|
'@tiptap/extension-image':
|
||||||
|
specifier: ^2.6.6
|
||||||
|
version: 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-link':
|
||||||
|
specifier: ^2.6.6
|
||||||
|
version: 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/extension-text-align':
|
||||||
|
specifier: ^2.6.6
|
||||||
|
version: 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-text-style':
|
||||||
|
specifier: ^2.6.6
|
||||||
|
version: 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-underline':
|
||||||
|
specifier: ^2.6.6
|
||||||
|
version: 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/starter-kit':
|
||||||
|
specifier: ^2.6.6
|
||||||
|
version: 2.27.1
|
||||||
|
'@tiptap/vue-3':
|
||||||
|
specifier: ^2.6.6
|
||||||
|
version: 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)(vue@3.4.34(typescript@5.5.4))
|
||||||
'@unocss/eslint-config':
|
'@unocss/eslint-config':
|
||||||
specifier: ^0.55.0
|
specifier: ^0.55.0
|
||||||
version: 0.55.7(eslint@8.57.0)(typescript@5.5.4)
|
version: 0.55.7(eslint@8.57.0)(typescript@5.5.4)
|
||||||
@ -384,6 +411,12 @@ packages:
|
|||||||
'@polka/url@1.0.0-next.25':
|
'@polka/url@1.0.0-next.25':
|
||||||
resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
|
resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
|
||||||
|
|
||||||
|
'@popperjs/core@2.11.8':
|
||||||
|
resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
|
||||||
|
|
||||||
|
'@remirror/core-constants@3.0.0':
|
||||||
|
resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==}
|
||||||
|
|
||||||
'@rollup/pluginutils@4.2.1':
|
'@rollup/pluginutils@4.2.1':
|
||||||
resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
|
resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
|
||||||
engines: {node: '>= 8.0.0'}
|
engines: {node: '>= 8.0.0'}
|
||||||
@ -397,6 +430,163 @@ packages:
|
|||||||
rollup:
|
rollup:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@tiptap/core@2.27.1':
|
||||||
|
resolution: {integrity: sha512-nkerkl8syHj44ZzAB7oA2GPmmZINKBKCa79FuNvmGJrJ4qyZwlkDzszud23YteFZEytbc87kVd/fP76ROS6sLg==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/pm': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-blockquote@2.27.1':
|
||||||
|
resolution: {integrity: sha512-QrUX3muElDrNjKM3nqCSAtm3H3pT33c6ON8kwRiQboOAjT/9D57Cs7XEVY7r6rMaJPeKztrRUrNVF9w/w/6B0A==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-bold@2.27.1':
|
||||||
|
resolution: {integrity: sha512-g4l4p892x/r7mhea8syp3fNYODxsDrimgouQ+q4DKXIgQmm5+uNhyuEPexP3I8TFNXqQ4DlMNFoM9yCqk97etQ==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-bubble-menu@2.27.1':
|
||||||
|
resolution: {integrity: sha512-ki1R27VsSvY2tT9Q2DIlcATwLOoEjf5DsN+5sExarQ8S/ZxT/tvIjRxB8Dx7lb2a818W5f/NER26YchGtmHfpg==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
'@tiptap/pm': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-bullet-list@2.27.1':
|
||||||
|
resolution: {integrity: sha512-5FmnfXkJ76wN4EbJNzBhAlmQxho8yEMIJLchTGmXdsD/n/tsyVVtewnQYaIOj/Z7naaGySTGDmjVtLgTuQ+Sxw==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-code-block@2.27.1':
|
||||||
|
resolution: {integrity: sha512-wCI5VIOfSAdkenCWFvh4m8FFCJ51EOK+CUmOC/PWUjyo2Dgn8QC8HMi015q8XF7886T0KvYVVoqxmxJSUDAYNg==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
'@tiptap/pm': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-code@2.27.1':
|
||||||
|
resolution: {integrity: sha512-i65wUGJevzBTIIUBHBc1ggVa27bgemvGl/tY1/89fEuS/0Xmre+OQjw8rCtSLevoHSiYYLgLRlvjtUSUhE4kgg==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-color@2.27.1':
|
||||||
|
resolution: {integrity: sha512-raYRsdG2tZvVvY1LV/VTZnDG44Y0xRBwo5CZEat0OUqdx34dfvCtYm8HIOTyWBwr7OOW+yR4O1Vc2zFkmfthZw==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
'@tiptap/extension-text-style': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-document@2.27.1':
|
||||||
|
resolution: {integrity: sha512-NtJzJY7Q/6XWjpOm5OXKrnEaofrcc1XOTYlo/SaTwl8k2bZo918Vl0IDBWhPVDsUN7kx767uHwbtuQZ+9I82hA==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-dropcursor@2.27.1':
|
||||||
|
resolution: {integrity: sha512-3MBQRGHHZ0by3OT0CWbLKS7J3PH9PpobrXjmIR7kr0nde7+bHqxXiVNuuIf501oKU9rnEUSedipSHkLYGkmfsA==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
'@tiptap/pm': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-floating-menu@2.27.1':
|
||||||
|
resolution: {integrity: sha512-nUk/8DbiXO69l6FDwkWso94BTf52IBoWALo+YGWT6o+FO6cI9LbUGghEX2CdmQYXCvSvwvISF2jXeLQWNZvPZQ==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
'@tiptap/pm': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-gapcursor@2.27.1':
|
||||||
|
resolution: {integrity: sha512-A9e1jr+jGhDWzNSXtIO6PYVYhf5j/udjbZwMja+wCE/3KvZU9V3IrnGKz1xNW+2Q2BDOe1QO7j5uVL9ElR6nTA==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
'@tiptap/pm': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-hard-break@2.27.1':
|
||||||
|
resolution: {integrity: sha512-W4hHa4Io6QCTwpyTlN6UAvqMIQ7t56kIUByZhyY9EWrg/+JpbfpxE1kXFLPB4ZGgwBknFOw+e4bJ1j3oAbTJFw==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-heading@2.27.1':
|
||||||
|
resolution: {integrity: sha512-6xoC7igZlW1EmnQ5WVH9IL7P1nCQb3bBUaIDLvk7LbweEogcTUECI4Xg1vxMOVmj9tlDe1I4BsgfcKpB5KEsZw==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-history@2.27.1':
|
||||||
|
resolution: {integrity: sha512-K8PHC9gegSAt0wzSlsd4aUpoEyIJYOmVVeyniHr1P1mIblW1KYEDbRGbDlrLALTyUEfMcBhdIm8zrB9X2Nihvg==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
'@tiptap/pm': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-horizontal-rule@2.27.1':
|
||||||
|
resolution: {integrity: sha512-WxXWGEEsqDmGIF2o9av+3r9Qje4CKrqrpeQY6aRO5bxvWX9AabQCfasepayBok6uwtvNzh3Xpsn9zbbSk09dNA==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
'@tiptap/pm': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-image@2.27.1':
|
||||||
|
resolution: {integrity: sha512-wu3vMKDYWJwKS6Hrw5PPCKBO2RxyHNeFLiA/uDErEV7axzNpievK/U9DyaDXmtK3K/h1XzJAJz19X+2d/pY68w==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-italic@2.27.1':
|
||||||
|
resolution: {integrity: sha512-rcm0GyniWW0UhcNI9+1eIK64GqWQLyIIrWGINslvqSUoBc+WkfocLvv4CMpRkzKlfsAxwVIBuH2eLxHKDtAREA==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-link@2.27.1':
|
||||||
|
resolution: {integrity: sha512-cCwWPZsnVh9MXnGOqSIRXPPuUixRDK8eMN2TvqwbxUBb1TU7b/HtNvfMU4tAOqAuMRJ0aJkFuf3eB0Gi8LVb1g==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
'@tiptap/pm': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-list-item@2.27.1':
|
||||||
|
resolution: {integrity: sha512-dtsxvtzxfwOJP6dKGf0vb2MJAoDF2NxoiWzpq0XTvo7NGGYUHfuHjX07Zp0dYqb4seaDXjwsi5BIQUOp3+WMFQ==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-ordered-list@2.27.1':
|
||||||
|
resolution: {integrity: sha512-U1/sWxc2TciozQsZjH35temyidYUjvroHj3PUPzPyh19w2fwKh1NSbFybWuoYs6jS3XnMSwnM2vF52tOwvfEmA==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-paragraph@2.27.1':
|
||||||
|
resolution: {integrity: sha512-R3QdrHcUdFAsdsn2UAIvhY0yWyHjqGyP/Rv8RRdN0OyFiTKtwTPqreKMHKJOflgX4sMJl/OpHTpNG1Kaf7Lo2A==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-strike@2.27.1':
|
||||||
|
resolution: {integrity: sha512-S9I//K8KPgfFTC5I5lorClzXk0g4lrAv9y5qHzHO5EOWt7AFl0YTg2oN8NKSIBK4bHRnPIrjJJKv+dDFnUp5jQ==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-text-align@2.27.1':
|
||||||
|
resolution: {integrity: sha512-D7dLPk7y5mDn9ZNANQ4K2gCq4vy+Emm5AdeWOGzNeqJsYrBotiQYXd9rb1QYjdup2kzAoKduMTUXV92ujo5cEg==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-text-style@2.27.1':
|
||||||
|
resolution: {integrity: sha512-NagQ9qLk0Ril83gfrk+C65SvTqPjL3WVnLF2arsEVnCrxcx3uDOvdJW67f/K5HEwEHsoqJ4Zq9Irco/koXrOXA==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-text@2.27.1':
|
||||||
|
resolution: {integrity: sha512-a4GCT+GZ9tUwl82F4CEum9/+WsuW0/De9Be/NqrMmi7eNfAwbUTbLCTFU0gEvv25WMHCoUzaeNk/qGmzeVPJ1Q==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/extension-underline@2.27.1':
|
||||||
|
resolution: {integrity: sha512-fPTmfJFAQWg1O/os1pYSPVdtvly6eW/w5sDofG7pre+bdQUN+8s1cZYelSuj/ltNVioRaB2Ws7tvNgnHL0aAJQ==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
|
||||||
|
'@tiptap/pm@2.27.1':
|
||||||
|
resolution: {integrity: sha512-ijKo3+kIjALthYsnBmkRXAuw2Tswd9gd7BUR5OMfIcjGp8v576vKxOxrRfuYiUM78GPt//P0sVc1WV82H5N0PQ==}
|
||||||
|
|
||||||
|
'@tiptap/starter-kit@2.27.1':
|
||||||
|
resolution: {integrity: sha512-uQQlP0Nmn9eq19qm8YoOeloEfmcGbPpB1cujq54Q6nPgxaBozR7rE7tXbFTinxRW2+Hr7XyNWhpjB7DMNkdU2Q==}
|
||||||
|
|
||||||
|
'@tiptap/vue-3@2.27.1':
|
||||||
|
resolution: {integrity: sha512-1D0gTlGBeDmrl+APm/JKoNs/KnW5PecpD1PbQmg2GEHVxVZNeIUpG48D/V5uTIiRwJsDx3PMd8AmsZs1QS6GLw==}
|
||||||
|
peerDependencies:
|
||||||
|
'@tiptap/core': ^2.7.0
|
||||||
|
'@tiptap/pm': ^2.7.0
|
||||||
|
vue: ^3.0.0
|
||||||
|
|
||||||
'@trysound/sax@0.2.0':
|
'@trysound/sax@0.2.0':
|
||||||
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
|
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
|
||||||
engines: {node: '>=10.13.0'}
|
engines: {node: '>=10.13.0'}
|
||||||
@ -410,12 +600,21 @@ packages:
|
|||||||
'@types/katex@0.16.7':
|
'@types/katex@0.16.7':
|
||||||
resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
|
resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
|
||||||
|
|
||||||
|
'@types/linkify-it@5.0.0':
|
||||||
|
resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
|
||||||
|
|
||||||
'@types/lodash-es@4.17.12':
|
'@types/lodash-es@4.17.12':
|
||||||
resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
|
resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
|
||||||
|
|
||||||
'@types/lodash@4.17.7':
|
'@types/lodash@4.17.7':
|
||||||
resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==}
|
resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==}
|
||||||
|
|
||||||
|
'@types/markdown-it@14.1.2':
|
||||||
|
resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
|
||||||
|
|
||||||
|
'@types/mdurl@2.0.0':
|
||||||
|
resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
|
||||||
|
|
||||||
'@types/node@22.0.0':
|
'@types/node@22.0.0':
|
||||||
resolution: {integrity: sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==}
|
resolution: {integrity: sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==}
|
||||||
|
|
||||||
@ -836,6 +1035,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
|
resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
|
||||||
engines: {node: '>= 0.10'}
|
engines: {node: '>= 0.10'}
|
||||||
|
|
||||||
|
crelt@1.0.6:
|
||||||
|
resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
|
||||||
|
|
||||||
cross-spawn@7.0.3:
|
cross-spawn@7.0.3:
|
||||||
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
|
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
|
||||||
engines: {node: '>= 8'}
|
engines: {node: '>= 8'}
|
||||||
@ -1639,6 +1841,12 @@ packages:
|
|||||||
lie@3.3.0:
|
lie@3.3.0:
|
||||||
resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
|
resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
|
||||||
|
|
||||||
|
linkify-it@5.0.0:
|
||||||
|
resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
|
||||||
|
|
||||||
|
linkifyjs@4.3.2:
|
||||||
|
resolution: {integrity: sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==}
|
||||||
|
|
||||||
loader-utils@1.4.2:
|
loader-utils@1.4.2:
|
||||||
resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==}
|
resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==}
|
||||||
engines: {node: '>=4.0.0'}
|
engines: {node: '>=4.0.0'}
|
||||||
@ -1678,6 +1886,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==}
|
resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
|
markdown-it@14.1.0:
|
||||||
|
resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
marked@17.0.1:
|
marked@17.0.1:
|
||||||
resolution: {integrity: sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg==}
|
resolution: {integrity: sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg==}
|
||||||
engines: {node: '>= 20'}
|
engines: {node: '>= 20'}
|
||||||
@ -1689,6 +1901,9 @@ packages:
|
|||||||
mdn-data@2.0.30:
|
mdn-data@2.0.30:
|
||||||
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
|
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
|
||||||
|
|
||||||
|
mdurl@2.0.0:
|
||||||
|
resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
|
||||||
|
|
||||||
merge-options@1.0.1:
|
merge-options@1.0.1:
|
||||||
resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==}
|
resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
@ -1838,6 +2053,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
|
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
|
||||||
engines: {node: '>= 0.8.0'}
|
engines: {node: '>= 0.8.0'}
|
||||||
|
|
||||||
|
orderedmap@2.1.1:
|
||||||
|
resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==}
|
||||||
|
|
||||||
p-limit@3.1.0:
|
p-limit@3.1.0:
|
||||||
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
|
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
@ -1977,9 +2195,71 @@ packages:
|
|||||||
process-nextick-args@2.0.1:
|
process-nextick-args@2.0.1:
|
||||||
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
|
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
|
||||||
|
|
||||||
|
prosemirror-changeset@2.3.1:
|
||||||
|
resolution: {integrity: sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==}
|
||||||
|
|
||||||
|
prosemirror-collab@1.3.1:
|
||||||
|
resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==}
|
||||||
|
|
||||||
|
prosemirror-commands@1.7.1:
|
||||||
|
resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==}
|
||||||
|
|
||||||
|
prosemirror-dropcursor@1.8.2:
|
||||||
|
resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==}
|
||||||
|
|
||||||
|
prosemirror-gapcursor@1.4.0:
|
||||||
|
resolution: {integrity: sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==}
|
||||||
|
|
||||||
|
prosemirror-history@1.5.0:
|
||||||
|
resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==}
|
||||||
|
|
||||||
|
prosemirror-inputrules@1.5.1:
|
||||||
|
resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==}
|
||||||
|
|
||||||
|
prosemirror-keymap@1.2.3:
|
||||||
|
resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==}
|
||||||
|
|
||||||
|
prosemirror-markdown@1.13.2:
|
||||||
|
resolution: {integrity: sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==}
|
||||||
|
|
||||||
|
prosemirror-menu@1.2.5:
|
||||||
|
resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==}
|
||||||
|
|
||||||
|
prosemirror-model@1.25.4:
|
||||||
|
resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==}
|
||||||
|
|
||||||
|
prosemirror-schema-basic@1.2.4:
|
||||||
|
resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==}
|
||||||
|
|
||||||
|
prosemirror-schema-list@1.5.1:
|
||||||
|
resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==}
|
||||||
|
|
||||||
|
prosemirror-state@1.4.4:
|
||||||
|
resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==}
|
||||||
|
|
||||||
|
prosemirror-tables@1.8.3:
|
||||||
|
resolution: {integrity: sha512-wbqCR/RlRPRe41a4LFtmhKElzBEfBTdtAYWNIGHM6X2e24NN/MTNUKyXjjphfAfdQce37Kh/5yf765mLPYDe7Q==}
|
||||||
|
|
||||||
|
prosemirror-trailing-node@3.0.0:
|
||||||
|
resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==}
|
||||||
|
peerDependencies:
|
||||||
|
prosemirror-model: ^1.22.1
|
||||||
|
prosemirror-state: ^1.4.2
|
||||||
|
prosemirror-view: ^1.33.8
|
||||||
|
|
||||||
|
prosemirror-transform@1.10.5:
|
||||||
|
resolution: {integrity: sha512-RPDQCxIDhIBb1o36xxwsaeAvivO8VLJcgBtzmOwQ64bMtsVFh5SSuJ6dWSxO1UsHTiTXPCgQm3PDJt7p6IOLbw==}
|
||||||
|
|
||||||
|
prosemirror-view@1.41.4:
|
||||||
|
resolution: {integrity: sha512-WkKgnyjNncri03Gjaz3IFWvCAE94XoiEgvtr0/r2Xw7R8/IjK3sKLSiDoCHWcsXSAinVaKlGRZDvMCsF1kbzjA==}
|
||||||
|
|
||||||
proxy-from-env@1.1.0:
|
proxy-from-env@1.1.0:
|
||||||
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
|
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
|
||||||
|
|
||||||
|
punycode.js@2.3.1:
|
||||||
|
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
punycode@2.3.1:
|
punycode@2.3.1:
|
||||||
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
|
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
@ -2069,6 +2349,9 @@ packages:
|
|||||||
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
|
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
rope-sequence@1.3.4:
|
||||||
|
resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
|
||||||
|
|
||||||
run-parallel@1.2.0:
|
run-parallel@1.2.0:
|
||||||
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
||||||
|
|
||||||
@ -2274,6 +2557,9 @@ packages:
|
|||||||
text-table@0.2.0:
|
text-table@0.2.0:
|
||||||
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
|
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
|
||||||
|
|
||||||
|
tippy.js@6.3.7:
|
||||||
|
resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==}
|
||||||
|
|
||||||
to-fast-properties@2.0.0:
|
to-fast-properties@2.0.0:
|
||||||
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
|
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
@ -2347,6 +2633,9 @@ packages:
|
|||||||
engines: {node: '>=14.17'}
|
engines: {node: '>=14.17'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
uc.micro@2.1.0:
|
||||||
|
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
|
||||||
|
|
||||||
ufo@1.5.4:
|
ufo@1.5.4:
|
||||||
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
|
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
|
||||||
|
|
||||||
@ -2547,6 +2836,9 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
vue: ^3.0.11
|
vue: ^3.0.11
|
||||||
|
|
||||||
|
w3c-keyname@2.2.8:
|
||||||
|
resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
|
||||||
|
|
||||||
webpack-sources@3.2.3:
|
webpack-sources@3.2.3:
|
||||||
resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
|
resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
|
||||||
engines: {node: '>=10.13.0'}
|
engines: {node: '>=10.13.0'}
|
||||||
@ -2816,6 +3108,10 @@ snapshots:
|
|||||||
|
|
||||||
'@polka/url@1.0.0-next.25': {}
|
'@polka/url@1.0.0-next.25': {}
|
||||||
|
|
||||||
|
'@popperjs/core@2.11.8': {}
|
||||||
|
|
||||||
|
'@remirror/core-constants@3.0.0': {}
|
||||||
|
|
||||||
'@rollup/pluginutils@4.2.1':
|
'@rollup/pluginutils@4.2.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
estree-walker: 2.0.2
|
estree-walker: 2.0.2
|
||||||
@ -2829,6 +3125,179 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
rollup: 3.29.4
|
rollup: 3.29.4
|
||||||
|
|
||||||
|
'@tiptap/core@2.27.1(@tiptap/pm@2.27.1)':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/pm': 2.27.1
|
||||||
|
|
||||||
|
'@tiptap/extension-blockquote@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-bold@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-bubble-menu@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/pm': 2.27.1
|
||||||
|
tippy.js: 6.3.7
|
||||||
|
|
||||||
|
'@tiptap/extension-bullet-list@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-code-block@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/pm': 2.27.1
|
||||||
|
|
||||||
|
'@tiptap/extension-code@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-color@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/extension-text-style@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1)))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/extension-text-style': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
|
||||||
|
'@tiptap/extension-document@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-dropcursor@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/pm': 2.27.1
|
||||||
|
|
||||||
|
'@tiptap/extension-floating-menu@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/pm': 2.27.1
|
||||||
|
tippy.js: 6.3.7
|
||||||
|
|
||||||
|
'@tiptap/extension-gapcursor@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/pm': 2.27.1
|
||||||
|
|
||||||
|
'@tiptap/extension-hard-break@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-heading@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-history@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/pm': 2.27.1
|
||||||
|
|
||||||
|
'@tiptap/extension-horizontal-rule@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/pm': 2.27.1
|
||||||
|
|
||||||
|
'@tiptap/extension-image@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-italic@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-link@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/pm': 2.27.1
|
||||||
|
linkifyjs: 4.3.2
|
||||||
|
|
||||||
|
'@tiptap/extension-list-item@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-ordered-list@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-paragraph@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-strike@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-text-align@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-text-style@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-text@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/extension-underline@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
|
||||||
|
'@tiptap/pm@2.27.1':
|
||||||
|
dependencies:
|
||||||
|
prosemirror-changeset: 2.3.1
|
||||||
|
prosemirror-collab: 1.3.1
|
||||||
|
prosemirror-commands: 1.7.1
|
||||||
|
prosemirror-dropcursor: 1.8.2
|
||||||
|
prosemirror-gapcursor: 1.4.0
|
||||||
|
prosemirror-history: 1.5.0
|
||||||
|
prosemirror-inputrules: 1.5.1
|
||||||
|
prosemirror-keymap: 1.2.3
|
||||||
|
prosemirror-markdown: 1.13.2
|
||||||
|
prosemirror-menu: 1.2.5
|
||||||
|
prosemirror-model: 1.25.4
|
||||||
|
prosemirror-schema-basic: 1.2.4
|
||||||
|
prosemirror-schema-list: 1.5.1
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
prosemirror-tables: 1.8.3
|
||||||
|
prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4)
|
||||||
|
prosemirror-transform: 1.10.5
|
||||||
|
prosemirror-view: 1.41.4
|
||||||
|
|
||||||
|
'@tiptap/starter-kit@2.27.1':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/extension-blockquote': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-bold': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-bullet-list': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-code': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-code-block': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/extension-document': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-dropcursor': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/extension-gapcursor': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/extension-hard-break': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-heading': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-history': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/extension-horizontal-rule': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/extension-italic': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-list-item': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-ordered-list': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-paragraph': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-strike': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-text': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/extension-text-style': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))
|
||||||
|
'@tiptap/pm': 2.27.1
|
||||||
|
|
||||||
|
'@tiptap/vue-3@2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)(vue@3.4.34(typescript@5.5.4))':
|
||||||
|
dependencies:
|
||||||
|
'@tiptap/core': 2.27.1(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/extension-bubble-menu': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/extension-floating-menu': 2.27.1(@tiptap/core@2.27.1(@tiptap/pm@2.27.1))(@tiptap/pm@2.27.1)
|
||||||
|
'@tiptap/pm': 2.27.1
|
||||||
|
vue: 3.4.34(typescript@5.5.4)
|
||||||
|
|
||||||
'@trysound/sax@0.2.0': {}
|
'@trysound/sax@0.2.0': {}
|
||||||
|
|
||||||
'@types/estree@1.0.5': {}
|
'@types/estree@1.0.5': {}
|
||||||
@ -2837,12 +3306,21 @@ snapshots:
|
|||||||
|
|
||||||
'@types/katex@0.16.7': {}
|
'@types/katex@0.16.7': {}
|
||||||
|
|
||||||
|
'@types/linkify-it@5.0.0': {}
|
||||||
|
|
||||||
'@types/lodash-es@4.17.12':
|
'@types/lodash-es@4.17.12':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/lodash': 4.17.7
|
'@types/lodash': 4.17.7
|
||||||
|
|
||||||
'@types/lodash@4.17.7': {}
|
'@types/lodash@4.17.7': {}
|
||||||
|
|
||||||
|
'@types/markdown-it@14.1.2':
|
||||||
|
dependencies:
|
||||||
|
'@types/linkify-it': 5.0.0
|
||||||
|
'@types/mdurl': 2.0.0
|
||||||
|
|
||||||
|
'@types/mdurl@2.0.0': {}
|
||||||
|
|
||||||
'@types/node@22.0.0':
|
'@types/node@22.0.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types: 6.11.1
|
undici-types: 6.11.1
|
||||||
@ -3391,6 +3869,8 @@ snapshots:
|
|||||||
object-assign: 4.1.1
|
object-assign: 4.1.1
|
||||||
vary: 1.1.2
|
vary: 1.1.2
|
||||||
|
|
||||||
|
crelt@1.0.6: {}
|
||||||
|
|
||||||
cross-spawn@7.0.3:
|
cross-spawn@7.0.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
path-key: 3.1.1
|
path-key: 3.1.1
|
||||||
@ -4289,6 +4769,12 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
immediate: 3.0.6
|
immediate: 3.0.6
|
||||||
|
|
||||||
|
linkify-it@5.0.0:
|
||||||
|
dependencies:
|
||||||
|
uc.micro: 2.1.0
|
||||||
|
|
||||||
|
linkifyjs@4.3.2: {}
|
||||||
|
|
||||||
loader-utils@1.4.2:
|
loader-utils@1.4.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
big.js: 5.2.2
|
big.js: 5.2.2
|
||||||
@ -4326,12 +4812,23 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
object-visit: 1.0.1
|
object-visit: 1.0.1
|
||||||
|
|
||||||
|
markdown-it@14.1.0:
|
||||||
|
dependencies:
|
||||||
|
argparse: 2.0.1
|
||||||
|
entities: 4.5.0
|
||||||
|
linkify-it: 5.0.0
|
||||||
|
mdurl: 2.0.0
|
||||||
|
punycode.js: 2.3.1
|
||||||
|
uc.micro: 2.1.0
|
||||||
|
|
||||||
marked@17.0.1: {}
|
marked@17.0.1: {}
|
||||||
|
|
||||||
mdn-data@2.0.14: {}
|
mdn-data@2.0.14: {}
|
||||||
|
|
||||||
mdn-data@2.0.30: {}
|
mdn-data@2.0.30: {}
|
||||||
|
|
||||||
|
mdurl@2.0.0: {}
|
||||||
|
|
||||||
merge-options@1.0.1:
|
merge-options@1.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-plain-obj: 1.1.0
|
is-plain-obj: 1.1.0
|
||||||
@ -4528,6 +5025,8 @@ snapshots:
|
|||||||
type-check: 0.4.0
|
type-check: 0.4.0
|
||||||
word-wrap: 1.2.5
|
word-wrap: 1.2.5
|
||||||
|
|
||||||
|
orderedmap@2.1.1: {}
|
||||||
|
|
||||||
p-limit@3.1.0:
|
p-limit@3.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
yocto-queue: 0.1.0
|
yocto-queue: 0.1.0
|
||||||
@ -4653,8 +5152,113 @@ snapshots:
|
|||||||
|
|
||||||
process-nextick-args@2.0.1: {}
|
process-nextick-args@2.0.1: {}
|
||||||
|
|
||||||
|
prosemirror-changeset@2.3.1:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-transform: 1.10.5
|
||||||
|
|
||||||
|
prosemirror-collab@1.3.1:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
|
||||||
|
prosemirror-commands@1.7.1:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-model: 1.25.4
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
prosemirror-transform: 1.10.5
|
||||||
|
|
||||||
|
prosemirror-dropcursor@1.8.2:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
prosemirror-transform: 1.10.5
|
||||||
|
prosemirror-view: 1.41.4
|
||||||
|
|
||||||
|
prosemirror-gapcursor@1.4.0:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-keymap: 1.2.3
|
||||||
|
prosemirror-model: 1.25.4
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
prosemirror-view: 1.41.4
|
||||||
|
|
||||||
|
prosemirror-history@1.5.0:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
prosemirror-transform: 1.10.5
|
||||||
|
prosemirror-view: 1.41.4
|
||||||
|
rope-sequence: 1.3.4
|
||||||
|
|
||||||
|
prosemirror-inputrules@1.5.1:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
prosemirror-transform: 1.10.5
|
||||||
|
|
||||||
|
prosemirror-keymap@1.2.3:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
w3c-keyname: 2.2.8
|
||||||
|
|
||||||
|
prosemirror-markdown@1.13.2:
|
||||||
|
dependencies:
|
||||||
|
'@types/markdown-it': 14.1.2
|
||||||
|
markdown-it: 14.1.0
|
||||||
|
prosemirror-model: 1.25.4
|
||||||
|
|
||||||
|
prosemirror-menu@1.2.5:
|
||||||
|
dependencies:
|
||||||
|
crelt: 1.0.6
|
||||||
|
prosemirror-commands: 1.7.1
|
||||||
|
prosemirror-history: 1.5.0
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
|
||||||
|
prosemirror-model@1.25.4:
|
||||||
|
dependencies:
|
||||||
|
orderedmap: 2.1.1
|
||||||
|
|
||||||
|
prosemirror-schema-basic@1.2.4:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-model: 1.25.4
|
||||||
|
|
||||||
|
prosemirror-schema-list@1.5.1:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-model: 1.25.4
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
prosemirror-transform: 1.10.5
|
||||||
|
|
||||||
|
prosemirror-state@1.4.4:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-model: 1.25.4
|
||||||
|
prosemirror-transform: 1.10.5
|
||||||
|
prosemirror-view: 1.41.4
|
||||||
|
|
||||||
|
prosemirror-tables@1.8.3:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-keymap: 1.2.3
|
||||||
|
prosemirror-model: 1.25.4
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
prosemirror-transform: 1.10.5
|
||||||
|
prosemirror-view: 1.41.4
|
||||||
|
|
||||||
|
prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4):
|
||||||
|
dependencies:
|
||||||
|
'@remirror/core-constants': 3.0.0
|
||||||
|
escape-string-regexp: 4.0.0
|
||||||
|
prosemirror-model: 1.25.4
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
prosemirror-view: 1.41.4
|
||||||
|
|
||||||
|
prosemirror-transform@1.10.5:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-model: 1.25.4
|
||||||
|
|
||||||
|
prosemirror-view@1.41.4:
|
||||||
|
dependencies:
|
||||||
|
prosemirror-model: 1.25.4
|
||||||
|
prosemirror-state: 1.4.4
|
||||||
|
prosemirror-transform: 1.10.5
|
||||||
|
|
||||||
proxy-from-env@1.1.0: {}
|
proxy-from-env@1.1.0: {}
|
||||||
|
|
||||||
|
punycode.js@2.3.1: {}
|
||||||
|
|
||||||
punycode@2.3.1: {}
|
punycode@2.3.1: {}
|
||||||
|
|
||||||
query-string@4.3.4:
|
query-string@4.3.4:
|
||||||
@ -4737,6 +5341,8 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents: 2.3.3
|
fsevents: 2.3.3
|
||||||
|
|
||||||
|
rope-sequence@1.3.4: {}
|
||||||
|
|
||||||
run-parallel@1.2.0:
|
run-parallel@1.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
queue-microtask: 1.2.3
|
queue-microtask: 1.2.3
|
||||||
@ -4984,6 +5590,10 @@ snapshots:
|
|||||||
|
|
||||||
text-table@0.2.0: {}
|
text-table@0.2.0: {}
|
||||||
|
|
||||||
|
tippy.js@6.3.7:
|
||||||
|
dependencies:
|
||||||
|
'@popperjs/core': 2.11.8
|
||||||
|
|
||||||
to-fast-properties@2.0.0: {}
|
to-fast-properties@2.0.0: {}
|
||||||
|
|
||||||
to-object-path@0.3.0:
|
to-object-path@0.3.0:
|
||||||
@ -5071,6 +5681,8 @@ snapshots:
|
|||||||
|
|
||||||
typescript@5.5.4: {}
|
typescript@5.5.4: {}
|
||||||
|
|
||||||
|
uc.micro@2.1.0: {}
|
||||||
|
|
||||||
ufo@1.5.4: {}
|
ufo@1.5.4: {}
|
||||||
|
|
||||||
unbox-primitive@1.0.2:
|
unbox-primitive@1.0.2:
|
||||||
@ -5326,6 +5938,8 @@ snapshots:
|
|||||||
vooks: 0.2.12(vue@3.4.34(typescript@5.5.4))
|
vooks: 0.2.12(vue@3.4.34(typescript@5.5.4))
|
||||||
vue: 3.4.34(typescript@5.5.4)
|
vue: 3.4.34(typescript@5.5.4)
|
||||||
|
|
||||||
|
w3c-keyname@2.2.8: {}
|
||||||
|
|
||||||
webpack-sources@3.2.3: {}
|
webpack-sources@3.2.3: {}
|
||||||
|
|
||||||
webpack-virtual-modules@0.6.2: {}
|
webpack-virtual-modules@0.6.2: {}
|
||||||
|
|||||||
BIN
web/public/report_template.pdf
Normal file
486
web/public/report_template/report_template.html
Normal file
@ -0,0 +1,486 @@
|
|||||||
|
<!DOCTYPE html><!--[if IE]> <html class="stl_ie"> <![endif]-->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>
|
||||||
|
</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="./report_template/style.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_03.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_03.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.82em;top:35.0565em;"><span class="stl_07 stl_08 stl_09" style="font-weight:bold;word-spacing:0.249em;">${asset_name}非遗 IP 知识产权价值评估报告 </span></div>
|
||||||
|
<div class="stl_01" style="left:13.3em;top:45.7517em;"><span class="stl_10 stl_11 stl_12" style="font-weight:bold;">报告编号:ICH-IPVS-RPT-${yyyymmdd} </span></div>
|
||||||
|
<div class="stl_01" style="left:16.4299em;top:48.3317em;"><span class="stl_10 stl_11 stl_12" style="font-weight:bold;word-spacing:-0.0077em;">非遗 IP 名称:${asset_name} </span></div>
|
||||||
|
<div class="stl_01" style="left:14.57em;top:50.9217em;"><span class="stl_10 stl_11 stl_13" style="font-weight:bold;">受评人/单位:成都文化产权交易所 </span></div>
|
||||||
|
<div class="stl_01" style="left:14.21em;top:53.5017em;"><span class="stl_10 stl_11 stl_14" style="font-weight:bold;">评估日期:${yyyy}年${mm}月${dd}日 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_06.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_06.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.6661em;"><span class="stl_15 stl_16 stl_17" style="font-weight:bold;">一、评估总结摘要 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.6517em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">指标 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:13.6517em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">数值 </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:13.6517em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">等级 </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:18.1517em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:16.8517em;"><span class="stl_10 stl_11 stl_20" style="word-spacing:-0.0179em;">${final_value_ab} 万 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:19.4417em;"><span class="stl_10 stl_11 stl_21">元</span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:18.1517em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">系统估值 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.6517em;"><span class="stl_10 stl_11 stl_22" style="font-weight:bold;">-经济价值 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:25.8517em;"><span class="stl_10 stl_11 stl_22" style="font-weight:bold;">-文化价值 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:29.0616em;"><span class="stl_10 stl_11 stl_23" style="font-weight:bold;">-风险调整系数 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.2717em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">市场估值 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:22.6517em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:25.8517em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:29.0616em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:22.6517em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:25.8517em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:29.0616em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:32.2717em;"><span class="stl_10 stl_11 stl_20" style="word-spacing:0.0646em;">${market_price}万元 - </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:35.4817em;"><span class="stl_10 stl_11 stl_24" style="font-weight:bold;">动态质押率 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:35.4817em;"><span class="stl_10 stl_11 stl_25">${dpr}% </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:35.4817em;"><span class="stl_10 stl_11 stl_21">-</span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:38.6916em;"><span class="stl_10 stl_11 stl_26" style="word-spacing:-0.096em;">(${b1} × 0.7+${b2} × </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:41.2717em;"><span class="stl_10 stl_11 stl_27" style="word-spacing:0.8337em;">0.3) × ${b3} × </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:43.8517em;"><span class="stl_10 stl_11 stl_20">0.7+${c}×0.3 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:41.2717em;"><span class="stl_28 stl_11 stl_18" style="font-weight:bold;">最终估值 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.5526em;"><span class="stl_15 stl_16 stl_29" style="font-weight:bold;">二、受评估单位</span><span class="stl_30 stl_08 stl_31" style="font-weight:bold;">/</span><span class="stl_15 stl_16 stl_32" style="font-weight:bold;">人简介 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:54.2517em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2689em;">1. 基本情况 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:57.8838em;"><span class="stl_10 stl_11 stl_32">名称</span><span class="stl_34 stl_35 stl_36">/</span><span class="stl_10 stl_11 stl_37">姓名:${asset_name} </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">2</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_07.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_07.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.4638em;"><span class="stl_10 stl_11 stl_42">统一社会信用代码</span><span class="stl_34 stl_35 stl_36">/</span><span class="stl_10 stl_11 stl_43">身份证号:${credit_code_or_id} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.3317em;"><span class="stl_10 stl_11 stl_22" style="font-weight:bold;word-spacing:0.2548em;">2. 业务/传承介绍 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.0817em;"><span class="stl_10 stl_11 stl_44">${biz_intro} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:23.5061em;"><span class="stl_15 stl_16 stl_17" style="font-weight:bold;">三、评估数据详情 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.1717em;"><span class="stl_10 stl_11 stl_45" style="font-weight:bold;word-spacing:0.2481em;">3. 输入数据集 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:30.9217em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.0455em;">(1) 基础信息: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:33.5017em;"><span class="stl_10 stl_11 stl_47">-资产名称:${asset_name} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:36.0817em;"><span class="stl_10 stl_11 stl_37">-所属机构:${institution} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:38.6717em;"><span class="stl_10 stl_11 stl_47">-所属行业:${industry} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:43.8317em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.0612em;">(2) 财务数据: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:46.4217em;"><span class="stl_10 stl_11 stl_37" style="word-spacing:-0.0012em;">-近 3 年收益:${three_year_income}万元 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:49.0017em;"><span class="stl_10 stl_11 stl_37" style="word-spacing:-0.0012em;">-近 12 个月营收:${annual_revenue}万元 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:51.5817em;"><span class="stl_10 stl_11 stl_37">-研发投入:${rd_investment}万元 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.7517em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.069em;">(3) 非遗属性: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.3317em;"><span class="stl_10 stl_11 stl_43">-非遗等级:${heritage_level} </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">3</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_08.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_08.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_48">-传承人年龄及数量: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_37" style="word-spacing:-0.0051em;">50 岁及以下:${inheritor_age_count[0]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:14.7043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_47" style="word-spacing:-0.0066em;">50-70 岁:${inheritor_age_count[1]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.2844em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_51" style="word-spacing:-0.0062em;">70 岁以上:${inheritor_age_count[2]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.9217em;"><span class="stl_10 stl_11 stl_43">-历史证据:${historical_evidence} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.5017em;"><span class="stl_10 stl_11 stl_43">-教学传播:${offline_activities} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.6717em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.1043em;">(4) 市场表现: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:30.2517em;"><span class="stl_10 stl_11 stl_51">-社交媒体账号:${platform_accounts} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.8317em;z-index:263;"><span class="stl_10 stl_11 stl_52">-商品价格波动</span><span class="stl_10 stl_11 stl_53">:</span><span class="stl_10 stl_11 stl_44">$</span><span class="stl_10 stl_11 stl_44">{price_fluctuation[0]-price_fluctuation[1]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:35.4217em;"><span class="stl_10 stl_11 stl_21">元</span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:38.0017em;"><span class="stl_10 stl_11 stl_37">-月交易额范围:${monthly_transaction} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.5817em;"><span class="stl_10 stl_11 stl_43">-发行量级:${circulation} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:46.9217em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2101em;">4. 评估参数 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.6717em;"><span class="stl_10 stl_11 stl_54" style="word-spacing:-0.0466em;">(1) 经济价值体系: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.2517em;"><span class="stl_10 stl_11 stl_47">-基础价值:${b11}万元 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:55.7843em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_55">财务价值:${f} </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:58.3743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_56">法律强度:${l}分 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">4</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_09.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_09.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:7.25em;top:9.5343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_09">发展潜力:${d}分 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1717em;"><span class="stl_10 stl_11 stl_51">-流量因子:${b12} </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:14.7043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_57">搜索指数比:${[1.055]} </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:17.2844em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_09">社交媒体传播度:${s3} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.9217em;"><span class="stl_10 stl_11 stl_51">-政策乘数:${b13}(契合度${score}分) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:25.0817em;"><span class="stl_10 stl_11 stl_54" style="word-spacing:-0.0623em;">(2) 文化价值体系: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.6717em;"><span class="stl_10 stl_11 stl_46">-活态传承系数:${b21} </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:30.2043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_58">传承人等级:${[1.0]}(国家级) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:32.7843em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_57">教学频次:${[7.28]}(线下${[12]}次) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:35.3743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_54">跨界合作:${[0.3]}(品牌联名) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:38.0017em;"><span class="stl_10 stl_11 stl_46">-纹样基因熵值:${b22}分 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:40.5343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_57">结构复杂度:${sc}(轮廓${[8]}个) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:43.1243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_46">信息熵:${h}分 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:45.7043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_59">历史传承度:${hi} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.9217em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.069em;">(3) 风险体系: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.5017em;"><span class="stl_10 stl_11 stl_57">-市场风险:${[8]}分(波动率${[18%]}) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.0817em;"><span class="stl_10 stl_11 stl_60">-法律风险:${[10]}分(无侵权) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:58.6717em;"><span class="stl_10 stl_11 stl_58">-传承风险:${[6]}分(高龄传承人占比) </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">5</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_10.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_10.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1717em;"><span class="stl_10 stl_11 stl_09" style="word-spacing:-0.1054em;">(4) 市场验证体系: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:14.7517em;"><span class="stl_10 stl_11 stl_51">-市场竞价:${c1}万元 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.3317em;"><span class="stl_10 stl_11 stl_58">-热度系数:${c2}(浏览热度${[中]}) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.9217em;"><span class="stl_10 stl_11 stl_51">-稀缺乘数:${c3}(发行量${[2000]}份) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.5017em;"><span class="stl_10 stl_11 stl_37">-时效衰减:${c4}(近一月${[0.7]}) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:28.8317em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.265em;">5. 评估结果 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.5817em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.0455em;">(1) 经济价值: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:35.1717em;"><span class="stl_10 stl_11 stl_37">-基础价值:${[2200]}万元-${[极强]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.7517em;"><span class="stl_10 stl_11 stl_51">-流量因子:${[0.8]}-${[优秀]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.3317em;"><span class="stl_10 stl_11 stl_59">-政策系数:${[‘数值’]}-${[‘等级’]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:45.5017em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.0612em;">(2) 文化价值: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:48.0817em;"><span class="stl_10 stl_11 stl_59">-传承系数:${[‘数值’]}-${[‘等级’]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.6717em;"><span class="stl_10 stl_11 stl_59">-纹样熵值:${[‘数值’]}-${[‘等级’]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:55.8317em;"><span class="stl_10 stl_11 stl_58" style="word-spacing:-0.0695em;">(3) 风险指数:${[‘数值’]}-${[‘等级’]} </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">6</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_11.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_11.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_59" style="word-spacing:-0.1049em;">(4) 市场估值:${[]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:14.7517em;"><span class="stl_10 stl_11 stl_60" style="word-spacing:-0.0497em;">(5) 动态质押率:${[]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:21.1661em;"><span class="stl_15 stl_16 stl_61" style="font-weight:bold;">四、评估依据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:24.8317em;"><span class="stl_10 stl_11 stl_62" style="font-weight:bold;word-spacing:0.271em;">1. 法律法规依据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:28.5343em;z-index:115;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63">《中华人民共和国非物质文化遗产法</span><span class="stl_10 stl_11 stl_64">》</span><span class="stl_10 stl_11 stl_19">(</span><span class="stl_10 stl_11 stl_65" style="word-spacing:0.0002em;">2011 年 2 月 25 日第 </span></div>
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:31.1717em;"><span class="stl_10 stl_11 stl_52">十一届全国人民代表大会常务委员会第十九次会议通过) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:33.7043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_66" style="word-spacing:-0.0083em;">《中华人民共和国著作权法》(2020 年 11 月 11 日第十三届 </span></div>
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:36.3317em;"><span class="stl_10 stl_11 stl_63">全国人民代表大会常务委员会第二十三次会议修订) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:38.8743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_67" style="word-spacing:-0.0063em;">《中华人民共和国资产评估法》(2016 年 7 月 2 日第十二届 </span></div>
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:41.5017em;"><span class="stl_10 stl_11 stl_63">全国人民代表大会常务委员会第二十一次会议通过) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:45.2517em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2532em;">2. 准则依据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:49.0017em;"><span class="stl_10 stl_11 stl_09" style="word-spacing:-0.0066em;">《非遗 IP 知识产权价值评估规范》(T/CDAS</span><span class="stl_10 stl_11 stl_21" style="word-spacing:0.2038em;"> </span><span class="stl_10 stl_11 stl_26">XXX-2025) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:51.5817em;"><span class="stl_10 stl_11 stl_63">中国资产评估协会《知识产权资产评估指南》(中评协〔2017〕 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:54.1717em;"><span class="stl_10 stl_11 stl_26" style="word-spacing:-0.0004em;">44 号) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.7517em;z-index:353;"><span class="stl_10 stl_11 stl_09">中国资产评估协</span><span class="stl_10 stl_11 stl_68">会</span><span class="stl_10 stl_11 stl_19">《</span><span class="stl_10 stl_11 stl_55">资产评估执业准则——无形资产</span><span class="stl_10 stl_11 stl_69">》</span><span class="stl_10 stl_11 stl_19">(</span><span class="stl_10 stl_11 stl_32">中评协 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.3317em;"><span class="stl_10 stl_11 stl_47" style="word-spacing:-0.0027em;">〔2017〕37 号) </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">7</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_12.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_12.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_27" style="word-spacing:0.1933em;">ISO/TC 307 Blockchain and distributed ledger technologies</span><span class="stl_10 stl_11 stl_21" style="word-spacing:0.0049em;"> </span><span class="stl_10 stl_11 stl_27" style="word-spacing:0.1933em;">国 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1717em;"><span class="stl_10 stl_11 stl_32">际标准 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:15.9217em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2454em;">3. 权属依据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.6717em;"><span class="stl_10 stl_11 stl_70">传承人认定证书及授权文件 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.2517em;"><span class="stl_10 stl_11 stl_52">非遗项目登记证书及认定文件 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:24.8317em;"><span class="stl_10 stl_11 stl_52">非遗资产所用专利证书 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:28.5817em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2101em;">4. 取价依据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.2843em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_70">近三年财务报表及审计报告 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:34.8743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_56">市场交易数据及可比案例 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.4543em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_56">行业统计数据及研究报告 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.0343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">政策文件及专项资金支持证明 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:42.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">社交媒体平台数据统计 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:45.2043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.0043em;">专业数据库及 API 接口数据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:49.0861em;"><span class="stl_15 stl_16 stl_61" style="font-weight:bold;">五、评估方法 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:52.7517em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2689em;">1. 方法选择 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.5017em;"><span class="stl_10 stl_11 stl_63">本次评估采用双轨定价评估模型,具体包括: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.0343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_71">基础评估模型:基于经济价值、文化价值与风险调整系数的 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">8</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_13.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_13.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:9.5817em;"><span class="stl_10 stl_11 stl_52">算法模型 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">市场竞价评估模型:基于市场交易数据的验证模型 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:15.9217em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2532em;">2. 具体方法 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_20" style="word-spacing:0.0007em;">收益法应用:采用多期超额收益法,预测非遗 IP 未来收益能 </span></div>
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:22.2517em;"><span class="stl_10 stl_11 stl_21">力</span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:24.7844em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_72">市场法调整:通过可比案例进行市场验证和校准 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.3743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63">成本法参考:考虑非遗项目的保护和发展成本 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:31.1717em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2454em;">3. 技术路线 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:34.9217em;"><span class="stl_10 stl_11 stl_54">最终估值=(基础模型估值×0.7+市场估值×0.3)×风险调整系数 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.5017em;"><span class="stl_10 stl_11 stl_52">其中基础模型估值按下列公式计算: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.0817em;"><span class="stl_10 stl_11 stl_54">基础模型估值=(经济价值×0.7+文化价值×0.3) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:43.9161em;"><span class="stl_15 stl_16 stl_73" style="font-weight:bold;">六、评估程序实施过程 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:47.5817em;"><span class="stl_10 stl_11 stl_13" style="font-weight:bold;word-spacing:0.2706em;">1. 评估准备阶段(1-2</span><span class="stl_10 stl_11 stl_21" style="font-weight:bold;word-spacing:-0.0007em;"> </span><span class="stl_10 stl_11 stl_24" style="font-weight:bold;">个工作日) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:51.3317em;"><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.0474em;">(1) 与用户确认评估目的、基准日、范围等基本事项 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.9217em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.0629em;">(2) 收集并验证评估所需的基础资料和权属证明 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.5017em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:-0.0705em;">(3) 制定评估工作计划和实施方案 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">9</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_14.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_14.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_74" style="font-weight:bold;word-spacing:0.2556em;">2. 评估数据采集阶段(2-3</span><span class="stl_10 stl_11 stl_21" style="font-weight:bold;word-spacing:0.0063em;"> </span><span class="stl_10 stl_11 stl_24" style="font-weight:bold;">个工作日) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.3317em;"><span class="stl_10 stl_11 stl_52" style="word-spacing:-0.0475em;">(1) 财务数据采集:通过用户填写数据获取近三年财务数据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:15.9217em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.0628em;">(2) 市场数据采集:从文化产权交易所、拍卖平台获取交易数据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:18.5017em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:-0.0705em;">(3) 网络数据采集:采集社交媒体传播数据、搜索指数等 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:21.0817em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.106em;">(4) 文化数据采集:收集传承人信息、教学传播记录等 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:24.8317em;"><span class="stl_10 stl_11 stl_75" style="font-weight:bold;word-spacing:0.2466em;">3. 数据分析阶段(1</span><span class="stl_10 stl_11 stl_21" style="font-weight:bold;word-spacing:-0.0076em;"> </span><span class="stl_10 stl_11 stl_24" style="font-weight:bold;">个工作日) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:28.5817em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:-0.0469em;">(1) 数据清洗和标准化处理 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:31.1717em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:-0.0627em;">(2) 运用评估模型进行计算和分析 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:33.7517em;"><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.0709em;">(3) 进行敏感性分析和误差检验 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.5017em;"><span class="stl_10 stl_11 stl_75" style="font-weight:bold;word-spacing:0.2113em;">4. 报告编制阶段(7</span><span class="stl_10 stl_11 stl_21" style="font-weight:bold;word-spacing:-0.0048em;"> </span><span class="stl_10 stl_11 stl_24" style="font-weight:bold;">个工作日) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:41.2517em;"><span class="stl_10 stl_11 stl_59" style="word-spacing:-0.0462em;">(1) 编制初步评估报告 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:43.8317em;"><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.063em;">(2) 内部审核和质量控制 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:46.4217em;"><span class="stl_10 stl_11 stl_54" style="word-spacing:-0.07em;">(3) 与用户沟通确认最终报告 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.2561em;"><span class="stl_15 stl_16 stl_61" style="font-weight:bold;">七、评估假设 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.9217em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2689em;">1. 基本假设 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:57.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.0033em;">持续使用假设:假设非遗 IP 按现有模式持续使用和发展 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">10 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_15.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_15.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63">公开市场假设:假设在公开市场条件下进行公平交易 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_71">宏观环境稳定假设:假设国家相关政策和经济环境无重大变 </span></div>
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:14.7517em;"><span class="stl_10 stl_11 stl_21">化</span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:18.5017em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2532em;">2. 特殊假设 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.2043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_70">假设所提供的所有资料真实、合法、完整 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:24.7844em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">假设非遗项目传承和发展符合相关政策要求 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.3743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_56">假设市场供需关系保持相对稳定 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:29.9543em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">假设无重大不可抗力因素影响 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:33.7517em;"><span class="stl_10 stl_11 stl_45" style="font-weight:bold;word-spacing:0.2481em;">3. 限制性假设 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.4543em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_70">评估结果基于评估基准日的市场条件得出 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.0343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_70">评估价值不代表未来实际交易价格 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:42.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">评估机构不承担资产权属的法律责任 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:46.4726em;"><span class="stl_76 stl_16 stl_32" style="font-weight:bold;">八、</span><span class="stl_15 stl_16 stl_61" style="font-weight:bold;">评估解析与金融化建议</span><span class="stl_76 stl_16 stl_19" style="font-weight:bold;">(</span><span class="stl_77 stl_08 stl_72" style="font-weight:bold;word-spacing:0.0044em;">AI </span><span class="stl_76 stl_16 stl_32" style="font-weight:bold;">协助生成) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.1717em;"><span class="stl_10 stl_11 stl_75" style="font-weight:bold;word-spacing:0.2701em;">1. 价值驱动因素分析 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.9217em;"><span class="stl_10 stl_11 stl_48">-核心优势: </span></div>
|
||||||
|
<div class="stl_01" style="left:7.71em;top:56.5017em;"><span class="stl_10 stl_11 stl_78" style="word-spacing:0.0095em;">[例:政策乘数 1.8(极强)]:受益于国家级文化数字化战略, </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.0817em;"><span class="stl_10 stl_11 stl_70" style="word-spacing:-0.006em;">符合《国家文化数字化战略清单》第 X 条,建议申请专项补助。 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">11 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_16.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_16.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:7.71em;top:9.5817em;"><span class="stl_10 stl_11 stl_79" style="word-spacing:-0.0107em;">[例:活态传承系数 0.92(极强)]:国家级传承人主导+年度 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1717em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.0047em;">线下活动 24 次,形成可持续传承生态,可纳入 ESG 投资标的。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.3317em;"><span class="stl_10 stl_11 stl_48">-关键短板: </span></div>
|
||||||
|
<div class="stl_01" style="left:7.71em;top:19.9217em;"><span class="stl_10 stl_11 stl_80" style="word-spacing:0.0125em;">[例:流量因子-0.3(低)]:社交媒体转化率仅 0.1%(行业均 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.5017em;"><span class="stl_10 stl_11 stl_48" style="word-spacing:-0.0027em;">值 5%),需优化抖音/B 站内容运营策略。 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.71em;top:25.0817em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.0035em;">[例:传承风险评分 2 分(低)]:70 岁以上传承人占比 60%, </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.6717em;"><span class="stl_10 stl_11 stl_56">建议建立紧急数字化存证机制。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:34.0017em;"><span class="stl_10 stl_11 stl_75" style="font-weight:bold;word-spacing:0.2545em;">2. 金融机构风控建议 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.7517em;"><span class="stl_10 stl_11 stl_63">-质押融资方案: </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:40.2843em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_54">建议质押额度:[最终估值×DPR]万元(当前质押率[DPR]%) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:42.8743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_81">流动性增强建议:[接入阿里拍卖平台提升交易频次(月交 </span></div>
|
||||||
|
<div class="stl_01" style="left:9em;top:45.5017em;"><span class="stl_10 stl_11 stl_59" style="word-spacing:-0.0013em;">易额>500 万可提升质押率+15%)] </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:48.0817em;"><span class="stl_10 stl_11 stl_63">-风险对冲工具: </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:50.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_55">市场风险:购买搜索指数保险(覆盖单日下跌>40%的损失) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:53.2043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63" style="word-spacing:0.0007em;">法律风险:追加区块链存证(可提升法律强度分+2 分) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.5817em;"><span class="stl_10 stl_11 stl_62" style="font-weight:bold;word-spacing:0.2475em;">3. 价值提升路径 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">12 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_17.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_17.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:-0.0035em;">-短期(3-6 个月): </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:12.1243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_82">申请省级非遗资助(政策乘数+0.03,估值提升约[测算值] </span></div>
|
||||||
|
<div class="stl_01" style="left:9em;top:14.7517em;"><span class="stl_10 stl_11 stl_32">万元) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:17.2844em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_83" style="word-spacing:-0.0111em;">开发 NFT 数字藏品(稀缺性乘数可升至 1.0,需投入[成本] </span></div>
|
||||||
|
<div class="stl_01" style="left:9em;top:19.9217em;"><span class="stl_10 stl_11 stl_32">万元) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.5017em;"><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.0074em;">-长期(1-2 年): </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:25.0344em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_72" style="word-spacing:-0.0103em;">培育市级传承人(教学频次需>20 次/年) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:27.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_59" style="word-spacing:-0.0012em;">参与 ISO/TC307 国际标准认证(提升跨境质押接受度) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:34.0861em;"><span class="stl_15 stl_16 stl_61" style="font-weight:bold;">九、评估总结 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.7517em;"><span class="stl_10 stl_11 stl_48">本报告通</span><span class="stl_10 stl_11 stl_84">过</span><span class="stl_10 stl_11 stl_85">“</span><span class="stl_10 stl_11 stl_86">数值可验证、风险可量化、价值可转化”的三重体 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.3317em;"><span class="stl_10 stl_11 stl_87" style="word-spacing:-0.0115em;">系,全面评估了该非遗 IP 的价值。其核心优势在于高文化稀缺 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:42.9217em;"><span class="stl_10 stl_11 stl_72">性与稳健的经济成长性,主要风险在于传承断层与转化效率。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:49.3361em;"><span class="stl_15 stl_16 stl_17" style="font-weight:bold;">十、特别事项说明 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.0017em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2689em;">1. 权属事项 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.7517em;"><span class="stl_10 stl_11 stl_52">本报告对评估对象的权属资料进行了必要的查验; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.3317em;"><span class="stl_10 stl_11 stl_70">权属资料的真实性、合法性由资产持有方负责; </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">13 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_18.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_18.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_70">如发生权属纠纷,评估价值需重新评定。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.3317em;"><span class="stl_10 stl_11 stl_62" style="font-weight:bold;word-spacing:0.2553em;">2. 重大期后事项 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.0817em;"><span class="stl_10 stl_11 stl_63">评估基准日后至报告出具日期间无重大事项影响评估结果; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.6717em;"><span class="stl_10 stl_11 stl_63">如发生重大期后事项,需对评估结果进行相应调整。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:23.4217em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2454em;">3. 使用限制 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.1717em;"><span class="stl_10 stl_11 stl_52">本报告仅用于评估目的载明的用途; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:29.7517em;"><span class="stl_10 stl_11 stl_52">未征得评估机构同意,不得用于其他目的; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.3317em;"><span class="stl_10 stl_11 stl_70">报告内容不得被摘抄、引用或披露于公开媒体。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:36.0817em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2101em;">4. 其他事项 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:39.8317em;"><span class="stl_10 stl_11 stl_63">评估结果受所采用数据和参数的影响; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:42.4217em;"><span class="stl_10 stl_11 stl_70">互联网数据存在一定的时效性和波动性; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:45.0017em;"><span class="stl_10 stl_11 stl_52">文化价值的量化存在一定的主观判断因素。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:48.8361em;"><span class="stl_15 stl_16 stl_88" style="font-weight:bold;">十一、评估报告使用限制说明 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:52.5017em;"><span class="stl_10 stl_11 stl_62" style="font-weight:bold;word-spacing:0.271em;">1. 使用范围限制 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.2517em;"><span class="stl_10 stl_11 stl_52">本报告仅供注册用户在本评估系统内使用; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:58.8317em;"><span class="stl_10 stl_11 stl_63">不得将报告用于法律诉讼、仲裁等司法程序; </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">14 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_19.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_19.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_63">不得将报告作为资产价值的唯一依据。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.3317em;"><span class="stl_10 stl_11 stl_45" style="font-weight:bold;word-spacing:0.256em;">2. 时效性限制 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.0817em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.0031em;">评估结果有效期为自评估基准日起 12 个月; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.6717em;"><span class="stl_10 stl_11 stl_52">超过有效期需重新进行评估; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.2517em;"><span class="stl_10 stl_11 stl_70">如市场环境发生重大变化,评估结果可能失效。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:26.0017em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2454em;">3. 责任限制 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:29.7517em;z-index:157;"><span class="stl_10 stl_11 stl_52">评估机构对评估结果的合理性负责</span><span class="stl_10 stl_11 stl_89">,</span><span class="stl_10 stl_11 stl_19">但</span><span class="stl_10 stl_11 stl_61">不保证资产的实际交易价 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.3317em;"><span class="stl_10 stl_11 stl_25">格; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:34.9217em;"><span class="stl_10 stl_11 stl_63">用户应对评估结果的适用性自行判断; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.5017em;"><span class="stl_10 stl_11 stl_70">因使用不当造成的损失,评估机构不承担责任。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:41.3361em;"><span class="stl_15 stl_16 stl_17" style="font-weight:bold;">十二、评估报告日 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:45.0017em;"><span class="stl_10 stl_11 stl_58">本评估报告日为:[报告出具日期]${yyyy-mm-dd} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:48.8361em;"><span class="stl_15 stl_16 stl_90" style="font-weight:bold;">十三、评估机构信息 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:52.5017em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:0.0008em;">评估机构:成都文化产权交易所-非遗 IP 价值评估系统 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:55.0817em;"><span class="stl_10 stl_11 stl_61">联系邮箱:</span><a href="mailto:value@cdcee.net" target="_blank"><span class="stl_91 stl_11 stl_44">value@cdcee.net </span></a></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:57.6717em;"><span class="stl_10 stl_11 stl_60">联系电话:028-87360126 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">15 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
<div style="position:absolute;left:0.0167em;top:24.5625em;width:49.6083em;height:45.5208em;">
|
||||||
|
<a href="mailto:value@cdcee.net" target="_blank">
|
||||||
|
<img src="./report_template/img_20.png" class="stl_grlink" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_21.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_21.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_61">系统网址:</span><a href="https://value.cdcee.net/login" target="_blank"><span class="stl_91 stl_11 stl_65">https://value.cdcee.net/login </span></a></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.3317em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">附件 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.0817em;"><span class="stl_10 stl_11 stl_56">【非遗传承人等级证书】 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.6717em;"><span class="stl_10 stl_11 stl_70">【非遗资产所用专利-证书】 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.2517em;"><span class="stl_10 stl_11 stl_09">【非遗纹样图片】 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">16 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
BIN
web/public/report_template/report_template/img_01.png
Normal file
|
After Width: | Height: | Size: 479 KiB |
BIN
web/public/report_template/report_template/img_02.png
Normal file
|
After Width: | Height: | Size: 207 KiB |
1
web/public/report_template/report_template/img_03.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_1" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 557.58L595.32 557.58L595.32 557.58L595.32 841.02L595.32 841.02L0 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400085 0 557.55)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_01.png" width="2480" height="1181" /></g></g></g></g><g clip-path="url(#4)"><g transform="matrix(0.2425828 0 0 0.2426866 150.6 89.33997)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_02.png" width="1208" height="670" /></g></g></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
BIN
web/public/report_template/report_template/img_04.png
Normal file
|
After Width: | Height: | Size: 390 KiB |
BIN
web/public/report_template/report_template/img_05.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
1
web/public/report_template/report_template/img_06.svg
Normal file
|
After Width: | Height: | Size: 12 KiB |
1
web/public/report_template/report_template/img_07.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_3" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
web/public/report_template/report_template/img_08.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_4" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
web/public/report_template/report_template/img_09.svg
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
1
web/public/report_template/report_template/img_10.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_6" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
web/public/report_template/report_template/img_11.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_7" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
web/public/report_template/report_template/img_12.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_8" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
web/public/report_template/report_template/img_13.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_9" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
web/public/report_template/report_template/img_14.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_10" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
web/public/report_template/report_template/img_15.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_11" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
web/public/report_template/report_template/img_16.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_12" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
web/public/report_template/report_template/img_17.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_13" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
web/public/report_template/report_template/img_18.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_14" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
1
web/public/report_template/report_template/img_19.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_15" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"><path id="300" transform="matrix(1 0 0 -1 0 841)" d="M156.6 163.3L270.8 163.3" stroke="#0000FF" stroke-width="0.72" fill="none" /></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
BIN
web/public/report_template/report_template/img_20.png
Normal file
|
After Width: | Height: | Size: 120 B |
1
web/public/report_template/report_template/img_21.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_16" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"><path id="91" transform="matrix(1 0 0 -1 0 841)" d="M156.6 709.3L356.25 709.3" stroke="#0000FF" stroke-width="0.72" fill="none" /></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
625
web/public/report_template/report_template/style.css
Normal file
@ -0,0 +1,625 @@
|
|||||||
|
.stl_ sup {
|
||||||
|
vertical-align: baseline;
|
||||||
|
position: relative;
|
||||||
|
top: -0.4em;
|
||||||
|
}
|
||||||
|
.stl_ sub {
|
||||||
|
vertical-align: baseline;
|
||||||
|
position: relative;
|
||||||
|
top: 0.4em;
|
||||||
|
}
|
||||||
|
.stl_ a:link {text-decoration:none;}
|
||||||
|
.stl_ a:visited {text-decoration:none;}
|
||||||
|
@media screen and (min-device-pixel-ratio:0), (-webkit-min-device-pixel-ratio:0), (min--moz-device-pixel-ratio: 0) {.stl_view{ font-size:10em; transform:scale(0.1); -moz-transform:scale(0.1); -webkit-transform:scale(0.1); -moz-transform-origin:top left; -webkit-transform-origin:top left; } }
|
||||||
|
.stl_layer { }.stl_ie { font-size: 1pt; }
|
||||||
|
.stl_ie body { font-size: 12em; }
|
||||||
|
@media print{.stl_view {font-size:1em; transform:scale(1);}}
|
||||||
|
.stl_grlink { position:relative;width:100%;height:100%;z-index:1000000; }
|
||||||
|
.stl_01 {
|
||||||
|
position: absolute;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.stl_02 {
|
||||||
|
font-size: 1em;
|
||||||
|
line-height: 0.0em;
|
||||||
|
width: 49.58333em;
|
||||||
|
height: 70.08334em;
|
||||||
|
border-style: none;
|
||||||
|
display: block;
|
||||||
|
margin: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
@supports(-ms-ime-align:auto) { .stl_02 {overflow: hidden;}}
|
||||||
|
.stl_03 {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.stl_04 {
|
||||||
|
position: absolute;
|
||||||
|
left: 0em;
|
||||||
|
top: 0em;
|
||||||
|
}
|
||||||
|
.stl_05 {
|
||||||
|
position: relative;
|
||||||
|
width: 49.58333em;
|
||||||
|
}
|
||||||
|
.stl_06 {
|
||||||
|
height: 7.008333em;
|
||||||
|
}
|
||||||
|
.stl_ie .stl_06 {
|
||||||
|
height: 70.08334em;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family:"CHGBEF+HYShuSongErKW";
|
||||||
|
src:url("d5865871-0000-0000-0000-000000000000.woff") format("woff");
|
||||||
|
}
|
||||||
|
.stl_07 {
|
||||||
|
font-size: 1.829167em;
|
||||||
|
font-family: "CHGBEF+HYShuSongErKW", "Times New Roman";
|
||||||
|
color: #3F3F3F;
|
||||||
|
}
|
||||||
|
.stl_08 {
|
||||||
|
line-height: 1em;
|
||||||
|
}
|
||||||
|
.stl_09 {
|
||||||
|
letter-spacing: 0.0027em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_09 {
|
||||||
|
letter-spacing: 0.0791px;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family:"MWFHCV+FZFangSong-Z02";
|
||||||
|
src:url("87578bda-0000-0000-0000-000000000000.woff") format("woff");
|
||||||
|
}
|
||||||
|
.stl_10 {
|
||||||
|
font-size: 1.329167em;
|
||||||
|
font-family: "MWFHCV+FZFangSong-Z02", "Times New Roman";
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.stl_11 {
|
||||||
|
line-height: 1.113281em;
|
||||||
|
}
|
||||||
|
.stl_12 {
|
||||||
|
letter-spacing: 0.006em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_12 {
|
||||||
|
letter-spacing: 0.1275px;
|
||||||
|
}
|
||||||
|
.stl_13 {
|
||||||
|
letter-spacing: 0.0066em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_13 {
|
||||||
|
letter-spacing: 0.1412px;
|
||||||
|
}
|
||||||
|
.stl_14 {
|
||||||
|
letter-spacing: 0.0057em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_14 {
|
||||||
|
letter-spacing: 0.1217px;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family:"OSPLUE+HYKaiTiJ";
|
||||||
|
src:url("2844c8d7-0000-0000-0000-000000000000.woff") format("woff");
|
||||||
|
}
|
||||||
|
.stl_15 {
|
||||||
|
font-size: 1.329167em;
|
||||||
|
font-family: "OSPLUE+HYKaiTiJ", "Times New Roman";
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.stl_16 {
|
||||||
|
line-height: 0.999023em;
|
||||||
|
}
|
||||||
|
.stl_17 {
|
||||||
|
letter-spacing: 0.0038em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_17 {
|
||||||
|
letter-spacing: 0.0816px;
|
||||||
|
}
|
||||||
|
.stl_18 {
|
||||||
|
letter-spacing: 0.0081em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_18 {
|
||||||
|
letter-spacing: 0.1729px;
|
||||||
|
}
|
||||||
|
.stl_19 {
|
||||||
|
letter-spacing: 0.0006em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_19 {
|
||||||
|
letter-spacing: 0.0125px;
|
||||||
|
}
|
||||||
|
.stl_20 {
|
||||||
|
letter-spacing: 0.001em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_20 {
|
||||||
|
letter-spacing: 0.0204px;
|
||||||
|
}
|
||||||
|
.stl_21 {
|
||||||
|
letter-spacing: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_21 {
|
||||||
|
letter-spacing: 0px;
|
||||||
|
}
|
||||||
|
.stl_22 {
|
||||||
|
letter-spacing: 0.0067em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_22 {
|
||||||
|
letter-spacing: 0.1433px;
|
||||||
|
}
|
||||||
|
.stl_23 {
|
||||||
|
letter-spacing: 0.0059em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_23 {
|
||||||
|
letter-spacing: 0.1264px;
|
||||||
|
}
|
||||||
|
.stl_24 {
|
||||||
|
letter-spacing: 0.0062em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_24 {
|
||||||
|
letter-spacing: 0.1328px;
|
||||||
|
}
|
||||||
|
.stl_25 {
|
||||||
|
letter-spacing: 0.0007em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_25 {
|
||||||
|
letter-spacing: 0.0153px;
|
||||||
|
}
|
||||||
|
.stl_26 {
|
||||||
|
letter-spacing: 0.0011em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_26 {
|
||||||
|
letter-spacing: 0.0242px;
|
||||||
|
}
|
||||||
|
.stl_27 {
|
||||||
|
letter-spacing: 0.0014em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_27 {
|
||||||
|
letter-spacing: 0.0297px;
|
||||||
|
}
|
||||||
|
.stl_28 {
|
||||||
|
font-size: 1.329167em;
|
||||||
|
font-family: "MWFHCV+FZFangSong-Z02", "Times New Roman";
|
||||||
|
color: #FF0000;
|
||||||
|
}
|
||||||
|
.stl_29 {
|
||||||
|
letter-spacing: 0.0039em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_29 {
|
||||||
|
letter-spacing: 0.0821px;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family:"AMHITD+HYZhongHeiKW";
|
||||||
|
src:url("1e3517ae-0000-0000-0000-000000000000.woff") format("woff");
|
||||||
|
}
|
||||||
|
.stl_30 {
|
||||||
|
font-size: 1.329167em;
|
||||||
|
font-family: "AMHITD+HYZhongHeiKW", "Times New Roman";
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.stl_31 {
|
||||||
|
letter-spacing: -0.004em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_31 {
|
||||||
|
letter-spacing: -0.0847px;
|
||||||
|
}
|
||||||
|
.stl_32 {
|
||||||
|
letter-spacing: 0.0044em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_32 {
|
||||||
|
letter-spacing: 0.0927px;
|
||||||
|
}
|
||||||
|
.stl_33 {
|
||||||
|
letter-spacing: 0.0075em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_33 {
|
||||||
|
letter-spacing: 0.1585px;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family:"BVCSSD+Helvetica Neue";
|
||||||
|
src:url("4878cb88-0000-0000-0000-000000000000.woff") format("woff");
|
||||||
|
}
|
||||||
|
.stl_34 {
|
||||||
|
font-size: 1.329167em;
|
||||||
|
font-family: "BVCSSD+Helvetica Neue", "Times New Roman";
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.stl_35 {
|
||||||
|
line-height: 1.165em;
|
||||||
|
}
|
||||||
|
.stl_36 {
|
||||||
|
letter-spacing: -0.002em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_36 {
|
||||||
|
letter-spacing: -0.0418px;
|
||||||
|
}
|
||||||
|
.stl_37 {
|
||||||
|
letter-spacing: 0.0018em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_37 {
|
||||||
|
letter-spacing: 0.039px;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family:"NRCLEP+Times New Roman Bold Italic";
|
||||||
|
src:url("047adafb-0003-0000-0000-000000000000.woff") format("woff");
|
||||||
|
}
|
||||||
|
.stl_38 {
|
||||||
|
font-size: 0.870833em;
|
||||||
|
font-family: "NRCLEP+Times New Roman Bold Italic", "Times New Roman";
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
.stl_39 {
|
||||||
|
line-height: 1.107422em;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family:"OIVIRS+FZDaBiaoSong-B06S";
|
||||||
|
src:url("e3918027-0000-0000-0000-000000000000.woff") format("woff");
|
||||||
|
}
|
||||||
|
.stl_40 {
|
||||||
|
font-size: 1em;
|
||||||
|
font-family: "OIVIRS+FZDaBiaoSong-B06S", "Times New Roman";
|
||||||
|
color: #3F3F3F;
|
||||||
|
}
|
||||||
|
.stl_41 {
|
||||||
|
line-height: 1.132813em;
|
||||||
|
}
|
||||||
|
.stl_42 {
|
||||||
|
letter-spacing: 0.0035em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_42 {
|
||||||
|
letter-spacing: 0.0735px;
|
||||||
|
}
|
||||||
|
.stl_43 {
|
||||||
|
letter-spacing: 0.0016em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_43 {
|
||||||
|
letter-spacing: 0.035px;
|
||||||
|
}
|
||||||
|
.stl_44 {
|
||||||
|
letter-spacing: 0.0015em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_44 {
|
||||||
|
letter-spacing: 0.031px;
|
||||||
|
}
|
||||||
|
.stl_45 {
|
||||||
|
letter-spacing: 0.0061em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_45 {
|
||||||
|
letter-spacing: 0.1297px;
|
||||||
|
}
|
||||||
|
.stl_46 {
|
||||||
|
letter-spacing: 0.0021em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_46 {
|
||||||
|
letter-spacing: 0.0439px;
|
||||||
|
}
|
||||||
|
.stl_47 {
|
||||||
|
letter-spacing: 0.0017em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_47 {
|
||||||
|
letter-spacing: 0.037px;
|
||||||
|
}
|
||||||
|
.stl_48 {
|
||||||
|
letter-spacing: 0.0025em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_48 {
|
||||||
|
letter-spacing: 0.0534px;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family:"ROIQLU+Wingdings";
|
||||||
|
src:url("40bfa84e-0000-0000-0000-000000000000.woff") format("woff");
|
||||||
|
}
|
||||||
|
.stl_49 {
|
||||||
|
font-size: 1.329167em;
|
||||||
|
font-family: "ROIQLU+Wingdings", "Times New Roman";
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.stl_50 {
|
||||||
|
line-height: 1.109863em;
|
||||||
|
}
|
||||||
|
.stl_51 {
|
||||||
|
letter-spacing: 0.0019em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_51 {
|
||||||
|
letter-spacing: 0.0402px;
|
||||||
|
}
|
||||||
|
.stl_52 {
|
||||||
|
letter-spacing: 0.0031em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_52 {
|
||||||
|
letter-spacing: 0.0649px;
|
||||||
|
}
|
||||||
|
.stl_53 {
|
||||||
|
letter-spacing: -0.3755em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_53 {
|
||||||
|
letter-spacing: -7.9867px;
|
||||||
|
}
|
||||||
|
.stl_54 {
|
||||||
|
letter-spacing: 0.0026em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_54 {
|
||||||
|
letter-spacing: 0.0561px;
|
||||||
|
}
|
||||||
|
.stl_55 {
|
||||||
|
letter-spacing: 0.0028em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_55 {
|
||||||
|
letter-spacing: 0.0589px;
|
||||||
|
}
|
||||||
|
.stl_56 {
|
||||||
|
letter-spacing: 0.0029em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_56 {
|
||||||
|
letter-spacing: 0.0613px;
|
||||||
|
}
|
||||||
|
.stl_57 {
|
||||||
|
letter-spacing: 0.002em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_57 {
|
||||||
|
letter-spacing: 0.0427px;
|
||||||
|
}
|
||||||
|
.stl_58 {
|
||||||
|
letter-spacing: 0.0023em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_58 {
|
||||||
|
letter-spacing: 0.048px;
|
||||||
|
}
|
||||||
|
.stl_59 {
|
||||||
|
letter-spacing: 0.0024em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_59 {
|
||||||
|
letter-spacing: 0.0513px;
|
||||||
|
}
|
||||||
|
.stl_60 {
|
||||||
|
letter-spacing: 0.0022em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_60 {
|
||||||
|
letter-spacing: 0.0461px;
|
||||||
|
}
|
||||||
|
.stl_61 {
|
||||||
|
letter-spacing: 0.0036em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_61 {
|
||||||
|
letter-spacing: 0.0772px;
|
||||||
|
}
|
||||||
|
.stl_62 {
|
||||||
|
letter-spacing: 0.0064em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_62 {
|
||||||
|
letter-spacing: 0.1366px;
|
||||||
|
}
|
||||||
|
.stl_63 {
|
||||||
|
letter-spacing: 0.003em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_63 {
|
||||||
|
letter-spacing: 0.0634px;
|
||||||
|
}
|
||||||
|
.stl_64 {
|
||||||
|
letter-spacing: -0.3379em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_64 {
|
||||||
|
letter-spacing: -7.1867px;
|
||||||
|
}
|
||||||
|
.stl_65 {
|
||||||
|
letter-spacing: 0.0013em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_65 {
|
||||||
|
letter-spacing: 0.0286px;
|
||||||
|
}
|
||||||
|
.stl_66 {
|
||||||
|
letter-spacing: 0.0093em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_66 {
|
||||||
|
letter-spacing: 0.1984px;
|
||||||
|
}
|
||||||
|
.stl_67 {
|
||||||
|
letter-spacing: 0.0072em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_67 {
|
||||||
|
letter-spacing: 0.1541px;
|
||||||
|
}
|
||||||
|
.stl_68 {
|
||||||
|
letter-spacing: -0.1119em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_68 {
|
||||||
|
letter-spacing: -2.3805px;
|
||||||
|
}
|
||||||
|
.stl_69 {
|
||||||
|
letter-spacing: -0.2325em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_69 {
|
||||||
|
letter-spacing: -4.9453px;
|
||||||
|
}
|
||||||
|
.stl_70 {
|
||||||
|
letter-spacing: 0.0033em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_70 {
|
||||||
|
letter-spacing: 0.0709px;
|
||||||
|
}
|
||||||
|
.stl_71 {
|
||||||
|
letter-spacing: 0.0163em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_71 {
|
||||||
|
letter-spacing: 0.3461px;
|
||||||
|
}
|
||||||
|
.stl_72 {
|
||||||
|
letter-spacing: 0.0032em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_72 {
|
||||||
|
letter-spacing: 0.0687px;
|
||||||
|
}
|
||||||
|
.stl_73 {
|
||||||
|
letter-spacing: 0.004em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_73 {
|
||||||
|
letter-spacing: 0.0841px;
|
||||||
|
}
|
||||||
|
.stl_74 {
|
||||||
|
letter-spacing: 0.0063em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_74 {
|
||||||
|
letter-spacing: 0.1334px;
|
||||||
|
}
|
||||||
|
.stl_75 {
|
||||||
|
letter-spacing: 0.0069em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_75 {
|
||||||
|
letter-spacing: 0.1464px;
|
||||||
|
}
|
||||||
|
.stl_76 {
|
||||||
|
font-size: 1.329167em;
|
||||||
|
font-family: "OSPLUE+HYKaiTiJ", "Times New Roman";
|
||||||
|
color: #FF0000;
|
||||||
|
}
|
||||||
|
.stl_77 {
|
||||||
|
font-size: 1.329167em;
|
||||||
|
font-family: "AMHITD+HYZhongHeiKW", "Times New Roman";
|
||||||
|
color: #FF0000;
|
||||||
|
}
|
||||||
|
.stl_78 {
|
||||||
|
letter-spacing: -0.0052em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_78 {
|
||||||
|
letter-spacing: -0.1115px;
|
||||||
|
}
|
||||||
|
.stl_79 {
|
||||||
|
letter-spacing: 0.0086em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_79 {
|
||||||
|
letter-spacing: 0.1824px;
|
||||||
|
}
|
||||||
|
.stl_80 {
|
||||||
|
letter-spacing: -0.0029em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_80 {
|
||||||
|
letter-spacing: -0.0625px;
|
||||||
|
}
|
||||||
|
.stl_81 {
|
||||||
|
letter-spacing: 0.0134em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_81 {
|
||||||
|
letter-spacing: 0.2846px;
|
||||||
|
}
|
||||||
|
.stl_82 {
|
||||||
|
letter-spacing: 0.0184em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_82 {
|
||||||
|
letter-spacing: 0.3911px;
|
||||||
|
}
|
||||||
|
.stl_83 {
|
||||||
|
letter-spacing: 0.0138em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_83 {
|
||||||
|
letter-spacing: 0.2929px;
|
||||||
|
}
|
||||||
|
.stl_84 {
|
||||||
|
letter-spacing: -0.0895em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_84 {
|
||||||
|
letter-spacing: -1.9025px;
|
||||||
|
}
|
||||||
|
.stl_85 {
|
||||||
|
letter-spacing: 0.0082em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_85 {
|
||||||
|
letter-spacing: 0.1733px;
|
||||||
|
}
|
||||||
|
.stl_86 {
|
||||||
|
letter-spacing: -0.0098em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_86 {
|
||||||
|
letter-spacing: -0.2077px;
|
||||||
|
}
|
||||||
|
.stl_87 {
|
||||||
|
letter-spacing: 0.0127em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_87 {
|
||||||
|
letter-spacing: 0.2697px;
|
||||||
|
}
|
||||||
|
.stl_88 {
|
||||||
|
letter-spacing: 0.0037em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_88 {
|
||||||
|
letter-spacing: 0.0795px;
|
||||||
|
}
|
||||||
|
.stl_89 {
|
||||||
|
letter-spacing: -0.3605em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_89 {
|
||||||
|
letter-spacing: -7.6667px;
|
||||||
|
}
|
||||||
|
.stl_90 {
|
||||||
|
letter-spacing: 0.0034em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stl_ie .stl_90 {
|
||||||
|
letter-spacing: 0.0729px;
|
||||||
|
}
|
||||||
|
.stl_91 {
|
||||||
|
font-size: 1.329167em;
|
||||||
|
font-family: "MWFHCV+FZFangSong-Z02", "Times New Roman";
|
||||||
|
color: #0000FF;
|
||||||
|
}
|
||||||
@ -90,5 +90,14 @@ export default {
|
|||||||
updateValuationNotes: (data = {}) =>
|
updateValuationNotes: (data = {}) =>
|
||||||
request.put(`/valuations/${data.valuation_id || data.id}/admin-notes`, { admin_notes: data.admin_notes }),
|
request.put(`/valuations/${data.valuation_id || data.id}/admin-notes`, { admin_notes: data.admin_notes }),
|
||||||
getValuationReport: (params = {}) => request.get(`/valuations/${params.valuation_id || params.id}/report`, { isRaw: true }),
|
getValuationReport: (params = {}) => request.get(`/valuations/${params.valuation_id || params.id}/report`, { isRaw: true }),
|
||||||
|
renderReportTemplate: (params = {}) =>
|
||||||
|
request.get('/valuations/report-template/render', { params, isRaw: true }),
|
||||||
|
saveReportDraft: (data = {}) => request.post('/valuations/report-template/save', data),
|
||||||
|
exportReportTemplate: ({ valuation_id, template_id, format = 'pdf' } = {}) =>
|
||||||
|
request.get('/valuations/report-template/export', {
|
||||||
|
params: { valuation_id, template_id, format },
|
||||||
|
responseType: 'blob',
|
||||||
|
isRaw: true,
|
||||||
|
}),
|
||||||
sendSmsReport: (data = {}) => request.post('/sms/send-report', data),
|
sendSmsReport: (data = {}) => request.post('/sms/send-report', data),
|
||||||
}
|
}
|
||||||
|
|||||||
486
web/src/assets/report_template/report_template.html
Normal file
@ -0,0 +1,486 @@
|
|||||||
|
<!DOCTYPE html><!--[if IE]> <html class="stl_ie"> <![endif]-->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>
|
||||||
|
</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="./report_template/style.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_03.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_03.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.82em;top:35.0565em;"><span class="stl_07 stl_08 stl_09" style="font-weight:bold;word-spacing:0.249em;">${asset_name}非遗 IP 知识产权价值评估报告 </span></div>
|
||||||
|
<div class="stl_01" style="left:13.3em;top:45.7517em;"><span class="stl_10 stl_11 stl_12" style="font-weight:bold;">报告编号:ICH-IPVS-RPT-${yyyymmdd} </span></div>
|
||||||
|
<div class="stl_01" style="left:16.4299em;top:48.3317em;"><span class="stl_10 stl_11 stl_12" style="font-weight:bold;word-spacing:-0.0077em;">非遗 IP 名称:${asset_name} </span></div>
|
||||||
|
<div class="stl_01" style="left:14.57em;top:50.9217em;"><span class="stl_10 stl_11 stl_13" style="font-weight:bold;">受评人/单位:成都文化产权交易所 </span></div>
|
||||||
|
<div class="stl_01" style="left:14.21em;top:53.5017em;"><span class="stl_10 stl_11 stl_14" style="font-weight:bold;">评估日期:${yyyy}年${mm}月${dd}日 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_06.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_06.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.6661em;"><span class="stl_15 stl_16 stl_17" style="font-weight:bold;">一、评估总结摘要 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.6517em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">指标 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:13.6517em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">数值 </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:13.6517em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">等级 </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:18.1517em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:16.8517em;"><span class="stl_10 stl_11 stl_20" style="word-spacing:-0.0179em;">${final_value_ab} 万 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:19.4417em;"><span class="stl_10 stl_11 stl_21">元</span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:18.1517em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">系统估值 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.6517em;"><span class="stl_10 stl_11 stl_22" style="font-weight:bold;">-经济价值 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:25.8517em;"><span class="stl_10 stl_11 stl_22" style="font-weight:bold;">-文化价值 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:29.0616em;"><span class="stl_10 stl_11 stl_23" style="font-weight:bold;">-风险调整系数 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.2717em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">市场估值 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:22.6517em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:25.8517em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:29.0616em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:22.6517em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:25.8517em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:29.0616em;"><span class="stl_10 stl_11 stl_19">待定 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:32.2717em;"><span class="stl_10 stl_11 stl_20" style="word-spacing:0.0646em;">${market_price}万元 - </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:35.4817em;"><span class="stl_10 stl_11 stl_24" style="font-weight:bold;">动态质押率 </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:35.4817em;"><span class="stl_10 stl_11 stl_25">${dpr}% </span></div>
|
||||||
|
<div class="stl_01" style="left:31.2em;top:35.4817em;"><span class="stl_10 stl_11 stl_21">-</span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:38.6916em;"><span class="stl_10 stl_11 stl_26" style="word-spacing:-0.096em;">(${b1} × 0.7+${b2} × </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:41.2717em;"><span class="stl_10 stl_11 stl_27" style="word-spacing:0.8337em;">0.3) × ${b3} × </span></div>
|
||||||
|
<div class="stl_01" style="left:18.79em;top:43.8517em;"><span class="stl_10 stl_11 stl_20">0.7+${c}×0.3 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:41.2717em;"><span class="stl_28 stl_11 stl_18" style="font-weight:bold;">最终估值 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.5526em;"><span class="stl_15 stl_16 stl_29" style="font-weight:bold;">二、受评估单位</span><span class="stl_30 stl_08 stl_31" style="font-weight:bold;">/</span><span class="stl_15 stl_16 stl_32" style="font-weight:bold;">人简介 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:54.2517em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2689em;">1. 基本情况 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:57.8838em;"><span class="stl_10 stl_11 stl_32">名称</span><span class="stl_34 stl_35 stl_36">/</span><span class="stl_10 stl_11 stl_37">姓名:${asset_name} </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">2</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_07.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_07.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.4638em;"><span class="stl_10 stl_11 stl_42">统一社会信用代码</span><span class="stl_34 stl_35 stl_36">/</span><span class="stl_10 stl_11 stl_43">身份证号:${credit_code_or_id} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.3317em;"><span class="stl_10 stl_11 stl_22" style="font-weight:bold;word-spacing:0.2548em;">2. 业务/传承介绍 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.0817em;"><span class="stl_10 stl_11 stl_44">${biz_intro} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:23.5061em;"><span class="stl_15 stl_16 stl_17" style="font-weight:bold;">三、评估数据详情 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.1717em;"><span class="stl_10 stl_11 stl_45" style="font-weight:bold;word-spacing:0.2481em;">3. 输入数据集 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:30.9217em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.0455em;">(1) 基础信息: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:33.5017em;"><span class="stl_10 stl_11 stl_47">-资产名称:${asset_name} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:36.0817em;"><span class="stl_10 stl_11 stl_37">-所属机构:${institution} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:38.6717em;"><span class="stl_10 stl_11 stl_47">-所属行业:${industry} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:43.8317em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.0612em;">(2) 财务数据: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:46.4217em;"><span class="stl_10 stl_11 stl_37" style="word-spacing:-0.0012em;">-近 3 年收益:${three_year_income}万元 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:49.0017em;"><span class="stl_10 stl_11 stl_37" style="word-spacing:-0.0012em;">-近 12 个月营收:${annual_revenue}万元 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:51.5817em;"><span class="stl_10 stl_11 stl_37">-研发投入:${rd_investment}万元 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.7517em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.069em;">(3) 非遗属性: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.3317em;"><span class="stl_10 stl_11 stl_43">-非遗等级:${heritage_level} </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">3</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_08.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_08.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_48">-传承人年龄及数量: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_37" style="word-spacing:-0.0051em;">50 岁及以下:${inheritor_age_count[0]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:14.7043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_47" style="word-spacing:-0.0066em;">50-70 岁:${inheritor_age_count[1]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.2844em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_51" style="word-spacing:-0.0062em;">70 岁以上:${inheritor_age_count[2]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.9217em;"><span class="stl_10 stl_11 stl_43">-历史证据:${historical_evidence} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.5017em;"><span class="stl_10 stl_11 stl_43">-教学传播:${offline_activities} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.6717em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.1043em;">(4) 市场表现: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:30.2517em;"><span class="stl_10 stl_11 stl_51">-社交媒体账号:${platform_accounts} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.8317em;z-index:263;"><span class="stl_10 stl_11 stl_52">-商品价格波动</span><span class="stl_10 stl_11 stl_53">:</span><span class="stl_10 stl_11 stl_44">$</span><span class="stl_10 stl_11 stl_44">{price_fluctuation[0]-price_fluctuation[1]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:35.4217em;"><span class="stl_10 stl_11 stl_21">元</span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:38.0017em;"><span class="stl_10 stl_11 stl_37">-月交易额范围:${monthly_transaction} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.5817em;"><span class="stl_10 stl_11 stl_43">-发行量级:${circulation} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:46.9217em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2101em;">4. 评估参数 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.6717em;"><span class="stl_10 stl_11 stl_54" style="word-spacing:-0.0466em;">(1) 经济价值体系: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.2517em;"><span class="stl_10 stl_11 stl_47">-基础价值:${b11}万元 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:55.7843em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_55">财务价值:${f} </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:58.3743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_56">法律强度:${l}分 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">4</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_09.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_09.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:7.25em;top:9.5343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_09">发展潜力:${d}分 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1717em;"><span class="stl_10 stl_11 stl_51">-流量因子:${b12} </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:14.7043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_57">搜索指数比:${[1.055]} </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:17.2844em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_09">社交媒体传播度:${s3} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.9217em;"><span class="stl_10 stl_11 stl_51">-政策乘数:${b13}(契合度${score}分) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:25.0817em;"><span class="stl_10 stl_11 stl_54" style="word-spacing:-0.0623em;">(2) 文化价值体系: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.6717em;"><span class="stl_10 stl_11 stl_46">-活态传承系数:${b21} </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:30.2043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_58">传承人等级:${[1.0]}(国家级) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:32.7843em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_57">教学频次:${[7.28]}(线下${[12]}次) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:35.3743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_54">跨界合作:${[0.3]}(品牌联名) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:38.0017em;"><span class="stl_10 stl_11 stl_46">-纹样基因熵值:${b22}分 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:40.5343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_57">结构复杂度:${sc}(轮廓${[8]}个) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:43.1243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_46">信息熵:${h}分 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:45.7043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_59">历史传承度:${hi} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.9217em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.069em;">(3) 风险体系: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.5017em;"><span class="stl_10 stl_11 stl_57">-市场风险:${[8]}分(波动率${[18%]}) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.0817em;"><span class="stl_10 stl_11 stl_60">-法律风险:${[10]}分(无侵权) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:58.6717em;"><span class="stl_10 stl_11 stl_58">-传承风险:${[6]}分(高龄传承人占比) </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">5</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_10.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_10.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1717em;"><span class="stl_10 stl_11 stl_09" style="word-spacing:-0.1054em;">(4) 市场验证体系: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:14.7517em;"><span class="stl_10 stl_11 stl_51">-市场竞价:${c1}万元 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.3317em;"><span class="stl_10 stl_11 stl_58">-热度系数:${c2}(浏览热度${[中]}) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.9217em;"><span class="stl_10 stl_11 stl_51">-稀缺乘数:${c3}(发行量${[2000]}份) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.5017em;"><span class="stl_10 stl_11 stl_37">-时效衰减:${c4}(近一月${[0.7]}) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:28.8317em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.265em;">5. 评估结果 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.5817em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.0455em;">(1) 经济价值: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:35.1717em;"><span class="stl_10 stl_11 stl_37">-基础价值:${[2200]}万元-${[极强]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.7517em;"><span class="stl_10 stl_11 stl_51">-流量因子:${[0.8]}-${[优秀]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.3317em;"><span class="stl_10 stl_11 stl_59">-政策系数:${[‘数值’]}-${[‘等级’]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:45.5017em;"><span class="stl_10 stl_11 stl_46" style="word-spacing:-0.0612em;">(2) 文化价值: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:48.0817em;"><span class="stl_10 stl_11 stl_59">-传承系数:${[‘数值’]}-${[‘等级’]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.6717em;"><span class="stl_10 stl_11 stl_59">-纹样熵值:${[‘数值’]}-${[‘等级’]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:55.8317em;"><span class="stl_10 stl_11 stl_58" style="word-spacing:-0.0695em;">(3) 风险指数:${[‘数值’]}-${[‘等级’]} </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">6</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_11.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_11.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_59" style="word-spacing:-0.1049em;">(4) 市场估值:${[]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:14.7517em;"><span class="stl_10 stl_11 stl_60" style="word-spacing:-0.0497em;">(5) 动态质押率:${[]} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:21.1661em;"><span class="stl_15 stl_16 stl_61" style="font-weight:bold;">四、评估依据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:24.8317em;"><span class="stl_10 stl_11 stl_62" style="font-weight:bold;word-spacing:0.271em;">1. 法律法规依据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:28.5343em;z-index:115;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63">《中华人民共和国非物质文化遗产法</span><span class="stl_10 stl_11 stl_64">》</span><span class="stl_10 stl_11 stl_19">(</span><span class="stl_10 stl_11 stl_65" style="word-spacing:0.0002em;">2011 年 2 月 25 日第 </span></div>
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:31.1717em;"><span class="stl_10 stl_11 stl_52">十一届全国人民代表大会常务委员会第十九次会议通过) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:33.7043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_66" style="word-spacing:-0.0083em;">《中华人民共和国著作权法》(2020 年 11 月 11 日第十三届 </span></div>
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:36.3317em;"><span class="stl_10 stl_11 stl_63">全国人民代表大会常务委员会第二十三次会议修订) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:38.8743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_67" style="word-spacing:-0.0063em;">《中华人民共和国资产评估法》(2016 年 7 月 2 日第十二届 </span></div>
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:41.5017em;"><span class="stl_10 stl_11 stl_63">全国人民代表大会常务委员会第二十一次会议通过) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:45.2517em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2532em;">2. 准则依据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:49.0017em;"><span class="stl_10 stl_11 stl_09" style="word-spacing:-0.0066em;">《非遗 IP 知识产权价值评估规范》(T/CDAS</span><span class="stl_10 stl_11 stl_21" style="word-spacing:0.2038em;"> </span><span class="stl_10 stl_11 stl_26">XXX-2025) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:51.5817em;"><span class="stl_10 stl_11 stl_63">中国资产评估协会《知识产权资产评估指南》(中评协〔2017〕 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:54.1717em;"><span class="stl_10 stl_11 stl_26" style="word-spacing:-0.0004em;">44 号) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.7517em;z-index:353;"><span class="stl_10 stl_11 stl_09">中国资产评估协</span><span class="stl_10 stl_11 stl_68">会</span><span class="stl_10 stl_11 stl_19">《</span><span class="stl_10 stl_11 stl_55">资产评估执业准则——无形资产</span><span class="stl_10 stl_11 stl_69">》</span><span class="stl_10 stl_11 stl_19">(</span><span class="stl_10 stl_11 stl_32">中评协 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.3317em;"><span class="stl_10 stl_11 stl_47" style="word-spacing:-0.0027em;">〔2017〕37 号) </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">7</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_12.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_12.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_27" style="word-spacing:0.1933em;">ISO/TC 307 Blockchain and distributed ledger technologies</span><span class="stl_10 stl_11 stl_21" style="word-spacing:0.0049em;"> </span><span class="stl_10 stl_11 stl_27" style="word-spacing:0.1933em;">国 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1717em;"><span class="stl_10 stl_11 stl_32">际标准 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:15.9217em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2454em;">3. 权属依据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.6717em;"><span class="stl_10 stl_11 stl_70">传承人认定证书及授权文件 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.2517em;"><span class="stl_10 stl_11 stl_52">非遗项目登记证书及认定文件 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:24.8317em;"><span class="stl_10 stl_11 stl_52">非遗资产所用专利证书 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:28.5817em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2101em;">4. 取价依据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.2843em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_70">近三年财务报表及审计报告 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:34.8743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_56">市场交易数据及可比案例 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.4543em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_56">行业统计数据及研究报告 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.0343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">政策文件及专项资金支持证明 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:42.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">社交媒体平台数据统计 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:45.2043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.0043em;">专业数据库及 API 接口数据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:49.0861em;"><span class="stl_15 stl_16 stl_61" style="font-weight:bold;">五、评估方法 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:52.7517em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2689em;">1. 方法选择 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.5017em;"><span class="stl_10 stl_11 stl_63">本次评估采用双轨定价评估模型,具体包括: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.0343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_71">基础评估模型:基于经济价值、文化价值与风险调整系数的 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">8</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_13.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_13.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:9.5817em;"><span class="stl_10 stl_11 stl_52">算法模型 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">市场竞价评估模型:基于市场交易数据的验证模型 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:15.9217em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2532em;">2. 具体方法 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_20" style="word-spacing:0.0007em;">收益法应用:采用多期超额收益法,预测非遗 IP 未来收益能 </span></div>
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:22.2517em;"><span class="stl_10 stl_11 stl_21">力</span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:24.7844em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_72">市场法调整:通过可比案例进行市场验证和校准 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.3743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63">成本法参考:考虑非遗项目的保护和发展成本 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:31.1717em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2454em;">3. 技术路线 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:34.9217em;"><span class="stl_10 stl_11 stl_54">最终估值=(基础模型估值×0.7+市场估值×0.3)×风险调整系数 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.5017em;"><span class="stl_10 stl_11 stl_52">其中基础模型估值按下列公式计算: </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.0817em;"><span class="stl_10 stl_11 stl_54">基础模型估值=(经济价值×0.7+文化价值×0.3) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:43.9161em;"><span class="stl_15 stl_16 stl_73" style="font-weight:bold;">六、评估程序实施过程 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:47.5817em;"><span class="stl_10 stl_11 stl_13" style="font-weight:bold;word-spacing:0.2706em;">1. 评估准备阶段(1-2</span><span class="stl_10 stl_11 stl_21" style="font-weight:bold;word-spacing:-0.0007em;"> </span><span class="stl_10 stl_11 stl_24" style="font-weight:bold;">个工作日) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:51.3317em;"><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.0474em;">(1) 与用户确认评估目的、基准日、范围等基本事项 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.9217em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.0629em;">(2) 收集并验证评估所需的基础资料和权属证明 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.5017em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:-0.0705em;">(3) 制定评估工作计划和实施方案 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.79em;top:65.9532em;"><span class="stl_38 stl_39 stl_21">9</span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_14.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_14.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_74" style="font-weight:bold;word-spacing:0.2556em;">2. 评估数据采集阶段(2-3</span><span class="stl_10 stl_11 stl_21" style="font-weight:bold;word-spacing:0.0063em;"> </span><span class="stl_10 stl_11 stl_24" style="font-weight:bold;">个工作日) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.3317em;"><span class="stl_10 stl_11 stl_52" style="word-spacing:-0.0475em;">(1) 财务数据采集:通过用户填写数据获取近三年财务数据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:15.9217em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.0628em;">(2) 市场数据采集:从文化产权交易所、拍卖平台获取交易数据 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:18.5017em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:-0.0705em;">(3) 网络数据采集:采集社交媒体传播数据、搜索指数等 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:21.0817em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.106em;">(4) 文化数据采集:收集传承人信息、教学传播记录等 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:24.8317em;"><span class="stl_10 stl_11 stl_75" style="font-weight:bold;word-spacing:0.2466em;">3. 数据分析阶段(1</span><span class="stl_10 stl_11 stl_21" style="font-weight:bold;word-spacing:-0.0076em;"> </span><span class="stl_10 stl_11 stl_24" style="font-weight:bold;">个工作日) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:28.5817em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:-0.0469em;">(1) 数据清洗和标准化处理 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:31.1717em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:-0.0627em;">(2) 运用评估模型进行计算和分析 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:33.7517em;"><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.0709em;">(3) 进行敏感性分析和误差检验 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.5017em;"><span class="stl_10 stl_11 stl_75" style="font-weight:bold;word-spacing:0.2113em;">4. 报告编制阶段(7</span><span class="stl_10 stl_11 stl_21" style="font-weight:bold;word-spacing:-0.0048em;"> </span><span class="stl_10 stl_11 stl_24" style="font-weight:bold;">个工作日) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:41.2517em;"><span class="stl_10 stl_11 stl_59" style="word-spacing:-0.0462em;">(1) 编制初步评估报告 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:43.8317em;"><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.063em;">(2) 内部审核和质量控制 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:46.4217em;"><span class="stl_10 stl_11 stl_54" style="word-spacing:-0.07em;">(3) 与用户沟通确认最终报告 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.2561em;"><span class="stl_15 stl_16 stl_61" style="font-weight:bold;">七、评估假设 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.9217em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2689em;">1. 基本假设 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:57.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.0033em;">持续使用假设:假设非遗 IP 按现有模式持续使用和发展 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">10 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_15.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_15.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63">公开市场假设:假设在公开市场条件下进行公平交易 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_71">宏观环境稳定假设:假设国家相关政策和经济环境无重大变 </span></div>
|
||||||
|
<div class="stl_01" style="left:8.1299em;top:14.7517em;"><span class="stl_10 stl_11 stl_21">化</span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:18.5017em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2532em;">2. 特殊假设 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.2043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_70">假设所提供的所有资料真实、合法、完整 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:24.7844em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">假设非遗项目传承和发展符合相关政策要求 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.3743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_56">假设市场供需关系保持相对稳定 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:29.9543em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">假设无重大不可抗力因素影响 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:33.7517em;"><span class="stl_10 stl_11 stl_45" style="font-weight:bold;word-spacing:0.2481em;">3. 限制性假设 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.4543em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_70">评估结果基于评估基准日的市场条件得出 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.0343em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_70">评估价值不代表未来实际交易价格 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:42.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_52">评估机构不承担资产权属的法律责任 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:46.4726em;"><span class="stl_76 stl_16 stl_32" style="font-weight:bold;">八、</span><span class="stl_15 stl_16 stl_61" style="font-weight:bold;">评估解析与金融化建议</span><span class="stl_76 stl_16 stl_19" style="font-weight:bold;">(</span><span class="stl_77 stl_08 stl_72" style="font-weight:bold;word-spacing:0.0044em;">AI </span><span class="stl_76 stl_16 stl_32" style="font-weight:bold;">协助生成) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:50.1717em;"><span class="stl_10 stl_11 stl_75" style="font-weight:bold;word-spacing:0.2701em;">1. 价值驱动因素分析 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.9217em;"><span class="stl_10 stl_11 stl_48">-核心优势: </span></div>
|
||||||
|
<div class="stl_01" style="left:7.71em;top:56.5017em;"><span class="stl_10 stl_11 stl_78" style="word-spacing:0.0095em;">[例:政策乘数 1.8(极强)]:受益于国家级文化数字化战略, </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.0817em;"><span class="stl_10 stl_11 stl_70" style="word-spacing:-0.006em;">符合《国家文化数字化战略清单》第 X 条,建议申请专项补助。 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">11 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_16.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_16.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:7.71em;top:9.5817em;"><span class="stl_10 stl_11 stl_79" style="word-spacing:-0.0107em;">[例:活态传承系数 0.92(极强)]:国家级传承人主导+年度 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:12.1717em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.0047em;">线下活动 24 次,形成可持续传承生态,可纳入 ESG 投资标的。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.3317em;"><span class="stl_10 stl_11 stl_48">-关键短板: </span></div>
|
||||||
|
<div class="stl_01" style="left:7.71em;top:19.9217em;"><span class="stl_10 stl_11 stl_80" style="word-spacing:0.0125em;">[例:流量因子-0.3(低)]:社交媒体转化率仅 0.1%(行业均 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.5017em;"><span class="stl_10 stl_11 stl_48" style="word-spacing:-0.0027em;">值 5%),需优化抖音/B 站内容运营策略。 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.71em;top:25.0817em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.0035em;">[例:传承风险评分 2 分(低)]:70 岁以上传承人占比 60%, </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.6717em;"><span class="stl_10 stl_11 stl_56">建议建立紧急数字化存证机制。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:34.0017em;"><span class="stl_10 stl_11 stl_75" style="font-weight:bold;word-spacing:0.2545em;">2. 金融机构风控建议 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.7517em;"><span class="stl_10 stl_11 stl_63">-质押融资方案: </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:40.2843em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_54">建议质押额度:[最终估值×DPR]万元(当前质押率[DPR]%) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:42.8743em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_81">流动性增强建议:[接入阿里拍卖平台提升交易频次(月交 </span></div>
|
||||||
|
<div class="stl_01" style="left:9em;top:45.5017em;"><span class="stl_10 stl_11 stl_59" style="word-spacing:-0.0013em;">易额>500 万可提升质押率+15%)] </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:48.0817em;"><span class="stl_10 stl_11 stl_63">-风险对冲工具: </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:50.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_55">市场风险:购买搜索指数保险(覆盖单日下跌>40%的损失) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:53.2043em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_63" style="word-spacing:0.0007em;">法律风险:追加区块链存证(可提升法律强度分+2 分) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.5817em;"><span class="stl_10 stl_11 stl_62" style="font-weight:bold;word-spacing:0.2475em;">3. 价值提升路径 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">12 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_17.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_17.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:-0.0035em;">-短期(3-6 个月): </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:12.1243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_82">申请省级非遗资助(政策乘数+0.03,估值提升约[测算值] </span></div>
|
||||||
|
<div class="stl_01" style="left:9em;top:14.7517em;"><span class="stl_10 stl_11 stl_32">万元) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:17.2844em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_83" style="word-spacing:-0.0111em;">开发 NFT 数字藏品(稀缺性乘数可升至 1.0,需投入[成本] </span></div>
|
||||||
|
<div class="stl_01" style="left:9em;top:19.9217em;"><span class="stl_10 stl_11 stl_32">万元) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.5017em;"><span class="stl_10 stl_11 stl_63" style="word-spacing:-0.0074em;">-长期(1-2 年): </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:25.0344em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_72" style="word-spacing:-0.0103em;">培育市级传承人(教学频次需>20 次/年) </span></div>
|
||||||
|
<div class="stl_01" style="left:7.25em;top:27.6243em;"><span class="stl_49 stl_50 stl_21" style="word-spacing:0.32em;"> </span><span class="stl_10 stl_11 stl_59" style="word-spacing:-0.0012em;">参与 ISO/TC307 国际标准认证(提升跨境质押接受度) </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:34.0861em;"><span class="stl_15 stl_16 stl_61" style="font-weight:bold;">九、评估总结 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.7517em;"><span class="stl_10 stl_11 stl_48">本报告通</span><span class="stl_10 stl_11 stl_84">过</span><span class="stl_10 stl_11 stl_85">“</span><span class="stl_10 stl_11 stl_86">数值可验证、风险可量化、价值可转化”的三重体 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:40.3317em;"><span class="stl_10 stl_11 stl_87" style="word-spacing:-0.0115em;">系,全面评估了该非遗 IP 的价值。其核心优势在于高文化稀缺 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:42.9217em;"><span class="stl_10 stl_11 stl_72">性与稳健的经济成长性,主要风险在于传承断层与转化效率。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:49.3361em;"><span class="stl_15 stl_16 stl_17" style="font-weight:bold;">十、特别事项说明 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:53.0017em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2689em;">1. 权属事项 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.7517em;"><span class="stl_10 stl_11 stl_52">本报告对评估对象的权属资料进行了必要的查验; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:59.3317em;"><span class="stl_10 stl_11 stl_70">权属资料的真实性、合法性由资产持有方负责; </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">13 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_18.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_18.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_70">如发生权属纠纷,评估价值需重新评定。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.3317em;"><span class="stl_10 stl_11 stl_62" style="font-weight:bold;word-spacing:0.2553em;">2. 重大期后事项 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.0817em;"><span class="stl_10 stl_11 stl_63">评估基准日后至报告出具日期间无重大事项影响评估结果; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.6717em;"><span class="stl_10 stl_11 stl_63">如发生重大期后事项,需对评估结果进行相应调整。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:23.4217em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2454em;">3. 使用限制 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:27.1717em;"><span class="stl_10 stl_11 stl_52">本报告仅用于评估目的载明的用途; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:29.7517em;"><span class="stl_10 stl_11 stl_52">未征得评估机构同意,不得用于其他目的; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.3317em;"><span class="stl_10 stl_11 stl_70">报告内容不得被摘抄、引用或披露于公开媒体。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:36.0817em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2101em;">4. 其他事项 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:39.8317em;"><span class="stl_10 stl_11 stl_63">评估结果受所采用数据和参数的影响; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:42.4217em;"><span class="stl_10 stl_11 stl_70">互联网数据存在一定的时效性和波动性; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:45.0017em;"><span class="stl_10 stl_11 stl_52">文化价值的量化存在一定的主观判断因素。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:48.8361em;"><span class="stl_15 stl_16 stl_88" style="font-weight:bold;">十一、评估报告使用限制说明 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:52.5017em;"><span class="stl_10 stl_11 stl_62" style="font-weight:bold;word-spacing:0.271em;">1. 使用范围限制 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:56.2517em;"><span class="stl_10 stl_11 stl_52">本报告仅供注册用户在本评估系统内使用; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:58.8317em;"><span class="stl_10 stl_11 stl_63">不得将报告用于法律诉讼、仲裁等司法程序; </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">14 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_19.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_19.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_63">不得将报告作为资产价值的唯一依据。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.3317em;"><span class="stl_10 stl_11 stl_45" style="font-weight:bold;word-spacing:0.256em;">2. 时效性限制 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.0817em;"><span class="stl_10 stl_11 stl_56" style="word-spacing:-0.0031em;">评估结果有效期为自评估基准日起 12 个月; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.6717em;"><span class="stl_10 stl_11 stl_52">超过有效期需重新进行评估; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.2517em;"><span class="stl_10 stl_11 stl_70">如市场环境发生重大变化,评估结果可能失效。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:26.0017em;"><span class="stl_10 stl_11 stl_33" style="font-weight:bold;word-spacing:0.2454em;">3. 责任限制 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:29.7517em;z-index:157;"><span class="stl_10 stl_11 stl_52">评估机构对评估结果的合理性负责</span><span class="stl_10 stl_11 stl_89">,</span><span class="stl_10 stl_11 stl_19">但</span><span class="stl_10 stl_11 stl_61">不保证资产的实际交易价 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:32.3317em;"><span class="stl_10 stl_11 stl_25">格; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:34.9217em;"><span class="stl_10 stl_11 stl_63">用户应对评估结果的适用性自行判断; </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:37.5017em;"><span class="stl_10 stl_11 stl_70">因使用不当造成的损失,评估机构不承担责任。 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:41.3361em;"><span class="stl_15 stl_16 stl_17" style="font-weight:bold;">十二、评估报告日 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:45.0017em;"><span class="stl_10 stl_11 stl_58">本评估报告日为:[报告出具日期]${yyyy-mm-dd} </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:48.8361em;"><span class="stl_15 stl_16 stl_90" style="font-weight:bold;">十三、评估机构信息 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:52.5017em;"><span class="stl_10 stl_11 stl_55" style="word-spacing:0.0008em;">评估机构:成都文化产权交易所-非遗 IP 价值评估系统 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:55.0817em;"><span class="stl_10 stl_11 stl_61">联系邮箱:</span><a href="mailto:value@cdcee.net" target="_blank"><span class="stl_91 stl_11 stl_44">value@cdcee.net </span></a></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:57.6717em;"><span class="stl_10 stl_11 stl_60">联系电话:028-87360126 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">15 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
<div style="position:absolute;left:0.0167em;top:24.5625em;width:49.6083em;height:45.5208em;">
|
||||||
|
<a href="mailto:value@cdcee.net" target="_blank">
|
||||||
|
<img src="./report_template/img_20.png" class="stl_grlink" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="stl_ stl_02">
|
||||||
|
<div class="stl_03">
|
||||||
|
<object data="./report_template/img_21.svg" type="image/svg+xml" class="stl_04" style="position:absolute; width:49.5833em; height:70.0833em;">
|
||||||
|
<embed src="./report_template/img_21.svg" type="image/svg+xml" />
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="stl_view">
|
||||||
|
<div class="stl_05 stl_06">
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:9.5817em;"><span class="stl_10 stl_11 stl_61">系统网址:</span><a href="https://value.cdcee.net/login" target="_blank"><span class="stl_91 stl_11 stl_65">https://value.cdcee.net/login </span></a></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:13.3317em;"><span class="stl_10 stl_11 stl_18" style="font-weight:bold;">附件 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:17.0817em;"><span class="stl_10 stl_11 stl_56">【非遗传承人等级证书】 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:19.6717em;"><span class="stl_10 stl_11 stl_70">【非遗资产所用专利-证书】 </span></div>
|
||||||
|
<div class="stl_01" style="left:6.3799em;top:22.2517em;"><span class="stl_10 stl_11 stl_09">【非遗纹样图片】 </span></div>
|
||||||
|
<div class="stl_01" style="left:42.35em;top:65.9532em;"><span class="stl_38 stl_39 stl_59">16 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:66.062em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0008em;">地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼 </span></div>
|
||||||
|
<div class="stl_01" style="left:7.57em;top:67.5419em;"><span class="stl_40 stl_41 stl_21" style="word-spacing:0.0059em;">电话:028-85955888 邮编:610023 </span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
BIN
web/src/assets/report_template/report_template/img_01.png
Normal file
|
After Width: | Height: | Size: 479 KiB |
BIN
web/src/assets/report_template/report_template/img_02.png
Normal file
|
After Width: | Height: | Size: 207 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_1" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 557.58L595.32 557.58L595.32 557.58L595.32 841.02L595.32 841.02L0 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400085 0 557.55)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_01.png" width="2480" height="1181" /></g></g></g></g><g clip-path="url(#4)"><g transform="matrix(0.2425828 0 0 0.2426866 150.6 89.33997)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_02.png" width="1208" height="670" /></g></g></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
BIN
web/src/assets/report_template/report_template/img_04.png
Normal file
|
After Width: | Height: | Size: 390 KiB |
BIN
web/src/assets/report_template/report_template/img_05.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 12 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_3" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_4" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_6" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_7" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_8" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_9" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_10" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_11" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_12" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_13" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_14" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_15" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"><path id="300" transform="matrix(1 0 0 -1 0 841)" d="M156.6 163.3L270.8 163.3" stroke="#0000FF" stroke-width="0.72" fill="none" /></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
BIN
web/src/assets/report_template/report_template/img_20.png
Normal file
|
After Width: | Height: | Size: 120 B |
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body_16" preserveAspectRatio="xMinYMin meet" viewBox="0 0 793 1121"><defs><clipPath id="1"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 841L0 -0.9000244L0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="2"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="3"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 294.78L595.56 294.78L595.56 294.78L595.56 841.02L595.56 841.02L0.24 841.02z" /></clipPath><clipPath id="4"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="5"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.2 790.8L595.5 790.8L595.5 790.8L595.5 841L595.5 841L0.2 841z" /></clipPath><clipPath id="6"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="7"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath><clipPath id="8"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0.24 -0.7800293L595.56 -0.7800293L595.56 -0.7800293L595.56 70.62L595.56 70.62L0.24 70.62z" /></clipPath><clipPath id="9"><path id="" clip-rule="evenodd" transform="matrix(1 0 0 1 0 0)" d="M0 -0.9000244L595.3 -0.9000244L595.3 -0.9000244L595.3 841L595.3 841L0 841z" /></clipPath></defs><g transform="matrix(1.333333 0 0 1.333333 0 0)"><g clip-path="url(#1)"><g clip-path="url(#2)"><g clip-path="url(#3)"><g transform="matrix(0.2400403 0 0 0.2400044 0.2 294.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_04.png" width="2480" height="2276" /></g></g></g></g><g clip-path="url(#4)"><g clip-path="url(#5)"></g></g><g clip-path="url(#6)"></g><g clip-path="url(#7)"><g clip-path="url(#8)"><g transform="matrix(0.2400403 0 0 0.238 0.25 -0.75)"><g transform="matrix(1 0 0 1 0 0)"><image x="0" y="0" xlink:href="img_05.png" width="2480" height="300" /></g></g></g></g><g clip-path="url(#9)"><path id="91" transform="matrix(1 0 0 -1 0 841)" d="M156.6 709.3L356.25 709.3" stroke="#0000FF" stroke-width="0.72" fill="none" /></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |