# source → crawler → data table 映射

证据快照：2026-11-03 16:36:08，北京时间。线上项目 `/tyc-japan/tyc-japan`，数据库 `kaisha_db.public`。

## ubuntu 只读补查（2026-11-03）

97条参考关系升级为线上代码确认，新增10条业务关系，待确认来源剩9个；新增7项后续加工，20张辅助表均有写入实现。8个SEO物化视图找到每日12:20北京时间的crontab刷新配置；最近找到的成功报告仍为2026-06-15，不能认定近期每日成功。详见 [补查报告](ubuntu_review_report.html)。本次补查未修改业务代码或数据库；2026-11-04仅发布此独立看板，并移除字段需求高亮。

## 打开与查看

直接打开本目录的 [index.html](index.html)，无需启动服务或连接数据库。浏览入口支持 11 个维度、source/crawler/表名/URL 搜索、证据筛选、共享关系和反向查询。点击某个 source 下的“查看全部维度的程序分支”，会精确限定该 source，不把包含相同字符串的其他 source 混进来。

- `diagrams/`：每个维度分别提供采集及辅助表 SVG、后续加工 SVG，共 22 张 SVG；另附采集图的分页 PNG 和两类 Mermaid 源文件。每张图只包含一个维度。
- `mapping.csv`：可直接查看的完整关系明细，含简称、来源名称、URL、程序、表、字段范围和证据。
- `mapping.json`：结构化关系及辅助写入表、共享关系、待确认来源。
- `evidence/`：只读核查的数据库元数据、可读代码快照、不可读文件清单、URL依据及验证结果。

## 覆盖结果

| 项目 | 数量 | 含义 |
|---|---:|---|
| 数据源登记 | 223 | data_sources 的登记条目，不是已成功采集数量 |
| 至少一条线上代码确认关系的来源 | 214 | 已看到来源绑定及写入实现 |
| 只有参考/声明关系的来源 | 0 | 线上文件不可读或未看到实际写入依据 |
| 尚未建立完整关系的来源 | 9 | 不表示未采集 |
| 线上代码确认的三元关系 | 371 | source、程序、表组合去重 |
| 本地副本参考关系 | 0 | 线上版本和可执行性待核实 |
| 数据库声明关系 | 2 | 仅 field_lineage 声明，可能过时 |
| 涉及的采集/导入/补全/派生程序 | 209 | 包含手工和未发现启用调度引用的部署代码，不是活跃 crawler 数量 |
| 涉及的业务输出表 | 81 | 包含中间结构化结果和派生表，不保证每张都有当前数据 |
| 多程序共用的 source | 17 | 详见浏览入口“共享关系” |
| 同时使用多个 source 的程序 | 11 | 共享模块重复出现不表示不同 crawler |

## 11 个维度的图

分类以业务输出含义为主，不是按网站所属机构分类。例如，许可证名录中提取代表人的导入脚本放在“代表者与管理层”，而不是一律归为“资质与合规”。维度属于人工业务归类；未把每张表的法人编号等通用关联字段都扩展成独立维度。

同一 source 可以跨维度出现，各维度数字不可相加作为全局总数。共享表只表示对应字段/记录，不表示该程序负责整张表。官网子页面按 products/history/news/hiring/ir 分类，图中标出 subpage_type；youth_yell 的招聘信息仅为 meta.recruit_url，不能视为职位明细库。

| 维度 | 来源 | 程序 | 表 | SVG | PNG页数 |
|---|---:|---:|---:|---|---:|
| 1. 公司基本信息 | 11 | 14 | 10 | [打开](diagrams/01_公司基本信息.svg) | 2 |
| 2. 经营与业务 | 15 | 16 | 20 | [打开](diagrams/02_经营与业务.svg) | 3 |
| 3. 地址和联络信息 | 7 | 12 | 19 | [打开](diagrams/03_地址和联络信息.svg) | 2 |
| 4. 分店、分部和设施 | 7 | 7 | 10 | [打开](diagrams/04_分店、分部和设施.svg) | 2 |
| 5. 代表者与管理层 | 76 | 77 | 14 | [打开](diagrams/05_代表者与管理层.svg) | 13 |
| 6. 员工与组织构成 | 16 | 16 | 10 | [打开](diagrams/06_员工与组织构成.svg) | 3 |
| 7. 沿革与发展历程 | 3 | 4 | 5 | [打开](diagrams/07_沿革与发展历程.svg) | 1 |
| 8. 新闻与公告 | 9 | 9 | 14 | [打开](diagrams/08_新闻与公告.svg) | 2 |
| 9. 招聘和人才信息 | 2 | 2 | 4 | [打开](diagrams/09_招聘和人才信息.svg) | 1 |
| 10. 资质与合规信息 | 96 | 65 | 23 | [打开](diagrams/10_资质与合规信息.svg) | 18 |
| 11. 规模与经营数据 | 7 | 10 | 11 | [打开](diagrams/11_规模与经营数据.svg) | 2 |

