Skip to Content
O Saldo esta em fase alpha - reporte bugs aqui

Referência da API

APIs de trabalhador por conta de outrem para processamento salarial em Portugal. Para cálculos de trabalhadores por conta própria, consulte a API de trabalhador independente.

Função Principal

simulateDependentWorker(options)

Calcula os impostos e o rendimento líquido de trabalhadores por conta de outrem portugueses usando as tabelas de retenção oficiais. Devolve um resumo mensal completo (12 meses), aplicando automaticamente o período fiscal correto para cada mês.

Parâmetros

interface SimulateDependentWorkerOptions { year: number; income: number; married?: boolean; disabled?: boolean; partnerDisabled?: boolean; location?: LocationT; numberOfHolders?: number | null; numberOfDependents?: number | null; numberOfDependentsDisabled?: number | null; socialSecurityContributionRate?: number; twelfths?: Twelfths; lunchAllowanceDailyValue?: number; lunchAllowanceMode?: "cupon" | "salary"; lunchAllowanceDaysCount?: number; includeLunchAllowanceInJune?: boolean; oneHalfMonthTwelfthsLumpSumMonth?: "june" | "december"; isencaoHorarioMonthly?: number; benefitsOfYouthIrs?: boolean; yearOfYouthIrs?: number; }
ParâmetroTipoPredefiniçãoDescrição
yearnumberObrigatórioAno fiscal (ex: 2025)
incomenumberObrigatórioRendimento bruto mensal em euros
marriedbooleanfalseSe a pessoa é casada
disabledbooleanfalseSe a pessoa tem deficiência
partnerDisabledbooleanfalseSe o cônjuge tem deficiência
locationLocationT'continent'Região fiscal: 'continent', 'azores', ou 'madeira'
numberOfHoldersnumber | nullnullNúmero de titulares de rendimentos no casamento (1 ou 2)
numberOfDependentsnumber | nullnullNúmero de dependentes
numberOfDependentsDisablednumber | nullnullNúmero de dependentes com deficiências
socialSecurityContributionRatenumber0.11Taxa de contribuição de segurança social (11%)
twelfthsTwelfthsTwelfths.TWO_MONTHSDistribuição de subsídios de férias
lunchAllowanceDailyValuenumber10.2Valor diário do subsídio de refeição em euros
lunchAllowanceMode"cupon" | "salary""cupon"Tipo de subsídio de refeição
lunchAllowanceDaysCountnumber22Dias úteis por mês para subsídio de refeição
includeLunchAllowanceInJunebooleanfalseSe junho inclui subsídio de refeição
oneHalfMonthTwelfthsLumpSumMonth"june" | "december""december"Mês para o pagamento único de ONE_HALF_MONTH
isencaoHorarioMonthlynumber0Suplemento mensal de isenção de horário (Art. 218.º–219.º + 265.º CT). Conta para o subsídio de férias mas não para o subsídio de Natal
benefitsOfYouthIrsbooleanfalseAplica a isenção parcial mensal do IRS Jovem (Art. 2.º-C CIRS)
yearOfYouthIrsnumber1Ano de benefício (1–10 a partir de 2025, 1–5 para 2023/2024)

Valor de Retorno

