from pathlib import Path
import csv,json
p=Path(__file__).resolve().parent;b=p.parent;workspace=b.parents[1]
rows=list(csv.DictReader((workspace/'work/ai-display-interface-decision-2026-10-09.nosync/Core1106-RGB666-112pad-pinmap-v0.1.csv').open()))
fixed={'RGB_DE':14,'RGB_HSYNC':12,'RGB_VSYNC':11,'RGB_CLK':13}
for r in rows:
 signal=r['panel_signal'];pin=32-int(signal[6:]) if signal.startswith('RGB_DB') else fixed[signal]
 r['panel_candidate']='CH280QV07A';r['candidate_panel_pin']=pin
 r['panel_drawing_label']='DB'+signal[6:] if signal.startswith('RGB_DB') else {'RGB_DE':'DE','RGB_HSYNC':'HSYNC','RGB_VSYNC':'VSYNC','RGB_CLK':'DOTCLK'}[signal]
 r['panel_source']='CH280QV07A manufacturer brochure page 3 drawing; low resolution, not approved schematic input'
 r['status']='VISUAL_TRANSCRIPTION_CANDIDATE_REQUIRES_VENDOR_CONFIRMATION'
assert len(rows)==22 and len({r['candidate_panel_pin'] for r in rows})==22
assert {r['candidate_panel_pin'] for r in rows}==set(range(11,33))
with (p/'Core1106-CH280QV07A-candidate-crosswalk.csv').open('w',newline='') as f:
 w=csv.DictWriter(f,fieldnames=list(rows[0]));w.writeheader();w.writerows(rows)
gaps=[
 {'item':'backlight_total_current','page2_text':'80mA','page3_drawing':'60mA','decision':'未锁定；不可按80或60任一值放行'},
 {'item':'backlight_wiring','page2_text':'4 LED in paralleling','page3_drawing':'LEDK公共端及LEDA1..4','decision':'CAT4004四路阴极接法不能直接套用，先确认内部结构/来料版本'},
 {'item':'backlight_voltage','page2_text':'Vf 3.2V','page3_drawing':'Vf 3.2V','decision':'仅典型说明，缺少最小/最大及温度范围'},
 {'item':'panel_power','page2_text':'input 3.3V','page3_drawing':'VCC/IOVCC引脚','decision':'缺少VCC/IOVCC容限及完整启动时序'},
 {'item':'RGB_pinout','page2_text':'16/18bit RGB supported','page3_drawing':'50pin table low resolution','decision':'整理22脚候选映射，禁止直接作制造接线'},
 {'item':'timing_and_initialization','page2_text':'ILI9341V interface family','page3_drawing':'IM0..3及复用串行控制脚','decision':'缺RGB门限/时序表及选定模式初始化，控制脚仍未分配'},
 {'item':'manufacturing_version','page2_text':'marketing brochure','page3_drawing':'CH280QV07A V01 drawing dated 2014.09.21','decision':'需厂家确认当前供货版本，不推断2014图纸等于本批来料'},
 {'item':'production_price','page2_text':'price not listed','page3_drawing':'none','decision':'07A无正式1000片报价；不挪用26A历史目录价'}]
(p/'source-conflicts.json').write_text(json.dumps(gaps,ensure_ascii=False,indent=2)+'\n')
print('PASS 22 unique signal / module / panel candidate assignments; source compatibility remains unverified')
