香港公司秘書/公司治理專業資格考試 CGQP|《公司治理》模擬題庫

每位學員用自己的帳號登入,錯題本與練習記錄會分開存放,不會互相混淆。 帳號資料储存在您目前使用的這台裝置瀏覽器內。
📖 考點速覽|12 章重點蒸餾(開考前 5 分鐘過一遍)(點擊展開)
第1章 · 治理理論與框架
  • 代理問題:所有權與經營權分離,董事須以股東及利益相關者長遠利益行事
  • 治理模式:股東優先(Anglo-US)vs 利益相關者模式(歐陸/日本)
  • 國際框架:G20/OECD《公司治理原則》六大支柱
第2章 · 董事會與董事角色
  • 董事信義義務:真誠行事(loyalty)、謹慎·技能·勤勉(care & diligence)
  • 董事類型:執行董事/非執行董事/獨立非執行董事(INED)的職能分工
  • 董事任命須經股東個別表決;須披露利益及交易
第3章 · 董事會委員會
  • 三大委員會:審計、薪酬、提名——職權範圍書、組成與獨立性要求
  • 審計委員會:審閱財務匯報、監督內外審計、內控有效性
  • 獨董佔大多數是良好實踐;委員會須向董事會匯報
第4章 · 企業操守、CSR 與 ESG
  • ESG 三支柱:環境(E)、社會(S)、管治(G);CSR 與創造共享價值(CSV)
  • TCFD 四大範疇:管治、戰略、風險管理、指標與目標
  • ESG 須納入董事會議程與戰略,而非僅合規事項
第5章 · 治理守則與國際框架
  • 港交所《企業管治守則》分原則、守則條文(code provisions)、建議最佳實務
  • 「遵守或解釋」(comply or explain):偏離守則條文須在中報/年報解釋
  • 主席與行政總裁職務須分開;獨董至少三分之一
第6章 · 匯報與股東參與
  • 匯報:年報、中報、ESG 報告的披露要求與時間
  • 股東溝通:股東大會、投票調查、投資者關係
  • 一股一票、按股數表決是股東參與的基礎
第7章 · 上市公司治理專題
  • 港股專題:上市規則治理要求、股權高度集中警示
  • 同股不同權(WVR)架構的限制與受益人身份要求
  • 國企/紅籌治理:內控、關連交易與獨董保護
第8章 · 董事責任與法律後果
  • 違反董事職責的後果:取消資格令、賠償、利潤返還
  • 刑事責任:虛假陳述、欺诈、內幕交易
  • 「公平合理」(fairness)原則與壓迫救濟(s168A)
第9章 · 可持續發展與氣候治理
  • 董事會須監督氣候風險並設管治架構
  • ISSB:IFRS S1(一般可持續披露)與 S2(氣候)
  • 範圍 1/2/3 溫室氣體排放的分類與披露
第10章 · 機構投資者與代理投票
  • 機構投資者行為準則:《公司管治及股東權益指引》(IRC)
  • 代理投票顧問(proxy advisors)的影響與爭議
  • 股東議案(shareholder resolutions)與股東維權
第11章 · 保證與內部審計
  • 三道防線:業務管理、風險合規、內部審計
  • 內部審計職能:客觀保證、風險為本審計計劃
  • 審計委員會對內外審計的任免與監督
第12章 · 治理失敗與改革
  • 治理失敗的典型:董事會失靈、控制失效、審計失效
  • 案例教訓:董事會挑戰文化與信息質量的重要性
  • 改革方向:加強獨立性、問責與透明度

※ 以上為按課程大綱整理的自編備考重點,並非官方考試內容;系統學習請參閱 HKCGI 官方課程資料。

150題庫總題數
50%合格線
75%優秀線
第 1 / 100 題 模擬練習
0%
合格

📊 各章節表現

❌ 錯題回顧(已加入錯題庫)

📕 我的錯題本(0 題)

每次答錯的題目會自動記錄到這裡;在「錯題重做」中答對後會自動移出。

⚠️ 我的異議清單(0 條)

做題時點「⚠️ 質疑此題」即可記錄。確認後請一次過傳送給我們跟進核實。

🗂 我的練習記錄

👤 我的帳號

🔑 修改密碼

