JobCrawls
Search jobs in Finland and calculate net salary. Read-only, no login. English, Finnish, Swedish.
我該用這個嗎
品質與安全性
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"connector": {
"url": "https://www.jobcrawls.com/api/connector"
}
}
}遠端端點
https://www.jobcrawls.com/api/connectorstreamable-http它能做什麼
工具清單
工具(4)
🟢search_jobs(query, locale, filters, excludeFilters, remoteOnly, ...)
Search active job listings on JobCrawls, an aggregator of jobs in Finland. Use for questions like "find nurse jobs in Tampere", "onko Helsingissä avoimia etätyöpaikkoja ohjelmistokehittäjälle", or "finns det lediga jobb som sjukskötare i Åbo". The index covers jobs located in Finland plus remote roles open to Finland, and has no listings for other countries (jobs in Stockholm or Berlin are out of scope). Supports free-text queries plus facet filters (field, location, job type, seniority, skills, languages, industry, education, and more). Results, filter values and job text come back in the language of the query when locale is omitted; pass locale explicitly to override. Returns a scoped, paginated list, each with title, company, location, remoteness, salary range when known, and a direct link to the individual posting. list_job_filters returns the available filter values, and get_job_details returns the full description of a result. Some results are sourced from Job Market Finland (Työmarkkinatori); those results have isTyomarkkinatori:true and a `dataSource` attribution string, which MUST be shown alongside that posting wherever you present it, per Job Market Finland's terms of use.
輸入結構描述
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Free-text search across job title, description, skills, company, and location. Example: \"senior software engineer\". Leave empty to browse the newest listings."
},
"locale": {
"type": "string",
"enum": [
"en",
"fi",
"sv"
],
"description": "Set this to the language of the user's message (fi for Finnish, sv for Swedish, en for English or any other language), even when the job titles or place names in it are English. Language index to search: en = English, fi = Finnish, sv = Swedish. When omitted, results, filter values and job text come back in the language of \"query\" (detected from it); pass locale explicitly to override. Listing content AND filter values are localized per language, so keep this consistent with the locale used for list_job_filters. Prefer \"fi\" for the broadest coverage of jobs in Finland."
},
"filters": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
},
"description": "Facet filters keyed by attribute, each an array of allowed values (values within one attribute are OR-combined; different attributes are AND-combined). Allowed keys: field, normalisedTitle, normalisedRoleLevel, location, companyIndustry, companyId, jobType, requiredLanguages, optionalLanguages, benefits, skillsAndTechnologies, educationLevel, peopleManagementTier, remoteness, regionTags. Values are case-sensitive, LANGUAGE-SPECIFIC, and must match the chosen locale index — call list_job_filters with the same locale first to discover the exact values (e.g. field is \"Software Engineering\" in en but its Finnish equivalent in fi). Example (en): { \"field\": [\"Software Engineering\"], \"location\": [\"Helsinki, Finland\"] }. regionTags takes the `placeId` of an entry in a previous result's `regions` (a Finnish region)."
},
"excludeFilters": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
},
"description": "Negative facet filters keyed by attribute, same shape as `filters` but EXCLUDES listings matching any of the given values instead of requiring them. Use this to ask for jobs that do NOT have a given attribute value. Allowed keys: field, normalisedTitle, normalisedRoleLevel, location, companyIndustry, companyId, jobType, requiredLanguages, optionalLanguages, benefits, skillsAndTechnologies, educationLevel, peopleManagementTier, remoteness, regionTags. Same locale rules as `filters` apply. Example (en): { \"requiredLanguages\": [\"Finnish\"] } returns jobs that do not require Finnish. A key present in both `filters` and `excludeFilters` is invalid."
},
"remoteOnly": {
"type": "boolean",
"description": "Shortcut for only fully remote positions (remoteness = Remote)."
},
"minSalary": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Only listings whose minimum salary is at least this amount (listing currency, usually EUR)."
},
"sort": {
"type": "string",
"enum": [
"relevance",
"date",
"salary"
],
"description": "Ordering: relevance (default), date (newest first), or salary (highest minimum first)."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Results per page (1–20). Default: 10."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number, starting at 1. Default: 1."
},
"includeFacets": {
"type": "boolean",
"description": "When true, also return the facet values and counts for the current result set, plus `regions` (job counts per Finnish region), so you can refine the search. Default: false."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"query": {
"type": [
"string",
"null"
],
"description": "The free-text query used, or null when browsing without one."
},
"locale": {
"type": "string",
"enum": [
"en",
"fi",
"sv"
],
"description": "Language index that was searched."
},
"page": {
"type": "number"
},
"pageSize": {
"type": "number"
},
"totalFound": {
"type": "number",
"description": "Total matching active listings."
},
"returned": {
"type": "number",
"description": "Number of results in this page."
},
"hasMore": {
"type": "boolean",
"description": "True when a further page exists."
},
"facets": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"count": {
"type": "number"
}
},
"required": [
"value",
"count"
],
"additionalProperties": true
}
},
"description": "Present only when includeFacets was true."
},
"regions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"placeId": {
"type": "string"
},
"name": {
"type": "string"
},
"count": {
"type": "number"
}
},
"required": [
"code",
"placeId",
"name",
"count"
],
"additionalProperties": true
},
"description": "Present only when includeFacets was true: job counts per Finnish region (maakunta), largest first. Pass `placeId` in filters.regionTags to narrow to one region."
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"string",
"null"
],
"description": "Listing id; pass to get_job_details as jobId."
},
"companyId": {
"type": [
"string",
"null"
]
},
"title": {
"$ref": "#/properties/results/items/properties/companyId"
},
"company": {
"$ref": "#/properties/results/items/properties/companyId"
},
"location": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "string"
}
]
},
{
"type": "null"
}
],
"description": "One location, or several for multi-location listings."
},
"remoteness": {
"type": [
"string",
"null"
],
"description": "Localized remoteness value, e.g. \"Remote\", \"Hybrid\", \"On-site\"."
},
"jobType": {
"$ref": "#/properties/results/items/properties/companyId"
},
"roleLevel": {
"anyOf": [
{
"$ref": "#/properties/results/items/properties/location/anyOf/0"
},
{
"type": "null"
}
]
},
"field": {
"$ref": "#/properties/results/items/properties/roleLevel"
},
"skills": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"languages": {
"anyOf": [
{
"$ref": "#/properties/results/items/properties/skills/anyOf/0"
},
{
"type": "null"
}
],
"description": "Languages the listing requires."
},
"salary": {
"anyOf": [
{
"type": "object",
"properties": {
"min": {
"type": [
"number",
"null"
],
"description": "Lower bound of the advertised salary, or null when only a maximum is known."
},
"max": {
"type": [
"number",
"null"
],
"description": "Upper bound of the advertised salary, or null when only a minimum is known."
},
"currency": {
"type": "string",
"description": "ISO currency code, e.g. \"EUR\"."
},
"period": {
"type": [
"string",
"null"
],
"description": "Pay period of min/max, e.g. \"month\", \"year\", \"hour\"."
}
},
"required": [
"min",
"max",
"currency",
"period"
],
"additionalProperties": true
},
{
"type": "null"
}
],
"description": "Advertised salary range, or null when the listing states none."
},
"postedDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD."
},
"snippet": {
"type": [
"string",
"null"
],
"description": "Start of the job description, whitespace-collapsed."
},
"logoUrl": {
"$ref": "#/properties/results/items/properties/companyId"
},
"brandColor": {
"$ref": "#/properties/results/items/properties/companyId"
},
"url": {
"type": [
"string",
"null"
],
"description": "Direct link to the individual posting on jobcrawls.com (or the source posting)."
},
"employerGrade": {
"anyOf": [
{
"type": "string",
"enum": [
"A",
"B",
"C",
"D",
"E"
]
},
{
"type": "null"
}
],
"description": "JobCrawls Employer Score as a letter grade (A best), or null when the employer is not scored."
},
"salaryIsEstimate": {
"type": "boolean",
"description": "True when `salary` is a JobCrawls market-based estimate rather than stated by the employer. Say so when presenting it."
},
"marketSalary": {
"anyOf": [
{
"type": "object",
"properties": {
"p25": {
"type": "number"
},
"median": {
"type": "number"
},
"p75": {
"type": "number"
},
"sampleSize": {
"type": "number",
"description": "Number of comparable postings the band is based on."
},
"currency": {
"type": "string"
},
"period": {
"type": "string"
}
},
"required": [
"p25",
"median",
"p75",
"sampleSize",
"currency",
"period"
],
"additionalProperties": true
},
{
"type": "null"
}
],
"description": "Market salary band (gross EUR per month) for comparable jobs, only next to an employer-stated salary; null otherwise."
},
"isTyomarkkinatori": {
"type": "boolean",
"description": "True when the listing is sourced from Job Market Finland (Työmarkkinatori)."
},
"dataSource": {
"type": "string",
"description": "Present only when isTyomarkkinatori is true. Attribution that MUST be shown alongside the listing, per Job Market Finland's terms of use."
}
},
"required": [
"id",
"companyId",
"title",
"company",
"location",
"remoteness",
"jobType",
"roleLevel",
"field",
"skills",
"languages",
"salary",
"postedDate",
"snippet",
"logoUrl",
"brandColor",
"url",
"employerGrade",
"salaryIsEstimate",
"marketSalary",
"isTyomarkkinatori"
],
"additionalProperties": true
}
}
},
"required": [
"query",
"locale",
"page",
"pageSize",
"totalFound",
"returned",
"hasMore",
"results"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_job_filters(locale, query)
Returns the facet attributes jobs can be filtered by (e.g. field, location, job type, seniority level, skills, and languages), together with the actual values currently present in the active listings and how many listings have each value. The values returned are the exact strings search_jobs accepts in its `filters` parameter for the same locale. Optionally scope the values to a query. Values come back in the language of that query when locale is omitted; pass locale explicitly to override.
輸入結構描述
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"en",
"fi",
"sv"
],
"description": "Set this to the language of the user's message (fi for Finnish, sv for Swedish, en for English or any other language), even when the job titles or place names in it are English. Language index whose facet values to return: en = English, fi = Finnish, sv = Swedish. When omitted, the language of \"query\" (detected from it) is used; pass locale explicitly to override. Values are localized: use the SAME locale you will pass to search_jobs, then feed the returned values back into search_jobs \"filters\" verbatim."
},
"query": {
"type": "string",
"description": "Optional free-text query to scope the facet values to a subset of listings (e.g. only the facets present in \"nurse\" jobs). Leave empty for the whole active index."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"en",
"fi",
"sv"
]
},
"query": {
"type": [
"string",
"null"
]
},
"numericFilters": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Numeric search_jobs parameters and what they do."
},
"booleanFilters": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Boolean search_jobs parameters and what they do."
},
"facets": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string"
},
"count": {
"type": "number"
}
},
"required": [
"value",
"count"
],
"additionalProperties": true
}
},
"description": "Values to pass verbatim in search_jobs \"filters\" with the same locale."
}
},
"required": [
"locale",
"query",
"numericFilters",
"booleanFilters",
"facets"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_job_details(jobId, locale)
Fetch the complete details for a single JobCrawls listing by its id, including the full description, requirements, responsibilities, benefits, salary, company, location, and a direct link to the posting. Useful after search_jobs when a user wants to know more about a specific opening; takes the `id` field from a search_jobs result. When the listing is sourced from Job Market Finland (Työmarkkinatori), the response has isTyomarkkinatori:true and a `dataSource` attribution string that MUST be shown alongside it wherever you present it, per Job Market Finland's terms of use.
輸入結構描述
{
"type": "object",
"properties": {
"jobId": {
"type": "string",
"minLength": 1,
"description": "The listing id (the `id` field returned by search_jobs). Required."
},
"locale": {
"type": "string",
"enum": [
"en",
"fi",
"sv"
],
"description": "Set this to the language of the user's message (fi for Finnish, sv for Swedish, en for English or any other language), even when the job titles or place names in it are English. Language to return the listing content in: en = English, fi = Finnish, sv = Swedish. Pass the same locale you searched in; this call has no query text to detect language from, so it defaults to en when omitted. If the listing is not available in that language the connector falls back to whichever language it exists in."
}
},
"required": [
"jobId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"locale": {
"type": "string",
"enum": [
"en",
"fi",
"sv"
],
"description": "Language index the listing was found in."
},
"title": {
"type": [
"string",
"null"
]
},
"company": {
"$ref": "#/properties/title"
},
"companyUrl": {
"$ref": "#/properties/title"
},
"field": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "string"
}
]
},
{
"type": "null"
}
]
},
"roleLevel": {
"$ref": "#/properties/field"
},
"educationLevel": {
"$ref": "#/properties/field"
},
"location": {
"anyOf": [
{
"$ref": "#/properties/field/anyOf/0"
},
{
"type": "null"
}
],
"description": "One location, or several for multi-location listings."
},
"remoteness": {
"$ref": "#/properties/title"
},
"jobType": {
"$ref": "#/properties/title"
},
"languagesRequired": {
"$ref": "#/properties/field"
},
"skills": {
"$ref": "#/properties/field"
},
"benefits": {
"$ref": "#/properties/field"
},
"salary": {
"anyOf": [
{
"type": "object",
"properties": {
"min": {
"type": [
"number",
"null"
],
"description": "Lower bound of the advertised salary, or null when only a maximum is known."
},
"max": {
"type": [
"number",
"null"
],
"description": "Upper bound of the advertised salary, or null when only a minimum is known."
},
"currency": {
"type": "string",
"description": "ISO currency code, e.g. \"EUR\"."
},
"period": {
"type": [
"string",
"null"
],
"description": "Pay period of min/max, e.g. \"month\", \"year\", \"hour\"."
}
},
"required": [
"min",
"max",
"currency",
"period"
],
"additionalProperties": true
},
{
"type": "null"
}
],
"description": "Advertised salary range, or null when the listing states none."
},
"postedDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD."
},
"applicationDeadline": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD, or null when none is stated."
},
"isActive": {
"type": [
"boolean",
"null"
]
},
"description": {
"$ref": "#/properties/title"
},
"requirements": {
"$ref": "#/properties/title"
},
"responsibilities": {
"$ref": "#/properties/title"
},
"logoUrl": {
"$ref": "#/properties/title"
},
"brandColor": {
"$ref": "#/properties/title"
},
"url": {
"type": [
"string",
"null"
],
"description": "Direct link to the individual posting on jobcrawls.com (or the source posting)."
},
"employerGrade": {
"anyOf": [
{
"type": "string",
"enum": [
"A",
"B",
"C",
"D",
"E"
]
},
{
"type": "null"
}
],
"description": "JobCrawls Employer Score as a letter grade (A best), or null when the employer is not scored."
},
"salaryIsEstimate": {
"type": "boolean",
"description": "True when `salary` is a JobCrawls market-based estimate rather than stated by the employer. Say so when presenting it."
},
"marketSalary": {
"anyOf": [
{
"type": "object",
"properties": {
"p25": {
"type": "number"
},
"median": {
"type": "number"
},
"p75": {
"type": "number"
},
"sampleSize": {
"type": "number",
"description": "Number of comparable postings the band is based on."
},
"currency": {
"type": "string"
},
"period": {
"type": "string"
}
},
"required": [
"p25",
"median",
"p75",
"sampleSize",
"currency",
"period"
],
"additionalProperties": true
},
{
"type": "null"
}
],
"description": "Market salary band (gross EUR per month) for comparable jobs, only next to an employer-stated salary; null otherwise."
},
"isTyomarkkinatori": {
"type": "boolean",
"description": "True when the listing is sourced from Job Market Finland (Työmarkkinatori)."
},
"dataSource": {
"type": "string",
"description": "Present only when isTyomarkkinatori is true. Attribution that MUST be shown alongside the listing, per Job Market Finland's terms of use."
}
},
"required": [
"id",
"locale",
"title",
"company",
"companyUrl",
"field",
"roleLevel",
"educationLevel",
"location",
"remoteness",
"jobType",
"languagesRequired",
"skills",
"benefits",
"salary",
"postedDate",
"applicationDeadline",
"isActive",
"description",
"requirements",
"responsibilities",
"logoUrl",
"brandColor",
"url",
"employerGrade",
"salaryIsEstimate",
"marketSalary",
"isTyomarkkinatori"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢calculate_net_salary_finland(gross, net, period, locale, municipality, ...)
Gross-to-net salary calculator for Finland, from the JobCrawls tax iceberg calculator. Use for questions like "what is 4000 gross net in Finland", "paljonko jää käteen 4200 euron bruttopalkasta Helsingissä", or "vad blir nettolönen på 3800 brutto i Helsingfors". Give a gross salary (EUR per month by default, or per year), or a target net to get the gross it takes, and optionally the municipality, employer size, age, dependent children, commuting costs and investment income. It does not accept church membership or union fees. The linked page comes back in the language detected from "municipality" when locale is omitted, else English; pass locale explicitly to override. Returns monthly and annual breakdowns: employee pension and unemployment contributions, state, municipal, church and Yle taxes, net pay, employer contributions and the true cost of employment, plus the effective tax rate, the assumptions used and a link to the same scenario on jobcrawls.com. Uses the current tax year's official Finnish parameters; an estimate, not tax advice.
輸入結構描述
{
"type": "object",
"properties": {
"gross": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Gross salary in euros, per month unless period is \"year\". Give either gross or net."
},
"net": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Target net pay in euros (same period): the tool solves the gross salary that leaves this in hand. Give either gross or net."
},
"period": {
"type": "string",
"enum": [
"month",
"year"
],
"description": "Period of every money amount given. Default month."
},
"locale": {
"type": "string",
"enum": [
"en",
"fi",
"sv"
],
"description": "Set this to the language of the user's message (fi for Finnish, sv for Swedish, en for English or any other language), even when the job titles or place names in it are English. Language of the result notes, the inline card and the linked page. When omitted, detected from \"municipality\" if it is given in Finnish or Swedish form; otherwise defaults to en."
},
"municipality": {
"type": "string",
"maxLength": 60,
"description": "Finnish municipality name, e.g. \"Helsinki\" or \"Espoo\". Omit for the national-average municipal tax rate."
},
"employerSize": {
"type": "string",
"enum": [
"small",
"large"
],
"description": "Employer payroll size for the unemployment-insurance rate (large = payroll above about EUR 2.5 million). Omit for a blended average."
},
"includeVat": {
"type": "boolean",
"description": "Also subtract the VAT paid when the net is spent (an estimate). Default false."
},
"age": {
"type": "integer",
"minimum": 15,
"maximum": 100,
"description": "Age in years, affects pension and unemployment contributions."
},
"dependentChildren": {
"type": "integer",
"minimum": 0,
"maximum": 20,
"description": "Number of dependent children, affects the child tax deduction."
},
"isSoleGuardian": {
"type": "boolean",
"description": "Single parent with dependent children (child deduction)."
},
"commutingCosts": {
"type": "number",
"minimum": 0,
"description": "Commuting costs in the same period; deductible above the own-liability share, capped."
},
"dividends": {
"type": "number",
"minimum": 0,
"description": "Listed-company dividends in the same period (capital income)."
},
"capitalGains": {
"type": "number",
"minimum": 0,
"description": "Capital gains net of acquisition cost in the same period."
},
"unlistedDividends": {
"type": "number",
"minimum": 0,
"description": "Dividends from the person's own unlisted company in the same period (8% yield rule)."
},
"unlistedNetAssets": {
"type": "number",
"minimum": 0,
"description": "Mathematical value of the person's shares in that company, EUR (a stock, not per period)."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}輸出結構描述
{
"type": "object",
"properties": {
"taxYear": {
"type": "number"
},
"currency": {
"type": "string",
"const": "EUR"
},
"locale": {
"type": "string",
"enum": [
"en",
"fi",
"sv"
]
},
"input": {
"type": "object",
"properties": {
"gross": {
"type": "number"
},
"targetNet": {
"type": [
"number",
"null"
],
"description": "The target net when the gross was solved from one."
},
"period": {
"type": "string"
},
"municipality": {
"type": [
"string",
"null"
]
}
},
"required": [
"gross",
"targetNet",
"period",
"municipality"
],
"additionalProperties": true,
"description": "The inputs the calculation used, after defaults."
},
"assumptions": {
"type": "object",
"properties": {
"municipalTaxRatePct": {
"type": "number"
},
"municipalityUsed": {
"type": "string"
},
"churchTaxRatePct": {
"type": [
"number",
"null"
]
},
"employerUnemploymentInsurance": {
"type": "string"
},
"isGenericEstimate": {
"type": "boolean"
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"municipalTaxRatePct",
"municipalityUsed",
"churchTaxRatePct",
"employerUnemploymentInsurance",
"isGenericEstimate",
"notes"
],
"additionalProperties": true
},
"monthly": {
"type": "object",
"properties": {
"gross": {
"type": "number"
},
"employeeContributions": {
"type": "object",
"properties": {
"pension": {
"type": "number"
},
"unemployment": {
"type": "number"
},
"dailyAllowance": {
"type": "number"
},
"total": {
"type": "number"
}
},
"required": [
"pension",
"unemployment",
"dailyAllowance",
"total"
],
"additionalProperties": true
},
"taxes": {
"type": "object",
"properties": {
"state": {
"type": "number"
},
"municipal": {
"type": "number"
},
"medicalCare": {
"type": "number"
},
"church": {
"type": "number"
},
"yle": {
"type": "number"
},
"total": {
"type": "number"
}
},
"required": [
"state",
"municipal",
"medicalCare",
"church",
"yle",
"total"
],
"additionalProperties": true
},
"deductionsApplied": {
"type": "object",
"properties": {
"unionFees": {
"type": "number"
},
"commuting": {
"type": "number"
},
"earnedIncomeCredit": {
"type": "number"
}
},
"required": [
"unionFees",
"commuting",
"earnedIncomeCredit"
],
"additionalProperties": true
},
"net": {
"type": "number",
"description": "Take-home pay."
},
"employerContributions": {
"type": "object",
"properties": {
"tyel": {
"type": "number"
},
"unemploymentInsurance": {
"type": "number"
},
"healthInsurance": {
"type": "number"
},
"accidentInsurance": {
"type": "number"
},
"groupLife": {
"type": "number"
},
"total": {
"type": "number"
}
},
"required": [
"tyel",
"unemploymentInsurance",
"healthInsurance",
"accidentInsurance",
"groupLife",
"total"
],
"additionalProperties": true
},
"trueEmployerCost": {
"type": "number",
"description": "Gross plus employer contributions: what employing the person costs."
},
"vatOnSpending": {
"type": "number"
},
"netAfterVat": {
"type": "number"
}
},
"required": [
"gross",
"employeeContributions",
"taxes",
"deductionsApplied",
"net",
"employerContributions",
"trueEmployerCost",
"vatOnSpending",
"netAfterVat"
],
"additionalProperties": true,
"description": "Breakdown per month, EUR."
},
"annual": {
"type": "object",
"properties": {
"gross": {
"$ref": "#/properties/monthly/properties/gross"
},
"employeeContributions": {
"$ref": "#/properties/monthly/properties/employeeContributions"
},
"taxes": {
"$ref": "#/properties/monthly/properties/taxes"
},
"deductionsApplied": {
"$ref": "#/properties/monthly/properties/deductionsApplied"
},
"net": {
"$ref": "#/properties/monthly/properties/net"
},
"employerContributions": {
"$ref": "#/properties/monthly/properties/employerContributions"
},
"trueEmployerCost": {
"$ref": "#/properties/monthly/properties/trueEmployerCost"
},
"vatOnSpending": {
"$ref": "#/properties/monthly/properties/vatOnSpending"
},
"netAfterVat": {
"$ref": "#/properties/monthly/properties/netAfterVat"
}
},
"required": [
"gross",
"employeeContributions",
"taxes",
"deductionsApplied",
"net",
"employerContributions",
"trueEmployerCost",
"vatOnSpending",
"netAfterVat"
],
"additionalProperties": true,
"description": "Breakdown per year, EUR."
},
"rates": {
"type": "object",
"properties": {
"taxRatePct": {
"type": "number",
"description": "Taxes only, as % of gross (the tax card rate)."
},
"effectiveRatePct": {
"type": "number",
"description": "Taxes plus employee contributions, as % of gross."
},
"employerContributionsPctOfGross": {
"type": "number"
},
"keepShareOfEmployerCostPct": {
"type": "number"
}
},
"required": [
"taxRatePct",
"effectiveRatePct",
"employerContributionsPctOfGross",
"keepShareOfEmployerCostPct"
],
"additionalProperties": true
},
"investments": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": true
},
{
"type": "null"
}
],
"description": "Capital income breakdown, or null when no investment income was given."
},
"destinations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"annual": {
"type": "number"
},
"sharePct": {
"type": "number"
}
},
"required": [
"key",
"annual",
"sharePct"
],
"additionalProperties": true
},
"description": "Where the taxes and contributions go, EUR per year."
},
"pageUrl": {
"type": "string",
"description": "The same scenario on jobcrawls.com, where church tax and union fees can be set privately."
},
"method": {
"type": "string"
},
"icebergSvgUrl": {
"type": "string",
"description": "Image illustrating the breakdown."
}
},
"required": [
"taxYear",
"currency",
"locale",
"input",
"assumptions",
"monthly",
"annual",
"rates",
"investments",
"destinations",
"pageUrl",
"method",
"icebergSvgUrl"
],
"additionalProperties": true,
"$schema": "http://json-schema.org/draft-07/schema#"
}社群
證據