## 运行周期（新增）

浏览入口新增“运行周期”，每个 crawler 节点也显示计划。配置与定时器新快照在 evidence/schedule_snapshot.json，完整周期清单在 crawler_schedules.csv。共 169 个 YAML 配置项，162 项启用；额外读取 3 个 systemd timer（其中 2 个对应映射中的业务程序，另 1 个为质量检查）。这些数字是计划数量，不是活跃 crawler 数量。

同一 source—程序组合可有多个计划；共有 240 个组合，其中 173 个有启用的直接计划、6 个仅有父任务静态引用、2 个只有停用计划、59 个未找到直接计划。周期分类与下一次计划时间不代表实际成功执行或整站刷新周期，静态引用也不保证运行完整模块入口。

YAML 采用 Asia/Tokyo，界面同时给出北京时间；systemd 的 UTC 时间单独保留。周字段按 APScheduler 3（0=周一）解释，线上 run_scheduler.py:307、407 调用 CronTrigger.from_crontab，近期 fben/satsuben 各六次触发记录均符合该规则；线上入口现已可读，没有逐条验证所有任务。星期解释依据：https://apscheduler.readthedocs.io/en/3.x/modules/triggers/cron.html 。next_fires 是从快照时刻推算的计划，不是实时倒计时。

针对使用 --source 的共享程序，计划只归给选定来源。另如 import_houjin_via_api.py 同时有 YAML 和 systemd 计划，会分别显示；未自动合并或关闭任何计划。

## 当前表数据量（新增）

扩展后已只读核查 165 个展示相关数据库对象，58 个不超过 8 MiB 的小对象完成精确 COUNT(*)；107 个较大对象使用 PostgreSQL 行数估算。单次精确计数设置 2 秒 statement_timeout、0.5 秒 lock_timeout；未执行 ANALYZE 或大表全表计数。结果及采样时间在 evidence/table_volume_snapshot.json、table_volumes.csv 和 mapping.json 的 table_volumes。

关系图的数据表节点直接显示整表行数、数据空间、索引和总大小。分区表合并实际存储分区。共享表的数字不是当前 source、crawler、字段或子类型的贡献量；同一张表在多个关系/维度重复出现时不能重复加总。文件大小包括旧行和空闲空间，数据空间含 TOAST；统计时间与来源关系/调度配置快照分别展示，不是实时监控。

## 后续加工与公共辅助表（新增）

保留原有363条直接业务关系，补查后共373条，另有393条辅助写入关系。共45个加工程序或数据库定义，其中包括 9 个当前物化视图定义；输入表、处理程序与输出表按原有 11 个维度直接展示，不依赖虚构的外部 source ID。

范围覆盖 165 个相关对象，包括业务输出、20 张公共辅助表、加工输入和输出、物理分区及待核实对象。数据库共有 226 张普通／分区表，另有 9 个物化视图；这些数字不表示每个对象都有完整链路。31 张后续表仍缺可靠加工证据，单列待核实，不根据表名或历史计划猜测箭头。20 张辅助表均找到写入实现；不据此认定最近运行成功。

加工卡片表达模块内的静态读取／写入集合，可能涉及不同函数、模式和分支，不表示任意输入都会逐行生成所有输出。原表回写可同时出现在输入和输出。数据库 pg_depend / pg_get_viewdef 能证明当前视图依赖，不能证明刷新周期或成功执行；本次没有执行数据库函数。

物理分区由 pg_inherits 确认，列在父表的数据量区域；父表统计已经包含分区，不可再次累加。新增证据在 evidence/processing_snapshot.json，导出为 processing_lineage.csv、auxiliary_lineage.csv。来源筛选下展示的是从输入表可静态追溯的候选下游，不推断当前来源对整表的独占贡献。

## 最近一次运行增量（新增）

各数据表节点新增最近一次运行增量，快照时间为 2026-11-02 18:55 北京时间。165 个对象中，31 个有可归属的任务上报计数，41 个有相关日志但没有拆分到表的计数，93 个未找到相关日志；未知值不填零。证据为 evidence/latest_increment_snapshot.json，导出为 latest_table_increments.csv。

