PIPL (China)
China PIPL (Personal Information Protection Law) cross-border transfer record-builders. PIPL Art. 38 sets three lawful bases for transferring personal information outside the PRC: a CAC security assessment (Art. 40), the CAC standard contract (SCC), or certification by a CAC-accredited body. The CAC security assessment is MANDATORY — the operator may not self-select the standard contract — when the exporter is a critical-information-infrastructure operator (CIIO), handles "important data", or crosses the volume / sensitive-PI thresholds in the Measures for Security Assessment of Outbound Data Transfers.
These primitives follow the operator-feeds-metadata pattern: the operator supplies the transfer's facts and the builder returns a frozen, dated record (plus a best-effort audit event) that composes into the operator's own retention / export sink. They perform NO network I/O and do NOT file anything with the CAC — they document the legal basis the operator must be able to produce on inspection.
b.pipl.sccFilingAssessment(opts) #
{
assessmentId: string, // required — operator's identifier for this assessment
transferType: string, // required — e.g. "intra-group", "processor", "controller-to-controller"
recipientJurisdiction: string, // required — destination jurisdiction (e.g. "US", "EU", "SG")
dataCategories: string[], // required — non-empty list of PI categories transferred
legalBasis: string, // required — "standard-contract" | "security-assessment" | "certification"
volume: number, // required — count of data subjects in this transfer (>= 0)
sensitivePI: boolean, // required — whether the transfer includes sensitive PI (Art. 28)
ciio: boolean, // optional — exporter is a CIIO (forces security assessment); default false
importantData: boolean, // optional — transfer includes "important data" (forces it); default false
cumulativePI: number, // optional — cumulative PI subjects exported since 1 Jan prior year; default 0
cumulativeSensitivePI: number, // optional — cumulative sensitive-PI subjects exported in that window; default 0
recordedAt: number, // required — epoch ms of this assessment
audit: object, // optional — b.audit-shaped sink; default global b.audit
}
Build a dated PIPL Art. 38 / Art. 55 cross-border transfer assessment and determine the lawful mechanism the transfer requires. PIPL Art. 38(1) permits three bases for moving personal information out of the PRC — the CAC standard contract (SCC), a CAC security assessment (Art. 40), or certification by a CAC-accredited body. Under the CAC Provisions on Promoting and Regulating Cross-Border Data Flows (effective 2024, which relaxed the 2022 thresholds) the security assessment is MANDATORY (the operator may NOT self-select the standard contract or certification) when the exporter is a critical-information-infrastructure operator (CIIO), exports "important data", or — counting cumulatively since 1 January of the current year — transfers the personal information of more than 1,000,000 individuals (non-sensitive) or the sensitive personal information of more than 10,000 individuals. The 100,000–1,000,000 non-sensitive band is the standard-contract / certification tier, NOT a security-assessment trigger.
The builder validates the operator-supplied facts, computes securityAssessmentRequired against those thresholds, resolves the mechanismRequired (forcing security-assessment when any trigger is present, otherwise honoring the operator's declared legalBasis), and stamps recordedAt plus a nextReviewDueBy re-assessment clock (3 years for a mandated security assessment per Measures Art. 14, otherwise the annual PIPIA refresh under Art. 55). The returned record is frozen and is NOT framework-persisted — compose it into your retention / audit / export sink. A best-effort pipl.transfer.assessed audit event fires.
var rec = b.pipl.sccFilingAssessment({
assessmentId: "xfer-2026-001",
transferType: "processor",
recipientJurisdiction: "US",
dataCategories: ["contact", "billing"],
legalBasis: "standard-contract",
volume: 5000,
sensitivePI: false,
recordedAt: Date.now(),
});
// → { assessmentId, mechanismRequired: "standard-contract",
// securityAssessmentRequired: false, recordedAt, nextReviewDueBy, ... }
b.pipl.securityAssessmentCertificate(opts) #
{
certId: string, // required — operator's identifier for this certificate
assessmentScope: string, // required — scope of the security assessment (systems / data flows covered)
dataExporter: string, // required — the PRC data exporter (controller / processor)
overseasRecipient: string, // required — the overseas recipient receiving the PI
riskRating: string, // required — "low" | "medium" | "high"
safeguards: string[], // required — non-empty list of safeguards relied on (encryption, DPA, etc.)
filingRef: string, // optional — CAC filing / acceptance reference number
recordedAt: number, // required — epoch ms of this declaration
audit: object, // optional — b.audit-shaped sink; default global b.audit
}
Record a dated PIPL Art. 40 / CAC security-assessment self-declaration for an outbound data transfer. PIPL Art. 40 and the Measures for Security Assessment of Outbound Data Transfers require an operator who must pass (or has passed) the CAC security assessment to document the assessment scope, the data exporter, the overseas recipient, a risk rating, and the safeguards relied on — the evidence the operator must be able to produce on CAC inspection. This builder validates the supplied facts and returns a frozen, dated certificate record stamped with a 3-year validUntil clock (the CAC security-assessment result validity period, Measures Art. 14). It performs NO network I/O and files nothing with the CAC — it documents the assessment the operator conducted. A best-effort pipl.security_assessment.recorded audit event fires.
var cert = b.pipl.securityAssessmentCertificate({
certId: "sa-2026-014",
assessmentScope: "CRM outbound replication to US region",
dataExporter: "Acme (Shanghai) Co., Ltd.",
overseasRecipient: "Acme Inc. (Delaware)",
riskRating: "medium",
safeguards: ["XChaCha20 at rest", "standard contractual clauses", "data minimization"],
recordedAt: Date.now(),
});
// → { certId, assessmentScope, riskRating, recordedAt, validUntil }
Last updated 2026-08-08T16:39:49.652Z by seeder.