Expand description
Singapore Jurisdiction Support for Legalis-RS
This crate provides comprehensive modeling of Singapore law across seven major domains:
§Legal Domains Covered
- Companies Act (Cap. 50) - Company formation, ACRA registration, directors, shareholders
- Employment Act (Cap. 91) - Working hours, leave entitlements, dismissal protection, salary
- PDPA (Personal Data Protection Act 2012) - Data protection, consent, DNC Registry
- Consumer Protection - Sale of Goods Act, Consumer Protection (Fair Trading) Act
- Intellectual Property - Patents, Trademarks, Copyright, Registered Designs
- Banking Act (Cap. 19) - Basel III capital adequacy, AML/CFT, banking licenses
- Payment Services Act 2019 - Payment services, e-wallets, digital payment tokens (DPT)
§Singapore Legal System Characteristics
Singapore follows a common law system based on English law, with statutory modifications:
§Legal Hierarchy
Constitution of Singapore (1965)
├── Fundamental Liberties (Part IV)
└── Government Structure
↓
Statutes (Acts of Parliament)
├── Companies Act (Cap. 50)
├── Employment Act (Cap. 91)
├── Personal Data Protection Act 2012
└── Sale of Goods Act (Cap. 393)
↓
Subsidiary Legislation
├── Regulations
├── Rules
└── Orders
↓
Case Law (Judicial Precedents)
├── Court of Appeal (final authority)
└── High Court§Key Regulatory Bodies
- ACRA: Accounting and Corporate Regulatory Authority (company registration, BizFile+)
- MOM: Ministry of Manpower (employment, work passes, CPF)
- PDPC: Personal Data Protection Commission (data protection enforcement)
- CASE: Consumers Association of Singapore (consumer protection advocacy)
§Citation Format
Singapore statutes use chapter numbers for older statutes, none for newer:
- Older Acts: “Companies Act (Cap. 50), s. 145(1)” or “CA s. 145”
- Modern Acts: “PDPA s. 13” (no Cap. for post-2000 acts)
- Subsidiary Legislation: “Companies Regulations (Cap. 50, Rg 1)”
- Case Law: “[2024] SGCA 15” (Court of Appeal), “[2023] SGHC 150” (High Court)
§Domain 1: Companies Act (Cap. 50)
The Companies Act governs company formation and governance in Singapore.
§Key Requirements
- UEN (Unique Entity Number): 9-10 digit identifier for all business entities
- Resident Director: At least 1 director ordinarily resident in Singapore (s. 145)
- Company Secretary: Mandatory within 6 months of incorporation (s. 171)
- AGM: Within 18 months of incorporation, then annually within 6 months of FYE (s. 175)
- Annual Return: Must be filed within 7 months of FYE (s. 197)
§Example: Company Formation
use legalis_sg::companies::*;
// Create a Singapore Pte Ltd company
let company = Company::builder()
.name("Tech Innovations Pte Ltd")
.company_type(CompanyType::PrivateLimited)
.share_capital(ShareCapital::new(100_000_00)) // SGD 100,000 in cents
.add_director(Director::new("John Tan", "S1234567A", true)) // Resident director
.registered_address(Address::singapore("1 Raffles Place", "048616"))
.build()?;
// Validate company formation
match validate_company_formation(&company) {
Ok(report) => println!("✅ Company formation valid"),
Err(e) => eprintln!("❌ Validation failed: {}", e),
}§Domain 2: Employment Act (Cap. 91)
The Employment Act provides minimum employment standards for workers in Singapore.
§Coverage
- Workmen: Earning ≤ SGD 4,500/month
- Non-workmen: Earning ≤ SGD 2,600/month
§Key Provisions
- Working Hours (s. 38): Max 44 hours/week (non-shift), 48 hours/week (shift)
- Overtime: 1.5x regular rate (s. 38(4))
- Annual Leave (s. 43): 7 days (year 1) → 14 days (year 8+)
- Sick Leave (s. 89): 14 days outpatient + 60 days hospitalization (after 3 months)
- Maternity Leave: 16 weeks for citizens (CDCA)
- CPF: Employer 17%, Employee 20% (age ≤55), wage ceiling SGD 6,000/month
§Example: CPF Contribution
use legalis_sg::employment::*;
// Calculate CPF contribution for a 30-year-old earning SGD 5,000/month
let cpf = CpfContribution::new(30, 5_000_00); // Age 30, SGD 5,000 in cents
let breakdown = cpf.calculate()?;
println!("Employer contribution: SGD {:.2}", breakdown.employer_amount_sgd());
println!("Employee contribution: SGD {:.2}", breakdown.employee_amount_sgd());
// Output: Employer: SGD 850.00 (17%), Employee: SGD 1,000.00 (20%)§Domain 3: PDPA (Personal Data Protection Act 2012)
Singapore’s data protection framework, distinct from GDPR.
§PDPA vs GDPR Key Differences
| Feature | GDPR | PDPA (Singapore) |
|---|---|---|
| Scope | EU/EEA + extraterritorial | Singapore organizations |
| Legal Basis | 6 lawful bases | Consent-centric (with exceptions) |
| DPO | Mandatory for certain processing | Recommended (not mandatory) |
| Breach Notification | 72 hours to authority | 3 calendar days to PDPC (if notifiable) |
| Fines | Up to €20M or 4% revenue | Up to SGD 1M |
| Right to be Forgotten | Explicit (Art. 17) | Limited (correction/access only) |
| DNC Registry | No equivalent | Part IX - opt-out for marketing |
§Key Obligations
- Consent (s. 13): Obtain valid consent for collection, use, disclosure
- Purpose Limitation (s. 18): Collect only for reasonable purposes
- Data Breach Notification (s. 26B/26C): Notify PDPC within 3 calendar days
- DNC Compliance (Part IX): Check Do Not Call Registry before marketing
- Access Requests (s. 21): Respond within 30 days
§Example: Consent Management
use legalis_sg::pdpa::*;
// Record consent for marketing emails
let consent = ConsentRecord::builder()
.data_subject_id("customer@example.com")
.purpose(PurposeOfCollection::Marketing)
.consent_method(ConsentMethod::Electronic)
.add_data_category(PersonalDataCategory::Email)
.timestamp_now()
.build()?;
// Validate consent
match validate_consent(&consent) {
Ok(()) => println!("✅ Consent valid"),
Err(PdpaError::MissingConsent { .. }) => eprintln!("❌ Consent not obtained"),
}§Domain 4: Consumer Protection
§Sale of Goods Act (Cap. 393)
Implied terms in contracts for sale of goods:
- s. 13: Goods must correspond to description
- s. 14(2): Goods must be of merchantable quality
- s. 14(3): Goods must be fit for stated purpose
§Consumer Protection (Fair Trading) Act (Cap. 52A)
Prohibits unfair practices:
- s. 4: False or misleading representation
- s. 5: Unconscionable conduct
- s. 6: Bait advertising
- s. 7: Harassment or coercion
§Example: Unfair Practice Detection
use legalis_sg::consumer::*;
// Analyze contract for unfair practices
let contract = ConsumerContract::new()
.business_name("Electronics Store")
.consumer_name("Jane Lim")
.add_term("No refunds under any circumstances")
.add_term("Company not liable for defects");
let practices = detect_unfair_practices(&contract);
for practice in practices {
println!("⚠️ Unfair practice: {:?}", practice.practice_type);
}§Unique Singapore Features
§1. UEN (Unique Entity Number)
All business entities in Singapore are assigned a 9-10 digit UEN by ACRA for identification.
§2. CPF (Central Provident Fund)
Mandatory retirement savings scheme for Singapore citizens and PRs:
- Employer contribution: 17% (age ≤55)
- Employee contribution: 20% (age ≤55)
- Wage ceiling: SGD 6,000/month (Ordinary Wage)
§3. DNC Registry
Singapore’s Do Not Call Registry allows individuals to opt out of marketing calls/texts/faxes.
§4. BizFile+
ACRA’s electronic filing system for company registration and annual returns.
§Module Structure
banking: Banking Act (Cap. 19) - Basel III, AML/CFT, banking licensespayment: Payment Services Act 2019 - Payment services, e-wallets, DPT (crypto)companies: Companies Act (Cap. 50) - Formation, directors, governanceemployment: Employment Act (Cap. 91) - Contracts, CPF, leave, terminationpdpa: Personal Data Protection Act 2012 - Consent, breach, DNCconsumer: Consumer Protection - Sale of Goods, unfair practicesip: Intellectual Property - Patents, Trademarks, Copyright, Designscitation: Singapore legal citation system
§Examples
This crate includes 16 comprehensive examples demonstrating real-world usage:
§Companies Act Examples
acra_company_registration- Pte Ltd formation with ACRAdirector_compliance_check- Resident director validation (s. 145)annual_compliance_checklist- AGM and annual return deadlinesshare_issuance- Share allotment and dilution
§Employment Act Examples
employment_contract_validation- Full contract validationcpf_contribution_calculator- CPF calculation by age groupsleave_entitlement_calculator- Leave progression by service yearstermination_notice_checker- Notice period calculation
§PDPA Examples
consent_management- Recording and withdrawing consentdata_breach_notification- 3-day notification workflowdnc_registry_check- Checking DNC before marketingdpo_requirement_assessment- When to appoint DPO
§Consumer Protection Examples
consumer_contract_analysis- Contract risk scoringsale_of_goods_validation- Implied terms checkingunfair_practice_detector- Automated detectiononline_transaction_compliance- E-commerce rules
§Testing
Run the comprehensive test suite:
# All tests
cargo nextest run --package legalis-sg
# Specific domain
cargo test --package legalis-sg --test companies_validation_tests
cargo test --package legalis-sg --test employment_contract_tests
cargo test --package legalis-sg --test pdpa_consent_tests
cargo test --package legalis-sg --test consumer_protection_tests§License
Licensed under either of:
- MIT License
- Apache License, Version 2.0
at your option.
Re-exports§
pub use companies::error::CompaniesError;pub use companies::error::Result as CompaniesResult;pub use companies::types::Address;pub use companies::types::Company;pub use companies::types::CompanySecretary;pub use companies::types::CompanyType;pub use companies::types::Director;pub use companies::types::DirectorQualification;pub use companies::types::DisqualificationStatus;pub use companies::types::DividendRights;pub use companies::types::MonthDay;pub use companies::validator::ValidationReport;pub use companies::validator::validate_agm_requirement;pub use companies::validator::validate_annual_return_deadline;pub use companies::validator::validate_company_formation;pub use companies::validator::validate_director_eligibility;pub use companies::validator::validate_resident_director_requirement;pub use employment::error::EmploymentError;pub use employment::error::Result as EmploymentResult;pub use employment::types::Allowance;pub use employment::types::ContractType;pub use employment::types::CpfContribution;pub use employment::types::EmploymentContract;pub use employment::types::LeaveEntitlement;pub use employment::types::LeaveType;pub use employment::types::TerminationNotice;pub use employment::types::WorkingHours;pub use employment::validator::validate_employment_contract;pub use employment::validator::validate_leave_entitlement;pub use employment::validator::validate_overtime_payment;pub use employment::validator::validate_termination_notice;pub use employment::validator::validate_working_hours;pub use pdpa::error::PdpaError;pub use pdpa::error::Result as PdpaResult;pub use pdpa::types::BreachType;pub use pdpa::types::ConsentMethod;pub use pdpa::types::ConsentRecord;pub use pdpa::types::DataBreachNotification;pub use pdpa::types::DataTransfer;pub use pdpa::types::DncRegistry;pub use pdpa::types::DncType;pub use pdpa::types::DpoContact;pub use pdpa::types::OrganisationType;pub use pdpa::types::PdpaOrganisation;pub use pdpa::types::PersonalDataCategory;pub use pdpa::types::PurposeOfCollection;pub use pdpa::validator::validate_breach_notification;pub use pdpa::validator::validate_consent;pub use pdpa::validator::validate_cross_border_transfer;pub use pdpa::validator::validate_dnc_compliance;pub use pdpa::validator::validate_dpo_requirement;pub use pdpa::validator::validate_purpose_limitation;pub use consumer::error::ConsumerError;pub use consumer::error::Result as ConsumerResult;pub use consumer::types::ConsumerContract;pub use consumer::types::ContractTerm;pub use consumer::types::ImpliedTerm;pub use consumer::types::SaleOfGoods;pub use consumer::types::TransactionType;pub use consumer::types::UnfairPractice;pub use consumer::types::UnfairPracticeType;pub use consumer::types::WarrantyTerms;pub use consumer::types::WarrantyType;pub use consumer::validator::detect_unfair_practices;pub use consumer::validator::validate_consumer_contract;pub use consumer::validator::validate_implied_terms;pub use consumer::validator::validate_sale_of_goods;pub use ip::error::IpError;pub use ip::error::IpType;pub use ip::error::Result as IpResult;pub use ip::types::Author;pub use ip::types::ClaimType;pub use ip::types::Copyright;pub use ip::types::DesignStatus;pub use ip::types::FairDealingPurpose;pub use ip::types::Patent;pub use ip::types::PatentClaim;pub use ip::types::PatentStatus;pub use ip::types::PriorArt;pub use ip::types::PriorArtRelevance;pub use ip::types::RegisteredDesign;pub use ip::types::Trademark;pub use ip::types::TrademarkSpecification;pub use ip::types::TrademarkStatus;pub use ip::types::TrademarkType;pub use ip::types::WorkType;pub use ip::validator::CopyrightValidationReport;pub use ip::validator::DesignValidationReport;pub use ip::validator::PatentValidationReport;pub use ip::validator::TrademarkConflict;pub use ip::validator::TrademarkValidationReport;pub use ip::validator::assess_distinctiveness;pub use ip::validator::assess_fair_dealing;pub use ip::validator::assess_patentability;pub use ip::validator::validate_copyright;pub use ip::validator::validate_design;pub use ip::validator::validate_patent;pub use ip::validator::validate_trademark;pub use banking::error::BankingError;pub use banking::error::ErrorSeverity as BankingErrorSeverity;pub use banking::error::Result as BankingResult;pub use banking::types::Bank;pub use banking::types::BankBuilder;pub use banking::types::BankLicenseType;pub use banking::types::CapitalAdequacy;pub use banking::types::CapitalType;pub use banking::types::CashTransactionReport;pub use banking::types::CashTransactionType;pub use banking::types::ComplianceOfficer;pub use banking::types::CustomerAccount as BankCustomerAccount;pub use banking::types::CustomerRiskCategory;pub use banking::types::LicenseStatus as BankLicenseStatus;pub use banking::types::SuspiciousTransactionReport;pub use banking::validator::AmlComplianceStatus;pub use banking::validator::BankValidationReport;pub use banking::validator::CapitalAdequacyStatus;pub use banking::validator::assess_aml_compliance;pub use banking::validator::calculate_capital_shortfall;pub use banking::validator::calculate_required_capital;pub use banking::validator::validate_bank;pub use banking::validator::validate_cash_transaction;pub use banking::validator::validate_customer_account as validate_bank_customer_account;pub use banking::validator::validate_merchant_bank_activities;pub use banking::validator::validate_str_filing;pub use banking::validator::validate_wholesale_deposit;pub use payment::error::ErrorSeverity as PaymentErrorSeverity;pub use payment::error::PaymentError;pub use payment::error::Result as PaymentResult;pub use payment::types::CustomerPaymentAccount;pub use payment::types::DigitalPaymentToken;pub use payment::types::DptServiceType;pub use payment::types::LicenseStatus as PaymentLicenseStatus;pub use payment::types::PaymentAccountType;pub use payment::types::PaymentLicenseType;pub use payment::types::PaymentServiceProvider;pub use payment::types::PaymentServiceProviderBuilder;pub use payment::types::PaymentServiceType;pub use payment::types::PaymentTransaction;pub use payment::types::RiskCategory;pub use payment::types::SafeguardingArrangement;pub use payment::types::SafeguardingType;pub use payment::validator::AmlStatus;pub use payment::validator::LicenseStatusReport;pub use payment::validator::PaymentProviderValidationReport;pub use payment::validator::SafeguardingStatus;pub use payment::validator::assess_safeguarding_status;pub use payment::validator::calculate_required_safeguarding;pub use payment::validator::validate_customer_account;pub use payment::validator::validate_dpt_service;pub use payment::validator::validate_payment_provider;pub use payment::validator::validate_safeguarding;pub use payment::validator::validate_transaction;pub use citation::SingaporeCitation;pub use citation::Statute;pub use citation::StatuteSection;pub use reasoning::ComplianceStatus;pub use reasoning::LegalAnalysis;pub use reasoning::LegalReasoningEngine;pub use reasoning::ReasoningError;pub use reasoning::ReasoningResult;pub use reasoning::RiskLevel;pub use reasoning::Violation;pub use reasoning::ViolationSeverity;pub use common::EthnicGroup;pub use common::SingaporeCurrency;pub use common::SingaporeLegalCalendar;pub use common::SingaporeNameFormatter;pub use common::SingaporePersonName;pub use common::calculate_legal_deadline;pub use common::format_sgd;pub use common::format_sgd_cents;pub use common::is_singapore_holiday;pub use common::is_working_day;
Modules§
- banking
- Banking Act (Cap. 19) - Singapore Banking Regulation
- citation
- Singapore Legal Citation System
- common
- Common utilities for Singapore legal system.
- companies
- Companies Act (Cap. 50) Module
- consumer
- Consumer Protection (Sale of Goods Act + Consumer Protection Fair Trading Act)
- employment
- Employment Act (Cap. 91) - Employment Standards
- ip
- Intellectual Property Laws Module
- payment
- Payment Services Act 2019 - Singapore Payment Regulation
- pdpa
- Personal Data Protection Act 2012 (PDPA)
- reasoning
- Legal reasoning engine for Singapore law.