展示新增、更新或写入操作数，并保留任务、完成时间、状态和日志依据。最近相关运行与上次有明确计数的完成运行分别展示；删除后重写或 upsert 的操作数不称为净新增。单业务输出表的归属属于基于现有映射的推定，仍需人工核对；多输出未拆分、部分进度、失败和运行中任务不作最终增量，数据库默认零不覆盖日志中的明确计数。

本次仅只读提取现有日志，没有建立 daily run，没有汇总每天全部任务，也没有测量数据库前后净增量。上述内容已加入网页和 CSV；静态图片仍保留关系、周期和存量展示。

## 来源与程序功能描述（新增）

为全部 223 个来源登记补充数据用途简介，为 239 个采集／导入／加工及候选程序保留功能或不可读说明。描述直接显示于 11 个维度、共享关系、待确认来源和运行周期页面；数据库后续加工节点也有用途描述。

网站核查逐个读取登记 URL，区分可读正文、简短框架、数据文件、错误响应、请求失败和无统一入口。首页可读不等于具体业务或字段已验证；无法访问的来源依据登记、已有代码及先前核查概括，页面明确说明。劳动违法来源的登记 URL 当前返回助成金页面等范围差异单独保留。

程序简介依据只读代码快照中的模块说明、解析与写入函数和已有关系证据，不运行或导入项目代码。线上不可读时仅使用本地同路径参考，仍标记线上待核实；本次 ubuntu 补查已读取所有候选代码，并保留来源绑定尚未确认的说明。简介不更改 source ID、原有映射或执行状态，输出仍受参数和代码分支限制。

网站内容快照位于 evidence/source_content_snapshot.json，描述与行号依据位于 evidence/description_review.json；导出为 source_crawler_descriptions.csv。离线网页不自动访问外部网站，点击依据链接时才由浏览器打开。静态关系图保留原有简洁布局。


## 调查方法和证据边界

1. 通过 SSH 以 `hao` 身份读取部署代码和实际调度配置；没有 sudo、权限修改、部署或爬虫执行。数据库使用项目现有连接配置，连接参数强制 default_transaction_read_only=on，并设置查询超时；没有写入数据库。
2. 查询 data_sources、information_schema 与 field_lineage，先取来源登记和结构/声明元数据；后续新增整表存量核查：只对小表精确 COUNT，大表使用统计估算。最近一次运行的上报计数另见增量区域；未统计全天净增量或每个 source 的贡献量。
3. 使用 Python AST 识别 source_code、lookup_source_id、来源配置、SQL INSERT/UPDATE/COPY、声明式 target_table，以及直接调用和 asyncio.to_thread 等回调中的公共写入函数。未执行或导入任何 crawler 代码。
4. 对多来源模块、动态表名、官网子页面范围和共享表做人工复核。govbook 索引与官方官报共用程序，但 kanpo_issues 的 source_id 明确使用官方来源，已排除 govbook→kanpo_issues 的机械笛卡尔积误关联。
5. field_lineage 中的法人编号来源不等于整表由国税厅采集。只有声明的 source 与程序自身来源绑定相符时才保留为声明关系；冲突记录保存在 evidence/rejected_lineage_declarations.json。
6. ubuntu 补查读取378个 Python 文件及1个调度文件，0个不可读，静态解析无错误。97条原本地参考关系已与部署代码核对并升级依据。没有执行项目模块、爬虫、刷新函数或修改服务器环境。
7. 调度状态来自 schedule.yaml 直接入口或静态调用引用；静态引用不等于实际执行。systemd 服务清单也保存在 evidence/service_inventory.txt。本调查不覆盖所有手工启动、外部编排器或运行日志，不能据此判断某程序无人维护、停用或没有成功采集。
8. 来源 URL 来自 data_sources.base_url；程序 URL 来自代码中可静态还原的赋值/来源配置，保留文件、符号、行号及版本证据。程序可能动态拼接参数或逐企业读取官网，不能把模块中的每个 URL 都认定属于每个 source。查询参数及凭据不导出；URL 可达性未对全部来源逐站验证；11 条待确认来源另做了联网核查，结果在 evidence/unresolved_source_reviews.json、url_http_checks.json 和 additional_url_checks.json，浏览入口逐项展示。
9. 关系反映代码写入能力，部分分支依赖 --apply、模式选择、待处理数据或外部条件；不保证每次启动都写入所有列出的表。CSV/JSON 中有证据行号，可供后续逐条复核。已停用且网络模式未完成的 invoice_kohyo CSV 实现保留为部署代码能力，不能当作当前启用的 API 采集器；当前 API 程序另列。

