Payroll API
v1 Водичи EN Започнете

Payroll API

Датотеки МПИН, е-ППД и ПДД-ГИ

Важно

Merot никогаш не поднесува МПИН, е-ППД или ПДД-ГИ до УЈП. Секој endpoint на оваа страница ви враќа датотека; качувањето кај соодветниот портал на УЈП е секогаш нешто што го правите вие или вашиот сметководител.

МПИН

МПИН е месечната пријава на УЈП за плата, придонеси и персонален данок на доход. Поддржани се два формата: тековниот XML формат, и постариот формат со фиксна ширина TXT, кој го прифаќа и сопствениот софтвер на УЈП. Записите обично се соодветните полиња директно од PayrollCalculation добиена од POST /v1/calculations — генераторот ништо не прерачунува, само го форматира она што му го давате.

Прво валидирајте

Извршете ги истите УЈП-проверки што ги користат генераторите, без да генерирате датотека — корисно за да ги откриете проблемите во сопствениот интерфејс пред да понудите преземање:

curl -X POST "https://api.payroll.merot.com/v1/files/mpin/validate" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const response = await fetch("https://api.payroll.merot.com/v1/files/mpin/validate", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/files/mpin/validate",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/files/mpin/validate', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/files/mpin/validate");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/files/mpin/validate"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

Генерирајте XML

curl -X POST "https://api.payroll.merot.com/v1/files/mpin/xml" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
const response = await fetch("https://api.payroll.merot.com/v1/files/mpin/xml", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.payroll.merot.com/v1/files/mpin/xml",
    headers={
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
    },
    json={},
)

print(response.json())
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.payroll.merot.com/v1/files/mpin/xml', [
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_KEY',
        'Content-Type' => 'application/json',
    ],
    'json' => [],
]);

echo $response->getBody();
using System.Net.Http;
using System.Text;

using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.payroll.merot.com/v1/files/mpin/xml");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.payroll.merot.com/v1/files/mpin/xml"))
    .headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
    .method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

Стандардно, генерирањето ги извршува истите проверки како POST /v1/files/mpin/validate и враќа 422 ако некоја е блокирачка; проследете force: true за сепак да генерирате. TXT генерирањето е структурно идентично, но се враќа како text/plain; charset=utf-16le, со ознака за редослед на бајти (BOM) и CRLF крајови на редови, точно како што бара сопствениот софтвер на УЈП — не го прекодирајте.

Комбинирање повеќе серии

Ако извршувате повеќе од една серија (batch) пресметка за исто правно лице и период (на пр. редовна плата плус исправка), POST /v1/files/mpin/txt/combined ги спојува во едно поднесување, подредено по кирилско презиме, како што бара УЈП.

ПДД-ГИ (исплати на хонорарци)

POST /v1/files/pddgi пријавува персонален данок на доход задржан при исплати на хонорар/договор за дело од серија (batch) за плата — за фактурите платени надвор од редовно вработување.

е-ППД (самостоен персонален данок на доход)

POST /v1/files/epdd пријавува персонален данок на доход за исплата надвор од редовната серија за плата целосно. POST /v1/files/epdd/gross-from-net го пресметува бруто износот за нето исплата по рамна стапка од 10% персонален данок на доход (правилото „+11,11%” што го користат сметководителите), кога го знаете само она што примачот треба да го добие.

Напредно: вид на обврска / filingVariant

Секоја серија за МПИН стандардно е со вид на обврска 101 (редовна). vidObvrska: "103" поднесува исправка. Ретко потребна опција filingVariant постои за два посебни случаи што УЈП ги прифатил во вистински поднесувања — видете ја референцата за MpinBatch за точно што менува секоја; повеќето интеграции никогаш не ѝ требаат.