Referência da API
APIs de trabalhador independente (regime simplificado/RNH). Para cálculos de processamento salarial, consulte a API de trabalhador por conta de outrem.
Função Principal
simulateIndependentWorker(options)
Calcula o rendimento de categoria B (trabalhador independente) português com regras de regime simplificado, segurança social, IRS de juventude e imposto fixo RNH opcional.
Parâmetros
interface SimulateIndependentWorkerOptions {
income: number | number[];
incomeFrequency?: FrequencyChoices;
nrDaysOff?: number;
ssDiscount?: number;
maxExpensesTax?: number;
expenses?: number;
ssTax?: number;
currentTaxRankYear?: 2023 | 2024 | 2025 | 2026;
rnh?: boolean;
rnhTax?: number;
dateOfOpeningActivity?: Date | null;
benefitsOfYouthIrs?: boolean;
yearOfYouthIrs?: number;
previousYearQ4MonthlyIncome?: number;
}| Parâmetro | Tipo | Predefinição | Descrição |
|---|---|---|---|
income | number | number[] | Obrigatório | Rendimento bruto baseado em incomeFrequency. Pode ser um array com exatamente 12 números para rendimentos mensais variáveis. |
incomeFrequency | FrequencyChoices | "year" | Frequência do income ("year", "month", "day") |
yearBusinessDays | number | específico do ano | Substituição opcional da base de dias úteis do ano |
nrDaysOff | number | 0 | Dias de folga para frequência diária (inteiro, deve ser < yearBusinessDays) |
ssDiscount | number | 0 | Ajuste de segurança social (-0.25 a 0.25) aplicado à base SS de 70% |
maxExpensesTax | number | 15 | Percentagem do regime simplificado para despesas dedutíveis |
expenses | number | 0 | Despesas declaradas (usadas antes de adicionar despesas em falta) |
ssTax | number | 0.214 | Taxa de segurança social |
currentTaxRankYear | 2023 | 2024 | 2025 | 2026 | 2025 | Ano da tabela IRS progressiva |
rnh | boolean | false | Aplicar imposto fixo RNH em vez de escalões progressivos |
rnhTax | number | 0.2 | Taxa de imposto fixo RNH |
dateOfOpeningActivity | Date | null | null | Define multiplicadores de primeiro/segundo ano fiscal e isenção SS nos primeiros 12 meses |
benefitsOfYouthIrs | boolean | false | Aplicar desconto IRS de juventude |
yearOfYouthIrs | number | 1 | Ano de benefício IRS de juventude (1-10 para tabelas 2025) |
previousYearQ4MonthlyIncome | number | undefined | Rendimento bruto mensal médio para Out/Nov/Dez do ano anterior. Quando partilhado, a SS para Jan/Fev/Mar é calculada exatamente a partir deste valor. Quando omitido, estes três meses são estimados e ssQ1Approximated retorna como true no resultado. |
Valor de Retorno
interface IndependentWorkerResult {
grossIncome: CurrencyByFrequency;
yearBusinessDays: number;
taxableIncome: number;
ssPay: CurrencyByFrequency;
specificDeductions: number;
expenses: number;
expensesNeeded: number;
youthIrsDiscount: number;
irsPay: CurrencyByFrequency;
netIncome: CurrencyByFrequency;
taxTableUsed: TaxRank[];
taxRank: TaxRank;
currentIas: number;
maxSsIncome: number;
ssTax: number;
maxExpensesTax: number;
workerWithinFirstFinancialYear: boolean;
workerWithinSecondFinancialYear: boolean;
workerWithinFirst12Months: boolean;
rnh: boolean;
rnhTax: number;
benefitsOfYouthIrs: boolean;
yearOfYouthIrs: number;
ssQ1Approximated: boolean;
monthlyBreakdown: IndependentWorkerMonthlyBreakdownResult[];
normalizedInternals: IndependentWorkerNormalizedInternals;
}
interface IndependentWorkerMonthlyBreakdownResult {
month: IndependentMonthName;
grossIncome: number;
taxableIncome: number;
irsPay: number;
ssPay: number;
netIncome: number;
totalTax: number;
overallTaxBurden: number;
effectiveBracketRate: number | null;
marginalRate: number;
}| Propriedade | Tipo | Descrição |
|---|---|---|
grossIncome | CurrencyByFrequency | Rendimento por ano/mês/dia (12 meses, 248 dias úteis) |
taxableIncome | number | Rendimento usado para IRS após fatores de regime simplificado |
ssPay | CurrencyByFrequency | Segurança social devida (respeita limites, descontos, isenção do primeiro ano) |
specificDeductions | number | Máx de €4104 vs. 10% dos pagamentos SS |
expenses | number | Despesas declaradas |
expensesNeeded | number | Despesas extra necessárias para atingir o limite simplificado |
youthIrsDiscount | number | Dedução IRS de juventude limitada por multiplicadores IAS |
irsPay | CurrencyByFrequency | IRS devido (tabelas progressivas ou RNH fixo) |
netIncome | CurrencyByFrequency | Rendimento líquido após IRS e SS |
taxRank | TaxRank | Escalão progressivo aplicado |
currentIas | number | Valor IAS para o ano fiscal selecionado |
maxSsIncome | number | Limite para base SS (12 × IAS) |
workerWithinFirstFinancialYear | boolean | Usa fator simplificado de 37.5% |
workerWithinSecondFinancialYear | boolean | Usa fator simplificado de 56.25% |
workerWithinFirst12Months | boolean | SS isenta nos primeiros 12 meses após abertura de atividade |
ssQ1Approximated | boolean | Retorna true quando a SS para Jan/Fev/Mar é estimada (i.e. previousYearQ4MonthlyIncome não foi incluído). Apresente uma nota na interface nesse sentido. |
rnh / rnhTax | boolean / number | Indica uso de taxa fixa RNH |
benefitsOfYouthIrs / yearOfYouthIrs | boolean / number | Entradas IRS de juventude ecoadas de volta |
monthlyBreakdown | IndependentWorkerMonthlyBreakdownResult[] | Detalhe mensal com impostos e rendimento líquido |
normalizedInternals | IndependentWorkerNormalizedInternals | Métricas brutas e de cálculo intermediárias (ex: detalhe de saídas da SS) |
Exemplo
Recibos Verdes
Um conjunto de funções utilitárias projetadas para analisar e processar as exportações oficiais em CSV de Recibos Verdes (SIRE) do Portal das Finanças.
parseGreenReceiptsCsv(content)
Analisa a string CSV em bruto descarregada do SIRE para um array de strings (GreenReceiptRawRow) representando a tabela.
toGreenReceipt(rawRow)
Transforma uma linha da tabela num GreenReceipt tipificado, convertendo automaticamente números em formato português (ex: "3.945,51") para números nativos de JavaScript e normalizando datas.
computeGreenReceiptsAnnualStats(receipts)
Agrega um array de GreenReceipt em estatísticas anuais detalhadas (GreenReceiptAnnualStats), agrupadas por ano. Calcula automaticamente o IVA total, IRS retido e fornece um detalhe financeiro por cliente.
simulateFromGreenReceiptsCsv(options)
Lê os dados CSV e executa diretamente o simulador `simulateIndependentWorker`, colocando as faturas nos seus respetivos meses de acordo com a predefinição para `currentTaxRankYear`. Se o CSV detiver documentos provenientes do 4º trimestre do ano passado (Ou, Nov e Dez), tira a devida média deles para definir automaticamente o `previousYearQ4MonthlyIncome`.
Tipos e Enums
FrequencyChoices
enum FrequencyChoices {
Year = "year",
Month = "month",
Day = "day"
}Usado por simulateIndependentWorker para interpretar o valor income.
CurrencyByFrequency
interface CurrencyByFrequency {
year: number;
month: number;
day: number;
}A maioria dos resultados de trabalhador independente são devolvidos nesta forma (sempre usando 12 meses e 248 dias úteis).
IndependentMonthName
type IndependentMonthName =
| "january"
| "february"
| "march"
| "april"
| "may"
| "june"
| "july"
| "august"
| "september"
| "october"
| "november"
| "december";TaxRank
interface TaxRank {
id: number;
min: number;
max: number | null;
normalTax: number;
averageTax: number | null;
}Representa um escalão IRS progressivo para trabalhadores independentes (tabelas para 2023, 2024, 2025 e 2026).
Funções de Validação
validateIncome,validateIncomeFrequency,validateNrDaysOffvalidateSsDiscount,validateMaxExpensesTax,validateExpenses,validateSsTaxvalidateCurrentTaxRankYear,validateRnhTaxvalidateYearOfYouthIrs(limita anos a 1-5 para 2023/2024 e 1-10 para 2025/2026)
Tratamento de Erros
Uso Avançado
Abertura de atividade e IRS de juventude
Rendimento Variável e Segurança Social
Ao fornecer um array de exatamente 12 números para income, o simulador processa o rendimento como variável ao longo do ano. O campo frequência (incomeFrequency) é ignorado, e a Segurança Social é unicamente calculada com base trimestral, espelhando as declarações trimestrais do mundo real:
| Rendimento obtido | Meses a pagar à SS |
|---|---|
| 4º Trimestre do ano anterior (Out, Nov, Dez) | Jan, Fev, Mar |
| 1º Trimestre (Jan, Fev, Mar) | Abr, Mai, Jun |
| 2º Trimestre (Abr, Mai, Jun) | Jul, Ago, Set |
| 3º Trimestre (Jul, Ago, Set) | Out, Nov, Dez |
Por a contribuição de Jan/Fev/Mar depender do rendimento de Out–Dez do ano anterior, o simulador aceita um parâmetro adicional opcional previousYearQ4MonthlyIncome. Quando este é omitido, os três meses baseiam-se numa estimativa para a média do 3º trimestre do ano correspondente e o parâmetro ssQ1Approximated retorna true no resultado — o que é útil para expor um aviso ao utilizador na interface.