interface DependentWorkerResult { yearly: YearlyDependentWorkerSummary; socialSecurityContributionRate: number; monthlyBreakdown: MonthlyBreakdownResult[]; } interface YearlyDependentWorkerSummary { totalGrossIncomeAmount: number; // Rendimento bruto total do ano totalNetIncomeAmount: number; // Rendimento líquido total do ano totalLunchAllowanceGrossAmount: number; // Subsídio de refeição bruto total do ano } interface MonthlyBreakdownResult { month: MonthName; period: PeriodT; taxableIncomeForIrsCalculation: number; incomeSubjectToIrsAndSocialSecurity: number; grossIncome: GrossIncomeAmountBreakdown; irsWithholdingTax: IncomeComponentAmountBreakdown; socialSecurityContribution: IncomeComponentAmountBreakdown; netIncome: IncomeComponentAmountBreakdown; lunchAllowance: LunchAllowanceAmountBreakdown; subsidyTwelfths: SubsidyTwelfthsAmountBreakdown; bracket: BracketResult; taxRetentionTable: TaxRetentionTableResult; youthIrs: YouthIrsBreakdown; } interface YouthIrsBreakdown { applied: boolean; // true se o IRS Jovem reduz a retenção deste mês yearOfBenefit: number; // ano de benefício (1–10) exemptionPercentage: number; // 0–1 (ex.: 0.75 para o 2.º–4.º ano em 2025+) monthlyExemptCap: number; // tecto por pagamento = (multiplicador × IAS) / 14 exemptIncome: number; // parte isenta do mês (após aplicação do tecto) }
PropriedadeTipoDescrição
yearly.totalGrossIncomeAmountnumberRendimento bruto anual (14 meses + subsídio de refeição)
yearly.totalNetIncomeAmountnumberRendimento líquido anual
yearly.totalLunchAllowanceGrossAmountnumberSubsídio de refeição bruto anual
socialSecurityContributionRatenumberTaxa de contribuição para a SS aplicada
monthlyBreakdownMonthlyBreakdownResult[]Array com 12 breakdowns mensais
monthlyBreakdown[n].grossIncome.baseSalaryAmountnumberSalário base mensal
monthlyBreakdown[n].grossIncome.totalWithLunchAllowanceAndSubsidyTwelfthsAmountnumberTotal bruto mensal incluindo subsídios
monthlyBreakdown[n].irsWithholdingTax.totalAmountnumberTotal de IRS retido nesse mês
monthlyBreakdown[n].socialSecurityContribution.totalAmountnumberTotal de SS nesse mês
monthlyBreakdown[n].netIncome.totalAmountnumberTotal do rendimento líquido mensal
monthlyBreakdown[n].lunchAllowance.grossAmountnumberSubsídio de refeição bruto do mês
monthlyBreakdown[n].lunchAllowance.taxableAmountnumberPorção tributável do subsídio
monthlyBreakdown[n].lunchAllowance.taxExemptAmountnumberPorção isenta de imposto do subsídio
monthlyBreakdown[n].subsidyTwelfths.distributedMonthlyAmountnumberDuodécimos distribuídos mensalmente
monthlyBreakdown[n].subsidyTwelfths.lumpSumAmountnumberDuodécimos em montante único neste mês
monthlyBreakdown[n].bracketBracketResultInformação do escalão fiscal
monthlyBreakdown[n].taxRetentionTableTaxRetentionTableResultDados completos da tabela de retenção
monthlyBreakdown[n].youthIrs.appliedbooleantrue quando o IRS Jovem reduz a retenção deste mês
monthlyBreakdown[n].youthIrs.exemptionPercentagenumberPercentagem de isenção do ano de benefício (01)
monthlyBreakdown[n].youthIrs.monthlyExemptCapnumberTecto por pagamento = (multiplicador × IAS) / 14
monthlyBreakdown[n].youthIrs.exemptIncomenumberParte isenta da remuneração do mês (após o tecto)

Exemplo

Exemplo Interativo

Tipos e Enums

LocationT

type LocationT = "continent" | "azores" | "madeira";

Twelfths

enum Twelfths { NONE = 0, // Sem subsídios de férias ONE_HALF_MONTH = 0.5, // 1x50% - Um subsídio a 50% (meio mês) ONE_MONTH = 1, // 2x50% - Dois subsídios a 50% cada (um mês total) TWO_MONTHS = 2 // 2x100% - Dois subsídios a 100% cada (dois meses total) }

GrossIncomeAmountBreakdown

interface GrossIncomeAmountBreakdown { baseSalaryAmount: number; baseSalaryAndLunchAllowanceAmount: number; totalWithLunchAllowanceAndSubsidyTwelfthsAmount: number; }

IncomeComponentAmountBreakdown

Usado para irsWithholdingTax, socialSecurityContribution e netIncome:

interface IncomeComponentAmountBreakdown { totalAmount: number; fromBaseSalaryAmount: number; fromLunchAllowanceAmount: number; fromSubsidyTwelfthsAmount: number; }

LunchAllowanceAmountBreakdown

interface LunchAllowanceAmountBreakdown { grossAmount: number; taxableAmount: number; taxExemptAmount: number; isPaidInThisMonth: boolean; }

Regras Fiscais:

