cloud-contracts-v07-r1.json 157 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938
  1. {
  2. "designVersion": "v0.7",
  3. "schemaVersion": "ksf.v0.7",
  4. "contractRevision": "ksf.functions.v0.4",
  5. "deploymentStatus": "design_only_not_deployed",
  6. "title": "云函数接口设计表",
  7. "version": "ksf.functions.v0.4",
  8. "status": "接口合同草案;未实现、未部署、未调用正式接口",
  9. "note": "function表是接口设计清单。报告入库和发布到看板是两次明确调用;云函数代码部署在服务端,不新增一张存放函数代码的数据库表。",
  10. "flow": "助手生成报告 → 员工确认当前版本 → Skill调用入库函数 → 数据库保存成功 → Skill调用看板发布函数 → 看板读取已发布卡片。",
  11. "transport": "建议采用Parse Cloud Code:POST {PARSE_BASE_URL}/functions/{functionName}。实际挂载前缀及现有函数名称需与经理核对。Parse成功返回外层{result:业务响应};传输/认证错误按Parse实际{code,error}处理。",
  12. "auth": "调用者用用户会话或受限服务身份认证,身份与可访问项目从服务上下文取得。masterKey只留在受控后端,不写进Skill、HTML、提示词或请求体。只读查询与人工确认采用不同授权范围。",
  13. "commonInputs": [
  14. {
  15. "name": "requestId",
  16. "label": "请求追踪编号",
  17. "type": "String",
  18. "required": false,
  19. "rule": "写操作必填且稳定幂等;只读操作可由服务分配。"
  20. },
  21. {
  22. "name": "schemaVersion",
  23. "label": "服务合同版本",
  24. "type": "String",
  25. "required": false,
  26. "rule": "入库验证/提交必填;其他接口按合同兼容处理。"
  27. }
  28. ],
  29. "response": [
  30. {
  31. "name": "requestId",
  32. "label": "请求追踪编号",
  33. "type": "String",
  34. "required": true,
  35. "rule": "回传或服务生成。"
  36. },
  37. {
  38. "name": "schemaVersion",
  39. "label": "服务合同版本",
  40. "type": "String",
  41. "required": true,
  42. "rule": "已部署合同版本。"
  43. },
  44. {
  45. "name": "ok",
  46. "label": "请求是否被接受/处理",
  47. "type": "Boolean",
  48. "required": true,
  49. "rule": "true可能只是已排队,写入是否成功须看status和逐条回执。"
  50. },
  51. {
  52. "name": "status",
  53. "label": "处理状态",
  54. "type": "String",
  55. "required": true,
  56. "rule": "读操作ok;写操作按各接口枚举。"
  57. },
  58. {
  59. "name": "data",
  60. "label": "接口业务结果",
  61. "type": "Object",
  62. "required": false,
  63. "rule": "按各函数返回字段定义。"
  64. },
  65. {
  66. "name": "errors",
  67. "label": "可核查错误",
  68. "type": "Array",
  69. "required": true,
  70. "rule": "{code,message,itemKey?,field?,retryable};成功时为空。"
  71. }
  72. ],
  73. "errors": [
  74. "AUTH_REQUIRED",
  75. "FORBIDDEN",
  76. "SCHEMA_VERSION_UNSUPPORTED",
  77. "VALIDATION_FAILED",
  78. "REFERENCE_NOT_FOUND",
  79. "IDEMPOTENCY_CONFLICT",
  80. "VERSION_CONFLICT",
  81. "UPLOAD_INCOMPLETE",
  82. "IMPORT_FAILED",
  83. "CAPABILITY_UNAVAILABLE",
  84. "REPORT_NOT_CONFIRMED",
  85. "REPORT_CONTENT_CHANGED",
  86. "REPORT_NOT_READY",
  87. "DASHBOARD_PUBLISH_FAILED",
  88. "NOISE_REASON_REQUIRED",
  89. "NOISE_CONTEXT_REQUIRED",
  90. "NOISE_CONTENT_CHANGED",
  91. "NOISE_REVIEW_REQUIRED"
  92. ],
  93. "constraints": [
  94. "ksfPrepareFileUpload只准备传输;文件字节必须真正上传,ksfRegisterSource核验后才登记来源。",
  95. "Skill生成并提取候选内容,服务端按字段合同验证和落库;云函数不把任意文本自动当成已确认业务事实。",
  96. "通用入库不能绕过项目阶段、人工确认、问卷答案应用等专门操作;allowedImportClasses仅为候选,实际可写字段按身份和操作裁剪。",
  97. "只读函数不写业务表;校验函数不落业务成果。预校验结果不能代替提交时再次检查。",
  98. "任务队列、事务、唯一约束、并发控制、文件大小和分页上限均按实际平台验证;不能仅靠提示词保证。",
  99. "员工对具体报告版本的确认是正式入库前置条件;确认来源必须可核验,助手不能自行伪造。",
  100. "ksfSubmitImport只负责入库,ksfPublishToDashboard负责独立发布。发布可复用同一报告内容,通过状态和卡片引用控制展示,无须假定复制整份数据。",
  101. "入库成功、发布成功、看板查询可见与浏览器刷新分别记录和验收。报告修改重新确认,入库失败不发布,发布失败单独重试。",
  102. "先完整保存原始记录,再保存筛选结果;不修改rawPayload、不删除噪声,也不把平台没有返回的字段冒充上游字段。",
  103. "未判断、噪声和已判断可用分开。正式样本只能使用当前范围、当前规则、当前内容的有效isNoise=false;true排除,null/缺失列为待判断。",
  104. "相同平台真实对象ID、当前判定所需内容指纹、研究范围和规则版本一致时才能跨采集复用。idOrigin不是upstream时,不自动跨批次复用;整条payloadHash变化不能单独说明正文变化。",
  105. "同一原始记录可有多个研究范围的判断。顶层9字段展示最近判断,noiseHistory保留各范围历史;查询必须匹配scope、ruleVersion、contentHash的同一条记录,并取该组合最新有效结论。",
  106. "模型或规则不能无声覆盖同范围的人工判断。人工修订必须基于最新版本追加历史。",
  107. "记录真实样本总数、噪声数、待判断数、有效数和去重口径。噪声变化后已有报告不静默改写,应标记受影响证据及待复核问题,必要时重算为新报告版本,经员工确认、入库、发布。",
  108. "接口补充ksf.functions.v0.4独立于数据库ksf.v0.7;本次不改表、不部署云函数、不导入样本。布尔false不得被当作缺失。"
  109. ],
  110. "allowedImportClasses": [
  111. "KfSource",
  112. "KfSession",
  113. "KfInsight",
  114. "KfArtifact",
  115. "KfOpportunity",
  116. "KfCategory",
  117. "KfCategoryRelation",
  118. "KfProduct",
  119. "KfEvidence",
  120. "KfEvidenceLink",
  121. "KfMarketMetric",
  122. "KfAssessment",
  123. "KfConcept",
  124. "KfReviewIssue",
  125. "KfSupplier",
  126. "KfMaterial",
  127. "KfProcess",
  128. "KfStandard",
  129. "KfSupplyQuote",
  130. "KfFormulaItem",
  131. "KfRawXhsNote",
  132. "KfRawXhsComment",
  133. "KfRawDouyinVideo",
  134. "KfRawDouyinComment",
  135. "KfRawTaobaoItem",
  136. "KfRawTaobaoReview",
  137. "KfRawJdItem",
  138. "KfRawJdReview",
  139. "KfRawBilibiliPost",
  140. "KfRaw1688Offer",
  141. "KfSku",
  142. "KfRetailPriceSnapshot",
  143. "KfProcessStep",
  144. "KfQuestionnaireQuestion"
  145. ],
  146. "functions": [
  147. {
  148. "name": "ksfGetIngestContract",
  149. "label": "读取入库字段规则",
  150. "group": "基础与文件",
  151. "caller": "Skill",
  152. "purpose": "取得当前表、可写字段、数据类型、必填、枚举、映射和限制,避免Skill使用过期Schema。",
  153. "inputs": [
  154. {
  155. "name": "clientSchemaVersion",
  156. "label": "Skill使用的结构版本",
  157. "type": "String",
  158. "required": false,
  159. "rule": "本轮使用ksf.v0.7。结构版本与contractRevision分别校验。"
  160. },
  161. {
  162. "name": "clientContractRevision",
  163. "label": "客户端接口修订号",
  164. "type": "String",
  165. "required": false,
  166. "rule": "本补充为ksf.functions.v0.4;不支持时明确返回能力或版本错误。"
  167. }
  168. ],
  169. "returns": [
  170. {
  171. "name": "schemaVersion",
  172. "label": "服务合同版本",
  173. "type": "String",
  174. "required": true,
  175. "rule": "ksf.v0.7或服务公布的兼容版本。"
  176. },
  177. {
  178. "name": "allowedClasses",
  179. "label": "允许导入的表及字段",
  180. "type": "Array",
  181. "required": true,
  182. "rule": "按调用身份裁剪;含各表的版本与类型规则。"
  183. },
  184. {
  185. "name": "limits",
  186. "label": "批量和文件限制",
  187. "type": "Object",
  188. "required": true,
  189. "rule": "实际部署配置;不能预先假定固定大小或数量。"
  190. },
  191. {
  192. "name": "capabilities",
  193. "label": "已部署能力",
  194. "type": "Object",
  195. "required": true,
  196. "rule": "标明文件上传、可信员工确认、独立报告发布、异步任务、知识同步是否实际可用。 同时公布噪声判定能力、范围键、规则版本、内容指纹规范及查询模式;未实现时必须明确不可用。"
  197. },
  198. {
  199. "name": "contractRevision",
  200. "label": "接口修订号",
  201. "type": "String",
  202. "required": true,
  203. "rule": "ksf.functions.v0.4;数据库结构仍为ksf.v0.7,不新增表字段。"
  204. },
  205. {
  206. "name": "noiseScopes",
  207. "label": "登记的研究范围",
  208. "type": "Array",
  209. "required": true,
  210. "rule": "[{id,label,scopeRevision,status,include,exclude,focus,allowedRuleVersions}];只能选择status=active且当前身份可用的项。设计附件的defined不等于服务已激活。"
  211. },
  212. {
  213. "name": "noiseRuleVersions",
  214. "label": "登记的筛选规则",
  215. "type": "Array",
  216. "required": true,
  217. "rule": "[{id,label,status,scopeIds,allowedClasses,fingerprintSpecId,allowedMethods,rules}];范围与规则必须匹配。"
  218. },
  219. {
  220. "name": "fingerprintSpecs",
  221. "label": "内容指纹规范",
  222. "type": "Array",
  223. "required": true,
  224. "rule": "返回本补充的投影、换行/Unicode规范、规范JSON、哈希域前缀和版本;服务和Skill使用同一共享实现。"
  225. }
  226. ],
  227. "reads": [],
  228. "writes": [],
  229. "rules": [
  230. "读取部署中的服务规则,不用正式库Schema快照代替业务校验。",
  231. "所有接口名称和路径均为首版设计;部署前与经理现有函数核对,避免重复开发。",
  232. "本补充附件noise-registry.json是设计参考,不是运行时授权。服务仅返回真实部署和授权范围;capabilities.noiseAssessment=false时不得通过本地登记表绕过不可用状态。",
  233. "正文规则第一版仅支持7张社媒/评论表;淘宝商品、京东商品和1688货源保留待判断,不用不完整文本规则替代商品/货源筛选。"
  234. ],
  235. "optional": false,
  236. "status": "设计新增 · 未实现/未部署",
  237. "route": "POST {PARSE_BASE_URL}/functions/ksfGetIngestContract",
  238. "basis": [
  239. "C09",
  240. "C03",
  241. "C05"
  242. ]
  243. },
  244. {
  245. "name": "ksfPrepareFileUpload",
  246. "label": "准备报告和附件上传",
  247. "group": "基础与文件",
  248. "caller": "Skill",
  249. "purpose": "取得文件上传方式、大小限制和上传凭证;文件内容通过专用文件接口传输。",
  250. "inputs": [
  251. {
  252. "name": "requestId",
  253. "label": "本次准备请求编号",
  254. "type": "String",
  255. "required": true,
  256. "rule": "同一文件上传重试保持稳定。"
  257. },
  258. {
  259. "name": "fileName",
  260. "label": "文件名",
  261. "type": "String",
  262. "required": true,
  263. "rule": "保留原名用于展示,存储路径由服务生成。"
  264. },
  265. {
  266. "name": "contentType",
  267. "label": "文件类型",
  268. "type": "String",
  269. "required": true,
  270. "rule": "如text/html、application/json。"
  271. },
  272. {
  273. "name": "sizeBytes",
  274. "label": "文件字节数",
  275. "type": "Number",
  276. "required": true,
  277. "rule": "非负整数;服务校验上限。"
  278. },
  279. {
  280. "name": "sha256",
  281. "label": "文件内容指纹",
  282. "type": "String",
  283. "required": true,
  284. "rule": "用于上传后核验及去重。"
  285. }
  286. ],
  287. "returns": [
  288. {
  289. "name": "upload",
  290. "label": "上传方式",
  291. "type": "Object",
  292. "required": true,
  293. "rule": "{mode,method,url,headers?,expiresAt?,receiptRequirements};实际适配Parse Files或对象存储。临时凭证只在本次传输使用。"
  294. },
  295. {
  296. "name": "limits",
  297. "label": "实际限制",
  298. "type": "Object",
  299. "required": true,
  300. "rule": "支持的类型、最大体积等。"
  301. }
  302. ],
  303. "reads": [],
  304. "writes": [],
  305. "rules": [
  306. "返回准备信息不表示文件已上传。Skill必须继续执行upload指定的文件传输,再调用ksfRegisterSource。",
  307. "不要把本机路径或临时签名链接当成共享文件地址。上传适配器的选择属于部署待定项。"
  308. ],
  309. "optional": false,
  310. "status": "设计新增 · 未实现/未部署",
  311. "route": "POST {PARSE_BASE_URL}/functions/ksfPrepareFileUpload",
  312. "basis": [
  313. "C09",
  314. "C03",
  315. "C05"
  316. ]
  317. },
  318. {
  319. "name": "ksfRegisterSource",
  320. "label": "登记原始文件与资料",
  321. "group": "基础与文件",
  322. "caller": "Skill",
  323. "purpose": "文件上传完成后登记共享文件引用;纯文本或JSON资料也可直接登记,返回sourceId。",
  324. "inputs": [
  325. {
  326. "name": "requestId",
  327. "label": "本次登记请求编号",
  328. "type": "String",
  329. "required": true,
  330. "rule": "相同身份下稳定幂等。"
  331. },
  332. {
  333. "name": "source",
  334. "label": "资料内容和来源",
  335. "type": "Object",
  336. "required": true,
  337. "rule": "{title,sourceKind,fileReceipt?,rawText?,payload?,sourceUrl?,platform?,collectedAt?,dataMode};至少有真实文件、内容或可核验来源。"
  338. },
  339. {
  340. "name": "contentHash",
  341. "label": "原始内容指纹",
  342. "type": "String",
  343. "required": true,
  344. "rule": "服务核验;不能只信任客户端声称已上传。"
  345. }
  346. ],
  347. "returns": [
  348. {
  349. "name": "sourceId",
  350. "label": "来源记录编号",
  351. "type": "String",
  352. "required": true,
  353. "rule": "对应KfSource.objectId。"
  354. },
  355. {
  356. "name": "operation",
  357. "label": "保存结果",
  358. "type": "String",
  359. "required": true,
  360. "rule": "created / unchanged;内容变更走新来源版本。"
  361. },
  362. {
  363. "name": "file",
  364. "label": "已核验共享文件引用",
  365. "type": "Object",
  366. "required": false,
  367. "rule": "纯文本资料可空;文件输入应有可访问的File引用。"
  368. }
  369. ],
  370. "reads": [
  371. {
  372. "table": "KfSource",
  373. "fields": [
  374. "externalKey",
  375. "contentHash",
  376. "file"
  377. ],
  378. "purpose": "查重及核验文件。"
  379. }
  380. ],
  381. "writes": [
  382. {
  383. "table": "KfSource",
  384. "fields": [
  385. "title",
  386. "payload",
  387. "rawText",
  388. "file",
  389. "sourceKind",
  390. "sourceUrl",
  391. "contentHash",
  392. "collectedAt",
  393. "dataMode",
  394. "ingestedAt"
  395. ],
  396. "purpose": "保存原件、内容与来源。"
  397. }
  398. ],
  399. "rules": [
  400. "先验证文件实际存在和访问范围;文件失败时不能登记为上传完成。",
  401. "内容相同但提供方、权限或采集批次不同,不可仅凭哈希跨范围合并。"
  402. ],
  403. "optional": false,
  404. "status": "设计新增 · 未实现/未部署",
  405. "route": "POST {PARSE_BASE_URL}/functions/ksfRegisterSource",
  406. "basis": [
  407. "C09",
  408. "C03",
  409. "C05"
  410. ]
  411. },
  412. {
  413. "name": "ksfRecordVocRun",
  414. "label": "记录VOC采集执行",
  415. "group": "入库与回执",
  416. "caller": "采集Skill",
  417. "purpose": "保存采集请求、真实采集模式、开始/结束状态、用量与完整响应来源;不负责执行VOC采集。",
  418. "inputs": [
  419. {
  420. "name": "requestId",
  421. "label": "执行事件请求编号",
  422. "type": "String",
  423. "required": true,
  424. "rule": "同一次状态事件重试不重复记录。"
  425. },
  426. {
  427. "name": "runKey",
  428. "label": "本次采集稳定编号",
  429. "type": "String",
  430. "required": true,
  431. "rule": "同一次采集开始到结束保持不变。"
  432. },
  433. {
  434. "name": "run",
  435. "label": "采集执行信息",
  436. "type": "Object",
  437. "required": true,
  438. "rule": "对应KfVocRun的平台、工具、查询条件、collectionMode、status、startedAt/finishedAt等。"
  439. }
  440. ],
  441. "returns": [
  442. {
  443. "name": "runId",
  444. "label": "采集执行编号",
  445. "type": "String",
  446. "required": true,
  447. "rule": "就是实际保存的KfVocRun.objectId;不是runKey、requestId、usageTraceId或上游任务ID。"
  448. },
  449. {
  450. "name": "status",
  451. "label": "已记录的执行状态",
  452. "type": "String",
  453. "required": true,
  454. "rule": "pending / running / succeeded / partial / failed / stale。"
  455. }
  456. ],
  457. "reads": [
  458. {
  459. "table": "KfVocRun",
  460. "fields": [
  461. "externalKey",
  462. "status",
  463. "startedAt",
  464. "sourceRef"
  465. ],
  466. "purpose": "查找同一次执行并校验状态更新。"
  467. }
  468. ],
  469. "writes": [
  470. {
  471. "table": "KfVocRun",
  472. "fields": [
  473. "platform",
  474. "toolName",
  475. "interfaceId",
  476. "requestContext",
  477. "collectionMode",
  478. "status",
  479. "startedAt",
  480. "finishedAt",
  481. "usageTraceId",
  482. "sourceRef",
  483. "usage"
  484. ],
  485. "purpose": "记录实际采集结果。"
  486. }
  487. ],
  488. "rules": [
  489. "只有获授权的采集服务可写采集结果,状态和live/sample以真实上游结果为准。",
  490. "采集成功与结构化入库成功分别记录。",
  491. "返回的runId可构造{__type:\"Pointer\",className:\"KfVocRun\",objectId:runId},写KfRaw*.runRef;服务再次检查目标存在、类型与访问范围。普通字符串不能冒充Pointer。",
  492. "start事件可先保存没有sourceRef的执行记录;登记原始来源后,end事件沿同一runKey更新run.sourceRef并返回同一runId。不得为绑定来源另建一次采集;不向schema增添rawResponseRef。"
  493. ],
  494. "optional": false,
  495. "status": "设计新增 · 未实现/未部署",
  496. "route": "POST {PARSE_BASE_URL}/functions/ksfRecordVocRun",
  497. "basis": [
  498. "C09",
  499. "C03",
  500. "C05"
  501. ]
  502. },
  503. {
  504. "name": "ksfValidateImport",
  505. "label": "校验结构化入库内容",
  506. "group": "入库与回执",
  507. "caller": "Skill",
  508. "purpose": "在写库前检查结构化候选数据,返回逐字段错误和依赖顺序;不会生成报告或写入业务成果。",
  509. "inputs": [
  510. {
  511. "name": "schemaVersion",
  512. "label": "结构版本",
  513. "type": "String",
  514. "required": true,
  515. "rule": "ksf.v0.7或服务公布的兼容版本。"
  516. },
  517. {
  518. "name": "sourceId",
  519. "label": "输入资料编号",
  520. "type": "String",
  521. "required": true,
  522. "rule": "真实存在且调用者可访问。"
  523. },
  524. {
  525. "name": "items",
  526. "label": "待入库条目",
  527. "type": "Array",
  528. "required": true,
  529. "rule": "每条含{itemKey,className,externalKey,data,dependsOn?};data按表规则校验。"
  530. },
  531. {
  532. "name": "reportConfirmations",
  533. "label": "报告确认凭据",
  534. "type": "Array",
  535. "required": false,
  536. "rule": "正式报告条目必填;预校验检查与待提交正文一致,提交时仍重新验证。"
  537. },
  538. {
  539. "name": "noiseAssessments",
  540. "label": "首次噪声判断的执行依据",
  541. "type": "Array",
  542. "required": false,
  543. "rule": "原始条目携带首次规则或模型判断时必填;[{itemKey,provenance:{executionEventRef,ruleVersion,modelVersion?}}]。服务核验实际执行事件、规则、输入内容及输出与items内候选一致,再保存来源历史。人工修订使用专门函数。"
  544. }
  545. ],
  546. "returns": [
  547. {
  548. "name": "valid",
  549. "label": "是否通过校验",
  550. "type": "Boolean",
  551. "required": true,
  552. "rule": "仅表示当前校验通过,提交时还要重新校验权限和并发变化。"
  553. },
  554. {
  555. "name": "itemResults",
  556. "label": "逐条校验结果",
  557. "type": "Array",
  558. "required": true,
  559. "rule": "{itemKey,valid,errors:[{field,code,message}],warnings}。"
  560. },
  561. {
  562. "name": "writePlan",
  563. "label": "依赖顺序",
  564. "type": "Array",
  565. "required": false,
  566. "rule": "只返回可执行计划;不表示已经保存。"
  567. }
  568. ],
  569. "reads": [
  570. {
  571. "table": "KfSource",
  572. "fields": [
  573. "objectId",
  574. "dataMode"
  575. ],
  576. "purpose": "检查来源和采集模式。"
  577. },
  578. {
  579. "table": "KfSource",
  580. "fields": [
  581. "objectId",
  582. "externalKey"
  583. ],
  584. "purpose": "仅在需要核对重复或引用时按身份查询。"
  585. },
  586. {
  587. "table": "KfSession",
  588. "fields": [
  589. "objectId",
  590. "externalKey"
  591. ],
  592. "purpose": "仅在需要核对重复或引用时按身份查询。"
  593. },
  594. {
  595. "table": "KfInsight",
  596. "fields": [
  597. "objectId",
  598. "externalKey"
  599. ],
  600. "purpose": "仅在需要核对重复或引用时按身份查询。"
  601. },
  602. {
  603. "table": "KfArtifact",
  604. "fields": [
  605. "objectId",
  606. "externalKey"
  607. ],
  608. "purpose": "仅在需要核对重复或引用时按身份查询。"
  609. },
  610. {
  611. "table": "KfOpportunity",
  612. "fields": [
  613. "objectId",
  614. "externalKey"
  615. ],
  616. "purpose": "仅在需要核对重复或引用时按身份查询。"
  617. },
  618. {
  619. "table": "KfCategory",
  620. "fields": [
  621. "objectId",
  622. "externalKey"
  623. ],
  624. "purpose": "仅在需要核对重复或引用时按身份查询。"
  625. },
  626. {
  627. "table": "KfCategoryRelation",
  628. "fields": [
  629. "objectId",
  630. "externalKey"
  631. ],
  632. "purpose": "仅在需要核对重复或引用时按身份查询。"
  633. },
  634. {
  635. "table": "KfProduct",
  636. "fields": [
  637. "objectId",
  638. "externalKey"
  639. ],
  640. "purpose": "仅在需要核对重复或引用时按身份查询。"
  641. },
  642. {
  643. "table": "KfEvidence",
  644. "fields": [
  645. "objectId",
  646. "externalKey"
  647. ],
  648. "purpose": "仅在需要核对重复或引用时按身份查询。"
  649. },
  650. {
  651. "table": "KfEvidenceLink",
  652. "fields": [
  653. "objectId",
  654. "externalKey"
  655. ],
  656. "purpose": "仅在需要核对重复或引用时按身份查询。"
  657. },
  658. {
  659. "table": "KfMarketMetric",
  660. "fields": [
  661. "objectId",
  662. "externalKey"
  663. ],
  664. "purpose": "仅在需要核对重复或引用时按身份查询。"
  665. },
  666. {
  667. "table": "KfAssessment",
  668. "fields": [
  669. "objectId",
  670. "externalKey"
  671. ],
  672. "purpose": "仅在需要核对重复或引用时按身份查询。"
  673. },
  674. {
  675. "table": "KfConcept",
  676. "fields": [
  677. "objectId",
  678. "externalKey"
  679. ],
  680. "purpose": "仅在需要核对重复或引用时按身份查询。"
  681. },
  682. {
  683. "table": "KfReviewIssue",
  684. "fields": [
  685. "objectId",
  686. "externalKey"
  687. ],
  688. "purpose": "仅在需要核对重复或引用时按身份查询。"
  689. },
  690. {
  691. "table": "KfSupplier",
  692. "fields": [
  693. "objectId",
  694. "externalKey"
  695. ],
  696. "purpose": "仅在需要核对重复或引用时按身份查询。"
  697. },
  698. {
  699. "table": "KfMaterial",
  700. "fields": [
  701. "objectId",
  702. "externalKey"
  703. ],
  704. "purpose": "仅在需要核对重复或引用时按身份查询。"
  705. },
  706. {
  707. "table": "KfProcess",
  708. "fields": [
  709. "objectId",
  710. "externalKey"
  711. ],
  712. "purpose": "仅在需要核对重复或引用时按身份查询。"
  713. },
  714. {
  715. "table": "KfStandard",
  716. "fields": [
  717. "objectId",
  718. "externalKey"
  719. ],
  720. "purpose": "仅在需要核对重复或引用时按身份查询。"
  721. },
  722. {
  723. "table": "KfSupplyQuote",
  724. "fields": [
  725. "objectId",
  726. "externalKey"
  727. ],
  728. "purpose": "仅在需要核对重复或引用时按身份查询。"
  729. },
  730. {
  731. "table": "KfFormulaItem",
  732. "fields": [
  733. "objectId",
  734. "externalKey"
  735. ],
  736. "purpose": "仅在需要核对重复或引用时按身份查询。"
  737. },
  738. {
  739. "table": "KfRawXhsNote",
  740. "fields": [
  741. "objectId",
  742. "externalKey"
  743. ],
  744. "purpose": "仅在需要核对重复或引用时按身份查询。"
  745. },
  746. {
  747. "table": "KfRawXhsComment",
  748. "fields": [
  749. "objectId",
  750. "externalKey"
  751. ],
  752. "purpose": "仅在需要核对重复或引用时按身份查询。"
  753. },
  754. {
  755. "table": "KfRawDouyinVideo",
  756. "fields": [
  757. "objectId",
  758. "externalKey"
  759. ],
  760. "purpose": "仅在需要核对重复或引用时按身份查询。"
  761. },
  762. {
  763. "table": "KfRawDouyinComment",
  764. "fields": [
  765. "objectId",
  766. "externalKey"
  767. ],
  768. "purpose": "仅在需要核对重复或引用时按身份查询。"
  769. },
  770. {
  771. "table": "KfRawTaobaoItem",
  772. "fields": [
  773. "objectId",
  774. "externalKey"
  775. ],
  776. "purpose": "仅在需要核对重复或引用时按身份查询。"
  777. },
  778. {
  779. "table": "KfRawTaobaoReview",
  780. "fields": [
  781. "objectId",
  782. "externalKey"
  783. ],
  784. "purpose": "仅在需要核对重复或引用时按身份查询。"
  785. },
  786. {
  787. "table": "KfRawJdItem",
  788. "fields": [
  789. "objectId",
  790. "externalKey"
  791. ],
  792. "purpose": "仅在需要核对重复或引用时按身份查询。"
  793. },
  794. {
  795. "table": "KfRawJdReview",
  796. "fields": [
  797. "objectId",
  798. "externalKey"
  799. ],
  800. "purpose": "仅在需要核对重复或引用时按身份查询。"
  801. },
  802. {
  803. "table": "KfRawBilibiliPost",
  804. "fields": [
  805. "objectId",
  806. "externalKey"
  807. ],
  808. "purpose": "仅在需要核对重复或引用时按身份查询。"
  809. },
  810. {
  811. "table": "KfRaw1688Offer",
  812. "fields": [
  813. "objectId",
  814. "externalKey"
  815. ],
  816. "purpose": "仅在需要核对重复或引用时按身份查询。"
  817. },
  818. {
  819. "table": "KfSku",
  820. "fields": [
  821. "objectId",
  822. "externalKey"
  823. ],
  824. "purpose": "仅在需要核对重复或引用时按身份查询。"
  825. },
  826. {
  827. "table": "KfRetailPriceSnapshot",
  828. "fields": [
  829. "objectId",
  830. "externalKey"
  831. ],
  832. "purpose": "仅在需要核对重复或引用时按身份查询。"
  833. },
  834. {
  835. "table": "KfProcessStep",
  836. "fields": [
  837. "objectId",
  838. "externalKey"
  839. ],
  840. "purpose": "仅在需要核对重复或引用时按身份查询。"
  841. },
  842. {
  843. "table": "KfQuestionnaireQuestion",
  844. "fields": [
  845. "objectId",
  846. "externalKey"
  847. ],
  848. "purpose": "仅在需要核对重复或引用时按身份查询。"
  849. },
  850. {
  851. "table": "KfRawXhsNote",
  852. "fields": [
  853. "isNoise",
  854. "noiseReason",
  855. "noiseScope",
  856. "noiseRuleVersion",
  857. "noiseMethod",
  858. "noiseAssessedAt",
  859. "noiseAssessedByRef",
  860. "noiseContentHash",
  861. "noiseHistory"
  862. ],
  863. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  864. },
  865. {
  866. "table": "KfRawXhsComment",
  867. "fields": [
  868. "isNoise",
  869. "noiseReason",
  870. "noiseScope",
  871. "noiseRuleVersion",
  872. "noiseMethod",
  873. "noiseAssessedAt",
  874. "noiseAssessedByRef",
  875. "noiseContentHash",
  876. "noiseHistory"
  877. ],
  878. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  879. },
  880. {
  881. "table": "KfRawDouyinVideo",
  882. "fields": [
  883. "isNoise",
  884. "noiseReason",
  885. "noiseScope",
  886. "noiseRuleVersion",
  887. "noiseMethod",
  888. "noiseAssessedAt",
  889. "noiseAssessedByRef",
  890. "noiseContentHash",
  891. "noiseHistory"
  892. ],
  893. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  894. },
  895. {
  896. "table": "KfRawDouyinComment",
  897. "fields": [
  898. "isNoise",
  899. "noiseReason",
  900. "noiseScope",
  901. "noiseRuleVersion",
  902. "noiseMethod",
  903. "noiseAssessedAt",
  904. "noiseAssessedByRef",
  905. "noiseContentHash",
  906. "noiseHistory"
  907. ],
  908. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  909. },
  910. {
  911. "table": "KfRawTaobaoItem",
  912. "fields": [
  913. "isNoise",
  914. "noiseReason",
  915. "noiseScope",
  916. "noiseRuleVersion",
  917. "noiseMethod",
  918. "noiseAssessedAt",
  919. "noiseAssessedByRef",
  920. "noiseContentHash",
  921. "noiseHistory"
  922. ],
  923. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  924. },
  925. {
  926. "table": "KfRawTaobaoReview",
  927. "fields": [
  928. "isNoise",
  929. "noiseReason",
  930. "noiseScope",
  931. "noiseRuleVersion",
  932. "noiseMethod",
  933. "noiseAssessedAt",
  934. "noiseAssessedByRef",
  935. "noiseContentHash",
  936. "noiseHistory"
  937. ],
  938. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  939. },
  940. {
  941. "table": "KfRawJdItem",
  942. "fields": [
  943. "isNoise",
  944. "noiseReason",
  945. "noiseScope",
  946. "noiseRuleVersion",
  947. "noiseMethod",
  948. "noiseAssessedAt",
  949. "noiseAssessedByRef",
  950. "noiseContentHash",
  951. "noiseHistory"
  952. ],
  953. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  954. },
  955. {
  956. "table": "KfRawJdReview",
  957. "fields": [
  958. "isNoise",
  959. "noiseReason",
  960. "noiseScope",
  961. "noiseRuleVersion",
  962. "noiseMethod",
  963. "noiseAssessedAt",
  964. "noiseAssessedByRef",
  965. "noiseContentHash",
  966. "noiseHistory"
  967. ],
  968. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  969. },
  970. {
  971. "table": "KfRawBilibiliPost",
  972. "fields": [
  973. "isNoise",
  974. "noiseReason",
  975. "noiseScope",
  976. "noiseRuleVersion",
  977. "noiseMethod",
  978. "noiseAssessedAt",
  979. "noiseAssessedByRef",
  980. "noiseContentHash",
  981. "noiseHistory"
  982. ],
  983. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  984. },
  985. {
  986. "table": "KfRaw1688Offer",
  987. "fields": [
  988. "isNoise",
  989. "noiseReason",
  990. "noiseScope",
  991. "noiseRuleVersion",
  992. "noiseMethod",
  993. "noiseAssessedAt",
  994. "noiseAssessedByRef",
  995. "noiseContentHash",
  996. "noiseHistory"
  997. ],
  998. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  999. }
  1000. ],
  1001. "writes": [],
  1002. "rules": [
  1003. "检查类型、单位、证据定位、状态、真实/样例标记与目标白名单。",
  1004. "禁止任意类名、系统字段或ACL写入;禁止由报告汇总倒造平台原始记录。",
  1005. "$ref/$id等临时引用由服务解析为真实Pointer;普通字符串不会自动成为外键。",
  1006. "正式报告的确认事件与内容哈希必须一致;抽取的衍生结论仍按证据状态标记,不把员工接受报告等同全部事实已核验。",
  1007. "平台原始条目可携带isNoise/noiseReason/noiseScope/noiseRuleVersion/noiseMethod作为首次规则或模型判断候选;服务核验实际执行来源和内容指纹后写noiseAssessedAt、noiseContentHash、noiseHistory。未提供判断时留空,不能默认可用。人工结果与已有记录的判定修订走ksfSetNoiseAssessment,不用通用入库绕过认证。",
  1008. "isNoise=true须有非空noiseReason,作出判断时范围、规则和方式条件必填。禁止客户端直接写noiseAssessedByRef、noiseAssessedAt、noiseContentHash或noiseHistory;相同原始文件重导不得清空或覆盖人工筛选结果。",
  1009. "噪声原始记录仍可保存;它被排除的是对应研究范围的分析样本,不是入库记录。证据与衍生统计的有效性另按查询和报告口径校验。",
  1010. "item层必须使用className;items[].data顶层残留__className或其他未允许字段时返回VALIDATION_FAILED,定位items[i].data.__className。客户端边界转换删除自身路由标记并回查白名单,不在服务端静默丢字段。不能递归删除rawPayload中真实上游同名键。",
  1011. "初次未判断的isNoise为缺失/null;noiseAssessedAt/noiseAssessedByRef/noiseContentHash/noiseHistory是服务维护字段,本地计算值可放旁路文件,不得混入通用data。首次规则/模型候选需搭配noiseAssessments的真实执行依据。"
  1012. ],
  1013. "optional": false,
  1014. "status": "设计新增 · 未实现/未部署",
  1015. "route": "POST {PARSE_BASE_URL}/functions/ksfValidateImport",
  1016. "basis": [
  1017. "C09",
  1018. "C03",
  1019. "C05"
  1020. ]
  1021. },
  1022. {
  1023. "name": "ksfSubmitImport",
  1024. "label": "提交报告与结构化成果入库",
  1025. "group": "入库与回执",
  1026. "caller": "Skill",
  1027. "purpose": "接收员工已确认的报告及结构化条目,校验后正式入库。报告默认未发布,成功后还需独立调用发布函数。VOC原始数据不受报告内容确认步骤阻塞。",
  1028. "inputs": [
  1029. {
  1030. "name": "requestId",
  1031. "label": "稳定提交编号",
  1032. "type": "String",
  1033. "required": true,
  1034. "rule": "作为幂等键;同一请求相同内容返回已有批次,不重复创建。"
  1035. },
  1036. {
  1037. "name": "schemaVersion",
  1038. "label": "结构版本",
  1039. "type": "String",
  1040. "required": true,
  1041. "rule": "ksf.v0.7或服务公布的兼容版本。"
  1042. },
  1043. {
  1044. "name": "sourceId",
  1045. "label": "原始资料编号",
  1046. "type": "String",
  1047. "required": true,
  1048. "rule": "原件先登记。"
  1049. },
  1050. {
  1051. "name": "vocRunId",
  1052. "label": "VOC执行编号",
  1053. "type": "String",
  1054. "required": false,
  1055. "rule": "外部报告或文件导入可空。"
  1056. },
  1057. {
  1058. "name": "projectId",
  1059. "label": "所属项目编号",
  1060. "type": "String",
  1061. "required": false,
  1062. "rule": "公共行业资料可空;有项目时验证归属。"
  1063. },
  1064. {
  1065. "name": "producer",
  1066. "label": "Skill版本信息",
  1067. "type": "Object",
  1068. "required": true,
  1069. "rule": "{skillName,skillVersion};实际操作者从认证上下文取得。"
  1070. },
  1071. {
  1072. "name": "items",
  1073. "label": "已提取的结构化条目",
  1074. "type": "Array",
  1075. "required": true,
  1076. "rule": "{itemKey,className,externalKey,data,dependsOn?};报告全文写KfArtifact,其他内容拆到对应表。"
  1077. },
  1078. {
  1079. "name": "reportConfirmations",
  1080. "label": "各报告的员工确认凭据",
  1081. "type": "Array",
  1082. "required": false,
  1083. "rule": "items包含正式KfArtifact报告时必填;[{itemKey,confirmationReceipt}],须覆盖每份报告。纯原始数据导入可空。"
  1084. },
  1085. {
  1086. "name": "noiseAssessments",
  1087. "label": "首次噪声判断的执行依据",
  1088. "type": "Array",
  1089. "required": false,
  1090. "rule": "原始条目携带首次规则或模型判断时必填;[{itemKey,provenance:{executionEventRef,ruleVersion,modelVersion?}}]。服务核验实际执行事件、规则、输入内容及输出与items内候选一致,再保存来源历史。人工修订使用专门函数。"
  1091. }
  1092. ],
  1093. "returns": [
  1094. {
  1095. "name": "jobId",
  1096. "label": "入库批次编号",
  1097. "type": "String",
  1098. "required": true,
  1099. "rule": "供查询和重试。"
  1100. },
  1101. {
  1102. "name": "status",
  1103. "label": "当前批次状态",
  1104. "type": "String",
  1105. "required": true,
  1106. "rule": "queued / validating / writing / partial / succeeded / failed。"
  1107. },
  1108. {
  1109. "name": "counts",
  1110. "label": "当前保存数量",
  1111. "type": "Object",
  1112. "required": true,
  1113. "rule": "{created,updated,unchanged,failed,skipped,pending};排队中不表示已完成。"
  1114. },
  1115. {
  1116. "name": "recordRefs",
  1117. "label": "已保存成果引用",
  1118. "type": "Array",
  1119. "required": false,
  1120. "rule": "{className,objectId,operation};不另存一份看板副本。"
  1121. }
  1122. ],
  1123. "reads": [
  1124. {
  1125. "table": "KfSource",
  1126. "fields": [
  1127. "objectId",
  1128. "dataMode"
  1129. ],
  1130. "purpose": "校验原件和数据取得模式。"
  1131. },
  1132. {
  1133. "table": "KfImportJob",
  1134. "fields": [
  1135. "jobKey",
  1136. "status",
  1137. "inputSourceRef"
  1138. ],
  1139. "purpose": "幂等与续传检查。"
  1140. },
  1141. {
  1142. "table": "KfRawXhsNote",
  1143. "fields": [
  1144. "isNoise",
  1145. "noiseReason",
  1146. "noiseScope",
  1147. "noiseRuleVersion",
  1148. "noiseMethod",
  1149. "noiseAssessedAt",
  1150. "noiseAssessedByRef",
  1151. "noiseContentHash",
  1152. "noiseHistory"
  1153. ],
  1154. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  1155. },
  1156. {
  1157. "table": "KfRawXhsComment",
  1158. "fields": [
  1159. "isNoise",
  1160. "noiseReason",
  1161. "noiseScope",
  1162. "noiseRuleVersion",
  1163. "noiseMethod",
  1164. "noiseAssessedAt",
  1165. "noiseAssessedByRef",
  1166. "noiseContentHash",
  1167. "noiseHistory"
  1168. ],
  1169. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  1170. },
  1171. {
  1172. "table": "KfRawDouyinVideo",
  1173. "fields": [
  1174. "isNoise",
  1175. "noiseReason",
  1176. "noiseScope",
  1177. "noiseRuleVersion",
  1178. "noiseMethod",
  1179. "noiseAssessedAt",
  1180. "noiseAssessedByRef",
  1181. "noiseContentHash",
  1182. "noiseHistory"
  1183. ],
  1184. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  1185. },
  1186. {
  1187. "table": "KfRawDouyinComment",
  1188. "fields": [
  1189. "isNoise",
  1190. "noiseReason",
  1191. "noiseScope",
  1192. "noiseRuleVersion",
  1193. "noiseMethod",
  1194. "noiseAssessedAt",
  1195. "noiseAssessedByRef",
  1196. "noiseContentHash",
  1197. "noiseHistory"
  1198. ],
  1199. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  1200. },
  1201. {
  1202. "table": "KfRawTaobaoItem",
  1203. "fields": [
  1204. "isNoise",
  1205. "noiseReason",
  1206. "noiseScope",
  1207. "noiseRuleVersion",
  1208. "noiseMethod",
  1209. "noiseAssessedAt",
  1210. "noiseAssessedByRef",
  1211. "noiseContentHash",
  1212. "noiseHistory"
  1213. ],
  1214. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  1215. },
  1216. {
  1217. "table": "KfRawTaobaoReview",
  1218. "fields": [
  1219. "isNoise",
  1220. "noiseReason",
  1221. "noiseScope",
  1222. "noiseRuleVersion",
  1223. "noiseMethod",
  1224. "noiseAssessedAt",
  1225. "noiseAssessedByRef",
  1226. "noiseContentHash",
  1227. "noiseHistory"
  1228. ],
  1229. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  1230. },
  1231. {
  1232. "table": "KfRawJdItem",
  1233. "fields": [
  1234. "isNoise",
  1235. "noiseReason",
  1236. "noiseScope",
  1237. "noiseRuleVersion",
  1238. "noiseMethod",
  1239. "noiseAssessedAt",
  1240. "noiseAssessedByRef",
  1241. "noiseContentHash",
  1242. "noiseHistory"
  1243. ],
  1244. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  1245. },
  1246. {
  1247. "table": "KfRawJdReview",
  1248. "fields": [
  1249. "isNoise",
  1250. "noiseReason",
  1251. "noiseScope",
  1252. "noiseRuleVersion",
  1253. "noiseMethod",
  1254. "noiseAssessedAt",
  1255. "noiseAssessedByRef",
  1256. "noiseContentHash",
  1257. "noiseHistory"
  1258. ],
  1259. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  1260. },
  1261. {
  1262. "table": "KfRawBilibiliPost",
  1263. "fields": [
  1264. "isNoise",
  1265. "noiseReason",
  1266. "noiseScope",
  1267. "noiseRuleVersion",
  1268. "noiseMethod",
  1269. "noiseAssessedAt",
  1270. "noiseAssessedByRef",
  1271. "noiseContentHash",
  1272. "noiseHistory"
  1273. ],
  1274. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  1275. },
  1276. {
  1277. "table": "KfRaw1688Offer",
  1278. "fields": [
  1279. "isNoise",
  1280. "noiseReason",
  1281. "noiseScope",
  1282. "noiseRuleVersion",
  1283. "noiseMethod",
  1284. "noiseAssessedAt",
  1285. "noiseAssessedByRef",
  1286. "noiseContentHash",
  1287. "noiseHistory"
  1288. ],
  1289. "purpose": "已保存记录的首次导入重放先回读判断历史,避免覆盖人工筛选结果。"
  1290. }
  1291. ],
  1292. "writes": [
  1293. {
  1294. "table": "KfSource",
  1295. "fields": [
  1296. "externalKey",
  1297. "recordState",
  1298. "reviewState",
  1299. "ingestedAt"
  1300. ],
  1301. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1302. },
  1303. {
  1304. "table": "KfSession",
  1305. "fields": [
  1306. "externalKey",
  1307. "recordState",
  1308. "reviewState",
  1309. "ingestedAt"
  1310. ],
  1311. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1312. },
  1313. {
  1314. "table": "KfInsight",
  1315. "fields": [
  1316. "externalKey",
  1317. "recordState",
  1318. "reviewState",
  1319. "ingestedAt"
  1320. ],
  1321. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1322. },
  1323. {
  1324. "table": "KfArtifact",
  1325. "fields": [
  1326. "externalKey",
  1327. "recordState",
  1328. "reviewState",
  1329. "ingestedAt"
  1330. ],
  1331. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1332. },
  1333. {
  1334. "table": "KfOpportunity",
  1335. "fields": [
  1336. "externalKey",
  1337. "recordState",
  1338. "reviewState",
  1339. "ingestedAt"
  1340. ],
  1341. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1342. },
  1343. {
  1344. "table": "KfCategory",
  1345. "fields": [
  1346. "externalKey",
  1347. "recordState",
  1348. "reviewState",
  1349. "ingestedAt"
  1350. ],
  1351. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1352. },
  1353. {
  1354. "table": "KfCategoryRelation",
  1355. "fields": [
  1356. "externalKey",
  1357. "recordState",
  1358. "reviewState",
  1359. "ingestedAt"
  1360. ],
  1361. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1362. },
  1363. {
  1364. "table": "KfProduct",
  1365. "fields": [
  1366. "externalKey",
  1367. "recordState",
  1368. "reviewState",
  1369. "ingestedAt"
  1370. ],
  1371. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1372. },
  1373. {
  1374. "table": "KfEvidence",
  1375. "fields": [
  1376. "externalKey",
  1377. "recordState",
  1378. "reviewState",
  1379. "ingestedAt"
  1380. ],
  1381. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1382. },
  1383. {
  1384. "table": "KfEvidenceLink",
  1385. "fields": [
  1386. "externalKey",
  1387. "recordState",
  1388. "reviewState",
  1389. "ingestedAt"
  1390. ],
  1391. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1392. },
  1393. {
  1394. "table": "KfMarketMetric",
  1395. "fields": [
  1396. "externalKey",
  1397. "recordState",
  1398. "reviewState",
  1399. "ingestedAt"
  1400. ],
  1401. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1402. },
  1403. {
  1404. "table": "KfAssessment",
  1405. "fields": [
  1406. "externalKey",
  1407. "recordState",
  1408. "reviewState",
  1409. "ingestedAt"
  1410. ],
  1411. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1412. },
  1413. {
  1414. "table": "KfConcept",
  1415. "fields": [
  1416. "externalKey",
  1417. "recordState",
  1418. "reviewState",
  1419. "ingestedAt"
  1420. ],
  1421. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1422. },
  1423. {
  1424. "table": "KfReviewIssue",
  1425. "fields": [
  1426. "externalKey",
  1427. "recordState",
  1428. "reviewState",
  1429. "ingestedAt"
  1430. ],
  1431. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1432. },
  1433. {
  1434. "table": "KfSupplier",
  1435. "fields": [
  1436. "externalKey",
  1437. "recordState",
  1438. "reviewState",
  1439. "ingestedAt"
  1440. ],
  1441. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1442. },
  1443. {
  1444. "table": "KfMaterial",
  1445. "fields": [
  1446. "externalKey",
  1447. "recordState",
  1448. "reviewState",
  1449. "ingestedAt"
  1450. ],
  1451. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1452. },
  1453. {
  1454. "table": "KfProcess",
  1455. "fields": [
  1456. "externalKey",
  1457. "recordState",
  1458. "reviewState",
  1459. "ingestedAt"
  1460. ],
  1461. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1462. },
  1463. {
  1464. "table": "KfStandard",
  1465. "fields": [
  1466. "externalKey",
  1467. "recordState",
  1468. "reviewState",
  1469. "ingestedAt"
  1470. ],
  1471. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1472. },
  1473. {
  1474. "table": "KfSupplyQuote",
  1475. "fields": [
  1476. "externalKey",
  1477. "recordState",
  1478. "reviewState",
  1479. "ingestedAt"
  1480. ],
  1481. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1482. },
  1483. {
  1484. "table": "KfFormulaItem",
  1485. "fields": [
  1486. "externalKey",
  1487. "recordState",
  1488. "reviewState",
  1489. "ingestedAt"
  1490. ],
  1491. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1492. },
  1493. {
  1494. "table": "KfRawXhsNote",
  1495. "fields": [
  1496. "externalKey",
  1497. "recordState",
  1498. "reviewState",
  1499. "ingestedAt",
  1500. "isNoise",
  1501. "noiseReason",
  1502. "noiseScope",
  1503. "noiseRuleVersion",
  1504. "noiseMethod",
  1505. "noiseAssessedAt",
  1506. "noiseAssessedByRef",
  1507. "noiseContentHash",
  1508. "noiseHistory"
  1509. ],
  1510. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1511. },
  1512. {
  1513. "table": "KfRawXhsComment",
  1514. "fields": [
  1515. "externalKey",
  1516. "recordState",
  1517. "reviewState",
  1518. "ingestedAt",
  1519. "isNoise",
  1520. "noiseReason",
  1521. "noiseScope",
  1522. "noiseRuleVersion",
  1523. "noiseMethod",
  1524. "noiseAssessedAt",
  1525. "noiseAssessedByRef",
  1526. "noiseContentHash",
  1527. "noiseHistory"
  1528. ],
  1529. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1530. },
  1531. {
  1532. "table": "KfRawDouyinVideo",
  1533. "fields": [
  1534. "externalKey",
  1535. "recordState",
  1536. "reviewState",
  1537. "ingestedAt",
  1538. "isNoise",
  1539. "noiseReason",
  1540. "noiseScope",
  1541. "noiseRuleVersion",
  1542. "noiseMethod",
  1543. "noiseAssessedAt",
  1544. "noiseAssessedByRef",
  1545. "noiseContentHash",
  1546. "noiseHistory"
  1547. ],
  1548. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1549. },
  1550. {
  1551. "table": "KfRawDouyinComment",
  1552. "fields": [
  1553. "externalKey",
  1554. "recordState",
  1555. "reviewState",
  1556. "ingestedAt",
  1557. "isNoise",
  1558. "noiseReason",
  1559. "noiseScope",
  1560. "noiseRuleVersion",
  1561. "noiseMethod",
  1562. "noiseAssessedAt",
  1563. "noiseAssessedByRef",
  1564. "noiseContentHash",
  1565. "noiseHistory"
  1566. ],
  1567. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1568. },
  1569. {
  1570. "table": "KfRawTaobaoItem",
  1571. "fields": [
  1572. "externalKey",
  1573. "recordState",
  1574. "reviewState",
  1575. "ingestedAt",
  1576. "isNoise",
  1577. "noiseReason",
  1578. "noiseScope",
  1579. "noiseRuleVersion",
  1580. "noiseMethod",
  1581. "noiseAssessedAt",
  1582. "noiseAssessedByRef",
  1583. "noiseContentHash",
  1584. "noiseHistory"
  1585. ],
  1586. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1587. },
  1588. {
  1589. "table": "KfRawTaobaoReview",
  1590. "fields": [
  1591. "externalKey",
  1592. "recordState",
  1593. "reviewState",
  1594. "ingestedAt",
  1595. "isNoise",
  1596. "noiseReason",
  1597. "noiseScope",
  1598. "noiseRuleVersion",
  1599. "noiseMethod",
  1600. "noiseAssessedAt",
  1601. "noiseAssessedByRef",
  1602. "noiseContentHash",
  1603. "noiseHistory"
  1604. ],
  1605. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1606. },
  1607. {
  1608. "table": "KfRawJdItem",
  1609. "fields": [
  1610. "externalKey",
  1611. "recordState",
  1612. "reviewState",
  1613. "ingestedAt",
  1614. "isNoise",
  1615. "noiseReason",
  1616. "noiseScope",
  1617. "noiseRuleVersion",
  1618. "noiseMethod",
  1619. "noiseAssessedAt",
  1620. "noiseAssessedByRef",
  1621. "noiseContentHash",
  1622. "noiseHistory"
  1623. ],
  1624. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1625. },
  1626. {
  1627. "table": "KfRawJdReview",
  1628. "fields": [
  1629. "externalKey",
  1630. "recordState",
  1631. "reviewState",
  1632. "ingestedAt",
  1633. "isNoise",
  1634. "noiseReason",
  1635. "noiseScope",
  1636. "noiseRuleVersion",
  1637. "noiseMethod",
  1638. "noiseAssessedAt",
  1639. "noiseAssessedByRef",
  1640. "noiseContentHash",
  1641. "noiseHistory"
  1642. ],
  1643. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1644. },
  1645. {
  1646. "table": "KfRawBilibiliPost",
  1647. "fields": [
  1648. "externalKey",
  1649. "recordState",
  1650. "reviewState",
  1651. "ingestedAt",
  1652. "isNoise",
  1653. "noiseReason",
  1654. "noiseScope",
  1655. "noiseRuleVersion",
  1656. "noiseMethod",
  1657. "noiseAssessedAt",
  1658. "noiseAssessedByRef",
  1659. "noiseContentHash",
  1660. "noiseHistory"
  1661. ],
  1662. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1663. },
  1664. {
  1665. "table": "KfRaw1688Offer",
  1666. "fields": [
  1667. "externalKey",
  1668. "recordState",
  1669. "reviewState",
  1670. "ingestedAt",
  1671. "isNoise",
  1672. "noiseReason",
  1673. "noiseScope",
  1674. "noiseRuleVersion",
  1675. "noiseMethod",
  1676. "noiseAssessedAt",
  1677. "noiseAssessedByRef",
  1678. "noiseContentHash",
  1679. "noiseHistory"
  1680. ],
  1681. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1682. },
  1683. {
  1684. "table": "KfSku",
  1685. "fields": [
  1686. "externalKey",
  1687. "recordState",
  1688. "reviewState",
  1689. "ingestedAt"
  1690. ],
  1691. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1692. },
  1693. {
  1694. "table": "KfRetailPriceSnapshot",
  1695. "fields": [
  1696. "externalKey",
  1697. "recordState",
  1698. "reviewState",
  1699. "ingestedAt"
  1700. ],
  1701. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1702. },
  1703. {
  1704. "table": "KfProcessStep",
  1705. "fields": [
  1706. "externalKey",
  1707. "recordState",
  1708. "reviewState",
  1709. "ingestedAt"
  1710. ],
  1711. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1712. },
  1713. {
  1714. "table": "KfQuestionnaireQuestion",
  1715. "fields": [
  1716. "externalKey",
  1717. "recordState",
  1718. "reviewState",
  1719. "ingestedAt"
  1720. ],
  1721. "purpose": "按该表允许字段写入;具体data仍须通过独立合同验证。"
  1722. },
  1723. {
  1724. "table": "KfImportJob",
  1725. "fields": [
  1726. "jobKey",
  1727. "inputSourceRef",
  1728. "producer",
  1729. "status",
  1730. "expectedCount",
  1731. "successCount",
  1732. "failureCount",
  1733. "startedAt",
  1734. "finishedAt",
  1735. "vocRunRef"
  1736. ],
  1737. "purpose": "保存批次与真实结果。"
  1738. },
  1739. {
  1740. "table": "KfImportItem",
  1741. "fields": [
  1742. "jobRef",
  1743. "itemKey",
  1744. "targetClass",
  1745. "targetId",
  1746. "businessKey",
  1747. "payloadHash",
  1748. "dependencies",
  1749. "status",
  1750. "operation",
  1751. "attempts",
  1752. "errorCode",
  1753. "errorMessage"
  1754. ],
  1755. "purpose": "保存逐条回执。"
  1756. },
  1757. {
  1758. "table": "KfArtifact",
  1759. "fields": [
  1760. "reportContentHash",
  1761. "contentConfirmedByRef",
  1762. "contentConfirmedAt",
  1763. "contentConfirmationRef",
  1764. "dashboardState"
  1765. ],
  1766. "purpose": "从已核验确认事件保存确认信息,初始化为未发布。"
  1767. }
  1768. ],
  1769. "rules": [
  1770. "服务再次执行校验并保存可重放的输入快照,异步执行必须有持久任务机制;不得在返回后依赖临时进程继续工作。",
  1771. "同一requestId但载荷不同返回IDEMPOTENCY_CONFLICT。部分成功返回partial,失败条目和依赖失败均有结果。",
  1772. "KfProject阶段推进、人工确认、问卷答案应用等状态受专门接口控制,不能用通用入库绕过。",
  1773. "报告、机会和方案保留版本;实际计数只从已确认的写入结果产生。",
  1774. "报告入库必须验证confirmationReceipt对应当前报告版本、内容指纹、项目与员工身份;缺少可信确认时返回REPORT_NOT_CONFIRMED。员工确认字段由服务写入,调用者不能任意指定。",
  1775. "服务端为正式报告设置dashboardState=unpublished,不接收外部覆盖发布元数据。入库完成后由Skill另调ksfPublishToDashboard。",
  1776. "平台原始条目可携带isNoise/noiseReason/noiseScope/noiseRuleVersion/noiseMethod作为首次规则或模型判断候选;服务核验实际执行来源和内容指纹后写noiseAssessedAt、noiseContentHash、noiseHistory。未提供判断时留空,不能默认可用。人工结果与已有记录的判定修订走ksfSetNoiseAssessment,不用通用入库绕过认证。",
  1777. "isNoise=true须有非空noiseReason,作出判断时范围、规则和方式条件必填。禁止客户端直接写noiseAssessedByRef、noiseAssessedAt、noiseContentHash或noiseHistory;相同原始文件重导不得清空或覆盖人工筛选结果。",
  1778. "噪声原始记录仍可保存;它被排除的是对应研究范围的分析样本,不是入库记录。证据与衍生统计的有效性另按查询和报告口径校验。",
  1779. "item层必须使用className;items[].data顶层残留__className或其他未允许字段时返回VALIDATION_FAILED,定位items[i].data.__className。客户端边界转换删除自身路由标记并回查白名单,不在服务端静默丢字段。不能递归删除rawPayload中真实上游同名键。",
  1780. "初次未判断的isNoise为缺失/null;noiseAssessedAt/noiseAssessedByRef/noiseContentHash/noiseHistory是服务维护字段,本地计算值可放旁路文件,不得混入通用data。首次规则/模型候选需搭配noiseAssessments的真实执行依据。"
  1781. ],
  1782. "optional": false,
  1783. "status": "设计新增 · 未实现/未部署",
  1784. "route": "POST {PARSE_BASE_URL}/functions/ksfSubmitImport",
  1785. "basis": [
  1786. "C09",
  1787. "C03",
  1788. "C05"
  1789. ]
  1790. },
  1791. {
  1792. "name": "ksfGetImportResult",
  1793. "label": "查询入库状态与逐条回执",
  1794. "group": "入库与回执",
  1795. "caller": "Skill",
  1796. "purpose": "轮询批次和失败原因,确认排队任务是否真正完成。",
  1797. "inputs": [
  1798. {
  1799. "name": "jobId",
  1800. "label": "批次编号",
  1801. "type": "String",
  1802. "required": true,
  1803. "rule": "只可查看授权批次。"
  1804. },
  1805. {
  1806. "name": "cursor",
  1807. "label": "条目分页游标",
  1808. "type": "String",
  1809. "required": false,
  1810. "rule": "服务生成的稳定游标。"
  1811. },
  1812. {
  1813. "name": "limit",
  1814. "label": "回执条数",
  1815. "type": "Number",
  1816. "required": false,
  1817. "rule": "默认值与上限由部署合同公布。"
  1818. }
  1819. ],
  1820. "returns": [
  1821. {
  1822. "name": "job",
  1823. "label": "批次及计数",
  1824. "type": "Object",
  1825. "required": true,
  1826. "rule": "包含jobId、status和计数。"
  1827. },
  1828. {
  1829. "name": "items",
  1830. "label": "逐条写入回执",
  1831. "type": "Array",
  1832. "required": true,
  1833. "rule": "{itemKey,status,targetClass,targetId,objectId?,updatedAt?,targetSnapshot?,snapshotState,operation,errorCode?,errorMessage?};成功且回读有权访问时objectId=targetId,updatedAt为当前目标记录ISO UTC时间,不是批次或条目时间。"
  1834. },
  1835. {
  1836. "name": "nextCursor",
  1837. "label": "下一页游标",
  1838. "type": "String",
  1839. "required": false,
  1840. "rule": "无更多结果时为空。"
  1841. }
  1842. ],
  1843. "reads": [
  1844. {
  1845. "table": "KfImportJob",
  1846. "fields": [
  1847. "status",
  1848. "successCount",
  1849. "failureCount",
  1850. "expectedCount",
  1851. "summary"
  1852. ],
  1853. "purpose": "查询批次。"
  1854. },
  1855. {
  1856. "table": "KfImportItem",
  1857. "fields": [
  1858. "itemKey",
  1859. "status",
  1860. "targetClass",
  1861. "targetId",
  1862. "operation",
  1863. "errorCode",
  1864. "errorMessage"
  1865. ],
  1866. "purpose": "返回逐条结果。"
  1867. }
  1868. ],
  1869. "writes": [],
  1870. "rules": [
  1871. "succeeded只代表保存及必要关联完成;不表示浏览器页面已经刷新。",
  1872. "返回真实目标编号,避免只回复“上传成功”。",
  1873. "targetId仍是稳定编号;兼容增加objectId别名及updatedAt。targetSnapshot={className,objectId,updatedAt,observedAt,noiseContentHash?,fingerprintSpecId?};从返回时同一份目标记录快照取得。snapshotState=available/unavailable/not_applicable。不可回读时不得伪造时间,保留条目真实入库状态并说明原因。",
  1874. "回执快照不是锁。Skill用快照时间作为expectedUpdatedAt,服务还须对当前文本重新算指纹并原子校验;VERSION_CONFLICT时通过ksfGetRecord重新读取目标,不必重查整批。本修订只加返回字段,不向KfImportItem加字段。"
  1875. ],
  1876. "optional": false,
  1877. "status": "设计新增 · 未实现/未部署",
  1878. "route": "POST {PARSE_BASE_URL}/functions/ksfGetImportResult",
  1879. "basis": [
  1880. "C09",
  1881. "C03",
  1882. "C05"
  1883. ]
  1884. },
  1885. {
  1886. "name": "ksfRetryImport",
  1887. "label": "重试失败入库条目",
  1888. "group": "入库与回执",
  1889. "caller": "Skill",
  1890. "purpose": "重试可恢复失败,复用原业务键和成功回执;修改原载荷应重新校验后提交新的请求。",
  1891. "inputs": [
  1892. {
  1893. "name": "requestId",
  1894. "label": "本次重试编号",
  1895. "type": "String",
  1896. "required": true,
  1897. "rule": "重试操作本身也需幂等。"
  1898. },
  1899. {
  1900. "name": "jobId",
  1901. "label": "原批次编号",
  1902. "type": "String",
  1903. "required": true,
  1904. "rule": "需可写权限。"
  1905. },
  1906. {
  1907. "name": "itemKeys",
  1908. "label": "待重试条目编号",
  1909. "type": "Array",
  1910. "required": false,
  1911. "rule": "省略时只重试允许恢复的失败及受依赖阻塞条目。"
  1912. }
  1913. ],
  1914. "returns": [
  1915. {
  1916. "name": "jobId",
  1917. "label": "原批次编号",
  1918. "type": "String",
  1919. "required": true,
  1920. "rule": "继续关联原批次。"
  1921. },
  1922. {
  1923. "name": "status",
  1924. "label": "重试后状态",
  1925. "type": "String",
  1926. "required": true,
  1927. "rule": "queued / writing / partial / succeeded / failed。"
  1928. },
  1929. {
  1930. "name": "retryItemKeys",
  1931. "label": "已接受重试条目",
  1932. "type": "Array",
  1933. "required": true,
  1934. "rule": "不重复创建已经成功的记录。"
  1935. }
  1936. ],
  1937. "reads": [
  1938. {
  1939. "table": "KfImportJob",
  1940. "fields": [
  1941. "jobKey",
  1942. "status",
  1943. "inputSourceRef"
  1944. ],
  1945. "purpose": "取得原载荷来源与批次。"
  1946. },
  1947. {
  1948. "table": "KfImportItem",
  1949. "fields": [
  1950. "itemKey",
  1951. "status",
  1952. "businessKey",
  1953. "payloadHash",
  1954. "dependencies",
  1955. "attempts"
  1956. ],
  1957. "purpose": "校验重试范围。"
  1958. }
  1959. ],
  1960. "writes": [
  1961. {
  1962. "table": "KfImportJob",
  1963. "fields": [
  1964. "status",
  1965. "successCount",
  1966. "failureCount",
  1967. "finishedAt"
  1968. ],
  1969. "purpose": "重新汇总批次。"
  1970. },
  1971. {
  1972. "table": "KfImportItem",
  1973. "fields": [
  1974. "status",
  1975. "attempts",
  1976. "errorCode",
  1977. "errorMessage",
  1978. "targetId",
  1979. "operation"
  1980. ],
  1981. "purpose": "更新逐条回执。"
  1982. },
  1983. {
  1984. "table": "KfSource",
  1985. "fields": [
  1986. "externalKey",
  1987. "ingestedAt"
  1988. ],
  1989. "purpose": "仅重放原载荷中允许重试的记录。"
  1990. },
  1991. {
  1992. "table": "KfSession",
  1993. "fields": [
  1994. "externalKey",
  1995. "ingestedAt"
  1996. ],
  1997. "purpose": "仅重放原载荷中允许重试的记录。"
  1998. },
  1999. {
  2000. "table": "KfInsight",
  2001. "fields": [
  2002. "externalKey",
  2003. "ingestedAt"
  2004. ],
  2005. "purpose": "仅重放原载荷中允许重试的记录。"
  2006. },
  2007. {
  2008. "table": "KfArtifact",
  2009. "fields": [
  2010. "externalKey",
  2011. "ingestedAt"
  2012. ],
  2013. "purpose": "仅重放原载荷中允许重试的记录。"
  2014. },
  2015. {
  2016. "table": "KfOpportunity",
  2017. "fields": [
  2018. "externalKey",
  2019. "ingestedAt"
  2020. ],
  2021. "purpose": "仅重放原载荷中允许重试的记录。"
  2022. },
  2023. {
  2024. "table": "KfCategory",
  2025. "fields": [
  2026. "externalKey",
  2027. "ingestedAt"
  2028. ],
  2029. "purpose": "仅重放原载荷中允许重试的记录。"
  2030. },
  2031. {
  2032. "table": "KfCategoryRelation",
  2033. "fields": [
  2034. "externalKey",
  2035. "ingestedAt"
  2036. ],
  2037. "purpose": "仅重放原载荷中允许重试的记录。"
  2038. },
  2039. {
  2040. "table": "KfProduct",
  2041. "fields": [
  2042. "externalKey",
  2043. "ingestedAt"
  2044. ],
  2045. "purpose": "仅重放原载荷中允许重试的记录。"
  2046. },
  2047. {
  2048. "table": "KfEvidence",
  2049. "fields": [
  2050. "externalKey",
  2051. "ingestedAt"
  2052. ],
  2053. "purpose": "仅重放原载荷中允许重试的记录。"
  2054. },
  2055. {
  2056. "table": "KfEvidenceLink",
  2057. "fields": [
  2058. "externalKey",
  2059. "ingestedAt"
  2060. ],
  2061. "purpose": "仅重放原载荷中允许重试的记录。"
  2062. },
  2063. {
  2064. "table": "KfMarketMetric",
  2065. "fields": [
  2066. "externalKey",
  2067. "ingestedAt"
  2068. ],
  2069. "purpose": "仅重放原载荷中允许重试的记录。"
  2070. },
  2071. {
  2072. "table": "KfAssessment",
  2073. "fields": [
  2074. "externalKey",
  2075. "ingestedAt"
  2076. ],
  2077. "purpose": "仅重放原载荷中允许重试的记录。"
  2078. },
  2079. {
  2080. "table": "KfConcept",
  2081. "fields": [
  2082. "externalKey",
  2083. "ingestedAt"
  2084. ],
  2085. "purpose": "仅重放原载荷中允许重试的记录。"
  2086. },
  2087. {
  2088. "table": "KfReviewIssue",
  2089. "fields": [
  2090. "externalKey",
  2091. "ingestedAt"
  2092. ],
  2093. "purpose": "仅重放原载荷中允许重试的记录。"
  2094. },
  2095. {
  2096. "table": "KfSupplier",
  2097. "fields": [
  2098. "externalKey",
  2099. "ingestedAt"
  2100. ],
  2101. "purpose": "仅重放原载荷中允许重试的记录。"
  2102. },
  2103. {
  2104. "table": "KfMaterial",
  2105. "fields": [
  2106. "externalKey",
  2107. "ingestedAt"
  2108. ],
  2109. "purpose": "仅重放原载荷中允许重试的记录。"
  2110. },
  2111. {
  2112. "table": "KfProcess",
  2113. "fields": [
  2114. "externalKey",
  2115. "ingestedAt"
  2116. ],
  2117. "purpose": "仅重放原载荷中允许重试的记录。"
  2118. },
  2119. {
  2120. "table": "KfStandard",
  2121. "fields": [
  2122. "externalKey",
  2123. "ingestedAt"
  2124. ],
  2125. "purpose": "仅重放原载荷中允许重试的记录。"
  2126. },
  2127. {
  2128. "table": "KfSupplyQuote",
  2129. "fields": [
  2130. "externalKey",
  2131. "ingestedAt"
  2132. ],
  2133. "purpose": "仅重放原载荷中允许重试的记录。"
  2134. },
  2135. {
  2136. "table": "KfFormulaItem",
  2137. "fields": [
  2138. "externalKey",
  2139. "ingestedAt"
  2140. ],
  2141. "purpose": "仅重放原载荷中允许重试的记录。"
  2142. },
  2143. {
  2144. "table": "KfRawXhsNote",
  2145. "fields": [
  2146. "externalKey",
  2147. "ingestedAt"
  2148. ],
  2149. "purpose": "仅重放原载荷中允许重试的记录。"
  2150. },
  2151. {
  2152. "table": "KfRawXhsComment",
  2153. "fields": [
  2154. "externalKey",
  2155. "ingestedAt"
  2156. ],
  2157. "purpose": "仅重放原载荷中允许重试的记录。"
  2158. },
  2159. {
  2160. "table": "KfRawDouyinVideo",
  2161. "fields": [
  2162. "externalKey",
  2163. "ingestedAt"
  2164. ],
  2165. "purpose": "仅重放原载荷中允许重试的记录。"
  2166. },
  2167. {
  2168. "table": "KfRawDouyinComment",
  2169. "fields": [
  2170. "externalKey",
  2171. "ingestedAt"
  2172. ],
  2173. "purpose": "仅重放原载荷中允许重试的记录。"
  2174. },
  2175. {
  2176. "table": "KfRawTaobaoItem",
  2177. "fields": [
  2178. "externalKey",
  2179. "ingestedAt"
  2180. ],
  2181. "purpose": "仅重放原载荷中允许重试的记录。"
  2182. },
  2183. {
  2184. "table": "KfRawTaobaoReview",
  2185. "fields": [
  2186. "externalKey",
  2187. "ingestedAt"
  2188. ],
  2189. "purpose": "仅重放原载荷中允许重试的记录。"
  2190. },
  2191. {
  2192. "table": "KfRawJdItem",
  2193. "fields": [
  2194. "externalKey",
  2195. "ingestedAt"
  2196. ],
  2197. "purpose": "仅重放原载荷中允许重试的记录。"
  2198. },
  2199. {
  2200. "table": "KfRawJdReview",
  2201. "fields": [
  2202. "externalKey",
  2203. "ingestedAt"
  2204. ],
  2205. "purpose": "仅重放原载荷中允许重试的记录。"
  2206. },
  2207. {
  2208. "table": "KfRawBilibiliPost",
  2209. "fields": [
  2210. "externalKey",
  2211. "ingestedAt"
  2212. ],
  2213. "purpose": "仅重放原载荷中允许重试的记录。"
  2214. },
  2215. {
  2216. "table": "KfRaw1688Offer",
  2217. "fields": [
  2218. "externalKey",
  2219. "ingestedAt"
  2220. ],
  2221. "purpose": "仅重放原载荷中允许重试的记录。"
  2222. },
  2223. {
  2224. "table": "KfSku",
  2225. "fields": [
  2226. "externalKey",
  2227. "ingestedAt"
  2228. ],
  2229. "purpose": "仅重放原载荷中允许重试的记录。"
  2230. },
  2231. {
  2232. "table": "KfRetailPriceSnapshot",
  2233. "fields": [
  2234. "externalKey",
  2235. "ingestedAt"
  2236. ],
  2237. "purpose": "仅重放原载荷中允许重试的记录。"
  2238. },
  2239. {
  2240. "table": "KfProcessStep",
  2241. "fields": [
  2242. "externalKey",
  2243. "ingestedAt"
  2244. ],
  2245. "purpose": "仅重放原载荷中允许重试的记录。"
  2246. },
  2247. {
  2248. "table": "KfQuestionnaireQuestion",
  2249. "fields": [
  2250. "externalKey",
  2251. "ingestedAt"
  2252. ],
  2253. "purpose": "仅重放原载荷中允许重试的记录。"
  2254. }
  2255. ],
  2256. "rules": [
  2257. "不能无条件重试已经成功或正在执行的条目。",
  2258. "网络中断后先查原请求与目标业务键,避免未知写入结果造成重复。"
  2259. ],
  2260. "optional": false,
  2261. "status": "设计新增 · 未实现/未部署",
  2262. "route": "POST {PARSE_BASE_URL}/functions/ksfRetryImport",
  2263. "basis": [
  2264. "C09",
  2265. "C03",
  2266. "C05"
  2267. ]
  2268. },
  2269. {
  2270. "name": "ksfGetRecord",
  2271. "label": "回读成果及其关联",
  2272. "group": "查询与看板",
  2273. "caller": "Skill、助手、看板",
  2274. "purpose": "按真实编号读取报告、机会、方案或原始记录,供入库核验和详情查看。",
  2275. "inputs": [
  2276. {
  2277. "name": "className",
  2278. "label": "目标表名",
  2279. "type": "String",
  2280. "required": true,
  2281. "rule": "只允许服务公布的可读业务表。"
  2282. },
  2283. {
  2284. "name": "objectId",
  2285. "label": "记录编号",
  2286. "type": "String",
  2287. "required": true,
  2288. "rule": "真实数据库编号。"
  2289. },
  2290. {
  2291. "name": "include",
  2292. "label": "关联展开范围",
  2293. "type": "Array",
  2294. "required": false,
  2295. "rule": "仅允许约定关联,不支持任意递归。"
  2296. }
  2297. ],
  2298. "returns": [
  2299. {
  2300. "name": "record",
  2301. "label": "已授权字段",
  2302. "type": "Object",
  2303. "required": true,
  2304. "rule": "字段按角色裁剪;具有噪声复核权限时返回objectId、updatedAt和对应表的正文投影字段,供版本冲突后重算指纹,不返回伪造内容。"
  2305. },
  2306. {
  2307. "name": "related",
  2308. "label": "可读关联记录",
  2309. "type": "Object",
  2310. "required": false,
  2311. "rule": "如来源、证据和项目;超限分页。"
  2312. }
  2313. ],
  2314. "reads": [
  2315. {
  2316. "table": "KfSource",
  2317. "fields": [
  2318. "objectId"
  2319. ],
  2320. "purpose": "按授权范围回读该对象及限定关联。"
  2321. },
  2322. {
  2323. "table": "KfSession",
  2324. "fields": [
  2325. "objectId"
  2326. ],
  2327. "purpose": "按授权范围回读该对象及限定关联。"
  2328. },
  2329. {
  2330. "table": "KfInsight",
  2331. "fields": [
  2332. "objectId"
  2333. ],
  2334. "purpose": "按授权范围回读该对象及限定关联。"
  2335. },
  2336. {
  2337. "table": "KfArtifact",
  2338. "fields": [
  2339. "objectId"
  2340. ],
  2341. "purpose": "按授权范围回读该对象及限定关联。"
  2342. },
  2343. {
  2344. "table": "KfProject",
  2345. "fields": [
  2346. "objectId"
  2347. ],
  2348. "purpose": "按授权范围回读该对象及限定关联。"
  2349. },
  2350. {
  2351. "table": "KfOpportunity",
  2352. "fields": [
  2353. "objectId"
  2354. ],
  2355. "purpose": "按授权范围回读该对象及限定关联。"
  2356. },
  2357. {
  2358. "table": "KfCategory",
  2359. "fields": [
  2360. "objectId"
  2361. ],
  2362. "purpose": "按授权范围回读该对象及限定关联。"
  2363. },
  2364. {
  2365. "table": "KfCategoryRelation",
  2366. "fields": [
  2367. "objectId"
  2368. ],
  2369. "purpose": "按授权范围回读该对象及限定关联。"
  2370. },
  2371. {
  2372. "table": "KfProduct",
  2373. "fields": [
  2374. "objectId"
  2375. ],
  2376. "purpose": "按授权范围回读该对象及限定关联。"
  2377. },
  2378. {
  2379. "table": "KfEvidence",
  2380. "fields": [
  2381. "objectId"
  2382. ],
  2383. "purpose": "按授权范围回读该对象及限定关联。"
  2384. },
  2385. {
  2386. "table": "KfEvidenceLink",
  2387. "fields": [
  2388. "objectId"
  2389. ],
  2390. "purpose": "按授权范围回读该对象及限定关联。"
  2391. },
  2392. {
  2393. "table": "KfMarketMetric",
  2394. "fields": [
  2395. "objectId"
  2396. ],
  2397. "purpose": "按授权范围回读该对象及限定关联。"
  2398. },
  2399. {
  2400. "table": "KfAssessment",
  2401. "fields": [
  2402. "objectId"
  2403. ],
  2404. "purpose": "按授权范围回读该对象及限定关联。"
  2405. },
  2406. {
  2407. "table": "KfConcept",
  2408. "fields": [
  2409. "objectId"
  2410. ],
  2411. "purpose": "按授权范围回读该对象及限定关联。"
  2412. },
  2413. {
  2414. "table": "KfStageEvent",
  2415. "fields": [
  2416. "objectId"
  2417. ],
  2418. "purpose": "按授权范围回读该对象及限定关联。"
  2419. },
  2420. {
  2421. "table": "KfImportJob",
  2422. "fields": [
  2423. "objectId"
  2424. ],
  2425. "purpose": "按授权范围回读该对象及限定关联。"
  2426. },
  2427. {
  2428. "table": "KfImportItem",
  2429. "fields": [
  2430. "objectId"
  2431. ],
  2432. "purpose": "按授权范围回读该对象及限定关联。"
  2433. },
  2434. {
  2435. "table": "KfReviewIssue",
  2436. "fields": [
  2437. "objectId"
  2438. ],
  2439. "purpose": "按授权范围回读该对象及限定关联。"
  2440. },
  2441. {
  2442. "table": "KfSupplier",
  2443. "fields": [
  2444. "objectId"
  2445. ],
  2446. "purpose": "按授权范围回读该对象及限定关联。"
  2447. },
  2448. {
  2449. "table": "KfMaterial",
  2450. "fields": [
  2451. "objectId"
  2452. ],
  2453. "purpose": "按授权范围回读该对象及限定关联。"
  2454. },
  2455. {
  2456. "table": "KfProcess",
  2457. "fields": [
  2458. "objectId"
  2459. ],
  2460. "purpose": "按授权范围回读该对象及限定关联。"
  2461. },
  2462. {
  2463. "table": "KfStandard",
  2464. "fields": [
  2465. "objectId"
  2466. ],
  2467. "purpose": "按授权范围回读该对象及限定关联。"
  2468. },
  2469. {
  2470. "table": "KfSupplyQuote",
  2471. "fields": [
  2472. "objectId"
  2473. ],
  2474. "purpose": "按授权范围回读该对象及限定关联。"
  2475. },
  2476. {
  2477. "table": "KfFormulaItem",
  2478. "fields": [
  2479. "objectId"
  2480. ],
  2481. "purpose": "按授权范围回读该对象及限定关联。"
  2482. },
  2483. {
  2484. "table": "KfVocRun",
  2485. "fields": [
  2486. "objectId"
  2487. ],
  2488. "purpose": "按授权范围回读该对象及限定关联。"
  2489. },
  2490. {
  2491. "table": "KfRawXhsNote",
  2492. "fields": [
  2493. "objectId"
  2494. ],
  2495. "purpose": "按授权范围回读该对象及限定关联。"
  2496. },
  2497. {
  2498. "table": "KfRawXhsComment",
  2499. "fields": [
  2500. "objectId"
  2501. ],
  2502. "purpose": "按授权范围回读该对象及限定关联。"
  2503. },
  2504. {
  2505. "table": "KfRawDouyinVideo",
  2506. "fields": [
  2507. "objectId"
  2508. ],
  2509. "purpose": "按授权范围回读该对象及限定关联。"
  2510. },
  2511. {
  2512. "table": "KfRawDouyinComment",
  2513. "fields": [
  2514. "objectId"
  2515. ],
  2516. "purpose": "按授权范围回读该对象及限定关联。"
  2517. },
  2518. {
  2519. "table": "KfRawTaobaoItem",
  2520. "fields": [
  2521. "objectId"
  2522. ],
  2523. "purpose": "按授权范围回读该对象及限定关联。"
  2524. },
  2525. {
  2526. "table": "KfRawTaobaoReview",
  2527. "fields": [
  2528. "objectId"
  2529. ],
  2530. "purpose": "按授权范围回读该对象及限定关联。"
  2531. },
  2532. {
  2533. "table": "KfRawJdItem",
  2534. "fields": [
  2535. "objectId"
  2536. ],
  2537. "purpose": "按授权范围回读该对象及限定关联。"
  2538. },
  2539. {
  2540. "table": "KfRawJdReview",
  2541. "fields": [
  2542. "objectId"
  2543. ],
  2544. "purpose": "按授权范围回读该对象及限定关联。"
  2545. },
  2546. {
  2547. "table": "KfRawBilibiliPost",
  2548. "fields": [
  2549. "objectId"
  2550. ],
  2551. "purpose": "按授权范围回读该对象及限定关联。"
  2552. },
  2553. {
  2554. "table": "KfRaw1688Offer",
  2555. "fields": [
  2556. "objectId"
  2557. ],
  2558. "purpose": "按授权范围回读该对象及限定关联。"
  2559. },
  2560. {
  2561. "table": "KfSku",
  2562. "fields": [
  2563. "objectId"
  2564. ],
  2565. "purpose": "按授权范围回读该对象及限定关联。"
  2566. },
  2567. {
  2568. "table": "KfRetailPriceSnapshot",
  2569. "fields": [
  2570. "objectId"
  2571. ],
  2572. "purpose": "按授权范围回读该对象及限定关联。"
  2573. },
  2574. {
  2575. "table": "KfProcessStep",
  2576. "fields": [
  2577. "objectId"
  2578. ],
  2579. "purpose": "按授权范围回读该对象及限定关联。"
  2580. },
  2581. {
  2582. "table": "KfQuestionnaireQuestion",
  2583. "fields": [
  2584. "objectId"
  2585. ],
  2586. "purpose": "按授权范围回读该对象及限定关联。"
  2587. },
  2588. {
  2589. "table": "KfQuestionnaireAnswer",
  2590. "fields": [
  2591. "objectId"
  2592. ],
  2593. "purpose": "按授权范围回读该对象及限定关联。"
  2594. }
  2595. ],
  2596. "writes": [],
  2597. "rules": [
  2598. "记录存在不等于当前身份可见;回读失败返回明确错误。",
  2599. "本机路径不会转换为已上传文件;正文按安全文本或经处理的文档展示。"
  2600. ],
  2601. "optional": false,
  2602. "status": "设计新增 · 未实现/未部署",
  2603. "route": "POST {PARSE_BASE_URL}/functions/ksfGetRecord",
  2604. "basis": [
  2605. "C09",
  2606. "C03",
  2607. "C05"
  2608. ]
  2609. },
  2610. {
  2611. "name": "ksfSearchRecords",
  2612. "label": "检索可复用资料和成果",
  2613. "group": "查询与看板",
  2614. "caller": "助手、Skill",
  2615. "purpose": "按品类、项目、平台、时间、类型和关键词检索已有数据,支持后续报告复用。",
  2616. "inputs": [
  2617. {
  2618. "name": "className",
  2619. "label": "查询表",
  2620. "type": "String",
  2621. "required": true,
  2622. "rule": "只允许可读白名单。"
  2623. },
  2624. {
  2625. "name": "query",
  2626. "label": "关键词",
  2627. "type": "String",
  2628. "required": false,
  2629. "rule": "使用已规划的searchText或受支持搜索字段。"
  2630. },
  2631. {
  2632. "name": "filters",
  2633. "label": "结构化筛选",
  2634. "type": "Object",
  2635. "required": false,
  2636. "rule": "按表白名单字段筛选,不接收任意数据库查询表达式。"
  2637. },
  2638. {
  2639. "name": "sort",
  2640. "label": "排序规则",
  2641. "type": "Object",
  2642. "required": false,
  2643. "rule": "限定字段和方向;用objectId作稳定并列排序。"
  2644. },
  2645. {
  2646. "name": "cursor",
  2647. "label": "下一页游标",
  2648. "type": "String",
  2649. "required": false,
  2650. "rule": "与筛选条件绑定。"
  2651. },
  2652. {
  2653. "name": "limit",
  2654. "label": "每页数量",
  2655. "type": "Number",
  2656. "required": false,
  2657. "rule": "以部署限制为准。"
  2658. },
  2659. {
  2660. "name": "noiseContext",
  2661. "label": "原始数据筛选口径",
  2662. "type": "Object",
  2663. "required": false,
  2664. "rule": "涉及平台原始记录、其样本统计或证据筛选时必填{scope,ruleVersion,mode?};mode=usable(默认)/pending/noise/all。查看noise/all须有维护权限;不涉及原始样本的普通报告列表可空。"
  2665. }
  2666. ],
  2667. "returns": [
  2668. {
  2669. "name": "records",
  2670. "label": "授权结果",
  2671. "type": "Array",
  2672. "required": true,
  2673. "rule": "按表类型返回。"
  2674. },
  2675. {
  2676. "name": "nextCursor",
  2677. "label": "下一页游标",
  2678. "type": "String",
  2679. "required": false,
  2680. "rule": "结果分页。"
  2681. },
  2682. {
  2683. "name": "asOf",
  2684. "label": "查询时间",
  2685. "type": "Date",
  2686. "required": true,
  2687. "rule": "说明本次数据快照时间。"
  2688. },
  2689. {
  2690. "name": "noiseSummary",
  2691. "label": "当前口径的样本筛选数量",
  2692. "type": "Object",
  2693. "required": false,
  2694. "rule": "涉及原始样本时返回{rawCount,usableCount,noiseCount,pendingCount,scope,ruleVersion,countingBasis};按授权完整筛选范围统计,不把当前分页条数冒充总数。"
  2695. }
  2696. ],
  2697. "reads": [
  2698. {
  2699. "table": "KfSource",
  2700. "fields": [
  2701. "objectId"
  2702. ],
  2703. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2704. },
  2705. {
  2706. "table": "KfSession",
  2707. "fields": [
  2708. "objectId"
  2709. ],
  2710. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2711. },
  2712. {
  2713. "table": "KfInsight",
  2714. "fields": [
  2715. "objectId"
  2716. ],
  2717. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2718. },
  2719. {
  2720. "table": "KfArtifact",
  2721. "fields": [
  2722. "objectId"
  2723. ],
  2724. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2725. },
  2726. {
  2727. "table": "KfProject",
  2728. "fields": [
  2729. "objectId"
  2730. ],
  2731. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2732. },
  2733. {
  2734. "table": "KfOpportunity",
  2735. "fields": [
  2736. "objectId"
  2737. ],
  2738. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2739. },
  2740. {
  2741. "table": "KfCategory",
  2742. "fields": [
  2743. "objectId"
  2744. ],
  2745. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2746. },
  2747. {
  2748. "table": "KfCategoryRelation",
  2749. "fields": [
  2750. "objectId"
  2751. ],
  2752. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2753. },
  2754. {
  2755. "table": "KfProduct",
  2756. "fields": [
  2757. "objectId"
  2758. ],
  2759. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2760. },
  2761. {
  2762. "table": "KfEvidence",
  2763. "fields": [
  2764. "objectId"
  2765. ],
  2766. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2767. },
  2768. {
  2769. "table": "KfEvidenceLink",
  2770. "fields": [
  2771. "objectId"
  2772. ],
  2773. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2774. },
  2775. {
  2776. "table": "KfMarketMetric",
  2777. "fields": [
  2778. "objectId"
  2779. ],
  2780. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2781. },
  2782. {
  2783. "table": "KfAssessment",
  2784. "fields": [
  2785. "objectId"
  2786. ],
  2787. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2788. },
  2789. {
  2790. "table": "KfConcept",
  2791. "fields": [
  2792. "objectId"
  2793. ],
  2794. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2795. },
  2796. {
  2797. "table": "KfStageEvent",
  2798. "fields": [
  2799. "objectId"
  2800. ],
  2801. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2802. },
  2803. {
  2804. "table": "KfImportJob",
  2805. "fields": [
  2806. "objectId"
  2807. ],
  2808. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2809. },
  2810. {
  2811. "table": "KfImportItem",
  2812. "fields": [
  2813. "objectId"
  2814. ],
  2815. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2816. },
  2817. {
  2818. "table": "KfReviewIssue",
  2819. "fields": [
  2820. "objectId"
  2821. ],
  2822. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2823. },
  2824. {
  2825. "table": "KfSupplier",
  2826. "fields": [
  2827. "objectId"
  2828. ],
  2829. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2830. },
  2831. {
  2832. "table": "KfMaterial",
  2833. "fields": [
  2834. "objectId"
  2835. ],
  2836. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2837. },
  2838. {
  2839. "table": "KfProcess",
  2840. "fields": [
  2841. "objectId"
  2842. ],
  2843. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2844. },
  2845. {
  2846. "table": "KfStandard",
  2847. "fields": [
  2848. "objectId"
  2849. ],
  2850. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2851. },
  2852. {
  2853. "table": "KfSupplyQuote",
  2854. "fields": [
  2855. "objectId"
  2856. ],
  2857. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2858. },
  2859. {
  2860. "table": "KfFormulaItem",
  2861. "fields": [
  2862. "objectId"
  2863. ],
  2864. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2865. },
  2866. {
  2867. "table": "KfVocRun",
  2868. "fields": [
  2869. "objectId"
  2870. ],
  2871. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2872. },
  2873. {
  2874. "table": "KfRawXhsNote",
  2875. "fields": [
  2876. "objectId",
  2877. "isNoise",
  2878. "noiseReason",
  2879. "noiseScope",
  2880. "noiseRuleVersion",
  2881. "noiseMethod",
  2882. "noiseAssessedAt",
  2883. "noiseAssessedByRef",
  2884. "noiseContentHash",
  2885. "noiseHistory"
  2886. ],
  2887. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2888. },
  2889. {
  2890. "table": "KfRawXhsComment",
  2891. "fields": [
  2892. "objectId",
  2893. "isNoise",
  2894. "noiseReason",
  2895. "noiseScope",
  2896. "noiseRuleVersion",
  2897. "noiseMethod",
  2898. "noiseAssessedAt",
  2899. "noiseAssessedByRef",
  2900. "noiseContentHash",
  2901. "noiseHistory"
  2902. ],
  2903. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2904. },
  2905. {
  2906. "table": "KfRawDouyinVideo",
  2907. "fields": [
  2908. "objectId",
  2909. "isNoise",
  2910. "noiseReason",
  2911. "noiseScope",
  2912. "noiseRuleVersion",
  2913. "noiseMethod",
  2914. "noiseAssessedAt",
  2915. "noiseAssessedByRef",
  2916. "noiseContentHash",
  2917. "noiseHistory"
  2918. ],
  2919. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2920. },
  2921. {
  2922. "table": "KfRawDouyinComment",
  2923. "fields": [
  2924. "objectId",
  2925. "isNoise",
  2926. "noiseReason",
  2927. "noiseScope",
  2928. "noiseRuleVersion",
  2929. "noiseMethod",
  2930. "noiseAssessedAt",
  2931. "noiseAssessedByRef",
  2932. "noiseContentHash",
  2933. "noiseHistory"
  2934. ],
  2935. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2936. },
  2937. {
  2938. "table": "KfRawTaobaoItem",
  2939. "fields": [
  2940. "objectId",
  2941. "isNoise",
  2942. "noiseReason",
  2943. "noiseScope",
  2944. "noiseRuleVersion",
  2945. "noiseMethod",
  2946. "noiseAssessedAt",
  2947. "noiseAssessedByRef",
  2948. "noiseContentHash",
  2949. "noiseHistory"
  2950. ],
  2951. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2952. },
  2953. {
  2954. "table": "KfRawTaobaoReview",
  2955. "fields": [
  2956. "objectId",
  2957. "isNoise",
  2958. "noiseReason",
  2959. "noiseScope",
  2960. "noiseRuleVersion",
  2961. "noiseMethod",
  2962. "noiseAssessedAt",
  2963. "noiseAssessedByRef",
  2964. "noiseContentHash",
  2965. "noiseHistory"
  2966. ],
  2967. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2968. },
  2969. {
  2970. "table": "KfRawJdItem",
  2971. "fields": [
  2972. "objectId",
  2973. "isNoise",
  2974. "noiseReason",
  2975. "noiseScope",
  2976. "noiseRuleVersion",
  2977. "noiseMethod",
  2978. "noiseAssessedAt",
  2979. "noiseAssessedByRef",
  2980. "noiseContentHash",
  2981. "noiseHistory"
  2982. ],
  2983. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  2984. },
  2985. {
  2986. "table": "KfRawJdReview",
  2987. "fields": [
  2988. "objectId",
  2989. "isNoise",
  2990. "noiseReason",
  2991. "noiseScope",
  2992. "noiseRuleVersion",
  2993. "noiseMethod",
  2994. "noiseAssessedAt",
  2995. "noiseAssessedByRef",
  2996. "noiseContentHash",
  2997. "noiseHistory"
  2998. ],
  2999. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  3000. },
  3001. {
  3002. "table": "KfRawBilibiliPost",
  3003. "fields": [
  3004. "objectId",
  3005. "isNoise",
  3006. "noiseReason",
  3007. "noiseScope",
  3008. "noiseRuleVersion",
  3009. "noiseMethod",
  3010. "noiseAssessedAt",
  3011. "noiseAssessedByRef",
  3012. "noiseContentHash",
  3013. "noiseHistory"
  3014. ],
  3015. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  3016. },
  3017. {
  3018. "table": "KfRaw1688Offer",
  3019. "fields": [
  3020. "objectId",
  3021. "isNoise",
  3022. "noiseReason",
  3023. "noiseScope",
  3024. "noiseRuleVersion",
  3025. "noiseMethod",
  3026. "noiseAssessedAt",
  3027. "noiseAssessedByRef",
  3028. "noiseContentHash",
  3029. "noiseHistory"
  3030. ],
  3031. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  3032. },
  3033. {
  3034. "table": "KfSku",
  3035. "fields": [
  3036. "objectId"
  3037. ],
  3038. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  3039. },
  3040. {
  3041. "table": "KfRetailPriceSnapshot",
  3042. "fields": [
  3043. "objectId"
  3044. ],
  3045. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  3046. },
  3047. {
  3048. "table": "KfProcessStep",
  3049. "fields": [
  3050. "objectId"
  3051. ],
  3052. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  3053. },
  3054. {
  3055. "table": "KfQuestionnaireQuestion",
  3056. "fields": [
  3057. "objectId"
  3058. ],
  3059. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  3060. },
  3061. {
  3062. "table": "KfQuestionnaireAnswer",
  3063. "fields": [
  3064. "objectId"
  3065. ],
  3066. "purpose": "按表和访问范围查询;字段和索引仍需联调。"
  3067. }
  3068. ],
  3069. "writes": [],
  3070. "rules": [
  3071. "默认过滤归档和未授权内容;演示数据需显式选择演示范围,不能混入真实业务结果。",
  3072. "检索已有资料与重新调用VOC是两个操作,本函数不发起采集。",
  3073. "原始样本查询按noiseContext.scope/ruleVersion及当前内容指纹匹配noiseHistory同一条元素的最新有效判断,不能仅用顶层isNoise,也不能跨元素拼条件。usable只返回false;缺失、过期或失效判断进入pending,true进入noise;filters不能绕过该规则。",
  3074. "对已归一证据和衍生样本沿rawRecordTable/rawRecordId复查有效判断。已发布历史报告保留当时统计口径,发现变化以待复核提示和新版本处理,不静默修改原报告数字。"
  3075. ],
  3076. "optional": false,
  3077. "status": "设计新增 · 未实现/未部署",
  3078. "route": "POST {PARSE_BASE_URL}/functions/ksfSearchRecords",
  3079. "basis": [
  3080. "C09",
  3081. "C03",
  3082. "C05"
  3083. ]
  3084. },
  3085. {
  3086. "name": "ksfGetDashboardView",
  3087. "label": "读取看板卡片与列表",
  3088. "group": "查询与看板",
  3089. "caller": "看板;Skill可用于展示前回查",
  3090. "purpose": "读取已经发布的报告卡片及其他区域数据。报告只有入库后再经ksfPublishToDashboard成功发布才进入普通看板列表。",
  3091. "inputs": [
  3092. {
  3093. "name": "view",
  3094. "label": "看板区域",
  3095. "type": "String",
  3096. "required": true,
  3097. "rule": "reports / opportunities / projects / insights / resources / issues。"
  3098. },
  3099. {
  3100. "name": "projectId",
  3101. "label": "项目筛选",
  3102. "type": "String",
  3103. "required": false,
  3104. "rule": "公共资料区域可空。"
  3105. },
  3106. {
  3107. "name": "filters",
  3108. "label": "筛选条件",
  3109. "type": "Object",
  3110. "required": false,
  3111. "rule": "按区域限定类型、品类、时间、阶段和状态。"
  3112. },
  3113. {
  3114. "name": "cursor",
  3115. "label": "分页游标",
  3116. "type": "String",
  3117. "required": false,
  3118. "rule": "由服务生成。"
  3119. },
  3120. {
  3121. "name": "limit",
  3122. "label": "每页卡片数",
  3123. "type": "Number",
  3124. "required": false,
  3125. "rule": "以部署限制为准。"
  3126. },
  3127. {
  3128. "name": "noiseContext",
  3129. "label": "原始数据筛选口径",
  3130. "type": "Object",
  3131. "required": false,
  3132. "rule": "涉及平台原始记录、其样本统计或证据筛选时必填{scope,ruleVersion,mode?};mode=usable(默认)/pending/noise/all。查看noise/all须有维护权限;不涉及原始样本的普通报告列表可空。"
  3133. }
  3134. ],
  3135. "returns": [
  3136. {
  3137. "name": "cards",
  3138. "label": "看板展示对象",
  3139. "type": "Array",
  3140. "required": true,
  3141. "rule": "{id,entityClass,entityId,title,summary?,status,version?,updatedAt,detailRef};字段由区域决定。"
  3142. },
  3143. {
  3144. "name": "nextCursor",
  3145. "label": "下一页游标",
  3146. "type": "String",
  3147. "required": false,
  3148. "rule": "无更多数据时为空。"
  3149. },
  3150. {
  3151. "name": "asOf",
  3152. "label": "数据读取时间",
  3153. "type": "Date",
  3154. "required": true,
  3155. "rule": "不代表页面已经刷新。"
  3156. },
  3157. {
  3158. "name": "noiseSummary",
  3159. "label": "当前口径的样本筛选数量",
  3160. "type": "Object",
  3161. "required": false,
  3162. "rule": "涉及原始样本时返回{rawCount,usableCount,noiseCount,pendingCount,scope,ruleVersion,countingBasis};按授权完整筛选范围统计,不把当前分页条数冒充总数。"
  3163. }
  3164. ],
  3165. "reads": [
  3166. {
  3167. "table": "KfArtifact",
  3168. "fields": [
  3169. "title",
  3170. "reportType",
  3171. "version",
  3172. "projectRef",
  3173. "reviewState",
  3174. "updatedAt",
  3175. "dashboardState",
  3176. "dashboardCardId",
  3177. "dashboardPublishedAt"
  3178. ],
  3179. "purpose": "报告列表。"
  3180. },
  3181. {
  3182. "table": "KfOpportunity",
  3183. "fields": [
  3184. "title",
  3185. "oneLiner",
  3186. "version",
  3187. "reviewState",
  3188. "updatedAt"
  3189. ],
  3190. "purpose": "机会卡。"
  3191. },
  3192. {
  3193. "table": "KfProject",
  3194. "fields": [
  3195. "title",
  3196. "stageCode",
  3197. "progressState",
  3198. "currentConceptRef",
  3199. "lastActiveAt"
  3200. ],
  3201. "purpose": "项目与进度卡。"
  3202. },
  3203. {
  3204. "table": "KfInsight",
  3205. "fields": [
  3206. "title",
  3207. "body",
  3208. "reviewState",
  3209. "updatedAt"
  3210. ],
  3211. "purpose": "洞察卡。"
  3212. },
  3213. {
  3214. "table": "KfReviewIssue",
  3215. "fields": [
  3216. "question",
  3217. "status",
  3218. "blocking",
  3219. "artifactRef"
  3220. ],
  3221. "purpose": "待办。"
  3222. },
  3223. {
  3224. "table": "KfSource",
  3225. "fields": [
  3226. "title",
  3227. "summary",
  3228. "file",
  3229. "sourceKind"
  3230. ],
  3231. "purpose": "资料入口。"
  3232. },
  3233. {
  3234. "table": "KfRawXhsNote",
  3235. "fields": [
  3236. "isNoise",
  3237. "noiseReason",
  3238. "noiseScope",
  3239. "noiseRuleVersion",
  3240. "noiseMethod",
  3241. "noiseAssessedAt",
  3242. "noiseAssessedByRef",
  3243. "noiseContentHash",
  3244. "noiseHistory"
  3245. ],
  3246. "purpose": "按研究范围读取原始样本及筛选历史;噪声与待判断维护入口单独授权。"
  3247. },
  3248. {
  3249. "table": "KfRawXhsComment",
  3250. "fields": [
  3251. "isNoise",
  3252. "noiseReason",
  3253. "noiseScope",
  3254. "noiseRuleVersion",
  3255. "noiseMethod",
  3256. "noiseAssessedAt",
  3257. "noiseAssessedByRef",
  3258. "noiseContentHash",
  3259. "noiseHistory"
  3260. ],
  3261. "purpose": "按研究范围读取原始样本及筛选历史;噪声与待判断维护入口单独授权。"
  3262. },
  3263. {
  3264. "table": "KfRawDouyinVideo",
  3265. "fields": [
  3266. "isNoise",
  3267. "noiseReason",
  3268. "noiseScope",
  3269. "noiseRuleVersion",
  3270. "noiseMethod",
  3271. "noiseAssessedAt",
  3272. "noiseAssessedByRef",
  3273. "noiseContentHash",
  3274. "noiseHistory"
  3275. ],
  3276. "purpose": "按研究范围读取原始样本及筛选历史;噪声与待判断维护入口单独授权。"
  3277. },
  3278. {
  3279. "table": "KfRawDouyinComment",
  3280. "fields": [
  3281. "isNoise",
  3282. "noiseReason",
  3283. "noiseScope",
  3284. "noiseRuleVersion",
  3285. "noiseMethod",
  3286. "noiseAssessedAt",
  3287. "noiseAssessedByRef",
  3288. "noiseContentHash",
  3289. "noiseHistory"
  3290. ],
  3291. "purpose": "按研究范围读取原始样本及筛选历史;噪声与待判断维护入口单独授权。"
  3292. },
  3293. {
  3294. "table": "KfRawTaobaoItem",
  3295. "fields": [
  3296. "isNoise",
  3297. "noiseReason",
  3298. "noiseScope",
  3299. "noiseRuleVersion",
  3300. "noiseMethod",
  3301. "noiseAssessedAt",
  3302. "noiseAssessedByRef",
  3303. "noiseContentHash",
  3304. "noiseHistory"
  3305. ],
  3306. "purpose": "按研究范围读取原始样本及筛选历史;噪声与待判断维护入口单独授权。"
  3307. },
  3308. {
  3309. "table": "KfRawTaobaoReview",
  3310. "fields": [
  3311. "isNoise",
  3312. "noiseReason",
  3313. "noiseScope",
  3314. "noiseRuleVersion",
  3315. "noiseMethod",
  3316. "noiseAssessedAt",
  3317. "noiseAssessedByRef",
  3318. "noiseContentHash",
  3319. "noiseHistory"
  3320. ],
  3321. "purpose": "按研究范围读取原始样本及筛选历史;噪声与待判断维护入口单独授权。"
  3322. },
  3323. {
  3324. "table": "KfRawJdItem",
  3325. "fields": [
  3326. "isNoise",
  3327. "noiseReason",
  3328. "noiseScope",
  3329. "noiseRuleVersion",
  3330. "noiseMethod",
  3331. "noiseAssessedAt",
  3332. "noiseAssessedByRef",
  3333. "noiseContentHash",
  3334. "noiseHistory"
  3335. ],
  3336. "purpose": "按研究范围读取原始样本及筛选历史;噪声与待判断维护入口单独授权。"
  3337. },
  3338. {
  3339. "table": "KfRawJdReview",
  3340. "fields": [
  3341. "isNoise",
  3342. "noiseReason",
  3343. "noiseScope",
  3344. "noiseRuleVersion",
  3345. "noiseMethod",
  3346. "noiseAssessedAt",
  3347. "noiseAssessedByRef",
  3348. "noiseContentHash",
  3349. "noiseHistory"
  3350. ],
  3351. "purpose": "按研究范围读取原始样本及筛选历史;噪声与待判断维护入口单独授权。"
  3352. },
  3353. {
  3354. "table": "KfRawBilibiliPost",
  3355. "fields": [
  3356. "isNoise",
  3357. "noiseReason",
  3358. "noiseScope",
  3359. "noiseRuleVersion",
  3360. "noiseMethod",
  3361. "noiseAssessedAt",
  3362. "noiseAssessedByRef",
  3363. "noiseContentHash",
  3364. "noiseHistory"
  3365. ],
  3366. "purpose": "按研究范围读取原始样本及筛选历史;噪声与待判断维护入口单独授权。"
  3367. },
  3368. {
  3369. "table": "KfRaw1688Offer",
  3370. "fields": [
  3371. "isNoise",
  3372. "noiseReason",
  3373. "noiseScope",
  3374. "noiseRuleVersion",
  3375. "noiseMethod",
  3376. "noiseAssessedAt",
  3377. "noiseAssessedByRef",
  3378. "noiseContentHash",
  3379. "noiseHistory"
  3380. ],
  3381. "purpose": "按研究范围读取原始样本及筛选历史;噪声与待判断维护入口单独授权。"
  3382. }
  3383. ],
  3384. "writes": [],
  3385. "rules": [
  3386. "不假设已存在自动刷新;由看板实现轮询、订阅或重新加载,缓存策略与默认可见状态在联调时确定。",
  3387. "展示待核验机会时明确状态;sample默认进入演示范围。",
  3388. "reports区域默认强制dashboardState=published;Skill不能通过filters绕过未发布限制。内部报告回查用ksfGetRecord,不能冒充已上看板。",
  3389. "原始样本查询按noiseContext.scope/ruleVersion及当前内容指纹匹配noiseHistory同一条元素的最新有效判断,不能仅用顶层isNoise,也不能跨元素拼条件。usable只返回false;缺失、过期或失效判断进入pending,true进入noise;filters不能绕过该规则。",
  3390. "对已归一证据和衍生样本沿rawRecordTable/rawRecordId复查有效判断。已发布历史报告保留当时统计口径,发现变化以待复核提示和新版本处理,不静默修改原报告数字。"
  3391. ],
  3392. "optional": false,
  3393. "status": "设计新增 · 未实现/未部署",
  3394. "route": "POST {PARSE_BASE_URL}/functions/ksfGetDashboardView",
  3395. "basis": [
  3396. "C09",
  3397. "C03",
  3398. "C05"
  3399. ]
  3400. },
  3401. {
  3402. "name": "ksfCreateProjectFromOpportunity",
  3403. "label": "从机会卡创建新品项目",
  3404. "group": "项目与反馈",
  3405. "caller": "助手、Skill",
  3406. "purpose": "绑定选定机会版本并建立项目、初始阶段和事件。",
  3407. "inputs": [
  3408. {
  3409. "name": "requestId",
  3410. "label": "创建请求编号",
  3411. "type": "String",
  3412. "required": true,
  3413. "rule": "相同请求不重复建项目。"
  3414. },
  3415. {
  3416. "name": "opportunityId",
  3417. "label": "机会卡编号",
  3418. "type": "String",
  3419. "required": true,
  3420. "rule": "必须可读并符合项目启动要求。"
  3421. },
  3422. {
  3423. "name": "opportunityVersion",
  3424. "label": "选定机会版本",
  3425. "type": "Number",
  3426. "required": true,
  3427. "rule": "显式绑定,不能自动换成最新版本。"
  3428. },
  3429. {
  3430. "name": "title",
  3431. "label": "项目名称",
  3432. "type": "String",
  3433. "required": true,
  3434. "rule": "面向实际新品任务。"
  3435. }
  3436. ],
  3437. "returns": [
  3438. {
  3439. "name": "projectId",
  3440. "label": "新品项目编号",
  3441. "type": "String",
  3442. "required": true,
  3443. "rule": "新建或幂等复用结果。"
  3444. },
  3445. {
  3446. "name": "stageCode",
  3447. "label": "初始阶段",
  3448. "type": "String",
  3449. "required": true,
  3450. "rule": "采用服务部署的阶段配置。"
  3451. },
  3452. {
  3453. "name": "eventId",
  3454. "label": "初始阶段事件",
  3455. "type": "String",
  3456. "required": true,
  3457. "rule": "对应KfStageEvent。"
  3458. }
  3459. ],
  3460. "reads": [
  3461. {
  3462. "table": "KfOpportunity",
  3463. "fields": [
  3464. "objectId",
  3465. "version",
  3466. "reviewState",
  3467. "dataMode"
  3468. ],
  3469. "purpose": "校验选定版本与可用状态。"
  3470. }
  3471. ],
  3472. "writes": [
  3473. {
  3474. "table": "KfProject",
  3475. "fields": [
  3476. "title",
  3477. "opportunityRef",
  3478. "stageCode",
  3479. "progressState",
  3480. "lastActiveAt"
  3481. ],
  3482. "purpose": "创建项目并保留旧字段兼容投影。"
  3483. },
  3484. {
  3485. "table": "KfStageEvent",
  3486. "fields": [
  3487. "projectRef",
  3488. "fromStage",
  3489. "toStage",
  3490. "eventType",
  3491. "occurredAt",
  3492. "sequence"
  3493. ],
  3494. "purpose": "记录项目建立事件。"
  3495. }
  3496. ],
  3497. "rules": [
  3498. "当前设计的机会卡每版有独立记录;opportunityRef指向所选版本,服务额外核验version。",
  3499. "用户动作与身份由认证上下文确认,禁止客户端假冒负责人;项目启动条件待业务确认。"
  3500. ],
  3501. "optional": false,
  3502. "status": "设计新增 · 未实现/未部署",
  3503. "route": "POST {PARSE_BASE_URL}/functions/ksfCreateProjectFromOpportunity",
  3504. "basis": [
  3505. "C09",
  3506. "C03",
  3507. "C05"
  3508. ]
  3509. },
  3510. {
  3511. "name": "ksfTransitionProject",
  3512. "label": "更新项目阶段与进度",
  3513. "group": "项目与反馈",
  3514. "caller": "助手、Skill、看板操作",
  3515. "purpose": "在成果满足约定条件后推进、退回或阻塞项目,同时保存事件历史。",
  3516. "inputs": [
  3517. {
  3518. "name": "requestId",
  3519. "label": "阶段操作请求编号",
  3520. "type": "String",
  3521. "required": true,
  3522. "rule": "幂等。"
  3523. },
  3524. {
  3525. "name": "projectId",
  3526. "label": "项目编号",
  3527. "type": "String",
  3528. "required": true,
  3529. "rule": "需要项目写权限。"
  3530. },
  3531. {
  3532. "name": "expectedSequence",
  3533. "label": "预期最新事件序号",
  3534. "type": "Number",
  3535. "required": true,
  3536. "rule": "服务以原子比较或锁校验;冲突后重新读取,不直接覆盖。"
  3537. },
  3538. {
  3539. "name": "action",
  3540. "label": "阶段操作",
  3541. "type": "String",
  3542. "required": true,
  3543. "rule": "started / submitted / reviewed / returned / completed / blocked。"
  3544. },
  3545. {
  3546. "name": "toStage",
  3547. "label": "目标阶段",
  3548. "type": "String",
  3549. "required": true,
  3550. "rule": "校验合法迁移和完成条件。"
  3551. },
  3552. {
  3553. "name": "artifactId",
  3554. "label": "对应成果编号",
  3555. "type": "String",
  3556. "required": false,
  3557. "rule": "提交、审核或完成时按阶段规则必填。"
  3558. },
  3559. {
  3560. "name": "note",
  3561. "label": "说明",
  3562. "type": "String",
  3563. "required": false,
  3564. "rule": "退回或阻塞时必填。"
  3565. }
  3566. ],
  3567. "returns": [
  3568. {
  3569. "name": "project",
  3570. "label": "更新后项目状态",
  3571. "type": "Object",
  3572. "required": true,
  3573. "rule": "包含stageCode、progressState及lastActiveAt。"
  3574. },
  3575. {
  3576. "name": "eventId",
  3577. "label": "本次事件编号",
  3578. "type": "String",
  3579. "required": true,
  3580. "rule": "用于回溯。"
  3581. },
  3582. {
  3583. "name": "sequence",
  3584. "label": "最新事件序号",
  3585. "type": "Number",
  3586. "required": true,
  3587. "rule": "供下次并发检查。"
  3588. }
  3589. ],
  3590. "reads": [
  3591. {
  3592. "table": "KfProject",
  3593. "fields": [
  3594. "stageCode",
  3595. "progressState"
  3596. ],
  3597. "purpose": "校验当前阶段。"
  3598. },
  3599. {
  3600. "table": "KfStageEvent",
  3601. "fields": [
  3602. "projectRef",
  3603. "sequence",
  3604. "eventType"
  3605. ],
  3606. "purpose": "校验历史和并发。"
  3607. },
  3608. {
  3609. "table": "KfArtifact",
  3610. "fields": [
  3611. "projectRef",
  3612. "stageCode",
  3613. "reviewState"
  3614. ],
  3615. "purpose": "核对成果归属和状态。"
  3616. }
  3617. ],
  3618. "writes": [
  3619. {
  3620. "table": "KfProject",
  3621. "fields": [
  3622. "stageCode",
  3623. "progressState",
  3624. "lastActiveAt"
  3625. ],
  3626. "purpose": "更新当前投影。"
  3627. },
  3628. {
  3629. "table": "KfStageEvent",
  3630. "fields": [
  3631. "projectRef",
  3632. "fromStage",
  3633. "toStage",
  3634. "eventType",
  3635. "artifactRef",
  3636. "note",
  3637. "occurredAt",
  3638. "sequence"
  3639. ],
  3640. "purpose": "保留事件历史。"
  3641. }
  3642. ],
  3643. "rules": [
  3644. "事件和当前阶段的一致性需要事务或可恢复的状态更新机制;不能假定多次Parse保存天然原子。",
  3645. "上传报告成功不会自动认定项目完成。"
  3646. ],
  3647. "optional": false,
  3648. "status": "设计新增 · 未实现/未部署",
  3649. "route": "POST {PARSE_BASE_URL}/functions/ksfTransitionProject",
  3650. "basis": [
  3651. "C09",
  3652. "C03",
  3653. "C05"
  3654. ]
  3655. },
  3656. {
  3657. "name": "ksfApplyReviewFeedback",
  3658. "label": "保存校准答复并应用修订",
  3659. "group": "项目与反馈",
  3660. "caller": "助手、Skill、审核操作",
  3661. "purpose": "记录问卷答复和客户补充材料;经授权核验后修订具体业务记录或新版本。",
  3662. "inputs": [
  3663. {
  3664. "name": "requestId",
  3665. "label": "校准操作编号",
  3666. "type": "String",
  3667. "required": true,
  3668. "rule": "幂等。"
  3669. },
  3670. {
  3671. "name": "issueId",
  3672. "label": "校准问题编号",
  3673. "type": "String",
  3674. "required": false,
  3675. "rule": "与answers至少提供一项。"
  3676. },
  3677. {
  3678. "name": "answers",
  3679. "label": "真实答复",
  3680. "type": "Array",
  3681. "required": false,
  3682. "rule": "{questionId,responseBatchKey,fieldCode,rawAnswer,valueNumber?,valueText?,valueBoolean?,valueOptions?,unit?,sourceId}。"
  3683. },
  3684. {
  3685. "name": "answerSourceId",
  3686. "label": "答复证据来源",
  3687. "type": "String",
  3688. "required": true,
  3689. "rule": "已登记邮件、口述记录或补充文件。"
  3690. },
  3691. {
  3692. "name": "action",
  3693. "label": "处理动作",
  3694. "type": "String",
  3695. "required": true,
  3696. "rule": "record_answer / confirm_and_apply;确认应用需要单独授权角色。"
  3697. },
  3698. {
  3699. "name": "changes",
  3700. "label": "拟应用修改",
  3701. "type": "Array",
  3702. "required": false,
  3703. "rule": "确认应用时提供{className,objectId,fieldPath,expectedVersion?,expectedUpdatedAt?,newValue,reason}。"
  3704. }
  3705. ],
  3706. "returns": [
  3707. {
  3708. "name": "answerIds",
  3709. "label": "已保存答案编号",
  3710. "type": "Array",
  3711. "required": true,
  3712. "rule": "记录实际回答,空白问卷不产生答案。"
  3713. },
  3714. {
  3715. "name": "issueState",
  3716. "label": "问题处理状态",
  3717. "type": "Object",
  3718. "required": false,
  3719. "rule": "区分answered、confirmed和closed。"
  3720. },
  3721. {
  3722. "name": "applyResults",
  3723. "label": "逐项应用结果",
  3724. "type": "Array",
  3725. "required": true,
  3726. "rule": "applied / failed / not_needed及真实目标编号/新版本。"
  3727. },
  3728. {
  3729. "name": "knowledgeSync",
  3730. "label": "知识同步状态",
  3731. "type": "Object",
  3732. "required": false,
  3733. "rule": "pending / succeeded / failed / not_required;不会默认成功。"
  3734. }
  3735. ],
  3736. "reads": [
  3737. {
  3738. "table": "KfQuestionnaireQuestion",
  3739. "fields": [
  3740. "questionCode",
  3741. "answerType",
  3742. "targetMappings"
  3743. ],
  3744. "purpose": "核对题号、类型与目标字段。"
  3745. },
  3746. {
  3747. "table": "KfReviewIssue",
  3748. "fields": [
  3749. "targetClass",
  3750. "targetId",
  3751. "fieldPath",
  3752. "status"
  3753. ],
  3754. "purpose": "定位问题。"
  3755. },
  3756. {
  3757. "table": "KfSource",
  3758. "fields": [
  3759. "objectId",
  3760. "providerName",
  3761. "file"
  3762. ],
  3763. "purpose": "校验答复来源。"
  3764. }
  3765. ],
  3766. "writes": [
  3767. {
  3768. "table": "KfQuestionnaireAnswer",
  3769. "fields": [
  3770. "questionRef",
  3771. "responseBatchKey",
  3772. "fieldCode",
  3773. "rawAnswer",
  3774. "valueNumber",
  3775. "valueText",
  3776. "valueBoolean",
  3777. "valueOptions",
  3778. "unit",
  3779. "sourceRef",
  3780. "verificationState",
  3781. "applyState",
  3782. "appliedAt"
  3783. ],
  3784. "purpose": "保存答案与应用结果。"
  3785. },
  3786. {
  3787. "table": "KfReviewIssue",
  3788. "fields": [
  3789. "answer",
  3790. "answerSourceRef",
  3791. "feedbackKind",
  3792. "confirmedBy",
  3793. "confirmedAt",
  3794. "resolution",
  3795. "applyState",
  3796. "appliedAt",
  3797. "knowledgeSync",
  3798. "status"
  3799. ],
  3800. "purpose": "保存问题修订记录。"
  3801. },
  3802. {
  3803. "table": "KfProduct",
  3804. "fields": [
  3805. "reviewState",
  3806. "ingestedAt"
  3807. ],
  3808. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3809. },
  3810. {
  3811. "table": "KfInsight",
  3812. "fields": [
  3813. "reviewState",
  3814. "ingestedAt"
  3815. ],
  3816. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3817. },
  3818. {
  3819. "table": "KfOpportunity",
  3820. "fields": [
  3821. "reviewState",
  3822. "ingestedAt"
  3823. ],
  3824. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3825. },
  3826. {
  3827. "table": "KfAssessment",
  3828. "fields": [
  3829. "reviewState",
  3830. "ingestedAt"
  3831. ],
  3832. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3833. },
  3834. {
  3835. "table": "KfConcept",
  3836. "fields": [
  3837. "reviewState",
  3838. "ingestedAt"
  3839. ],
  3840. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3841. },
  3842. {
  3843. "table": "KfMaterial",
  3844. "fields": [
  3845. "reviewState",
  3846. "ingestedAt"
  3847. ],
  3848. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3849. },
  3850. {
  3851. "table": "KfProcess",
  3852. "fields": [
  3853. "reviewState",
  3854. "ingestedAt"
  3855. ],
  3856. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3857. },
  3858. {
  3859. "table": "KfStandard",
  3860. "fields": [
  3861. "reviewState",
  3862. "ingestedAt"
  3863. ],
  3864. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3865. },
  3866. {
  3867. "table": "KfSupplyQuote",
  3868. "fields": [
  3869. "reviewState",
  3870. "ingestedAt"
  3871. ],
  3872. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3873. },
  3874. {
  3875. "table": "KfCategory",
  3876. "fields": [
  3877. "reviewState",
  3878. "ingestedAt"
  3879. ],
  3880. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3881. },
  3882. {
  3883. "table": "KfCategoryRelation",
  3884. "fields": [
  3885. "reviewState",
  3886. "ingestedAt"
  3887. ],
  3888. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3889. },
  3890. {
  3891. "table": "KfMarketMetric",
  3892. "fields": [
  3893. "reviewState",
  3894. "ingestedAt"
  3895. ],
  3896. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3897. },
  3898. {
  3899. "table": "KfSupplier",
  3900. "fields": [
  3901. "reviewState",
  3902. "ingestedAt"
  3903. ],
  3904. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3905. },
  3906. {
  3907. "table": "KfSku",
  3908. "fields": [
  3909. "reviewState",
  3910. "ingestedAt"
  3911. ],
  3912. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3913. },
  3914. {
  3915. "table": "KfRetailPriceSnapshot",
  3916. "fields": [
  3917. "reviewState",
  3918. "ingestedAt"
  3919. ],
  3920. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3921. },
  3922. {
  3923. "table": "KfProcessStep",
  3924. "fields": [
  3925. "reviewState",
  3926. "ingestedAt"
  3927. ],
  3928. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3929. },
  3930. {
  3931. "table": "KfQuestionnaireAnswer",
  3932. "fields": [
  3933. "reviewState",
  3934. "ingestedAt"
  3935. ],
  3936. "purpose": "仅当changes明确指向该表时,按字段白名单核验并修订;有版本的成果创建新版本。"
  3937. }
  3938. ],
  3939. "rules": [
  3940. "confirm_and_apply按s.targetAllowlist和字段白名单更新实际业务目标,版本对象创建新版本,confirmedBy从服务身份记录。",
  3941. "只有答复保存成功不等于修订成功;只有修订成功也不等于独立知识库同步成功。",
  3942. "核验失败或并发冲突时保留待处理状态,不能覆盖新数据。",
  3943. "修订报告正文时新建未发布版本并重新取得员工确认,不能沿用旧版本确认或直接覆盖已发布报告。",
  3944. "平台原始记录的噪声人工修订调用ksfSetNoiseAssessment,不借通用changes覆盖筛选历史。"
  3945. ],
  3946. "optional": false,
  3947. "status": "设计新增 · 未实现/未部署",
  3948. "route": "POST {PARSE_BASE_URL}/functions/ksfApplyReviewFeedback",
  3949. "basis": [
  3950. "C09",
  3951. "C03",
  3952. "C05"
  3953. ]
  3954. },
  3955. {
  3956. "name": "ksfSyncKnowledge",
  3957. "label": "同步独立知识库并回查结果",
  3958. "group": "可选适配",
  3959. "caller": "服务任务;Skill可查询",
  3960. "purpose": "只有数字人另有独立知识库或检索索引时启用;助手直接查询数据库时可无需此函数。",
  3961. "inputs": [
  3962. {
  3963. "name": "requestId",
  3964. "label": "同步请求编号",
  3965. "type": "String",
  3966. "required": true,
  3967. "rule": "按目标版本幂等。"
  3968. },
  3969. {
  3970. "name": "issueId",
  3971. "label": "变更问题编号",
  3972. "type": "String",
  3973. "required": true,
  3974. "rule": "必须指向已应用修订,供同步状态持久记录。"
  3975. },
  3976. {
  3977. "name": "action",
  3978. "label": "同步动作",
  3979. "type": "String",
  3980. "required": true,
  3981. "rule": "enqueue / status;队列写入和同步完成分别反馈。"
  3982. }
  3983. ],
  3984. "returns": [
  3985. {
  3986. "name": "status",
  3987. "label": "实际同步状态",
  3988. "type": "String",
  3989. "required": true,
  3990. "rule": "pending / succeeded / failed / not_required。"
  3991. },
  3992. {
  3993. "name": "target",
  3994. "label": "知识系统回执",
  3995. "type": "Object",
  3996. "required": false,
  3997. "rule": "包含targetSystem、targetObjectId、indexVersion、syncedAt或errorCode;以真实适配器结果为准。"
  3998. }
  3999. ],
  4000. "reads": [
  4001. {
  4002. "table": "KfReviewIssue",
  4003. "fields": [
  4004. "resolution",
  4005. "applyState",
  4006. "knowledgeSync"
  4007. ],
  4008. "purpose": "读取已应用变更和同步目标。"
  4009. }
  4010. ],
  4011. "writes": [
  4012. {
  4013. "table": "KfReviewIssue",
  4014. "fields": [
  4015. "knowledgeSync"
  4016. ],
  4017. "purpose": "持久保存真实同步结果。"
  4018. }
  4019. ],
  4020. "rules": [
  4021. "异步同步须有持久任务及去重机制;排队完成不等于索引已更新。",
  4022. "知识库无接口或未部署时返回明确not_required或CAPABILITY_UNAVAILABLE,不冒充同步成功。"
  4023. ],
  4024. "optional": true,
  4025. "status": "设计新增 · 未实现/未部署",
  4026. "route": "POST {PARSE_BASE_URL}/functions/ksfSyncKnowledge",
  4027. "basis": [
  4028. "C09",
  4029. "C03",
  4030. "C05"
  4031. ]
  4032. },
  4033. {
  4034. "name": "ksfConfirmReport",
  4035. "label": "核验员工对报告的确认",
  4036. "group": "报告确认与发布",
  4037. "caller": "员工确认通道;Skill传递可信确认事件",
  4038. "purpose": "在正式报告入库前核验员工的确认,绑定具体报告版本和内容指纹,返回供入库校验的确认凭据。",
  4039. "inputs": [
  4040. {
  4041. "name": "requestId",
  4042. "label": "确认操作编号",
  4043. "type": "String",
  4044. "required": true,
  4045. "rule": "同一确认事件稳定幂等。"
  4046. },
  4047. {
  4048. "name": "reportIdentity",
  4049. "label": "报告身份与版本",
  4050. "type": "Object",
  4051. "required": true,
  4052. "rule": "{reportSeriesKey,version,reportContentHash,projectId?};与员工实际看到的内容一致。"
  4053. },
  4054. {
  4055. "name": "confirmationEvent",
  4056. "label": "员工确认事件",
  4057. "type": "Object",
  4058. "required": true,
  4059. "rule": "可信页面或聊天通道产生的事件引用;服务器核验身份、操作、展示内容和作用范围。"
  4060. }
  4061. ],
  4062. "returns": [
  4063. {
  4064. "name": "confirmationReceipt",
  4065. "label": "经核验的确认凭据",
  4066. "type": "String",
  4067. "required": true,
  4068. "rule": "短期有效的签名凭据或等效服务回执;绑定用户、版本、哈希和项目。"
  4069. },
  4070. {
  4071. "name": "confirmedIdentity",
  4072. "label": "已核验的确认身份",
  4073. "type": "Object",
  4074. "required": true,
  4075. "rule": "{eventId,confirmedBy,confirmedAt,reportSeriesKey,version,reportContentHash};确认人由服务取得。"
  4076. }
  4077. ],
  4078. "reads": [],
  4079. "writes": [],
  4080. "rules": [
  4081. "员工先查看报告,明确确认当前版本;助手推断“员工应该同意”或传employeeConfirmed=true无效。可信确认通道未接通时不能跳过本步骤。",
  4082. "本函数只核验并签发确认回执,不把报告正文写入成果表;随后Skill登记原件、校验并正式入库。",
  4083. "报告内容、标题、版本或项目发生改变后,原确认失效,须重新请员工确认。",
  4084. "员工接受报告内容不等于报告内每一项市场推断或工厂参数均已核验;reviewState及证据确认状态继续独立管理。"
  4085. ],
  4086. "optional": false,
  4087. "status": "设计新增 · 未实现/未部署",
  4088. "route": "POST {PARSE_BASE_URL}/functions/ksfConfirmReport",
  4089. "basis": [
  4090. "C10",
  4091. "C09"
  4092. ]
  4093. },
  4094. {
  4095. "name": "ksfPublishToDashboard",
  4096. "label": "将已入库报告发布到看板",
  4097. "group": "报告确认与发布",
  4098. "caller": "助手通过Skill调用",
  4099. "purpose": "入库完成后执行独立发布动作,创建或更新报告卡片引用并保存发布回执;入库成功本身不会发布报告。",
  4100. "inputs": [
  4101. {
  4102. "name": "requestId",
  4103. "label": "发布操作编号",
  4104. "type": "String",
  4105. "required": true,
  4106. "rule": "同一报告版本的同一次发布重试保持稳定,不重复创建卡片。"
  4107. },
  4108. {
  4109. "name": "artifactId",
  4110. "label": "已入库报告编号",
  4111. "type": "String",
  4112. "required": true,
  4113. "rule": "真实KfArtifact编号;必需内容和关联已保存。"
  4114. },
  4115. {
  4116. "name": "version",
  4117. "label": "要发布的报告版本",
  4118. "type": "Number",
  4119. "required": true,
  4120. "rule": "绑定已确认版本,避免不经确认发布新内容。"
  4121. },
  4122. {
  4123. "name": "reportContentHash",
  4124. "label": "要发布的内容指纹",
  4125. "type": "String",
  4126. "required": true,
  4127. "rule": "须与报告入库和员工确认的内容一致。"
  4128. }
  4129. ],
  4130. "returns": [
  4131. {
  4132. "name": "artifactId",
  4133. "label": "报告编号",
  4134. "type": "String",
  4135. "required": true,
  4136. "rule": "对应已入库成果。"
  4137. },
  4138. {
  4139. "name": "publicationStatus",
  4140. "label": "发布结果",
  4141. "type": "String",
  4142. "required": true,
  4143. "rule": "published / failed;仅完成发布后可返回published。"
  4144. },
  4145. {
  4146. "name": "cardId",
  4147. "label": "看板卡片编号",
  4148. "type": "String",
  4149. "required": false,
  4150. "rule": "发布成功时必填;同库为稳定引用编号,独立看板为真实回执。"
  4151. },
  4152. {
  4153. "name": "publishedAt",
  4154. "label": "真实发布时间",
  4155. "type": "Date",
  4156. "required": false,
  4157. "rule": "成功后必填。"
  4158. },
  4159. {
  4160. "name": "readable",
  4161. "label": "看板查询接口已可读",
  4162. "type": "Boolean",
  4163. "required": true,
  4164. "rule": "服务回查后填写;不等于员工浏览器已刷新。"
  4165. }
  4166. ],
  4167. "reads": [
  4168. {
  4169. "table": "KfArtifact",
  4170. "fields": [
  4171. "reportContentHash",
  4172. "contentConfirmedByRef",
  4173. "contentConfirmedAt",
  4174. "contentConfirmationRef",
  4175. "version",
  4176. "dashboardState"
  4177. ],
  4178. "purpose": "校验报告已正式入库,版本与员工确认一致。"
  4179. },
  4180. {
  4181. "table": "KfImportItem",
  4182. "fields": [
  4183. "targetClass",
  4184. "targetId",
  4185. "status",
  4186. "dependencies"
  4187. ],
  4188. "purpose": "核对本报告必需条目和关联已成功;不以排队回执代替。"
  4189. }
  4190. ],
  4191. "writes": [
  4192. {
  4193. "table": "KfArtifact",
  4194. "fields": [
  4195. "dashboardState",
  4196. "dashboardPublishedAt",
  4197. "dashboardPublishedByRef",
  4198. "dashboardCardId",
  4199. "dashboardPublication"
  4200. ],
  4201. "purpose": "只更新发布元数据;不改报告正文。"
  4202. }
  4203. ],
  4204. "rules": [
  4205. "必须先完成该报告和必需关联的入库,再调用本函数。ksfSubmitImport不得自动发布,也不得接受客户端自行写published。",
  4206. "同库看板通过本函数设置发布状态和稳定卡片引用;若经理有独立看板发布服务,本函数调用实际适配器并核对回执后才标成功。",
  4207. "发布失败保留已经成功入库的报告,记录publication_failed及错误;允许单独重试发布,无须重新导入报告。",
  4208. "相同发布requestId而目标版本或内容不同返回冲突。同一报告版本重试不重复建卡;数据库与独立看板间部分失败须按真实回执恢复。",
  4209. "发布后看板查询函数仅返回已发布报告。浏览器仍按看板刷新机制展示,不以接口成功冒充页面已刷新。"
  4210. ],
  4211. "optional": false,
  4212. "status": "设计新增 · 未实现/未部署",
  4213. "route": "POST {PARSE_BASE_URL}/functions/ksfPublishToDashboard",
  4214. "basis": [
  4215. "C10",
  4216. "C09"
  4217. ]
  4218. },
  4219. {
  4220. "name": "ksfSetNoiseAssessment",
  4221. "label": "保存或修订原始数据噪声判断",
  4222. "group": "噪声筛选与复用",
  4223. "caller": "助手通过Skill;员工复核操作",
  4224. "purpose": "给已入库的平台原始记录保存按研究范围划分的噪声判断、原因及可复用历史;人工修订、自动判断和复用均留下真实来源。",
  4225. "inputs": [
  4226. {
  4227. "name": "requestId",
  4228. "label": "稳定判定操作编号",
  4229. "type": "String",
  4230. "required": true,
  4231. "rule": "同一操作重试不重复追加历史;相同编号不同载荷返回冲突。"
  4232. },
  4233. {
  4234. "name": "className",
  4235. "label": "平台原始表名",
  4236. "type": "String",
  4237. "required": true,
  4238. "rule": "只允许10张voc_raw表;禁止任意业务表和系统表。"
  4239. },
  4240. {
  4241. "name": "recordId",
  4242. "label": "原始记录编号",
  4243. "type": "String",
  4244. "required": true,
  4245. "rule": "已经成功入库且调用者有权访问。"
  4246. },
  4247. {
  4248. "name": "expectedUpdatedAt",
  4249. "label": "读取时的记录更新时间",
  4250. "type": "Date",
  4251. "required": true,
  4252. "rule": "JSON线上类型为UTC ISO 8601 String,如2026-10-30T03:00:00.000Z;服务解析为Date后原子校验当前原始记录更新时间。先处理同requestId幂等回放,再校验版本。不能使用入库批次时间。"
  4253. },
  4254. {
  4255. "name": "noiseScope",
  4256. "label": "当前研究范围键",
  4257. "type": "String",
  4258. "required": true,
  4259. "rule": "须在服务合同中登记并对应本任务的品类、目的和范围。"
  4260. },
  4261. {
  4262. "name": "noiseRuleVersion",
  4263. "label": "当前筛选规则版本",
  4264. "type": "String",
  4265. "required": true,
  4266. "rule": "服务端可回查该版本及指纹规范;任意字符串不能当有效规则。"
  4267. },
  4268. {
  4269. "name": "decision",
  4270. "label": "噪声判断及依据",
  4271. "type": "Object",
  4272. "required": true,
  4273. "rule": "{isNoise,noiseReason?,method,contentHash,provenance};isNoise严格Boolean,true或false均可提交,null不调用。contentHash遵守所选规则fingerprintSpecId;不是payloadHash。"
  4274. },
  4275. {
  4276. "name": "reuseFrom",
  4277. "label": "复用的原始判断",
  4278. "type": "Object",
  4279. "required": false,
  4280. "rule": "reused时必填{className,recordId,assessmentRequestId};服务校验真实平台对象ID、内容、范围及规则一致,并保存原来源链。"
  4281. }
  4282. ],
  4283. "returns": [
  4284. {
  4285. "name": "recordRef",
  4286. "label": "已更新原始记录",
  4287. "type": "Object",
  4288. "required": true,
  4289. "rule": "{className,objectId,updatedAt}。"
  4290. },
  4291. {
  4292. "name": "assessment",
  4293. "label": "实际保存的判断",
  4294. "type": "Object",
  4295. "required": true,
  4296. "rule": "{requestId,noiseScope,noiseRuleVersion,isNoise,noiseReason,noiseMethod,noiseContentHash,noiseAssessedAt,noiseAssessedByRef?};返回已持久保存值。"
  4297. },
  4298. {
  4299. "name": "affectedReviewIssues",
  4300. "label": "受影响结论复核问题",
  4301. "type": "Array",
  4302. "required": true,
  4303. "rule": "返回实际创建或复用的KfReviewIssue编号;没有可追溯衍生引用则为空,不虚构已重算报告。"
  4304. }
  4305. ],
  4306. "reads": [
  4307. {
  4308. "table": "KfRawXhsNote",
  4309. "fields": [
  4310. "platform",
  4311. "externalObjectId",
  4312. "idOrigin",
  4313. "rawPayload",
  4314. "payloadHash",
  4315. "updatedAt",
  4316. "isNoise",
  4317. "noiseReason",
  4318. "noiseScope",
  4319. "noiseRuleVersion",
  4320. "noiseMethod",
  4321. "noiseAssessedAt",
  4322. "noiseAssessedByRef",
  4323. "noiseContentHash",
  4324. "noiseHistory"
  4325. ],
  4326. "purpose": "核对身份、并发版本、判断输入和原有分范围历史;复用时同时回读来源记录。"
  4327. },
  4328. {
  4329. "table": "KfRawXhsComment",
  4330. "fields": [
  4331. "platform",
  4332. "externalObjectId",
  4333. "idOrigin",
  4334. "rawPayload",
  4335. "payloadHash",
  4336. "updatedAt",
  4337. "isNoise",
  4338. "noiseReason",
  4339. "noiseScope",
  4340. "noiseRuleVersion",
  4341. "noiseMethod",
  4342. "noiseAssessedAt",
  4343. "noiseAssessedByRef",
  4344. "noiseContentHash",
  4345. "noiseHistory"
  4346. ],
  4347. "purpose": "核对身份、并发版本、判断输入和原有分范围历史;复用时同时回读来源记录。"
  4348. },
  4349. {
  4350. "table": "KfRawDouyinVideo",
  4351. "fields": [
  4352. "platform",
  4353. "externalObjectId",
  4354. "idOrigin",
  4355. "rawPayload",
  4356. "payloadHash",
  4357. "updatedAt",
  4358. "isNoise",
  4359. "noiseReason",
  4360. "noiseScope",
  4361. "noiseRuleVersion",
  4362. "noiseMethod",
  4363. "noiseAssessedAt",
  4364. "noiseAssessedByRef",
  4365. "noiseContentHash",
  4366. "noiseHistory"
  4367. ],
  4368. "purpose": "核对身份、并发版本、判断输入和原有分范围历史;复用时同时回读来源记录。"
  4369. },
  4370. {
  4371. "table": "KfRawDouyinComment",
  4372. "fields": [
  4373. "platform",
  4374. "externalObjectId",
  4375. "idOrigin",
  4376. "rawPayload",
  4377. "payloadHash",
  4378. "updatedAt",
  4379. "isNoise",
  4380. "noiseReason",
  4381. "noiseScope",
  4382. "noiseRuleVersion",
  4383. "noiseMethod",
  4384. "noiseAssessedAt",
  4385. "noiseAssessedByRef",
  4386. "noiseContentHash",
  4387. "noiseHistory"
  4388. ],
  4389. "purpose": "核对身份、并发版本、判断输入和原有分范围历史;复用时同时回读来源记录。"
  4390. },
  4391. {
  4392. "table": "KfRawTaobaoItem",
  4393. "fields": [
  4394. "platform",
  4395. "externalObjectId",
  4396. "idOrigin",
  4397. "rawPayload",
  4398. "payloadHash",
  4399. "updatedAt",
  4400. "isNoise",
  4401. "noiseReason",
  4402. "noiseScope",
  4403. "noiseRuleVersion",
  4404. "noiseMethod",
  4405. "noiseAssessedAt",
  4406. "noiseAssessedByRef",
  4407. "noiseContentHash",
  4408. "noiseHistory"
  4409. ],
  4410. "purpose": "核对身份、并发版本、判断输入和原有分范围历史;复用时同时回读来源记录。"
  4411. },
  4412. {
  4413. "table": "KfRawTaobaoReview",
  4414. "fields": [
  4415. "platform",
  4416. "externalObjectId",
  4417. "idOrigin",
  4418. "rawPayload",
  4419. "payloadHash",
  4420. "updatedAt",
  4421. "isNoise",
  4422. "noiseReason",
  4423. "noiseScope",
  4424. "noiseRuleVersion",
  4425. "noiseMethod",
  4426. "noiseAssessedAt",
  4427. "noiseAssessedByRef",
  4428. "noiseContentHash",
  4429. "noiseHistory"
  4430. ],
  4431. "purpose": "核对身份、并发版本、判断输入和原有分范围历史;复用时同时回读来源记录。"
  4432. },
  4433. {
  4434. "table": "KfRawJdItem",
  4435. "fields": [
  4436. "platform",
  4437. "externalObjectId",
  4438. "idOrigin",
  4439. "rawPayload",
  4440. "payloadHash",
  4441. "updatedAt",
  4442. "isNoise",
  4443. "noiseReason",
  4444. "noiseScope",
  4445. "noiseRuleVersion",
  4446. "noiseMethod",
  4447. "noiseAssessedAt",
  4448. "noiseAssessedByRef",
  4449. "noiseContentHash",
  4450. "noiseHistory"
  4451. ],
  4452. "purpose": "核对身份、并发版本、判断输入和原有分范围历史;复用时同时回读来源记录。"
  4453. },
  4454. {
  4455. "table": "KfRawJdReview",
  4456. "fields": [
  4457. "platform",
  4458. "externalObjectId",
  4459. "idOrigin",
  4460. "rawPayload",
  4461. "payloadHash",
  4462. "updatedAt",
  4463. "isNoise",
  4464. "noiseReason",
  4465. "noiseScope",
  4466. "noiseRuleVersion",
  4467. "noiseMethod",
  4468. "noiseAssessedAt",
  4469. "noiseAssessedByRef",
  4470. "noiseContentHash",
  4471. "noiseHistory"
  4472. ],
  4473. "purpose": "核对身份、并发版本、判断输入和原有分范围历史;复用时同时回读来源记录。"
  4474. },
  4475. {
  4476. "table": "KfRawBilibiliPost",
  4477. "fields": [
  4478. "platform",
  4479. "externalObjectId",
  4480. "idOrigin",
  4481. "rawPayload",
  4482. "payloadHash",
  4483. "updatedAt",
  4484. "isNoise",
  4485. "noiseReason",
  4486. "noiseScope",
  4487. "noiseRuleVersion",
  4488. "noiseMethod",
  4489. "noiseAssessedAt",
  4490. "noiseAssessedByRef",
  4491. "noiseContentHash",
  4492. "noiseHistory"
  4493. ],
  4494. "purpose": "核对身份、并发版本、判断输入和原有分范围历史;复用时同时回读来源记录。"
  4495. },
  4496. {
  4497. "table": "KfRaw1688Offer",
  4498. "fields": [
  4499. "platform",
  4500. "externalObjectId",
  4501. "idOrigin",
  4502. "rawPayload",
  4503. "payloadHash",
  4504. "updatedAt",
  4505. "isNoise",
  4506. "noiseReason",
  4507. "noiseScope",
  4508. "noiseRuleVersion",
  4509. "noiseMethod",
  4510. "noiseAssessedAt",
  4511. "noiseAssessedByRef",
  4512. "noiseContentHash",
  4513. "noiseHistory"
  4514. ],
  4515. "purpose": "核对身份、并发版本、判断输入和原有分范围历史;复用时同时回读来源记录。"
  4516. },
  4517. {
  4518. "table": "KfEvidence",
  4519. "fields": [
  4520. "rawRecordTable",
  4521. "rawRecordId"
  4522. ],
  4523. "purpose": "定位该原始记录已被提取的证据,避免判断变化后结论继续无提示复用。"
  4524. },
  4525. {
  4526. "table": "KfEvidenceLink",
  4527. "fields": [
  4528. "evidenceRef",
  4529. "targetClass",
  4530. "targetId"
  4531. ],
  4532. "purpose": "定位受影响的洞察、机会或成果引用。"
  4533. }
  4534. ],
  4535. "writes": [
  4536. {
  4537. "table": "KfRawXhsNote",
  4538. "fields": [
  4539. "isNoise",
  4540. "noiseReason",
  4541. "noiseScope",
  4542. "noiseRuleVersion",
  4543. "noiseMethod",
  4544. "noiseAssessedAt",
  4545. "noiseAssessedByRef",
  4546. "noiseContentHash",
  4547. "noiseHistory"
  4548. ],
  4549. "purpose": "保存判断并追加服务审计历史,顶层字段作为最近判断的便查投影。"
  4550. },
  4551. {
  4552. "table": "KfRawXhsComment",
  4553. "fields": [
  4554. "isNoise",
  4555. "noiseReason",
  4556. "noiseScope",
  4557. "noiseRuleVersion",
  4558. "noiseMethod",
  4559. "noiseAssessedAt",
  4560. "noiseAssessedByRef",
  4561. "noiseContentHash",
  4562. "noiseHistory"
  4563. ],
  4564. "purpose": "保存判断并追加服务审计历史,顶层字段作为最近判断的便查投影。"
  4565. },
  4566. {
  4567. "table": "KfRawDouyinVideo",
  4568. "fields": [
  4569. "isNoise",
  4570. "noiseReason",
  4571. "noiseScope",
  4572. "noiseRuleVersion",
  4573. "noiseMethod",
  4574. "noiseAssessedAt",
  4575. "noiseAssessedByRef",
  4576. "noiseContentHash",
  4577. "noiseHistory"
  4578. ],
  4579. "purpose": "保存判断并追加服务审计历史,顶层字段作为最近判断的便查投影。"
  4580. },
  4581. {
  4582. "table": "KfRawDouyinComment",
  4583. "fields": [
  4584. "isNoise",
  4585. "noiseReason",
  4586. "noiseScope",
  4587. "noiseRuleVersion",
  4588. "noiseMethod",
  4589. "noiseAssessedAt",
  4590. "noiseAssessedByRef",
  4591. "noiseContentHash",
  4592. "noiseHistory"
  4593. ],
  4594. "purpose": "保存判断并追加服务审计历史,顶层字段作为最近判断的便查投影。"
  4595. },
  4596. {
  4597. "table": "KfRawTaobaoItem",
  4598. "fields": [
  4599. "isNoise",
  4600. "noiseReason",
  4601. "noiseScope",
  4602. "noiseRuleVersion",
  4603. "noiseMethod",
  4604. "noiseAssessedAt",
  4605. "noiseAssessedByRef",
  4606. "noiseContentHash",
  4607. "noiseHistory"
  4608. ],
  4609. "purpose": "保存判断并追加服务审计历史,顶层字段作为最近判断的便查投影。"
  4610. },
  4611. {
  4612. "table": "KfRawTaobaoReview",
  4613. "fields": [
  4614. "isNoise",
  4615. "noiseReason",
  4616. "noiseScope",
  4617. "noiseRuleVersion",
  4618. "noiseMethod",
  4619. "noiseAssessedAt",
  4620. "noiseAssessedByRef",
  4621. "noiseContentHash",
  4622. "noiseHistory"
  4623. ],
  4624. "purpose": "保存判断并追加服务审计历史,顶层字段作为最近判断的便查投影。"
  4625. },
  4626. {
  4627. "table": "KfRawJdItem",
  4628. "fields": [
  4629. "isNoise",
  4630. "noiseReason",
  4631. "noiseScope",
  4632. "noiseRuleVersion",
  4633. "noiseMethod",
  4634. "noiseAssessedAt",
  4635. "noiseAssessedByRef",
  4636. "noiseContentHash",
  4637. "noiseHistory"
  4638. ],
  4639. "purpose": "保存判断并追加服务审计历史,顶层字段作为最近判断的便查投影。"
  4640. },
  4641. {
  4642. "table": "KfRawJdReview",
  4643. "fields": [
  4644. "isNoise",
  4645. "noiseReason",
  4646. "noiseScope",
  4647. "noiseRuleVersion",
  4648. "noiseMethod",
  4649. "noiseAssessedAt",
  4650. "noiseAssessedByRef",
  4651. "noiseContentHash",
  4652. "noiseHistory"
  4653. ],
  4654. "purpose": "保存判断并追加服务审计历史,顶层字段作为最近判断的便查投影。"
  4655. },
  4656. {
  4657. "table": "KfRawBilibiliPost",
  4658. "fields": [
  4659. "isNoise",
  4660. "noiseReason",
  4661. "noiseScope",
  4662. "noiseRuleVersion",
  4663. "noiseMethod",
  4664. "noiseAssessedAt",
  4665. "noiseAssessedByRef",
  4666. "noiseContentHash",
  4667. "noiseHistory"
  4668. ],
  4669. "purpose": "保存判断并追加服务审计历史,顶层字段作为最近判断的便查投影。"
  4670. },
  4671. {
  4672. "table": "KfRaw1688Offer",
  4673. "fields": [
  4674. "isNoise",
  4675. "noiseReason",
  4676. "noiseScope",
  4677. "noiseRuleVersion",
  4678. "noiseMethod",
  4679. "noiseAssessedAt",
  4680. "noiseAssessedByRef",
  4681. "noiseContentHash",
  4682. "noiseHistory"
  4683. ],
  4684. "purpose": "保存判断并追加服务审计历史,顶层字段作为最近判断的便查投影。"
  4685. },
  4686. {
  4687. "table": "KfReviewIssue",
  4688. "fields": [
  4689. "targetClass",
  4690. "targetId",
  4691. "fieldPath",
  4692. "question",
  4693. "status"
  4694. ],
  4695. "purpose": "判断变化影响已有关联证据或结论时标记待复核,不自动改写已发布报告。"
  4696. }
  4697. ],
  4698. "rules": [
  4699. "核心字段isNoise须严格区分false、true、缺失/null。已判断必须具备范围、规则、方式、内容指纹和服务时间;true时原因非空。",
  4700. "服务自行计算noiseContentHash并核对decision.contentHash;计算规范由noiseRuleVersion固定,不能直接用整条payloadHash代替。",
  4701. "manual由可信员工会话直接认证,或核验绑定当前记录与判断的真实员工操作事件;模型自称人工无效。服务记录人、时间和实际生产者,不允许客户端写noiseHistory及身份字段。",
  4702. "自动判断不得覆盖同范围、同规则、同内容的有效人工判断;人工修改使用最新expectedUpdatedAt,以原子条件更新或等效事务追加历史。",
  4703. "noiseHistory中同范围、规则和内容取最新有效记录;同一requestId的幂等回放先返回已保存结果,不重复追加。新内容或规则变化先视为待判断,不能沿用旧结果。",
  4704. "reused必须回查源判断并匹配真实平台对象ID、内容指纹、范围与规则。上游ID缺失或插件生成时不自动跨批次复用。人工来源保留为原判断来源,本次method=reused不伪造新人工确认。",
  4705. "原文不删除,rawPayload不改写;噪声判定和通用reviewState相互独立,不把审核通过当作没有噪声。",
  4706. "已有关联证据或已发布统计受影响时,记录待复核问题;报告重算仍走新版本、员工确认、入库、独立发布流程。",
  4707. "isNoise=false与true都是有效判断,均保存范围、规则、方法、内容指纹、时间和历史。不得只生成true请求,否则已判断可用的数据仍无法进入usable查询。信息不足不把剩余记录批量改false。",
  4708. "当前第一版指纹及规则见noise-registry.json;不去掉正文空白,不把全角问号、表情、负面情绪简单等同噪声;父上下文不在v1指纹投影内,不得暗中参与有状态判定。"
  4709. ],
  4710. "optional": false,
  4711. "status": "设计新增 · 未实现/未部署",
  4712. "route": "POST {PARSE_BASE_URL}/functions/ksfSetNoiseAssessment",
  4713. "basis": [
  4714. "C11"
  4715. ]
  4716. }
  4717. ],
  4718. "examples": [
  4719. {
  4720. "label": "助手生成报告并发布的主流程",
  4721. "steps": [
  4722. "助手生成报告并展示给员工",
  4723. "员工确认当前内容和版本",
  4724. "ksfConfirmReport",
  4725. "ksfGetIngestContract",
  4726. "有附件时ksfPrepareFileUpload并实际上传",
  4727. "ksfRegisterSource",
  4728. "Skill从已确认报告提取结构化条目",
  4729. "ksfValidateImport",
  4730. "ksfSubmitImport",
  4731. "ksfGetImportResult",
  4732. "ksfPublishToDashboard",
  4733. "看板调用ksfGetDashboardView"
  4734. ]
  4735. },
  4736. {
  4737. "label": "已有报告文件的补充入口",
  4738. "steps": [
  4739. "员工提交报告并确认待入库版本",
  4740. "ksfConfirmReport",
  4741. "ksfPrepareFileUpload",
  4742. "实际上传文件字节",
  4743. "ksfRegisterSource",
  4744. "ksfValidateImport",
  4745. "ksfSubmitImport",
  4746. "ksfGetImportResult",
  4747. "ksfPublishToDashboard"
  4748. ]
  4749. },
  4750. {
  4751. "label": "原始数据采集与入库",
  4752. "steps": [
  4753. "助手调用VOC采集",
  4754. "ksfRecordVocRun",
  4755. "ksfRegisterSource",
  4756. "ksfValidateImport",
  4757. "ksfSubmitImport",
  4758. "ksfGetImportResult"
  4759. ]
  4760. },
  4761. {
  4762. "label": "发布失败后的恢复",
  4763. "steps": [
  4764. "ksfGetRecord回查已入库报告和发布错误",
  4765. "仅重试ksfPublishToDashboard",
  4766. "ksfGetDashboardView核对卡片可读"
  4767. ]
  4768. },
  4769. {
  4770. "label": "噪声判断保存、复核与后续复用",
  4771. "steps": [
  4772. "VOC采集并完整保存平台原始记录",
  4773. "ksfGetIngestContract",
  4774. "助手按已登记范围和规则初筛;不确定时留待判断",
  4775. "ksfValidateImport",
  4776. "ksfSubmitImport",
  4777. "ksfGetImportResult",
  4778. "员工复核或修订时ksfSetNoiseAssessment",
  4779. "ksfSearchRecords按noiseContext读取可用样本",
  4780. "正文、范围及规则一致时复用已有判断;否则重新判断",
  4781. "助手生成报告 → 员工确认 → 正式入库 → 独立发布看板"
  4782. ]
  4783. }
  4784. ],
  4785. "sample": {
  4786. "note": "虚构样例;体现员工先确认、Skill入库、再单独发布。确认凭据、来源与报告编号均为占位,不能直接用于正式调用。 噪声样例也为虚构占位,不代表已经识别或保存14条实测噪声。",
  4787. "functionName": "ksfSubmitImport",
  4788. "request": {
  4789. "requestId": "demo:banmian-report:v1",
  4790. "schemaVersion": "ksf.v0.7",
  4791. "sourceId": "SOURCE_OBJECT_ID",
  4792. "producer": {
  4793. "skillName": "ksf-structured-ingest",
  4794. "skillVersion": "0.1"
  4795. },
  4796. "items": [
  4797. {
  4798. "itemKey": "report-1",
  4799. "className": "KfArtifact",
  4800. "externalKey": "demo:report:banmian:v1",
  4801. "data": {
  4802. "title": "拌面研发报告(虚构样例)",
  4803. "reportType": "integrated_banmian_rd_report",
  4804. "reportSeriesKey": "demo:report:banmian",
  4805. "version": 1,
  4806. "content": {
  4807. "summary": "仅演示结构,不代表真实市场结论。"
  4808. },
  4809. "rawText": "虚构全文",
  4810. "reviewState": "pending",
  4811. "dataMode": "sample",
  4812. "sourceRef": {
  4813. "__type": "Pointer",
  4814. "className": "KfSource",
  4815. "objectId": "SOURCE_OBJECT_ID"
  4816. },
  4817. "reportContentHash": "CANONICAL_REPORT_CONTENT_HASH"
  4818. }
  4819. }
  4820. ],
  4821. "reportConfirmations": [
  4822. {
  4823. "itemKey": "report-1",
  4824. "confirmationReceipt": "TRUSTED_EMPLOYEE_CONFIRMATION_RECEIPT"
  4825. }
  4826. ]
  4827. },
  4828. "queuedResponse": {
  4829. "result": {
  4830. "requestId": "demo:banmian-report:v1",
  4831. "schemaVersion": "ksf.v0.7",
  4832. "ok": true,
  4833. "status": "queued",
  4834. "data": {
  4835. "jobId": "JOB_OBJECT_ID",
  4836. "counts": {
  4837. "created": 0,
  4838. "updated": 0,
  4839. "unchanged": 0,
  4840. "failed": 0,
  4841. "skipped": 0,
  4842. "pending": 1
  4843. }
  4844. },
  4845. "errors": []
  4846. }
  4847. },
  4848. "completedResponse": {
  4849. "result": {
  4850. "requestId": "demo:poll:job-1",
  4851. "schemaVersion": "ksf.v0.7",
  4852. "ok": true,
  4853. "status": "succeeded",
  4854. "data": {
  4855. "job": {
  4856. "jobId": "JOB_OBJECT_ID",
  4857. "status": "succeeded",
  4858. "counts": {
  4859. "created": 1,
  4860. "updated": 0,
  4861. "unchanged": 0,
  4862. "failed": 0,
  4863. "skipped": 0,
  4864. "pending": 0
  4865. }
  4866. },
  4867. "items": [
  4868. {
  4869. "itemKey": "report-1",
  4870. "status": "succeeded",
  4871. "targetClass": "KfArtifact",
  4872. "targetId": "ARTIFACT_OBJECT_ID",
  4873. "operation": "created",
  4874. "objectId": "ARTIFACT_OBJECT_ID",
  4875. "updatedAt": "2026-10-30T03:00:00.000Z",
  4876. "snapshotState": "available",
  4877. "targetSnapshot": {
  4878. "className": "KfArtifact",
  4879. "objectId": "ARTIFACT_OBJECT_ID",
  4880. "updatedAt": "2026-10-30T03:00:00.000Z",
  4881. "observedAt": "2026-10-30T03:00:01.000Z"
  4882. }
  4883. }
  4884. ]
  4885. },
  4886. "errors": []
  4887. }
  4888. },
  4889. "publishRequest": {
  4890. "requestId": "demo:publish:report-v1",
  4891. "artifactId": "ARTIFACT_OBJECT_ID",
  4892. "version": 1,
  4893. "reportContentHash": "CANONICAL_REPORT_CONTENT_HASH"
  4894. },
  4895. "publishResponse": {
  4896. "result": {
  4897. "requestId": "demo:publish:report-v1",
  4898. "schemaVersion": "ksf.v0.7",
  4899. "ok": true,
  4900. "status": "published",
  4901. "data": {
  4902. "artifactId": "ARTIFACT_OBJECT_ID",
  4903. "publicationStatus": "published",
  4904. "cardId": "REPORT_CARD_ID",
  4905. "publishedAt": "2026-10-29T12:00:00.000Z",
  4906. "readable": true
  4907. },
  4908. "errors": []
  4909. }
  4910. },
  4911. "noiseRequest": {
  4912. "requestId": "demo:noise:raw-record-v1",
  4913. "className": "KfRawXhsNote",
  4914. "recordId": "RAW_RECORD_OBJECT_ID",
  4915. "expectedUpdatedAt": "2026-10-29T12:00:00.000Z",
  4916. "noiseScope": "REGISTERED_RESEARCH_SCOPE_KEY",
  4917. "noiseRuleVersion": "REGISTERED_NOISE_RULE_VERSION",
  4918. "decision": {
  4919. "isNoise": true,
  4920. "noiseReason": "示例:正文与当前研究的即食面消费需求无关。",
  4921. "method": "manual",
  4922. "contentHash": "SERVICE_VERIFIED_SEMANTIC_CONTENT_HASH",
  4923. "provenance": {
  4924. "confirmationEventId": "TRUSTED_EMPLOYEE_ACTION_EVENT_ID"
  4925. }
  4926. }
  4927. },
  4928. "noiseQuery": {
  4929. "className": "KfRawXhsNote",
  4930. "noiseContext": {
  4931. "scope": "REGISTERED_RESEARCH_SCOPE_KEY",
  4932. "ruleVersion": "REGISTERED_NOISE_RULE_VERSION",
  4933. "mode": "usable"
  4934. },
  4935. "limit": 20
  4936. }
  4937. }
  4938. }