Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
35 lines
1.6 KiB
TypeScript
35 lines
1.6 KiB
TypeScript
/**
|
|
* Who runs Jyotisha and how users reach them (2026-09-30, compliance round).
|
|
*
|
|
* One place for the operator's legal name, address and contact channels, read
|
|
* by the user agreement, the privacy policy, the account-deletion notice and
|
|
* the feedback entry. The product owner will supply the real values; until
|
|
* then they are loud placeholders, and `legalEntityPlaceholders()` lets the
|
|
* production release checks refuse to ship them.
|
|
*/
|
|
export const LEGAL_ENTITY = {
|
|
/** 运营主体全称(公司或个体工商户),用于协议与隐私政策的「我们」。 */
|
|
operatorName: "【待填写:运营主体全称】",
|
|
/** 注册地址或联系地址。 */
|
|
address: "【待填写:联系地址】",
|
|
/** 用户与监管联系的邮箱(客服、投诉、个人信息请求)。 */
|
|
contactEmail: "【待填写:客服邮箱】",
|
|
/** 可选:客服电话或微信;为空则不显示。 */
|
|
contactPhone: "",
|
|
/** ICP 备案号;为空则页脚不显示。 */
|
|
icpNumber: "",
|
|
/** 协议与隐私政策文本版本;律师审定后改为正式版本号。 */
|
|
legalDocumentsVersion: "2026-09-30-draft",
|
|
/** 文本是否仍是草稿(未经律师审定)。页面顶部据此显示「草稿」标识。 */
|
|
legalDocumentsDraft: true,
|
|
} as const;
|
|
|
|
const PLACEHOLDER = /【待填写/;
|
|
|
|
/** Field names still holding a placeholder; empty when every required value is real. */
|
|
export function legalEntityPlaceholders(entity: Readonly<Record<string, unknown>> = LEGAL_ENTITY): string[] {
|
|
return Object.entries(entity)
|
|
.filter(([, value]) => typeof value === "string" && PLACEHOLDER.test(value))
|
|
.map(([key]) => key);
|
|
}
|