  • Cartões de refeição ("cupon"): Isento até €10,20/dia
  • Subsídio em dinheiro ("salary"): Isento até €6,00/dia

SubsidyTwelfthsAmountBreakdown

interface SubsidyTwelfthsAmountBreakdown { distributedMonthlyAmount: number; // Porção distribuída mensalmente lumpSumAmount: number; // Pagamento único em junho/dezembro totalAmount: number; // distributedMonthlyAmount + lumpSumAmount }

SituationCodesT

type SituationCodesT = | "TABLE1_SINGLE_OR_MARRIED_2_HOLDERS" // Solteiro ou casado com 2 titulares | "TABLE2_SINGLE_ONE_OR_MORE_DEPENDENTS" // Solteiro com dependentes | "TABLE3_MARRIED_1_HOLDER" // Casado, um titular | "TABLE4_SINGLE_OR_MARRIED_2_HOLDERS_NO_DEPENDENTS_PERSON_WITH_DISABILITY" // Solteiro ou casado 2 titulares + deficiência | "TABLE5_SINGLE_ONE_OR_MORE_DEPENDENTS_PERSON_WITH_DISABILITY" // Solteiro com dependentes + deficiência | "TABLE6_MARRIED_2_HOLDERS_ONE_OR_MORE_DEPENDENTS_PERSON_WITH_DISABILITY" // Casado 2 titulares com dependentes + deficiência | "TABLE7_MARRIED_1_HOLDER_PERSON_WITH_DISABILITY"; // Casado um titular + deficiência

Situation

interface Situation { code: SituationCodesT; description: string; conditions: Condition[]; }

Condition

interface Condition { married: boolean; dependents: boolean; disabled: boolean; partnerDisabled: boolean; description: string; numberOfHolders?: number | null; }

BracketResult

interface BracketResult { signal: "max" | "min"; limit: number; max_marginal_rate: number; deduction: number; var1_deduction: number; var2_deduction: number; dependent_aditional_deduction: number; effective_mensal_rate: number; }

TaxRetentionTableResult

interface TaxRetentionTableResult { situation: string; description: string; brackets: BracketResult[]; dependent_disabled_addition_deduction?: number; }

Funções Utilitárias

SituationUtils.getSituation()

SituationUtils.getSituation( married: boolean, disabled: boolean, partnerDisabled: boolean, numberOfHolders?: number | null, numberOfDependents?: number ): Situation | undefined

Determina a situação fiscal apropriada com base nas circunstâncias pessoais.

SituationUtils.getSituationFromCode()

SituationUtils.getSituationFromCode(code: string): Situation | undefined

Recupera uma situação fiscal pelo seu código.

Funções de Validação

A biblioteca inclui funções de validação internas que são chamadas automaticamente:

  • validateNumberOfHolders(numberOfHolders)
  • validateMarriedAndNumberOfHolders(married, numberOfHolders)
  • validatePartnerDisabled(married, partnerDisabled)
  • validateDependents(numberOfDependents, numberOfDependentsDisabled)
  • validateLunchAllowanceMode(lunchAllowanceMode)
  • validateYear(year)
  • validateYouthIrsForDependentWorker(benefitsOfYouthIrs, yearOfYouthIrs, year)

Tratamento de Erros

Exemplo Interativo

Uso Avançado

Benefícios de Deficiência

Exemplo Interativo

IRS Jovem

Isenção parcial mensal da retenção na fonte para jovens trabalhadores. O escalão é determinado pela totalidade da remuneração mensal; a taxa efectiva resultante incide apenas sobre a parte não isenta. A parte isenta de cada pagamento está sujeita ao tecto (multiplicador × IAS) / 14.

Tabela de anos de benefício (a partir de 2025, conforme Lei n.º 45-A/2024 — OE 2025):

Ano de benefícioIsençãoMultiplicador IAS (tecto anual)
1.º100 %55 × IAS
2.º – 4.º75 %55 × IAS
5.º – 7.º50 %55 × IAS
8.º – 10.º25 %55 × IAS

Para 2023 e 2024 o regime é mais restrito (5 anos, percentagens inferiores) — ver youth-irs-data.ts.

Referências legais:

Exemplo Interativo

Taxa de Segurança Social Personalizada

Exemplo Interativo
Last updated on