const BANK = [[1,1,"1","代理理論(Agency Theory)所指的「代理問題」主要源於:","委託人與代理人的利益不一致及資訊不對稱","公司股東人數過多難以管理","公司註冊資本不足","董事會會議次數過少","A","代理理論認為經理人(代理人)與股東(委託人)目標可能分歧,加上資訊不對稱,代理人有機會損害委託人利益,因此需要治理機制約束。"],[2,1,"1","以下哪一項屬於股東(委託人)承擔的代理成本?","公司支付的企業所得稅","監督經理人表現的監察成本","員工的薪金支出","生產原材料的採購成本","B","代理成本包括委託人對代理人進行監督的成本(如審計費用)、代理人作出保證的約束成本,以及決策偏離股東最佳利益造成的剩餘損失。"],[3,1,"1","管家理論(Stewardship Theory)對經理人的基本假設是:","經理人必然以私利最大化行事","經理人會以公司及股東整體利益行事","經理人無須任何監督","經理人只重視短期薪酬","B","管家理論假設經理人是值得信賴的「管家」,會主動以公司利益行事,強調賦權與信任,而非單純監督制衡。"],[4,1,"1","利益相關者理論(Stakeholder Theory)主張:","公司只須對股東負責","公司應兼顧股東、僱員、客戶、社區等各方利益","公司應以債權人利益為唯一目標","公司應完全由政府主導決策","B","利益相關者理論認為公司是多主體契約的聯結點,治理目標是在各方利益相關者之間取得平衡,而非只服務股東。"],[5,1,"1","資源依賴理論(Resource Dependency Theory)認為董事會的重要價值在於:","批准會議紀錄","為公司帶來資訊、技能與對外關係網絡","代替管理層處理日常營運","決定員工的年終花紅","B","資源依賴理論強調董事會協助公司取得關鍵資源、減低外部環境不確定性,例如董事的人脈、專業知識與聲譽。"],[6,1,"1","根據 Anglo-American 治理模式,其監督架構的典型特徵是:","採用雙層董事會制度","單一董事會內由獨立非執行董事發揮監察作用","由監事會監督管理董事會","由工會代表進入董事會","B","英美模式採單一董事會(one-tier board),監察職能主要依賴獨立非執行董事及審計委員會;雙層制則見於德國等歐陸模式。"],[7,1,"1","Cadbury Report(1992)對公司治理發展最重要的貢獻是:","首次提出財務報表編製準則","確立「遵照或解釋」(comply or explain)原則並建議主席與行政總裁職務分離","創立國際會計準則委員會","規定所有公司必須上市","B","Cadbury Report 是現代公司治理的里程碑,提出「遵照或解釋」披露制度,並建議將主席與行政總裁職務分離以分散權力。"],[8,1,"1","OECD《公司治理原則》涵蓋的範圍不包括以下哪一項?","保障股東權利與平等對待","董事會責任","利益相關者角色與資訊披露","指定公司行政總裁的人選","D","OECD 原則涵蓋股東權利、公平對待、利益相關者角色、披露與透明度、董事會責任六大範疇,但不干預公司具體人事任命。"],[9,1,"1","交易成本經濟學(TCE)解釋公司治理結構存在的原因是:","滿足法律註冊的形式要求","當交易具有資產專用性且不確定性高時,內部治理結構可降低交易成本","提高員工福利","增加企業稅務優惠","B","TCE 認為當資產專用性、交易頻率與不確定性高時,透過內部治理(層級)協調比市場交易更能降低規劃、監督與執行的成本。"],[10,1,"1","「內部人控制」(insider system)治理體系的典型特徵是:","股權高度分散、流通性高","股權集中於創辦家族或機構,控制權與現金流權可能分離","完全依賴外部市場收購機制監督","無須披露財務報表","B","內部人體系(如亞洲、歐陸)常見控股股東,治理問題主要是控股股東與小股東之間的利益衝突,而非經理人與股東的衝突。"],[11,2,"2","香港《企業管治守則》建議主席與行政總裁(CEO)職務分離的主要原因是:","減少薪酬支出","避免權力過度集中於一人,保障董事會獨立決策","方便安排會議室","符合稅務申報要求","B","職務分離可確保權力與授權制衡,主席領導董事會、CEO 負責營運,避免一人同時主導決策與執行。"],[12,2,"2","香港上市發行人的董事會中,獨立非執行董事(INED)佔比須至少:","三分之一","四分之一","二分之一","五分之二","A","《上市規則》第3.10A條規定,上市發行人的獨立非執行董事須佔董事會人數至少三分之一。"],[13,2,"2","判斷董事是否「獨立」時,以下哪一種情形最可能影響其獨立性?","持有公司少量股份作為投資","過去一年曾擔任公司核心管理層職位","居住在香港以外地區","年齡超過六十歲","B","曾任公司管理層、與控股股東有重大業務或財務往來、收取董事費以外的重大酬金等,都會損害獨立性;少量持股或年齡本身不構成不獨立。"],[14,2,"2","執行董事(executive director)與非執行董事(NED)的根本區別在於:","是否持有公司股份","是否全職參與公司日常業務管理","是否出席董事會會議","是否由股東委任","B","執行董事全職參與日常管理,兼有僱員身份;非執行董事不參與日常營運,主要提供判斷、監察與制衡。"],[15,2,"2","董事對公司負有的信義職責(fiduciary duties)不包括:","真誠地以公司整體利益行事","不得利用職位謀取未經批准的個人利益","避免利益衝突及須披露權益","保證公司每年盈利增長","D","信義職責包括真誠行事、恰當目的、不受約束的判斷、避免利益衝突及合理謹慎技能勤勉;董事並不擔保業績。"],[16,2,"2","香港《公司條例》第465條規定董事的一般行事準則,當中「合理程度的謹慎、技能及努力」的判斷標準是:","以該董事個人的知識經驗為唯一標準","以合理勤勉的人士所預期的標準,並結合該董事的實際知識技能及擔任的職務","以公司章程細則列明的標準","以最低學歷要求為準","B","第465(2)條採雙重標準:客觀上须達到合理勤勉人士可合理預期的謹慎技能,主觀上結合董事本身的知識技能與職務性質。"],[17,2,"2","董事在利益衝突的交易中,最恰當的做法是:","先行投票再申報利益","按《公司條例》及章程要求申報利益,並在必要時放棄表決","隱瞞利益以維持會議效率","指示秘書刪除會議紀錄","B","董事須及時充分披露利益性質,受影響交易的表決權可能被取消,程序違規可導致決議被推翻及須作出賠償。"],[18,2,"2","董事會的集體責任(collective responsibility)是指:","只有贊成決議的董事承擔責任","全體董事對董事會決議共同承擔責任,異議董事應將異議記入會議紀錄","責任全部由主席承擔","責任全部由公司秘書承擔","B","董事對董事會決定共同負責;如有異議,須在會上清楚反對並要求記入紀錄,否則可能被推定為同意。"],[19,2,"2","董事會評估(board evaluation)的主要目的是:","決定裁員名單","檢視董事會及委員會的構成、運作與效能並提出改進","計算董事的稅款","代替審計師發表意見","B","定期評估董事會表現有助提升決策質素與問責性,《企業管治守則》建議定期進行,並可聘請外部評估人增強客觀性。"],[20,2,"2","董事會授權予管理層時,董事會仍然:","無須再對受授權事項負責","須對授權事項保留監督責任,授權不會免除其信義職責","只須負責文件存檔","須親自重新執行全部事務","B","授權是治理的必要手段,但董事會須建立清晰的授權範圍、匯報與監控機制,最終責任仍在董事會。"],[21,3,"3","審計委員會的核心職能是:","主持股東週年大會","監督財務匯報、內部控制及外部與內部審計","制定市場推廣策略","審批員工加班申請","B","審計委員會負責監察財務申報質素、內部監控有效性、監督內審職能及與外聘核數師的關係(包括審計聘任與非審計服務)。"],[22,3,"3","香港上市發行人的審計委員會成員要求是:","全部由執行董事組成","全部為非執行董事,多數須獨立,主席須獨立且具備會計專業知識","由行政總裁擔任主席","須包含公司的主要債權人代表","B","《企業管治守則》C.3 規定審計委員會須全由非執行董事組成、多數獨立、主席獨立且具備適當專業資格或會計經驗。"],[23,3,"3","薪酬委員會的主要職責是:","決定全體員工的裁員方案","就董事及高級管理層的薪酬政策與具體安排向董事會提出建議","決定公司上市定價","審批供應商招標","B","薪酬委員會確立薪酬政策,使酬金與長期表現掛鈎、具透明度,並監督股份計劃等激勵安排的合規執行。"],[24,3,"3","提名委員會(nomination committee)的職能通常不包括:","檢討董事會的規模、構成與多元化","物色並提名董事候選人","董事繼任規劃","代表公司與核數師磋商審計費用","D","與核數師磋商審計聘任及費用屬審計委員會職權;提名委員會聚焦董事會構成、人才物色、繼任與多元化政策。"],[25,3,"3","審計委員會審視外聘核數師的非審計服務時,最須關注:","服務費用的市場行情","該服務會否損害核數師的獨立性與客觀性","核數師的辦公室規模","服務的宣傳效果","B","非審計服務可能造成自我審核威脅(self-review threat),審計委員會須評估其性質、費用及保障措施,確保核數獨立性不受損害。"],[26,3,"3","內部審計職能與審計委員會的關係,以下正確的是:","內審向審計委員會報告,委員會監督其職能、範圍與資源","內審由行政總裁全權指揮並保密","內審等同外聘核數師的附屬部門","內審無須向任何人報告","A","內審須有獨立的報告途徑(職能上向審計委員會匯報),委員會負責監督其計劃、範圍、資源充足性及審計發現的跟進。"],[27,3,"3","風險委員會與審計委員會在風險管理職能上的分工,較恰當的安排是:","完全重疊,各自獨立監察全部風險","審計委員會關注財務匯報及相關內控,風險委員會統籌更廣泛的企業風險管理","風險管理只由風險委員會負責,審計委員會不得過問","兩個委員會主席由同一人兼任以節省時間","B","兩委會職能須清晰劃分並協調,避免監察缺口或重疊;財匯相關風險與內控歸審計委員會,企業整體 ERM 常由風險委員會統籌。"],[28,3,"3","董事會委員會的授權應載明於:","公司與客戶的銷售合同","經董事會批准的委員會職權範圍(terms of reference),並公開披露","公司秘書的個人筆記","招聘廣告","B","委員會須有經批准的職權範圍,界定成員、職能、權限與匯報路線,上市發行人的職權範圍一般須在網站及年報披露。"],[29,3,"3","《企業管治守則》對董事會多元化政策的要求是:","僅限性別多元化","載明多元層面(包括性別等)的可量化目標及實施進度,並在企業管治報告中披露","無須任何披露","只在招聘時口頭提及","B","守則要求發行人制定並披露董事會多元化政策,設定可計量目標(如董事會性別比例),每年檢討並匯報進度。"],[30,3,"3","董事會下設委員會的會議紀錄,一般應:","只保存於委員會主席個人檔案,不作傳閱","提交全體董事會成員傳閱,供董事知情及問責","由委員會自行銷毀","僅在監管查詢時才整理","B","委員會須向董事會匯報其決定與建議,會議紀錄向全體董事傳閱是落實董事會集體知情與問責的基礎。"],[31,4,"4","企業社會責任(CSR)金字塔由基層到頂層的正確排序是:","經濟責任、法律責任、倫理責任、慈善責任","慈善責任、倫理責任、法律責任、經濟責任","法律責任、經濟責任、慈善責任、倫理責任","倫理責任、經濟責任、法律責任、慈善責任","A","Carroll 模型自下而上為:經濟責任(盈利)→ 法律責任(守法)→ 倫理責任(合乎公義)→ 慈善責任(回饋社會)。"],[32,4,"4","舉報(whistleblowing)制度有效運作的關鍵要素是:","鼓勵匿名舉報並嚴懲舉報人","提供安全保密的舉報渠道、獨立調查及保障舉報人免受報復","要求舉報先經被舉報人批准","只接受書面正楷簽名舉報","B","有效的舉報政策包括多渠道舉報、保密處理、獨立調查機制及反報復保障(通常由審計委員會監察),以鼓勵內部人反映不當行為。"],[33,4,"4","香港聯交所《上市規則》附錄C2(原附錄27)《環境、社會及管治報告守則》採用的披露原則是:","強制全面披露,無任何彈性","「不遵守就解釋」(comply or explain)為基礎,重要 KPI 須量化並說明標準","純屬自願,無須提及","只須披露環境範疇","B","ESG 守則以「不遵守就解釋」運作,發行人須按重大性、量化、平衡等匯報原則披露 ESG 資料,重大 KPI 須附量化數據與準則說明。"],[34,4,"4","ESG 匯報的「重大性原則」(materiality)是指:","所有事項平均篇幅披露","披露對發行人及利益相關者有重大影響的 ESG 議題,並可進行重要性評估排序","只披露正面事項","每年隨機抽選議題","B","發行人應進行重要性評估(如與持份者訪談、問卷),識別對業務及持份者最具影響的 ESG 議題,並優先及充分披露。"],[35,4,"4","氣候相關財務披露工作組(TCFD)框架的四大支柱是:","治理、戰略、風險管理、指標與目標","審計、稅務、法律、人力","計劃、執行、檢查、行動","使命、願景、價值觀、文化","A","TCFD 建議圍繞治理、戰略、風險管理、指標與目標四大元素披露氣候相關風險與機遇,已納入聯交所氣候披露要求的方向。"],[36,4,"4","企業董事會建立道德操守文化的最有效方式是:","由上而下以身作則(tone at the top)並訂立行為守則","只要求基層員工簽署承諾書","在年報中列出道德口號","委託公關公司發布新聞稿","A","治理層的示範作用(tone at the top)配合行為守則、培訓與問責機制,是塑造企業道德文化的根基;僅作表面宣傳無實效。"],[37,4,"4","禮品與利益衝突政策的合理核心要求是:","員工不得收取任何形式的茶水","設定價值門檻與申報登記制度,超出即須申報或謝絕","收受禮品無須任何記錄","由個別員工自行判斷即可","B","合理的禮品政策透過門檻、登記與審批機制管理,兼顧商業禮儀與防止賄賂;完全禁止或完全放任都不可行。"],[38,4,"4","反貪污方面,香港《防止賄賂條例》(第201章)第9條規範的是:","政府官員的選舉開支","代理人在未經主事人許可下因主事人事務收受利益","公司股息分配","上市公司停牌程序","B","第9條針對私營機構:代理人(僱員、董事等)未經主事人(公司)許可,因辦理主事人業務或事務而索取或收受利益即屬犯罪。"],[39,4,"4","持份者參與(stakeholder engagement)在公司治理中的價值主要體現在:","增加公司秘書工作量","協助董事會識別風險與期望,改善決策與長期價值","取代財務審計","減少資訊披露","B","有效的持份者溝通讓董事會了解外部期望、及早識別風險與信譽問題,並支撐重要性評估與可持續決策。"],[40,4,"4","綜合匯報(Integrated Reporting)的核心概念是:","把財務報表與稅務申報表合訂一冊","以六項資本(財務、製造、智力、人力、社會與關係、自然)說明價值創造過程","只匯報環境指標","按月發布利潤預測","B","綜合匯報()以六項資本及整合思維闡述機構如何透過商業模式在不同時間範圍創造價值,連接財務與非財務資訊。"],[41,5,"5","香港《企業管治守則》(Corporate Governance Code)的執行機制是:","強制法例,違者入獄","「不遵守就解釋」——偏離守則條文須在企業管治報告中說明原因","純粹自願參考","只適用於新上市公司","B","守則屬《上市規則》一部分,發行人須遵守守則條文;偏離者須在企業管治報告中給予深思熟慮的解釋,聯交所可查詢或採取行動。"],[42,5,"5","香港《企業管治守則》與《上市規則》第二及第七部分的關係是:","完全獨立、互不相干","守則隨附於《上市規則》並成為其組成部分,違反守則涉「不遵守就解釋」、違反強制披露要求即違反《上市規則》","守則只供內部培訓使用","守則取代所有法例","B","《企業管治守則》及其報告文件載於《上市規則》附錄C1,部分條文屬強制披露,其他以「不遵守就解釋」方式執行。"],[43,5,"5","英國公司治理守則(UK Corporate Governance Code)的適用對象是:","所有英國私人公司","在倫敦證券交易所正式上市的公司","英國政府部門","所有歐盟企業","B","英國守則適用於倫交所優質市場(Premium/Standard listing 的公司),大型私人公司則適用 Wates Principles。"],[44,5,"5","英國 Wates Principles 的適用對象是:","大型私人公司","上市公司","銀行業","慈善機構","A","Wates Corporate Governance Principles for Large Private Companies 適用於營業額超過 2 億英鎊等標準的大型私人公司。"],[45,5,"5","雙層董事會制度(two-tier board)的典型代表是:","英國","德國","美國","新加坡","B","德國採監事會(Supervisory Board)與管理董事會(Management Board)分離的雙層制,監事會負責聘任及監督管理層。"],[46,5,"5","日本公司治理改革的標誌性文件《Stewardship Code》及《Corporate Governance Code》的核心推動力量是:","金融廳與東京證券交易所","世界銀行","美國證券交易委員會","香港聯交所","A","日本 2014 年推出《責任投資守則》(金融廳)、2015 年東證推出《公司治理守則》,共同推動日本企業治理與機構投資者問責。"],[47,5,"5","「遵照或解釋」原則的主要優點是:","完全免除披露責任","兼顧規則統一與靈活性,偏離須向市場說明理由","讓公司可以永遠不遵守","簡化審計程序","B","此原則以披露推動治理改善:公司可靈活偏離,但須向市場交代理由,由投資者以市場力量督促治理質素。"],[48,5,"5","機構投資者簽署《責任投資守則》(Stewardship Code)後的核心承諾是:","放棄投票權","積極行使投票權、與被投資公司溝通並公開其投票政策","只投資政府債券","停止披露持倉","B","Stewardship Code 要求機構投資者履行積極擁有權:制定投票政策、參與公司治理對話、披露投票活動及利益衝突管理。"],[49,5,"5","香港上市公司董事須接受的首任董事培訓及持續專業發展,依據是:","《公司條例》刑罰條文","《企業管治守則》要求董事參與持續專業發展,公司秘書須向董事會匯報培訓記錄","證監會的牌照條件","無任何相關要求","B","守則要求董事參加持續專業發展(首任就任培訓及年度培訓),發行人須在公司網站披露董事培訓記錄以證明合規。"],[50,5,"5","公司治理報告(Corporate Governance Report)作為年報的一部分,須披露的內容通常包括:","產品銷量明細","治理實務與守則的遵從情況、董事會組成與會議次數、多元化政策及董事培訓記錄","員工個人的稅單","競爭對手的內部數據","B","企業管治報告須說明守則遵從(或偏離原因)、董事會運作、委員會工作、多元化、董事培訓等,讓股東評估治理質素。"],[51,6,"6","股東週年大會(AGM)對上市公司的核心功能是:","發布新產品","讓股東行使投票權、聽取董事會報告並質詢董事","招聘員工","簽署銀行貸款合同","B","AGM 是股東問責的關鍵平台:審議賬目、選舉董事、委聘核數師、宣布股息並向董事會提問。"],[52,6,"6","投票表決時,「按股數表決」(poll)與「舉手表決」的關鍵差異是:","按股數表決以每股一票計算,舉手表決以人頭計算","兩者完全相同","舉手表決更具法律效力","按股數表決只適用於小型公司","A","按股數表決反映每股一票的股權基礎;舉手表決每人一票,可能扭曲大股東權益,聯交所鼓勵以至規定重要決議採按股數表決。"],[53,6,"6","投資者關係(IR)管理在公司治理中的作用是:","替代財務報告","確保市場獲得及時、準確、一致的資訊,促進股東溝通與公平定價","操控股價","只與大戶溝通小道消息","B","有效 IR 透過持續、公平的資訊發布降低資訊不對稱,是公司與股東及市場之間治理溝通的橋樑。"],[54,6,"6","年度報告中「管理層討論與分析」(MD&A)的目的在於:","代替審計意見","解釋公司表現、風險與前景,協助使用者理解財務報表以外的經營情況","宣傳競爭對手弱點","披露員工薪金明細","B","MD&A 就業務表現、流動資金、資源、風險與未來策略作出說明,是判斷公司前景的重要非審計資訊。"],[55,6,"6","臨時股東大會(EGM)通常由以下哪些人士召開?","任何員工","董事會、持有 5% 表決權的股東申請或法院指示等法定途徑","公司客戶","核數師自動召開","B","董事會可召開 EGM;代表 5% 以上表決權的股東可請求召開或自行召開;法院亦有權指示召開。"],[56,6,"6","小股東權益保障的常見機制不包括:","累積投票制","派生訴訟(derivative action)","不公平損害濟助(unfair prejudice remedy)","大股東的絕對否決權","D","累積投票、派生訴訟及不公平損害救濟都是保護小股東的機制;大股東否決權反而可能加劇控制權濫用。"],[57,6,"6","企業透明度對資本市場的最直接影響是:","降低資訊不對稱,有助降低資本成本","增加稅務負擔","減少交易量","提高破產概率","A","高質素披露令投資者更準確定價、降低風險溢價,從而降低企業融資成本,這是治理與資本成本的實證聯繫之一。"],[58,6,"6","股東通訊政策應遵循的基本原則是:","優先披露給特定機構","及時、平等、透明地向全體股東提供資訊","只披露利好消息","透過八卦渠道發布","B","公平披露(fair disclosure)要求資訊同時向所有股東提供,避免選擇性披露造成不公平及違反《證券及期貨條例》第XIVA部內幕消息條文。"],[59,6,"6","上市公司發布「內幕消息」時,根據《證券及期貨條例》第XIVA部,應:","先通知大股東再公布","盡快向公眾披露,除非屬安全豁免範圍","永遠保密","只在年報披露","B","上市公司察覺內幕消息後須在合理切實可行範圍內盡快披露,僅在法定豁免(如消息洩露會妨礙合法商業目的)情況下可延遲。"],[60,6,"6","年度股東大會之後,公司秘書在治理跟進方面的主要職責是:","銷毀所有大會文件","確保決議妥善執行、法定申報按時完成,並整理大會紀錄以備查核","直接執行所有商業決策","通知股東不再需要投票","B","大會後公司秘書須跟進決議執行(如股份發行註冊)、按時向公司註冊處申報、整理會議紀錄及法定登記文件。"],[61,7,"7","香港上市公司董事會中,「獨立非執行董事任期超過9年」的情況是:","其獨立性須接受特別嚴格審視,聯交所建議不再視為當然獨立","自動失去董事資格","無任何影響","須強制辭任","A","任職逾9年的 INED 須通過更嚴格的獨立性評估,投資者也高度關注其連任,反映「任期過長侵蝕獨立性」的市場共識。"],[62,7,"7","上市發行人董事會若只有一名獨立非執行董事,將:","違反《上市規則》最低3名 INED 的要求(須至少3名且佔三分之一)","符合規定","須繳罰款即可","由公司章程決定","A","《上市規則》第3.10A條及第3.10(2)條要求至少3名 INED 且佔董事會至少三分之一,其中至少1名具會計專業資格。"],[63,7,"7","發行人的「董事會委員會」中,薪酬委員會成員的獨立性要求是:","全部由獨立非執行董事組成(守則要求 majority 或全部為 INED)","可由執行董事任主席","須包括員工代表","無要求","A","《企業管治守則》E.1 要求薪酬委員會由獨立非執行董事組成(須佔多數並任主席),避免高管自定薪酬。"],[64,7,"7","董事會性別多元化的最新強制要求是:","董事會不得只有單一性別(單一性別董事會須委任另一性別董事)","性別比例須達50:50","無強制要求","只適用於新上市","A","《上市規則》第13.92條禁止單一性別董事會,現有發行人須於過渡期內委任至少一名另一性別董事。"],[65,7,"7","發行人須在企業管治報告中披露董事會會議次數及個別董事出席率,其目的是:","讓股東評估董事投入程度與問責性","滿足稅務要求","供招聘參考","無實際作用","A","出席記錄是治理透明度的基礎披露,長期低出席率的董事會面對連任壓力。"],[66,7,"7","上市公司「供股」(rights issue)的治理要求包括:","須經股東批准並按持股比例向全體股東發售,放棄者的權益被攤薄","只向大股東發售","毋須股東批准","無須公告","A","供股屬優先認購安排,《上市規則》須股東批准並保障現有股東按比例參與的權利。"],[67,7,"7","「一般性授權」(general mandate)發行新股的規模上限是:","於股東大會獲批准後,可發行不超過已發行股本20%的新股(另可加回購股份數目)","無上限","5%","50%","A","股東週年大會常設一般性授權(20%+回購10%),超出則須另行股東批准,是中小股東保護的重要機制。"],[68,7,"7","核數師辭任或被辭退時,上市公司的正確程序是:","按《上市規則》第13.51A條向聯交所提交報告,並確認無須提請股東關注的事項(或如實說明)","直接更換即可","毋須通知聯交所","由薪酬委員會處理","A","辭任核數師須提交書面報告說明情況,發行人須核實並公告有無應提請股東關注的事項。"],[69,7,"7","「內幕消息受限制名單」(restricted list)的作用是:","限制相關人員買賣該等證券,防止在掌握內幕消息期間交易","列出優質股票","替代停牌","供投資者參考","A","持有內幕消息的人員列入受限名單禁止交易,是內幕消息管制的標準內控措施。"],[70,7,"7","上市公司董事買賣自身證券須遵守:","《上市發行人董事進行證券交易的標準守則》(Model Code)","無須遵守任何規則","只受《防止賄賂條例》規範","由公司秘書決定","A","Model Code 規範董事交易的封鎖期(業績前禁買賣)、事先通知與披露要求,違反須向聯交所匯報。"],[71,7,"7","年度業績公布前的「封鎖期」(blackout period)內,董事:","不得買賣公司證券(除非符合例外條件)","可以自由買賣","只可買入","只可賣出","A","封鎖期(通常業績公布前約60日至公布當日)禁止董事交易,防止利用未公布的業績資訊。"],[72,7,"7","「企業管治職能」由誰承擔(守則 A.2.1)?","董事會整體須承擔企業管治職責,並在董事會內部清晰分配相關工作","只由公司秘書承擔","只由審計委員會承擔","外部顧問","A","守則要求董事會對管治職能作整體負責並明確內部分工(如指定委員會或主席承擔特定方面)。"],[73,7,"7","發行人使用「介紹上市」方式的特點是:","不發行新股,僅將現有股份申請上市掛牌","必須發行新股","須公開招股","只適用於科技公司","A","介紹上市不涉及籌資,常見於換股上市或分拆安排。"],[74,7,"7","分拆上市(spin-off)的審批重點是:","母公司須證明保留業務能獨立運作、分拆符合股東利益並符合《上市規則》第15項應用指引","無須審批","只須董事會批准","只向大股東披露","A","PN15 要求分拆後母公司保留足夠資產與業務、不損害小股東利益,並須股東批准。"],[75,7,"7","上市發行人「企業管治報告」的法定層級是:","屬《上市規則》強制披露範圍,部分內容屬「不遵守就解釋」","純屬自願","只適用於 H 股","由核數師決定","A","企業管治報告載於《上市規則》附錄C1,董事會須確認報告內容真實無誤導。"],[76,7,"7","股東通訊政策(shareholder communication policy)須:","定期檢討其有效性,並在企業管治報告中披露檢討結果","訂立後永不修改","只在大股東要求時提供","無須披露","A","守則要求發行人制定及披露股東通訊政策,並定期檢討其有效性。"],[77,7,"7","ESG 委員會(或可持續發展委員會)向董事會匯報的合理頻率是:","至少每年定期(通常每半年)匯報 ESG 策略、目標與重大議題進展","十年一次","無須匯報","只在危機時","A","ESG 管治要求定期向董事會匯報以履行董事會對 ESG 策略的監督責任。"],[78,7,"7","「投票顧問機構」(proxy adviser,如 ISS、Glass Lewis)對發行人的影響在於:","其投票建議影響機構投資者表決,發行人須主動溝通治理安排","決定股息","取代監管","無影響","A","機構投資者常參考代理投票顧問的建議,發行人須管理好與其的溝通與治理披露。"],[79,7,"7","「一致行動人」(acting in concert)概念出自:","《公司收購、合併及股份回購守則》","《公司條例》","《稅務條例》","銀行公會指引","A","收購守則界定一致行動人集團,其持股合併計算以判斷是否觸發強制全面要約(30%)。"],[80,7,"7","觸發強制全面要約的持股門檻是:","持有或與一致行動人合共持有30%或以上投票權","5%","50%","75%","A","收購守則規則26:達30%或以上,或持股50%以上股東增持股權逾2%皆觸發強制全面要約。"],[81,7,"7","「清洗交易」(whitewash waiver)的含義是:","向執行人員申請豁免因新股發行而產生的強制全面要約責任,並須獲獨立股東批准","清洗賬目","免除審計","豁免上市費用","A","收購守則規則26豁免註釋1:因供股等而觸發要約責任可申請清洗豁免,須獨立股東投票。"],[82,7,"7","上市公司回購股份的「一般授權」上限通常是:","已發行股本的10%","50%","25%","無上限","A","股東大會一般授權容許回購不多於10%股份,回購價不得高於規定基準。"],[83,7,"7","關連交易中「獨立股東批准」要求豁免的情形不包括:","控股股東參與的交易","符合最低豁免比率(如低於0.1%)的日常交易","集團內部全資附屬公司之間的交易","按成本分攤的集團重組","A","控股股東參與的交易恰恰是最須獨立股東批准的情形;小額、純屬集團內部交易可豁免。"],[84,7,"7","董事服務合同若無固定任期(rolling contract)超過一年,上市公司須:","於股東大會取得股東批准該合同","直接生效","由主席批准","毋須披露","A","守則B.1.9:向董事或其配偶授予超過一年的服務合同須經股東批准。"],[85,7,"7","「業績期外的股份交易」董事仍須:","遵守 Model Code 的通知及最低持有期要求","無須任何程序","只須口頭告知","事後補報即可","A","封鎖期外交易仍須事先書面通知主席/公司秘書並遵守最短持有期(如買入後6個月內不得賣出)。"],[86,7,"7","發行人「公司通訊」派發給股東的法定途徑包括:","電子通訊(經股東同意)及郵寄,並須在網站發布","只在報紙夾帶","社交媒體私訊","口頭轉達","A","《上市規則》第2.07A條允許以電子方式發送公司通訊(經同意),並須提供網站版本。"],[87,7,"7","上市發行人須於「披露易」發布公告的時限要求是:","在營業日報章刊發前或當日於披露易發布,夜間重要公告亦有指定時限","無時限","事後一周內","自行決定","A","《上市規則》第13.09條及第2.07C條規範公告時限與刊發方式,重要消息須及時披露。"],[88,7,"7","「內部監控年度檢討」由誰向董事會匯報最為恰當?","審計委員會(匯總管理層及內審的檢討結果)","行政總裁個人","外聘核數師代替","公司秘書簽發意見","A","審計委員會督導風險管理與內控檢討並向董事會/股東提出意見,管理層提供基礎評估。"],[89,7,"7","董事會須每年在企業管治報告中確認的內部監控事項是:","系統的有效性及已應對的重大內控失效與舞弊","公司必然盈利","無須確認","由核數師確認","A","守則D.2.3:董事會須在管治報告中就系統有效性及重大失效提供披露。"],[90,7,"7","「多元化政策」的年度披露須包括:","政策及可量化目標、執行進度(如董事會性別比例、高級管理層女性比例)","只列願景","員工花名冊","無須披露","A","第13.92條及守則要求披露多元化政策、目標與進度,涵蓋董事會及員工層面。"],[91,8,"8","董事虛假陳述(misrepresentation)觸發的民事責任類型是:","欺詐性失實陳述可致損害賠償及合約可撤銷","無責任","只須道歉","自動免職","A","依《失實陳述條例》及普通法,欺詐性陳述引致侵權賠償,非欺詐性亦可能有撤銷權。"],[92,8,"8","《證券及期貨條例》第277條針對的行為是:","披露虛假或具誤導性的資料以誘使交易(市場失當行為)","按時交稅","正常投資","派發股息","A","第XIV部市場失當行為包括虛假交易、操縱價格、披露虛假誤導資料等,可招致民事制裁。"],[93,8,"8","市場失當行為的民事後果(經市場失當行為審裁處)包括:","取消擔任董事資格最長5年、交出利潤、冷靜期命令等","入獄為唯一後果","無後果","只罰款1,000元","A","審裁處可頒布多項命令;刑事檢控則由證監會轉介,欺詐類最高可判監14年。"],[94,8,"8","「披露易」系統公告中出現錯誤,發行人應:","立即發出澄清公告更正","置之不理","刪除系統內文件","通知大股東即可","A","及時澄清更正是持續披露責任的一部分,拖延會擴大誤導責任。"],[95,8,"8","董事被債權人提出清盤呈請期間,其處分公司資產的行為:","可能構成欺詐優惠或偏低價交易,清盤人可追回","完全自由","受董事會多數決定即可","須股東批准即可","A","《破產條例》及清盤法例可推翻欺詐性優惠、偏低價交易,董事須謹慎。"],[96,8,"8","「不合法分派」(unlawful distribution)的後果是:","知情的董事與股東對公司負返還責任,董事另可能違反信義職責","無後果","稅務局處理","自動合法化","A","《公司條例》第296條:股東知情下收取不合法分派須返還,董事亦負法律責任。"],[97,8,"8","董事「疏忽」的民事責任基準是:","未達到合理勤勉人士結合其個人技能的行事標準即屬疏忽","一律按最低標準","以股東滿意為準","無標準","A","第465條雙重標準:客觀合理勤勉+主觀個人技能職務,未達即可能承擔賠償。"],[98,8,"8","董事利益衝突交易若未經批准且公司受損,公司可:","追討董事交出利潤(account of profits)及損害賠償","無可追討","只可解僱","只可警告","A","信義職責違反的救濟包括利潤返還、損害賠償、合約撤銷及財產復歸。"],[99,8,"8","「董事責任保險」通常不承保的事項是:","董事的故意欺詐行為","疏忽導致的辯護費用","法律責任賠償","調查費用(視保單)","A","欺詐與故意違法屬除外責任,保險不能成為不當行為的保護傘。"],[100,8,"8","公司高級人員(含董事、秘書)對《公司條例》違規的刑事責任:","多數罪行同時處罰公司及每名授權人員(in default)","只罰公司","只罰股東","無刑事責任","A","「in default」條文使高級人員承擔連帶罰則,是公司法合規的威懾基礎。"],[101,8,"8","「取消資格令」的執行機制是:","違反取消資格令擔任董事屬刑事罪行,可處罰款及監禁","無強制力","只作紀錄","由工會執行","A","未經法院許可而於取消資格期間擔任董事,可被判刑事罰款及監禁。"],[102,8,"8","清盤中法院調查「不當交易」時關注的重點是:","董事在債務產生時是否知道或應知道公司無法避免清盤而無合理理由繼續交易","股東人數","公司名稱","註冊地點","A","第275條不當交易測試聚焦董事的知情狀態與繼續交易的合理性。"],[103,8,"8","「公司秘書」在董事責任風險中的恰當定位是:","提示與協助董事履行程序及申報義務,但不能代董事承擔信義職責","為董事承擔全部責任","決定董事行為","無任何角色","A","秘書是合規支援者與提示者,責任主體仍是董事本人。"],[104,8,"8","「內幕交易」的刑事最高刑罰是:","監禁10年及罰款(循刑事程序檢控)","罰款1,000元","只民事處理","無刑罰","A","《證券及期貨條例》第291條內幕交易循刑事檢控最高監禁10年及罰款1,000萬元。"],[105,8,"8","「虛假交易」(false trading)的示例是:","與他人串通進行不涉及實益權益轉移的買賣以製造交投活躍假象","長線投資","正常套利","股息再投資","A","第274條禁止製造虛假交易量或價格的行為,屬市場失當行為。"],[106,8,"8","「操控價格」(price rigging)的常見手法是:","以維持或改變證券價格為目的的一系列交易","指數化投資","定價招股","分紅派息","A","第275條禁止操縱價格行為,包括對敲、控制供需以維持價位。"],[107,8,"8","「披露關於受禁交易資料的罪責」(第XIVA部)要求:","掌管內幕消息者不得慫使或披露他人交易(除非豁免)","鼓勵分享消息","只限董事","只限上市公司","A","第291條內幕交易與相關披露禁令覆蓋掌握內幕消息的任何人,包括家屬與顧問。"],[108,8,"8","董事收到監管查詢(如證監會要求提供文件)時應:","通知公司秘書與董事會、尋求法律意見並按程序配合","自行銷毀文件","拒絕一切","向媒體披露","A","配合調查須循公司與法律程序,避免妨礙司法或擴大個人風險。"],[109,8,"8","「集體訴訟風險」中,董事最好的預防措施是:","完善的治理紀錄、及時披露與一致的對外陳述","否認一切","刪除郵件","只信口頭指示","A","完整紀錄與誠實披露是董事在訴訟中最有力的防線。"],[110,8,"8","「公司機會」原則(corporate opportunity doctrine)是指:","董事不得將在職期間發現的屬於公司的商業機會據為己用(除非獲批准)","機會屬董事","只適用於高管","無此原則","A","董事不得挪用公司機會;如須利用,須向董事會申報並取得獨立批准。"],[111,9,"9","香港氣候披露的路線圖是:","2025年起按新氣候披露要求分階段實施,對齊 ISSB 準則(IFRS S2)","無任何計劃","只適用於銀行","永遠自願","A","聯交所分階段實施與 ISSB 對齊的氣候相關披露,大型發行人先行。"],[112,9,"9","「範圍1、2、3排放」的區分是:","範圍1=直接排放;範圍2=外購能源間接排放;範圍3=價值鏈其他間接排放","三種污染物","三種稅","三個部門","A","溫室氣體核算體系(GHG Protocol)的三分法是氣候披露的基礎結構。"],[113,9,"9","「轉型計劃」(transition plan)應包含:","減碳目標、路徑、資本配置與治理問責安排","只列願景","無須量化","只涵蓋總部","A","有效轉型計劃將氣候目標與資本支出、管理層考核連接。"],[114,9,"9","董事會審視氣候風險的合理起點是:","氣候情景分析與重要性評估,識別實體與轉型風險對業務的影響","直接購買碳匯","停止經營","只披露數據","A","先評估後管理:情景分析幫助董事會量化不同暖化路徑下的業務影響。"],[115,9,"9","「漂綠」(greenwashing)的治理風險是:","誇大 ESG 表現導致虛假陳述法律責任與信譽損害","無風險","只影響評級","只影響招聘","A","監管機構(SFC/AFRC)日益關注 ESG 披露失實,可構成虛假或誤導資料。"],[116,9,"9","ESG 數據的可審計性要求是:","建立數據收集流程、內部控制與證據保存,支援獨立核證","由市場部估算","口頭提供","無須流程","A","ESG 數據正走向財務數據化的鑑證標準(獨立鑒證增強可信度)。"],[117,9,"9","「範圍3排放」披露的挑戰主要是:","數據來自上下游第三方,準確性與完整性較難控制","無須披露","無挑戰","監管禁止披露","A","範圍3覆蓋供應商與產品使用排放,須建立供應商數據收集機制。"],[118,9,"9","董事薪酬與 ESG 掛鈎的合理設計是:","在長期激勵中加入可衡量的可持續發展指標(如減碳目標)","只發獎金","掛鈎股價即可","無掛鈎","A","將 ESG KPI 納入激勵使管理層利益與長期可持續目標一致。"],[119,9,"9","「生物多樣性」進入治理議程的推動文件是:","TNFD(自然相關財務披露工作組)建議","無相關框架","會計準則","上市規則","A","TNFD 提供自然相關風險的披露框架,逐漸被投資者採納。"],[120,9,"9","「範圍2」排放計算的基礎是:","外購電力、熱力或蒸汽,按排放係數換算","員工通勤","廢棄物","供應商生產","A","範圍2為外購能源產生的間接排放,以用電量乘以地區電網排放係數。"],[121,10,"10","香港《責任投資守則》的簽署主體主要是:","資產擁有者及資產管理機構(機構投資者)","上市公司","核數師","監管機構","A","Stewardship Code 面向機構投資者,要求積極行使投票與參與治理。"],[122,10,"10","機構投資者「投票政策」應披露的內容包括:","投票原則(如反對主席連任逾9年、性別多元要求)與執行情況","無須披露","只內部使用","逐年隨機","A","透明的投票政策與記錄是 stewardship 問責的核心。"],[123,10,"10","「股東維權」(activism)的正當目標通常包括:","改善治理結構、資本配置與戰略透明度","奪取公司資產","逃避監管","操縱股價","A","維權投資者以治理與價值為訴求,董事會須以治理回應而非對抗。"],[124,10,"10","面對維權股東,董事會的恰當回應是:","及早溝通、公正評估其訴求、保持資訊一致並準備應對方案","拒絕接觸","立即更改章程","報警處理","A","建設性對話與程序準備(含顧問團隊)是治理成熟度的體現。"],[125,10,"10","「代理投票」中「隨波逐流」(robo-voting)的弊端是:","不經分析跟隨建議,削弱股東問責意義","提高效率","無弊端","法律禁止","A","機構投資者須建立內部審查以確保投票反映受託責任。"],[126,10,"10","「股東提案」(shareholder proposal)在香港的可行性主要受制於:","《公司條例》對成員提出議案的程序(如5%持股或100人門檻及費用)","無任何限制","由主席決定","須法院批准","A","成員可在一定條件下要求公司在周年大會處理其議案,程序門檻較高。"],[127,10,"10","「控股股東壓榨小股東」的救濟途徑不包括:","直接罷免法院","不公平損害濟助(第722條)","清盤(公正公平理由)","派生訴訟","A","救濟包括不公平損害、清盤及派生訴訟;沒有「直接罷免法院」這種途徑。"],[128,10,"10","「累積投票制」在小股東保護中的作用是:","讓小股東集中票數支持少數董事候選人,提升董事會代表性","自動產生","香港強制採用","無作用","A","香港上市規則要求選舉董事逐項表決;累積投票制見於部分司法轄區。"],[129,10,"10","「股東服務供應商」(如登記處)的治理角色是:","管理股東名冊、派發通函、協助投票統計","制定公司戰略","替代審計","決定股息","A","股份過戶登記處是股東溝通與表決程序的營運支柱。"],[130,10,"10","「ESG 評級」對公司治理的影響是:","評級影響資本成本與指數納入,促使公司改善披露與管理","無影響","取代審計","法定要求","A","評級機構的方法各異,公司應管理數據品質並主動回應。"],[131,11,"11","「三行模式」(three lines model)更新後強調:","治理機構(董事會)與第一、二、三行角色協同","行與行對立","只適用銀行","取消內審","A","IIA 2020 更新強調利益相關者治理與各行協作。"],[132,11,"11","內部審計師報告舞弊發現的途徑是:","向審計委員會/高級管理層報告,重大事項直接上報董事會","向媒體披露","隱瞞","只記錄在案","A","內審須按升級政策報告舞弊疑點,重大事項直達治理層。"],[133,11,"11","「外部品質評估」(EQAA)對內審的作用是:","定期獨立評估內審職能是否符合國際專業實務標準","淘汰內審","增加審計費","無作用","A","IIA 標準要求每五年進行外部品質評估。"],[134,11,"11","「保證地圖」(assurance map)的用途是:","整合各保證來源覆蓋,識別重複與缺口","裝飾報告","代替審計計劃","無用","A","保證地圖讓董事會看清誰對哪些風險提供何種保證。"],[135,11,"11","內審「風險為本計劃」的基礎是:","企業風險登記冊與管理層輸入,按風險排序審計資源","輪流審計","抽籤","部門要求","A","審計計劃須動態對齊風險評估,經審計委員會批准。"],[136,11,"11","「持續監控」(continuous monitoring)的技術基礎是:","以規則或分析工具自動檢測交易異常","人工抽樣","年報審閱","外部詢問","A","數據分析使內控測試由抽樣轉向全量監察。"],[137,11,"11","內審報告「評級」的作用是:","讓管理層與委員會快速識別問題嚴重程度與優先級","懲罰部門","美化報告","無用","A","評級(如高/中/低)配合行動計劃與時限推動整改。"],[138,11,"11","「跟進審計」(follow-up audit)的目的在於:","驗證以往發現的整改是否落實","重複工作","擴大範圍","無必要","A","整改驗證是內審閉環的關鍵,未整改須再升級。"],[139,11,"11","「舞弊風險評估」中內審的角色是:","評估舞弊可能性、檢視控制並支援調查(須保持獨立性)","直接起訴","無角色","代替警方","A","內審參與舞弊風險管理,重大調查可由法證團隊執行。"],[140,11,"11","「管理層自我評估」(control self-assessment)的優點是:","提升業務部門對內控的所有權與風險意識","替代內審","增加文書","無優點","A","CSA 補充內審,讓第一道防線主動管理控制。"],[141,12,"12","治理失敗的常見共同特徵是:","主席權力過大、董事會資訊不足、異議被邊緣化","委員會過多","審計費過高","無共同點","A","多數治理崩壞案例(如審計失當、舞弊掩蓋)都指向制衡失效。"],[142,12,"12","「Carillion 案」對英國治理改革的主要啟示是:","審計市場集中、董事會風險監督失效與薪酬激勵扭曲","上市門檻太低","無啟示","會計無用","A","Carillion 崩盤推動英國審計改革與公司治理準則修訂。"],[143,12,"12","「Enron 案」催生的法例是:","美國《薩班斯-奧克斯利法案》(SOX)","《公司條例》","《防止賄賂條例》","Basel III","A","2002年 SOX 確立內控自我評估(302)與管理層認證(404)等要求。"],[144,12,"12","SOX 404 對香港上市公司的間接影響是:","美國上市子公司須遵循內控測試,母公司治理架構亦常對標","無影響","只影響美企","廢除審計","A","跨國集團常以 SOX 標準統一內控框架。"],[145,12,"12","「審計輪換」制度的目的是:","減少長期合作導致的熟悉與自滿威脅","增加費用","削減質量","無目的","A","合夥人輪換(香港要求)與某些轄區的事務所輪換旨在維持獨立性。"],[146,12,"12","「非審計服務限制」的邏輯是:","避免核數師審查自己提供的服務(自我審核威脅)","限制收入","無邏輯","保護客戶","A","上市公司核數師為審計客戶提供特定非審計服務被禁止或嚴格限制。"],[147,12,"12","「審計師彙報治理層」(ISA 260)的內容包括:","重大發現、會計判斷、舞弊風險與審計範圍","商業建議","薪酬方案","戰略方向","A","審計師與治理層溝通確保重大事項在治理層面獲得關注。"],[148,12,"12","「Key Audit Matters」(KAM)的價值在於:","提升審計報告透明度,揭示審計中最具挑戰的領域","增加篇幅","無價值","供宣傳","A","KAM 讓使用者理解審計重點與公司風險的交集。"],[149,12,"12","「文化問責」改革的趨勢是:","監管要求高級管理人員對文化與行為負個人責任(如 SMCR)","文化無人負責","只罰員工","無趨勢","A","英國金融業 SMCR 將高管問責制度化,成為其他行業參考。"],[150,12,"12","公司秘書在「治理改革」中的角色是:","追蹤法規變化、更新治理文件與培訓、推動落地","旁觀者","只做會議紀錄","無角色","A","改革落地依靠秘書把新要求轉化為制度、日曆與培訓。"]]; const IDS = BANK.map(q => q[0]); const QMAP = {}; BANK.forEach(q => { QMAP[q[0]] = q; }); const PASS = 50, EXC = 75; let quiz = [], idx = 0, score = 0, answers = [], mode = 'normal'; let ME = null, quizStart = 0; /* ==================== 本地账号系统 ==================== */ const PAPER = 'cgqp_cg'; const K_ACCOUNTS = 'sunai_accounts_cgqp_cg'; const K_SESSION = 'sunai_session_cgqp_cg'; function wrongKey(){ return 'sunai_wrong_cgqp_cg::' + (ME ? ME.uid : 'guest'); } function recKey(){ return 'sunai_records_cgqp_cg::' + (ME ? ME.uid : 'guest'); } function lsGet(k, d){ try { const v = localStorage.getItem(k); return v == null ? d : JSON.parse(v); } catch(e){ return d; } } function lsSet(k, v){ try { localStorage.setItem(k, JSON.stringify(v)); } catch(e){} } function val(id){ const el = document.getElementById(id); return el ? el.value : ''; } function esc(s){ const d = document.createElement('div'); d.textContent = s == null ? '' : s; return d.innerHTML; } /* SHA-256:在 file:// 打开时 crypto.subtle 不可用,用它做兜底 */ function sha256hex(msg){ function rotr(x, n){ return (x >>> n) | (x << (32 - n)); } const K = [ 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5, 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174, 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da, 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967, 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85, 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070, 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3, 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 ]; let H = [0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19]; const bytes = []; const u = unescape(encodeURIComponent(msg)); for (let i = 0; i < u.length; i++) bytes.push(u.charCodeAt(i)); const l = bytes.length; bytes.push(0x80); while (bytes.length % 64 !== 56) bytes.push(0); const bitLen = l * 8; bytes.push(0, 0, 0, 0, (bitLen >>> 24) & 255, (bitLen >>> 16) & 255, (bitLen >>> 8) & 255, bitLen & 255); const w = new Array(64); for (let i = 0; i < bytes.length; i += 64){ for (let j = 0; j < 16; j++){ w[j] = (bytes[i+j*4] << 24) | (bytes[i+j*4+1] << 16) | (bytes[i+j*4+2] << 8) | bytes[i+j*4+3]; } for (let j = 16; j < 64; j++){ const s0 = rotr(w[j-15],7) ^ rotr(w[j-15],18) ^ (w[j-15] >>> 3); const s1 = rotr(w[j-2],17) ^ rotr(w[j-2],19) ^ (w[j-2] >>> 10); w[j] = (w[j-16] + s0 + w[j-7] + s1) | 0; } let a=H[0],b=H[1],c=H[2],d=H[3],e=H[4],f=H[5],g=H[6],h=H[7]; for (let j = 0; j < 64; j++){ const S1 = rotr(e,6) ^ rotr(e,11) ^ rotr(e,25); const ch = (e & f) ^ (~e & g); const t1 = (h + S1 + ch + K[j] + w[j]) | 0; const S0 = rotr(a,2) ^ rotr(a,13) ^ rotr(a,22); const maj = (a & b) ^ (a & c) ^ (b & c); const t2 = (S0 + maj) | 0; h=g; g=f; f=e; e=(d+t1)|0; d=c; c=b; b=a; a=(t1+t2)|0; } H = [(H[0]+a)|0,(H[1]+b)|0,(H[2]+c)|0,(H[3]+d)|0,(H[4]+e)|0,(H[5]+f)|0,(H[6]+g)|0,(H[7]+h)|0]; } let out = ''; for (let i = 0; i < 8; i++) out += ('00000000' + (H[i] >>> 0).toString(16)).slice(-8); return out; } function bytesToHex(b){ let s = ''; for (let i = 0; i < b.length; i++) s += ('0' + b[i].toString(16)).slice(-2); return s; } function hexToBytes(h){ const o = new Uint8Array(h.length / 2); for (let i = 0; i < o.length; i++) o[i] = parseInt(h.substr(i*2, 2), 16); return o; } function randSalt(){ const b = new Uint8Array(16); if (window.crypto && crypto.getRandomValues) crypto.getRandomValues(b); else for (let i = 0; i < 16; i++) b[i] = Math.floor(Math.random() * 256); return bytesToHex(b); } /* 有 WebCrypto 时用 PBKDF2(10万次),否则用迭代 SHA-256 */ async function makeHash(pwd, salt, algo){ if (algo !== 'sha256x3000' && window.crypto && crypto.subtle && window.TextEncoder){ try { const enc = new TextEncoder(); const key = await crypto.subtle.importKey('raw', enc.encode(pwd), 'PBKDF2', false, ['deriveBits']); const bits = await crypto.subtle.deriveBits( { name: 'PBKDF2', salt: hexToBytes(salt), iterations: 100000, hash: 'SHA-256' }, key, 256); return { algo: 'pbkdf2', hash: bytesToHex(new Uint8Array(bits)) }; } catch(e) { /* 落到下面 */ } } let h = salt + '|' + pwd; for (let i = 0; i < 3000; i++) h = sha256hex(h); return { algo: 'sha256x3000', hash: h }; } function getAccounts(){ return lsGet(K_ACCOUNTS, []); } function saveAccounts(a){ lsSet(K_ACCOUNTS, a); } function showMsg(id, text, kind){ const el = document.getElementById(id); if (!el) return; el.className = 'auth-msg show ' + (kind || ''); el.textContent = text; } function hideMsg(id){ const el = document.getElementById(id); if (el) el.className = 'auth-msg'; } function authMsg(text, kind){ const onReg = document.getElementById('rg-box').style.display !== 'none'; showMsg(onReg ? 'rg-msg' : 'lg-msg', text, kind); } async function doRegister(){ const login = val('rg-login').trim(); const p1 = val('rg-pwd'), p2 = val('rg-pwd2'); if (!login) return authMsg('請填寫登入帳號', 'bad'); if (login.length < 3) return authMsg('帳號至少 3 個字元', 'bad'); if (!p1) return authMsg('請設定密碼', 'bad'); if (p1.length < 4) return authMsg('密碼至少 4 位', 'bad'); if (p1 !== p2) return authMsg('兩次輸入的密碼不一致', 'bad'); const accs = getAccounts(); if (accs.some(a => a.login.toLowerCase() === login.toLowerCase())) return authMsg('此帳號已被使用,請換一個或直接登入', 'bad'); const salt = randSalt(); const h = await makeHash(p1, salt); const acc = { uid: 'u_' + Date.now().toString(36) + Math.random().toString(36).slice(2, 7), login: login, salt: salt, algo: h.algo, hash: h.hash, name: login, cls: '', createdAt: Date.now() }; accs.push(acc); saveAccounts(accs); loginAs(acc); } async function doLogin(){ const login = val('lg-login').trim(); const pwd = val('lg-pwd'); if (!login || !pwd) return showMsg('lg-msg', '請輸入帳號與密碼', 'bad'); const acc = getAccounts().find(a => a.login.toLowerCase() === login.toLowerCase()); if (!acc) return showMsg('lg-msg', '帳號或密碼不正確', 'bad'); const h = await makeHash(pwd, acc.salt, acc.algo); if (h.hash !== acc.hash) return showMsg('lg-msg', '帳號或密碼不正確', 'bad'); loginAs(acc); } function loginAs(acc){ ME = acc; lsSet(K_SESSION, acc.uid); // 首次登入时,继承旧版(未分账号)的错题本 const legacy = lsGet('sunai_wrong_cgqp_cg', []); if (legacy && legacy.length){ const mine = loadWrong(); if (!mine.length) saveWrong(legacy.slice()); } hideMsg('lg-msg'); hideMsg('rg-msg'); document.getElementById('lg-pwd').value = ''; document.getElementById('rg-pwd').value = ''; document.getElementById('rg-pwd2').value = ''; renderUserBar(); goHome(); } function doLogout(){ if (!confirm('確定登出?登出後可用其他帳號登入。')) return; ME = null; try { localStorage.removeItem(K_SESSION); } catch(e){} renderUserBar(); document.getElementById('lg-login').value = ''; document.getElementById('lg-pwd').value = ''; show('sc-auth'); } function renderUserBar(){ const bar = document.getElementById('userbar'); if (!bar) return; if (ME){ bar.style.display = 'flex'; document.getElementById('ub-name').textContent = ME.name || ME.login; document.getElementById('ub-cls').textContent = ME.cls ? '(' + ME.cls + ')' : ''; } else { bar.style.display = 'none'; } } function updateMe(){ if (!ME) return; document.getElementById('me-name').value = ME.name || ''; document.getElementById('me-class').value = ME.cls || ''; document.getElementById('me-login').value = ME.login || ''; hideMsg('me-msg'); hideMsg('pw-msg'); document.getElementById('pw-old').value = ''; document.getElementById('pw-new').value = ''; } function saveProfile(){ const accs = getAccounts(); const acc = accs.find(a => a.uid === ME.uid); if (!acc) return showMsg('me-msg', '找不到帳號,請重新登入', 'bad'); acc.name = val('me-name').trim() || acc.login; acc.cls = val('me-class').trim(); saveAccounts(accs); ME = acc; renderUserBar(); showMsg('me-msg', '已儲存', 'good'); } async function changePwd(){ const o = val('pw-old'), n = val('pw-new'); if (!o || !n) return showMsg('pw-msg', '請填寫目前密碼與新密碼', 'bad'); if (n.length < 4) return showMsg('pw-msg', '新密碼至少 4 位', 'bad'); const accs = getAccounts(); const acc = accs.find(a => a.uid === ME.uid); if (!acc) return showMsg('pw-msg', '找不到帳號,請重新登入', 'bad'); const ho = await makeHash(o, acc.salt, acc.algo); if (ho.hash !== acc.hash) return showMsg('pw-msg', '目前密碼不正確', 'bad'); const salt = randSalt(); const hn = await makeHash(n, salt); acc.salt = salt; acc.algo = hn.algo; acc.hash = hn.hash; saveAccounts(accs); ME = acc; document.getElementById('pw-old').value = ''; document.getElementById('pw-new').value = ''; showMsg('pw-msg', '密碼已修改', 'good'); } /* ==================== 错题本 / 记录(按账号) ==================== */ function loadWrong(){ return lsGet(wrongKey(), []); } function wcKey(){ return 'sunai_wrongcnt_' + PAPER + '::' + (ME ? ME.uid : 'guest'); } function loadWC(){ return lsGet(wcKey(), {}); } function saveWC(c){ lsSet(wcKey(), c); } function bumpWrong(id){ const c = loadWC(); c[id] = (c[id] || 0) + 1; saveWC(c); } function clearWrongCnt(id){ const c = loadWC(); if (c[id]) { delete c[id]; saveWC(c); } } function loadFreq(min){ const c = loadWC(); return Object.keys(c) .filter(id => QMAP[id] && c[id] >= min) .sort((a, b) => c[b] - c[a]).map(id => +id); } function saveWrong(w){ lsSet(wrongKey(), w); } function loadRecords(){ return lsGet(recKey(), []); } function addRecord(rec){ const r = loadRecords(); r.unshift(rec); if (r.length > 300) r.length = 300; lsSet(recKey(), r); } /* ==================== 異議回報 ==================== */ function rpKey(){ return 'sunai_reports_' + PAPER + '::' + (ME ? ME.uid : 'guest'); } function loadReports(){ return lsGet(rpKey(), []); } function toggleReport(){ const box = document.getElementById('rp-box'); const show = box.style.display === 'none'; box.style.display = show ? 'block' : 'none'; document.getElementById('rp-msg').style.display = 'none'; document.getElementById('rp-text').value = ''; } function submitReport(){ const q = quiz[idx]; const reason = document.getElementById('rp-text').value.trim(); if (!reason) { alert('請先填寫你的疑問。'); return; } const a = answers[answers.length - 1]; const r = loadReports(); r.push({ paper: PAPER, qid: q.id, ch: q.ch, ref: q.ref, q: q.q.slice(0, 120), myAns: a ? a.pick : '-', correctAns: q.ans, reason: reason.slice(0, 500), at: Date.now() }); lsSet(rpKey(), r); document.getElementById('rp-msg').style.display = 'block'; document.getElementById('rp-msg').textContent = '✅ 已記錄你的回報,感謝!你可以在「異議清單」中一次過傳送給我們。'; setTimeout(()=>{ document.getElementById('rp-box').style.display = 'none'; }, 1800); } function reportTextAll(){ const r = loadReports(); if (!r.length) return ''; return '【IIQE 題目異議回報 - ' + PAPER + '】\n' + r.map((x, i) => (i + 1) + '. 題號#' + x.qid + '(第' + x.ch + '章 ' + (x.ref || '') + ')\n' + '題目:' + x.q + '…\n' + '我的答案:' + x.myAns + '|現有答案:' + x.correctAns + '\n' + '疑問:' + x.reason ).join('\n\n'); } function copyReports(){ const txt = reportTextAll(); if (!txt) { alert('目前沒有異議回報。'); return; } (navigator.clipboard ? navigator.clipboard.writeText(txt) : Promise.reject()) .then(()=>alert('已複製,可貼上給我們。')) .catch(()=>{ const ta = document.createElement('textarea'); ta.value = txt; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta); alert('已複製,可貼上給我們。'); }); } function waReports(){ const txt = reportTextAll(); if (!txt) { alert('目前沒有異議回報。'); return; } window.open('https://wa.me/85268751658?text=' + encodeURIComponent(txt), '_blank'); } function openReports(){ const r = loadReports(); const box = document.getElementById('rp-list'); document.getElementById('rp-n').textContent = r.length; document.getElementById('rp-copy').disabled = r.length === 0; document.getElementById('rp-wa').disabled = r.length === 0; box.innerHTML = r.length ? r.slice().reverse().map(x => { const d = new Date(x.at); const pad = n => (n < 10 ? '0' + n : '' + n); return '
' + '
題號#' + x.qid + '(第' + x.ch + '章 ' + (x.ref || '') + ')
' + '
' + esc(x.q) + '…
' + '
我的答案 ' + x.myAns + '|現有答案 ' + x.correctAns + '
' + '
💬 ' + esc(x.reason) + '
' + '
' + d.getFullYear() + '-' + pad(d.getMonth()+1) + '-' + pad(d.getDate()) + '
' + '
'; }).join('') : '
目前沒有異議回報。
'; show('sc-reports'); } function clearWrongBank(){ if (!confirm('確定清空錯題本?此動作無法復原。')) return; saveWrong([]); openWrong(); } function openWrong(){ const w = loadWrong(); document.getElementById('wb-n').textContent = w.length; document.getElementById('wb-redo').disabled = w.length === 0; const fq = loadFreq(2); const wf = document.getElementById('wb-freq'); if (wf) wf.disabled = fq.length === 0; const box = document.getElementById('wb-list'); if (!w.length){ box.innerHTML = '
目前沒有錯題,繼續保持!
'; } else { box.innerHTML = w.map(id => { const q = QMAP[id]; if (!q) return ''; const ai = ['A','B','C','D'].indexOf(q[8]); const at = ai >= 0 ? q[4 + ai] : ''; const wc = loadWC()[id] || 1; const hot = wc >= 2 ? '❌ 錯 ' + wc + ' 次 ' : ''; return '
' + '
' + hot + esc(q[3].slice(0, 90)) + (q[3].length > 90 ? '…' : '') + '
' + '
正確答案:' + q[8] + '. ' + esc(at) + '
' + (q[9] ? '
💡 ' + esc(q[9]) + '
' : '') + '
參考章節 ' + esc(q[2] || '—') + '
' + '
'; }).join(''); } show('sc-wrong'); } function openRecords(){ const r = loadRecords(); const box = document.getElementById('rc-list'); if (!r.length){ box.innerHTML = '
還沒有練習記錄,先做一份模擬練習吧!
'; } else { box.innerHTML = r.map(x => { const d = new Date(x.at); const pad = n => (n < 10 ? '0' + n : '' + n); const when = d.getFullYear() + '-' + pad(d.getMonth()+1) + '-' + pad(d.getDate()) + ' ' + pad(d.getHours()) + ':' + pad(d.getMinutes()); const tone = x.pct >= EXC ? 'var(--ok)' : (x.pct >= PASS ? 'var(--navy2)' : 'var(--bad)'); return '
' + '
' + x.mode + '' + '' + x.pct + '% ' + x.grade + '
' + '
答對 ' + x.correct + ' / ' + x.total + ' 題 · ' + when + '
' + '
'; }).join(''); } show('sc-records'); } function openMe(){ updateMe(); show('sc-me'); } /* ==================== 首页 / 抽题 / 答题 ==================== */ function refreshHome(){ document.getElementById('st-bank').textContent = BANK.length; const w = loadWrong(); document.getElementById('wrong-n').textContent = w.length; document.getElementById('btn-wrong').disabled = w.length === 0; const fn = loadFreq(2); const fe = document.getElementById('freq-n'); if (fe) fe.textContent = fn.length; const bf = document.getElementById('btn-freq'); if (bf) bf.disabled = fn.length === 0; const rn = loadReports().length; const rh = document.getElementById('rp-home-n'); if (rh) rh.textContent = rn; renderUserBar(); } let COUNT = 100; document.querySelectorAll('#seg-count button').forEach(b=>{ b.onclick = ()=>{ document.querySelectorAll('#seg-count button').forEach(x=>x.classList.remove('on')); b.classList.add('on'); COUNT = b.dataset.n === 'all' ? BANK.length : +b.dataset.n; }; }); (function(){ const ab = document.querySelector('#seg-count button[data-n="all"]'); if(ab) ab.textContent = '全部題庫 ' + BANK.length + ' 題'; })(); document.querySelectorAll('#seg-auth button').forEach(b=>{ b.onclick = ()=>{ document.querySelectorAll('#seg-auth button').forEach(x=>x.classList.remove('on')); b.classList.add('on'); const isLogin = b.dataset.tab === 'login'; document.getElementById('lg-box').style.display = isLogin ? 'block' : 'none'; document.getElementById('rg-box').style.display = isLogin ? 'none' : 'block'; hideMsg('lg-msg'); hideMsg('rg-msg'); }; }); document.addEventListener('keydown', function(e){ if (e.key !== 'Enter') return; if (document.getElementById('sc-auth').classList.contains('on')){ if (document.getElementById('rg-box').style.display === 'none') doLogin(); else doRegister(); } }); function show(id){ document.querySelectorAll('.screen').forEach(s=>s.classList.remove('on')); document.getElementById('sc-'+id.replace('sc-','')).classList.add('on'); window.scrollTo(0,0); } function goHome(){ refreshHome(); document.querySelectorAll('.screen').forEach(s=>s.classList.remove('on')); document.getElementById('sc-home').classList.add('on'); window.scrollTo(0,0); } function pickQuestions(){ const w = loadWrong(); if(mode === 'freq'){ const set = new Set(loadFreq(2)); return BANK.filter(q=>set.has(q[0])).sort((a,b)=>{ const c = loadWC(); return (c[b.id]||0)-(c[a.id]||0); }).map(q=>{ const letters = ['A','B','C','D']; const opts = [q[4],q[5],q[6],q[7]]; const ansIdx = letters.indexOf(q[8]); const idxs = [0,1,2,3].sort(()=>Math.random()-.5); const newOpts = idxs.map(j=>opts[j]); const newAns = letters[idxs.indexOf(ansIdx)]; return {id:q[0], ch:q[1], ref:q[2], q:q[3], opts:newOpts, ans:newAns, expl:q[9]}; }); } if(mode === 'wrong'){ const set = new Set(w); return BANK.filter(q=>set.has(q[0])).sort(()=>Math.random()-.5).map(q=>{ const letters = ['A','B','C','D']; const opts = [q[4],q[5],q[6],q[7]]; const ansIdx = letters.indexOf(q[8]); const idxs = [0,1,2,3].sort(()=>Math.random()-.5); const newOpts = idxs.map(j=>opts[j]); const newAns = letters[idxs.indexOf(ansIdx)]; return {id:q[0], ch:q[1], ref:q[2], q:q[3], opts:newOpts, ans:newAns, expl:q[9]}; }); } const byCh = {}; BANK.forEach(q=>{ (byCh[q[1]] = byCh[q[1]]||[]).push(q); }); Object.values(byCh).forEach(a=>a.sort(()=>Math.random()-.5)); const total = BANK.length; const picks = []; const counts = {}; let assigned = 0; for(const ch in byCh){ counts[ch] = Math.floor(byCh[ch].length/total*COUNT); assigned += counts[ch]; } let rem = COUNT - assigned; const order = Object.keys(byCh).sort((a,b)=>byCh[b].length-byCh[a].length); let i = 0; while(rem > 0){ counts[order[i%order.length]]++; rem--; i++; } for(const ch in counts){ counts[ch] = Math.min(counts[ch], byCh[ch].length); picks.push(...byCh[ch].slice(0, counts[ch])); } if(picks.length < COUNT){ const used = new Set(picks.map(q=>q[0])); for(const q of BANK){ if(picks.length>=COUNT) break; if(!used.has(q[0])) picks.push(q); } } return picks.sort(()=>Math.random()-.5).map(q=>{ const letters = ['A','B','C','D']; const opts = [q[4],q[5],q[6],q[7]]; const ansIdx = letters.indexOf(q[8]); const idxs = [0,1,2,3].sort(()=>Math.random()-.5); const newOpts = idxs.map(j=>opts[j]); const newAns = letters[idxs.indexOf(ansIdx)]; return {id:q[0], ch:q[1], ref:q[2], q:q[3], opts:newOpts, ans:newAns, expl:q[9]}; }); } function startQuiz(isWrong, isFreq){ if(!ME){ show('sc-auth'); return; } mode = isWrong ? 'wrong' : (isFreq ? 'freq' : 'normal'); quiz = pickQuestions(); if(!quiz.length){ alert(mode==='wrong' ? '錯題庫是空的,先去練習吧!' : (mode==='freq' ? '暫時沒有常錯題(答錯 2 次以上才會收錄)。' : '沒有可用題目')); return; } idx = 0; score = 0; answers = []; quizStart = Date.now(); document.getElementById('q-mode').textContent = mode==='wrong' ? '錯題重做' : (mode==='freq' ? '🔥 常錯題重做' : '模擬練習'); document.querySelectorAll('.screen').forEach(s=>s.classList.remove('on')); document.getElementById('sc-quiz').classList.add('on'); window.scrollTo(0,0); renderQ(); } let curLocked = false; function renderQ(){ const q = quiz[idx]; curLocked = false; document.getElementById('q-idx').textContent = '第 ' + (idx+1) + ' / ' + quiz.length + ' 題'; document.getElementById('pbar').style.width = (idx/quiz.length*100)+'%'; document.getElementById('q-text').textContent = q.q; const box = document.getElementById('q-opts'); box.innerHTML = ''; ['A','B','C','D'].forEach(L=>{ const b = document.createElement('button'); b.className = 'opt'; b.innerHTML = '' + L + '.' + esc(q.opts[['A','B','C','D'].indexOf(L)]) + ''; b.onclick = ()=>answer(L, b); box.appendChild(b); }); const ex = document.getElementById('q-expl'); ex.className = 'expl'; ex.innerHTML = ''; document.getElementById('btn-next').disabled = true; document.getElementById('btn-next').textContent = (idx === quiz.length-1) ? '查看成績 🏁' : '下一題 →'; } function answer(L, btn){ if(curLocked) return; curLocked = true; const q = quiz[idx]; const correct = (L === q.ans); const btns = document.querySelectorAll('#q-opts .opt'); btns.forEach(b=>{ b.disabled = true; }); const ansIdx = ['A','B','C','D'].indexOf(q.ans); btns[ansIdx].classList.add('correct'); if(!correct){ btn.classList.add('wrong'); } btns.forEach(b=>{ if(b!==btns[ansIdx] && b!==btn) b.classList.add('dim'); }); if(correct){ score++; clearWrongCnt(q.id); } else { const w = loadWrong(); if(!w.includes(q.id)){ w.push(q.id); saveWrong(w); } bumpWrong(q.id); } answers.push({q, pick:L, correct}); const ex = document.getElementById('q-expl'); ex.className = 'expl show ' + (correct ? 'good' : 'bad'); const expl = q.expl && q.expl.length > 3 ? q.expl : '建議重溫本章節課程內容,加深理解。'; ex.innerHTML = (correct ? '\u2705 答對了!' : '\u274C 答錯了。正確答案:' + q.ans + '
') + '
💡 ' + esc(expl) + '
' + '參考章節 ' + esc(q.ref||'—') + ''; document.getElementById('btn-next').disabled = false; } function nextQ(){ if(idx < quiz.length-1){ idx++; renderQ(); } else showResult(); } function quitQuiz(){ if(confirm('確定離開本次練習?作答紀錄將不會保存。')) goHome(); } function showResult(){ const pct = Math.round(score/quiz.length*100); document.getElementById('score-num').textContent = pct; const ring = document.getElementById('ring'); ring.style.background = 'conic-gradient(' + (pct>=PASS?'var(--navy2)':'var(--bad)') + ' ' + (pct*3.6) + 'deg, #ece7db 0deg)'; const g = document.getElementById('grade-badge'); if(pct >= EXC){ g.className='grade exc'; g.textContent='🏆 優秀'; } else if(pct >= PASS){ g.className='grade pass'; g.textContent='\u2705 合格'; } else { g.className='grade fail'; g.textContent='\u274C 不合格'; } document.getElementById('score-detail').textContent = '答對 ' + score + ' / ' + quiz.length + ' 題(合格線 ' + PASS + '%,優秀線 ' + EXC + '%)'; const byCh = {}; answers.forEach(a=>{ const ch = a.q.ch; byCh[ch] = byCh[ch]||[0,0]; byCh[ch][1]++; if(a.correct) byCh[ch][0]++; }); document.getElementById('ch-stats').innerHTML = Object.keys(byCh).sort((a,b)=>a-b).map(ch=>{ const c = byCh[ch][0], t = byCh[ch][1]; return '
第 ' + ch + ' 章:答對 ' + c + ' / ' + t + ' 題(' + Math.round(c/t*100) + '%)
'; }).join(''); const wrongs = answers.filter(a=>!a.correct); document.getElementById('wrong-review').innerHTML = wrongs.length ? wrongs.map(a=> '
答錯' + esc(a.q.q.slice(0,60)) + '…
' + '正確答案:' + a.q.ans + '. ' + esc(a.q.opts[['A','B','C','D'].indexOf(a.q.ans)].slice(0,50)) + '
' ).join('') : '
🎉 全部答對,沒有錯題!
'; if(mode === 'wrong'){ let w = loadWrong(); const corrected = answers.filter(a=>a.correct).map(a=>a.q.id); w = w.filter(id=>!corrected.includes(id)); saveWrong(w); } if(ME){ const gradeTxt = pct >= EXC ? '優秀' : (pct >= PASS ? '合格' : '不合格'); addRecord({ at: Date.now(), mode: mode === 'wrong' ? '錯題重做' : ('模擬練習 ' + quiz.length + ' 題'), total: quiz.length, correct: score, pct: pct, grade: gradeTxt, sec: Math.round((Date.now() - quizStart)/1000) }); } document.querySelectorAll('.screen').forEach(s=>s.classList.remove('on')); document.getElementById('sc-result').classList.add('on'); window.scrollTo(0,0); } /* ==================== 启动 ==================== */ (function init(){ const sid = lsGet(K_SESSION, null); if (sid){ const acc = getAccounts().find(a => a.uid === sid); if (acc) ME = acc; } renderUserBar(); if (ME){ document.querySelectorAll('.screen').forEach(s=>s.classList.remove('on')); document.getElementById('sc-home').classList.add('on'); refreshHome(); } else { document.querySelectorAll('.screen').forEach(s=>s.classList.remove('on')); document.getElementById('sc-auth').classList.add('on'); } })(); refreshHome();