公共运行／归档／检查点表现已直接展示在网站和采集图中；辅助写入保存在 auxiliary_relationships，公共管理及调度链路在 processing_pipelines。没有把只读访问误画为辅助表写入。动态 SQL、未解析调用、其他项目和文件权限限制仍可能导致漏项。

## 尚未建立完整关系的来源

| source | 登记名称 | 原因 |
|---|---|---|
| `kanpou` | 官報 | 登记 ID 6（kanpou）未找到绑定程序；已有官方官报程序明确使用 ID 17438（kanpo_official），而不是 ID 6。待确认的是旧登记的使用关系，不是官报是否已有采集实现。 |
| `estat` | e-Stat 政府統計 | 登记 ID 7 的 estat 在当前可读代码中只发现来源初始化登记，没有找到使用该 source code 的采集程序、调度入口或完整写表链路。 |
| `data_go_jp` | DATA.GO.JP | 旧登记 ID 8（data_go_jp）未找到直接绑定；现已读取线上 data_go_jp_catalog.py，代码使用新登记 data_go_jp_catalog（ID 18976），并非旧 ID。 |
| `resas` | RESAS API | 未找到绑定 resas 的项目采集入库实现；进一步联网核查发现，该登记指向的旧 RESAS API 已被官方公告停止提供。 |
| `nichibenren` | 日弁連 弁護士検索 | nichibenren 这条登记未找到直接绑定；现有 bengoshikai.py 使用独立的 bengoshikai 来源编号和网站，不是直接使用 nichibenren 的登记 ID。 |
| `jicpa` | 公認会計士検索 | 登记 ID 34（jicpa）未找到程序使用；已确认 jicpa_registry.py 使用 SOURCE_CODE="jicpa_registry"（ID 123），写入 professionals。 |
| `courts` | 裁判所 判例検索 | 登记 ID 38（courts）未找到直接绑定；现有程序以 courts_hanrei（ID 124）登记并写表。 |
| `ip_courts` | 知的財産高等裁判所 | 未找到绑定 ip_courts 的专用程序；进一步检查发现其官网已迁移到法院主站，现有通用判例程序有知财检索分支，但未核实该分支的实际运行与覆盖。 |
| `jplatpat` | J-PlatPat | field_lineage 声称 jplatpat 通过 gbizinfo_html.py 的 target 05 写知财表，但当前该文件没有对应知财写入实现，声明与代码不符。现有相关程序使用 gbizinfo 或 jpo_ip_api 等其他 source code。 |

后续 URL 核查已确认 kanpou 旧网址跳转到 kanpo_official 的官方站点，也确认 data_go_jp 门户与 data_go_jp_catalog 的 API 属于同一平台。网站关联不自动成为 source_id 的程序绑定，原登记仍分别保留；具体原因、相似 crawler、覆盖差异和下一步核查记录在浏览入口“待确认来源”。

114 个部署 sources 模块中，113 个建立了业务表关系（含待核实参考）。另一个 trustart_redata_public.py 是竞争产品公开页面调研，输出 JSON，不写 kaisha_db，且其 SOURCE_CODE 未在本次 data_sources 登记中出现，单列为范围例外。

## 重建文件

所有分析与输出脚本均在本目录。保留 evidence 下的快照，依次运行 build_mapping.py、enrich_mapping.py、review_unresolved_sources.py、add_schedules.py、add_processing_lineage.py、add_table_volumes.py、add_latest_increments.py、add_descriptions.py、render_maps.py、build_offline.py、write_report.py。render_maps.py 需要 Pillow 和中文字体。collect_* 脚本只用于显式重新只读核查，不会执行爬虫或加工任务。

浏览交互检查覆盖：证据过滤、EDINET 精确 source 程序分支、待确认来源、11 张 SVG、招聘字段范围、移动端溢出及无外部网络请求。结果在 evidence/browser_checks.json。

## 字段血缘与变更影响（2026-11-05）

打开 [impact.html](impact.html)，按字段名或字段序号查找上游生产、下游消费及路径证据；支持任意模块／来源／API搜索、历史依赖、明确依赖筛选、待核实边界和所有候选传播、模拟停用、本浏览器说明记录以及完整JSON/CSV导出。字段识别使用schema.table.column，序号只作入口。

impact-data.js 来自只读数据库目录及676个部署文件的静态解析，不含源码快照或业务记录。对比2026-11-03与11-05可比较快照中的字段结构和代码摘要；不持续监控，刷新网页不重新采样。私有维护目录 impact_analysis_20261105/refresh.py 可重新只读采集、以当前快照为下次基线构建本地结果，不会部署或修改业务项目。旧基线缺少物化视图字段列、序号、索引和触发器信息，不据此伪造历史差异。
