Krajowy system e-Faktur

Mirosław Tomczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Jeszcze jeden temat, w schemat,xsd mamy ->> <xsd:element name="TypKorekty" type="tns:TTypKorekty" minOccurs="0">
xsd:annotation
xsd:documentationTyp skutku korekty w ewidencji dla podatku od towarów i usług</xsd:documentation>
</xsd:annotation>
</xsd:element>
TypKorekty pole w xml nieobowiązkowe. Czy ma ktoś doświadczenie czy formalnie walidowany(status ok) przez plik xsd plik xml(fa3) może zostać odrzucony w ksef. Tak się dzieje w przypadku np nip formalnie(1-9\d{7}-\d{5}) jest ok(zgodnie z plikiem xsd) ale jest błędny(https://sprawdznip.podatki.gov.pl/) i ksef to odrzuca. Czy mają coś dodatkowego na serwerze ksef, co może odrzucić xml faktuy korygującej gdy nie podamy typKorekty(1,2,3) ??? Na berdyczów nie piszę bo szkoda czasu.

Jacek Żakowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Czy ktoś może mi przypomnieć jakie metody mam użyć, aby pobrać status wysłanej faktury oraz UPO - ale po kilku godzinach, gdy sesje wysyłkowe są już zamknięte ?
Mam zapisane: Bearer, SessionRefNumber i elementRefReferenceNumber. Nie mam numeru KSeF.

asoio
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
bbhzp
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 107
0

Cześć. Mam problem z pobieraniem faktur w paczce, jeśli użytkownik jest zalogowany certyfikatem z id wewnętrznym. Używam rządowej biblioteki C#.

Logowanie:

Kopiuj
authTokenRequest = AuthTokenRequestBuilder
    .Create()
    .WithChallenge(challengeResponse.Challenge)
    .WithContext(AuthenticationTokenContextIdentifierType.InternalId, "1234567890-12345")
    .WithIdentifierType(AuthenticationTokenSubjectIdentifierTypeEnum.CertificateSubject)
    .Build();

Eksport faktur:

Kopiuj

EncryptionData encryptionData = _cryptographyService.GetEncryptionData();

InvoiceExportRequest invoiceExportRequest = new InvoiceExportRequest()
{
    Encryption = encryptionData.EncryptionInfo,
    Filters = ksefFilters
};

exportInvoiceResponse = await _ksefClient.ExportInvoicesAsync(
    invoiceExportRequest,
    SauerkrautKSeFSession.AccessToken,
    default).ConfigureAwait(false);

Gdzie ksefFilters mają ustawione:

  1. SubjectType: Subject1
  2. DateRange - od 15 kwietnia do null (czyli do dzisiejszej daty)
  3. BuyerIdentifier.Type - None

Po wyłowaniu endpointa dostaję taki błąd:

Kopiuj
Kod błędu: 21181
Nieprawidłowe żądanie eksportu faktur.
Nie można wyeksportować paczki faktur dla wybranego podmiotu (Subject1) i zalogowanego identyfikatoru kontekstu (InternalId).

Czy ktoś wie o co chodzi? Przy logowaniu się samym NIP'em problem nie występuje.

Krzysztof Jozwiak
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

Witam, czym najlepiej wyedytować styl styl(3) .xls

Mirosław Tomczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Jeszcze uwagi do https://github.com/asoio/ksef-xslt/blob/main/kseffaktura_fa(3).xsl .Znalazłem to a Witold na grupie rekomendował(dziękuję) .Potwierdzam, działa(przed "użyciem" konweruj komentarze do utf8) .To rozwiązuje problem(błąd) rządowego pliku styl.xsl w którym jest błąd w zakresie znaczników obciazenia, doliczenia .Pisałem o tym wyżej(brak obsługi dozaplaty gdy użyjesz tylko obciazenia).
Jest jeszcze jeden temat- drukowanie wygenerowanego pliku html z przeglądarki .Na ekranie widać wszystko ok(dziś to zaaplikowałem) jak w programie rządowym (nr ksef, kod qr można ,... można oczywiście wstrzyknąć do gotowego pliku html)) .Czy ma ktoś pomysł co z tym zrobić .

Dzyszla
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 257
0

Działa u Was logowanie do AP testowej? Co chwilę mi 504 wywala :(
(API działa normalnie)

Waldemar Lipkowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
0

KSeF, PHP, N1ebieski. Srodowisko testowe, nasze certyfikaty dla testowego, działa wszystko, QR, UPO, itd. Środowisko produkcyjne, certyfikay klienta, błąd: N1ebieski\KSEFClient\Exceptions\StatusException #415: Uwierzytelnianie zakończone niepowodzeniem @ jakaśścieżkacośtamcośtam/vendor/n1ebieski/ksef-php-client/src/ClientBuilder.php:410
Właściciel certyfikatu twierdzi że certyfikat jest używany do autoryzacji w kilku innych miejscach i wygląda na to że tylko my mamy z nim problem.

PC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Mam pytanie dotyczące pobierania faktur z KSeF dla id wewnętrznego.
Gdy loguję się id wewnętrznym i certyfikatem, który ma uprawnienia do przeglądania faktur, to próbuję pobrać faktury wyszukiwaniem paczką. W parametrach podaję Subject3. Mam dwie faktury zanjdujące się właśnie w Podmiot3 i wystawione na ten id wewnętrzny, jedna w roli Odbiorca, druga w roli Wystawca faktury.
Niestety wyszukiwanie nie zwraca mi żadnej faktury. Korzystam w aplikacji C# z biblioteki rządowej. Co może być nie tak, że nie znajduje mi żadnej faktury?

IX
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 19
0

Na ksef/web - produkcja, faktura ma parametry:

Data wystawienia: 31.03.2026
Data zapisania w KSeF: 01.04.2026
Data otrzymania: 01.04.2026

natomiast metadata faktury wygląda tak:

(...)
"isTruncated": false,
"permanentStorageHwmDate": "2026-04-01T02:00:00+00:00",
"invoices": [
{
"ksefNumber": "------------",
"invoiceNumber": "---------",
"issueDate": "2026-03-31",
"invoicingDate": "2026-03-31T22:44:42.516586+00:00",
"acquisitionDate": "2026-03-31T22:44:43.141297+00:00",
"permanentStorageDate": "2026-03-31T22:44:43.468527+00:00",
"seller": {
(...)

i czegoś nie rozumiem, czy data otrzymania nie powinna wskazywać na dzień 31.03.2026 (acquisitionDate) ???

może coś skopałem ze strefą czasową??

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 119
0

Hej
W sytuacji kiedy wystawiana jest faktura na gospodarstwo rolne (zwykła faktura vat - nie RR) i klient chce żeby umieścić na fakturze numer gospodarstwa - gdzie wrzuca się numer gospodarstwa? Przykleić do nazwy Nabywcy, dodać w Dodatkowym Opisie czy jeszcze inaczej?

FP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0
programista-csharp napisał(a):

Mam pytanie dotyczące pobierania faktur z KSeF dla id wewnętrznego.
Gdy loguję się id wewnętrznym i certyfikatem, który ma uprawnienia do przeglądania faktur, to próbuję pobrać faktury wyszukiwaniem paczką. W parametrach podaję Subject3. Mam dwie faktury zanjdujące się właśnie w Podmiot3 i wystawione na ten id wewnętrzny, jedna w roli Odbiorca, druga w roli Wystawca faktury.
Niestety wyszukiwanie nie zwraca mi żadnej faktury. Korzystam w aplikacji C# z biblioteki rządowej. Co może być nie tak, że nie znajduje mi żadnej faktury?

Subject3 to scope dla strony trzeciej, czyli kontekst, w którym pobierasz faktury wystawione lub otrzymane przez kogoś innego niż ty, na podstawie pełnomocnictwa, które ten ktoś dał na twój NIP. Subject1 to perspektywa wystawcy (wystawiłem ja), Subject2 to perspektywa nabywcy (dostałem ja), Subject3 to perspektywa pełnomocnika (mam dostęp przez ZAW-FA do faktur firmy X i pobieram je w jej imieniu).

Praktycznie wygląda to tak: jeśli twoja firma A pobiera faktury firmy B na podstawie złożonego przez B ZAW-FA, w queryku po internalId lecisz z subjectType=Subject3 i jako kontekst sesji NIP firmy B (nie A). API weryfikuje, czy A ma realnie scope do faktur B z tego ZAW-FA, i zwraca tylko te w zakresie pełnomocnictwa.

Jeden gotcha: jeśli poprosisz o Subject3 bez wcześniej zarejestrowanego pełnomocnictwa, dostaniesz 403 z details o braku uprawnień, co bywa mylące, bo wygląda jak problem z autoryzacją sesji, nie ze scope query.

Druga sprawa, jak masz ciągnąć wsadowo po internalId, synchroniczny query po jednym ID jest wolny i lubi rate-limit przy historycznych pullach. Lepiej idzie przez asynchroniczny paczka (POST /api/v2/queries/invoice/async-init plus polling statusu i potem download zipa), który zwraca paczkę z metadanymi i samymi XMLami. Subject3 też tam działa identycznie pod kątem scope, tylko bez stu round-tripów synchronicznych.

FP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0
Waldemar Lipkowski napisał(a):

KSeF, PHP, N1ebieski. Srodowisko testowe, nasze certyfikaty dla testowego, działa wszystko, QR, UPO, itd. Środowisko produkcyjne, certyfikay klienta, błąd: N1ebieski\KSEFClient\Exceptions\StatusException #415: Uwierzytelnianie zakończone niepowodzeniem @ jakaśścieżkacośtamcośtam/vendor/n1ebieski/ksef-php-client/src/ClientBuilder.php:410
Właściciel certyfikatu twierdzi że certyfikat jest używany do autoryzacji w kilku innych miejscach i wygląda na to że tylko my mamy z nim problem.

Waldku, ten 415 w czasie auth produkcyjnego zwykle leci z jednego z czterech powodów i wszystkie wyglądają identycznie po stronie klienta, więc bez dumpów ciężko odróżnić.

Najczęstsze u mnie: certyfikat wystawiony dla środowiska testowego próbuje się autoryzować w prod. Test KSeF akceptuje certy z testowego CCK, prod chce certy z produkcyjnego (inne CA, inny łańcuch zaufania). Wbij sobie w skrypt jeden printf z odciskiem palca certu (sha256 fingerprint plus issuer DN) i porównaj z tym, co masz wgrane w produkcyjnym kontekście MF. Jak issuer się różni między tym, co używasz lokalnie, a tym, co MF widzi, masz odpowiedź.

Drugi typowy przypadek to scope NIP. Cert musi być wystawiony na NIP firmy, w imieniu której się logujesz, albo musisz mieć ZAW-FA z tej firmy na NIP twój. W produkcji ZAW-FA pełnomocnictwo musi być realnie złożone i zaakceptowane, w testowym środowisku KSeF to omija (auto-permissive). Sprawdź w panelu KSeF prod, czy widzisz pełnomocnictwo dla swojego NIP na ten konkretny NIP klienta.

Trzecia rzecz, która mnie ugryzła przy migracji z testu na prod: skew zegara. KSeF waliduje timestamp na podpisie i jak masz lokalnie zegar dryfujący o dwie minuty w którąkolwiek stronę, leci dokładnie 415 z bardzo niewiele mówiącym opisem. ntpdate -q pool.ntp.org plus porównanie z nagłówkiem Date z challenge endpointa rozstrzyga w sekundę.

Czwarta, rzadsza: kontekst w body. n1ebieski/ksef-php-client buduje payload z contextIdentifier, sprawdź, czy faktycznie wysyłasz NIP w polu type=onip i value=10cyfr bez kresek/spacji. Widziałem przypadek, gdzie biblioteka brała sformatowany NIP z bazy (123-456-78-90) i KSeF leciał 415 zamiast walidacji formatu.

Jak masz odpalony tryb verbose, wrzuć tu surowy response body z auth/ksef-token plus polling z auth/{refNumber}. Pole details w odpowiedzi zwykle mówi konkretnie, co nie pasuje (NIP context, expired cert, signature invalid), tylko domyślnie trzeba je wyciągnąć z error response, bo klient PHP rzuca samo StatusException bez zawartości.

FP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0
ixar napisał(a):

Na ksef/web - produkcja, faktura ma parametry:

Data wystawienia: 31.03.2026
Data zapisania w KSeF: 01.04.2026
Data otrzymania: 01.04.2026

natomiast metadata faktury wygląda tak:

(...)
"isTruncated": false,
"permanentStorageHwmDate": "2026-04-01T02:00:00+00:00",
"invoices": [
{
"ksefNumber": "------------",
"invoiceNumber": "---------",
"issueDate": "2026-03-31",
"invoicingDate": "2026-03-31T22:44:42.516586+00:00",
"acquisitionDate": "2026-03-31T22:44:43.141297+00:00",
"permanentStorageDate": "2026-03-31T22:44:43.468527+00:00",
"seller": {
(...)

i czegoś nie rozumiem, czy data otrzymania nie powinna wskazywać na dzień 31.03.2026 (acquisitionDate) ???

może coś skopałem ze strefą czasową??

ixar, KSeF stempluje timestampy w UTC, więc acquisitionDate to UTC, nie czas lokalny. Jeśli wysłałeś fakturę 31.03 wieczorem (powiedzmy 22:30 CEST), KSeF zapisał 20:30 UTC tego samego dnia. Ale jeśli wysłałeś bliżej północy lokalnego czasu (np. 00:30 CEST 1.04), to po stronie KSeF była już 22:30 UTC poprzedniego dnia, czyli 31.03, i data się "przesunęła" w drugą stronę.

W twoim konkretnym przypadku 01.04 02:00 UTC+0 oznacza, że KSeF zarejestrował zdarzenie o 02:00 UTC 1 kwietnia, czyli 04:00 lokalnego czasu (CEST). Warto sprawdzić dokładny moment kliknięcia "wyślij" w logach klienta — jeśli to było już po północy lokalnie, to się zgadza i błędu nie ma.

Pułapka jest w tym, że KSeF UI w niektórych miejscach pokazuje raw UTC, a w innych konwertuje na czas lokalny, więc biura często widzą to pomieszane w jednym ekranie. U nas w FakturaFlow zrobiliśmy w panelu jednoznaczne oznaczanie, czy timestamp jest UTC czy lokalny, bo inaczej księgowi nie wiedzą, gdzie jest data fizycznej wysyłki, a gdzie data po stronie systemu. Jak chcesz porównać dokładnie co KSeF widzi, pociągnij surowy XML z acquisitionDate plus timestamp w UPO — oba są w UTC i oba powinny być spójne.

JR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Ktoś wie jak ustawić parametry żeby pobberało paczkę w trybie przyrostowy, od ostatniego pobrania?

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 119
0

Kurde - wkurzają mnie już te faktury z podwójnie zakodowanymi znakami (np: <Nazwa>Firma&amp;#x0D;Spółka zoo<Nazwa>) ale nie mam pomysłu czy da się wprowadzić zasadę, która pozwoli na unikanie takich kwiatków... Nie podoba mi się post-procesowanie danych na zasadzie "aha - pewnie chcieli przełamanie linii zrobić" i tak sobie myślę czy da się wprowadzić walidację w xsd ale zakładając, że ktoś może chcieć np wystawić fakturę na "Koszulka z nadrukiem &amp;#x0D;"
generated_image.jpg
Nie chcę zaczynać na gh tej dyskusji bo nie wiem nawet co zaproponować. Macie może jakiś pomysł? A może nie zgadzacie się z tym co wypisuję?

Mirosław Tomczyk
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Jeszcze jedna uwaga do https://github.com/asoio/ksef-xslt/blob/main/kseffaktura_fa(3).xsl

1.Konwertować do utf-8
2.zmienić w wew, css czcionkę (html{font-size:22px) na np 40px <style type="text/css">
table{border-collapse:collapse;}tr,td,th,thead,tfoot,td div{page-break-inside:avoid;}thead{display:table-header-group;}tfoot{display:table-row-group;}tr{page-break-inside:avoid;}html{font-size:22px;}a{text-decoration:none;}.keep-together{page-break-inside:avoid;}.break-before{page-break-before:always;}.break-after{page-break-after:always;}.to-right{float:right;}.to-right--with-margin{margin-left:.5rem;width:100%;}.to-left{float:left;}.to-left--with-margin{margin-right:.5rem;width:100%;}.main-header{width:100%;}.ksef-title{font-family:"Montserrat";font-weight:600;line-height:21px;font-size:1rem;color:#343a40;}.ksef-title-wrapper{width:50%;float:left;}.ksef-title--bold{font-weight:700;}.ksef-title--red{color:#dc0032;}.header-info{float:right;width:100%;}.header-info-wrapper{width:50%;float:right;}.header-info .label-data-info{color:#343a40;display:block;text-align:right;float:left;width:100%;}.header-info .label-data-info--value{font-family:"Open Sans";font-weight:400;font-size:.625rem;line-height:18px;}.header-info .label-data-info--value2{font-family:"Montserrat";font-weight:700;font-size:1.33rem;line-height:35px;overflow-wrap:break-word;word-wrap:break-word;hyphens:auto;white-space:normal;}.header-info .label-data-info--name{font-family:"Open Sans";font-weight:600;font-size:.625rem;margin-right:.1rem;}.header-title{float:left;width:100%;}.header-title--label{font-family:"Montserrat";font-weight:700;font-size:1.125rem;line-height:24px;margin-bottom:.9rem;margin-top:.9rem;display:block;}.section-data{width:100%;float:left;page-break-inside:avoid;}.section-data--margin-top{margin-top:.5rem;}.section-data__header{width:100%;display:block;}.section-data__header--h1{font-family:"Open Sans";font-weight:700;font-size:.75rem;line-height:15px;margin:.5rem 0;float:left;}.section-data__header--table{font-family:"Open Sans";font-weight:600;font-size:.562rem;margin:.5rem 0;}.section-data__wrapper-left{width:50%;float:left;padding-right:.5rem;box-sizing:border-box;}.section-data__wrapper-right{width:50%;float:right;padding-right:.5rem;box-sizing:border-box;}.section-data .label-data-info{color:#343a40;display:block;text-align:left;line-height:16px;}.section-data .label-data-info--text-center{text-align:center;}.section-data .label-data-info--height1{margin-top:.6rem;}.section-data .label-data-info--height2{margin-top:3rem;}.section-data .label-data-info--inline{display:inline;}.section-data .label-data-info--header{font-family:"Open Sans";font-weight:700;font-size:.562rem;line-height:16px;}.section-data .label-data-info--single{font-family:"Open Sans";font-weight:400;font-size:.625rem;line-height:18px;}.section-data .label-data-info--half{width:50%;float:left;padding-right:20px;box-sizing:border-box;}.section-data .label-data-info--half:nth-child(even){float:right;}.section-data .label-data-info--right{margin-top:.5rem;float:right;}.section-data .label-data-info--vertical-space{margin-top:.6rem;margin-bottom:.1rem;}.section-data .label-data-info--bottom-space{margin-bottom:.1rem;}.section-data .label-data-info--name{font-family:"Open Sans";font-weight:600;font-size:.562rem;margin-right:.1rem;}.section-data .label-data-info--name2{font-family:"Open Sans";font-weight:700;font-size:.75rem;margin-right:.1rem;}.section-data .label-data-info--value{font-family:"Open Sans";font-weight:400;font-size:.562rem;overflow-wrap:break-word;word-wrap:break-word;hyphens:auto;white-space:normal;}.section-data .label-data-info--value2{font-family:"Open Sans";font-weight:400;font-size:.75rem;overflow-wrap:break-word;hyphens:auto;white-space:normal;}.section-data .label-data-info--value3{font-family:"Open Sans";font-weight:400;font-size:.562rem;overflow-wrap:break-word;word-wrap:break-word;hyphens:auto;white-space:normal;margin-right:.1rem;}.section-data .label-data-info--italic{font-family:"Open Sans";font-weight:400;font-size:.562rem;font-style:italic;}.section-data__qr-wrapper{float:left;padding-right:1.5rem;padding-top:.3rem;padding-bottom:.5rem;width:207px;}.line-basic{width:100%;margin-top:.9rem;margin-bottom:.5rem;float:left;border:none;height:1px;background-color:#bababa;}.table-basic{margin-top:.5rem;border-collapse:collapse;border-spacing:0;table-layout:fixed;width:100%;}.table-basic__blank_row{height:1.1rem !important;background-color:#fff;}.table-basic--large-margin{margin-top:1.1rem;}.table-basic--no-margin{margin-top:0;}.table-basic--auto{width:auto;}.table-basic--wide{width:100%;}.table-basic__header-border{border-bottom:2px solid #343a40;}.table-basic__header{border:1px solid #bababa;padding:8px;text-align:left;background-color:#f6f7fa;font-family:"Open Sans";font-style:normal;font-weight:600;font-size:.5rem;line-height:12px;}.table-basic__header--lp{width:50px;}.table-basic__header--percent80{width:80%;}.table-basic__header--percent67{width:67%;}.table-basic__header--medium-size{min-width:300px;}.table-basic__header--small-txt{text-align:left;font-family:"Open Sans";font-style:normal;font-weight:400;font-size:.5rem;line-height:12px;display:block;}.table-basic__header--nowrap{white-space:nowrap;}.table-basic__cell{border:1px solid #bababa;padding:8px;text-align:left;font-family:"Open Sans";font-style:normal;font-weight:400;font-size:.5rem;line-height:15px;overflow-wrap:break-word;word-wrap:break-word;hyphens:auto;white-space:normal;}.table-basic__cell--to-right{text-align:right;}.table-basic__header--to-right{text-align:right;}
</style>

  3.Drukować z przeglądarki (więcej ustawień->skala->układ pionowo,....)
  4.W gotowy html można wstrzyknąć dodatkowe treści(kody qr,nrksef,.....)

  (reszta formatowań działa, transformata ok)
GR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
FP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

@rafdeer: u nas to samo bolało. Idziemy dokładnie tak jak Dzyszla pisze, czyli jednokrotne dekodowanie zgodnie z konwencją XML i zostawiamy semantykę co tam była. Ale na intake'u dorzucamy soft-warning, bo w 95% przypadków jak po dekodowaniu w polu tekstowym widzisz literał &amp; albo &#x[0-9A-F]+;, to znaczy że źródło escape'owało dwa razy. Najczęściej dlatego, że template engine wystawcy najpierw przepuszcza tekst przez htmlspecialchars przed serializacją XML, a potem parser jeszcze raz puszcza encje.

Heurystyka, która u mnie łapie zdecydowaną większość takich faktur, działa po jednokrotnym decode na surowym stringu pola:

Kopiuj
/&amp;|&#x[0-9A-Fa-f]+;|&#\d+;/

Jeśli matchnie w Nazwa, AdresL1, OpisPozycji albo w stopkach uwag, podpinam ostrzeżenie typu "pole wygląda na podwójnie escape'owane" i pokazuję obie wersje (raw i jeszcze-raz-decoded) zanim faktura idzie do księgowego. Nie usuwam automatycznie, bo trafiają się legitne case'y: produkt z &amp; w nazwie SKU, regulamin z literalnym &lt;, nazwa firmy ze znakiem & itd.

Co do walidacji w xsd, teoretycznie da się wcisnąć xs:restriction z pattern="[^\r\n\t]*" na pola tekstowe, ale walidator dostaje już zdekodowaną wartość, więc "Firma\rSpółka zoo" przejdzie jak każdy inny string. CIRFMF tego nie restryktuje i KSeF na produkcji też puszcza. U mnie skończyło się na walidatorze poza xsd, w pipeline'ie, na surowym XML-u przed wysyłką, plus ten warning na wejściu.

Ciekawi mnie czy ty łapiesz to po stronie odbiorczej (czyli po pobraniu z KSeF) czy też u źródła, na własnym wystawianiu? Bo po stronie odbiorczej zostaje tylko alarmowanie księgowej, nie ma jak naprawić u wystawcy.

Dzyszla
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 257
0

Tak sobie myślę... Skoro KSeF wpuszcza każdy technicznie poprawny NIP, to jak założę firmę to nagle może się okazać, że mam już kupę faktur w KSeF na siebie wystawionych. Co więcej, nie wszystkie pewnie będą skorygowane.
Czy mogę teraz sobie odliczyć je? :D

FP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Mirosławie, działa, dopóki w żadnym polu nie pojawi się znak biznesowy z tej trójki. U mnie to się ugryzło raz na nazwie firmy "Anna & Maria s.c." (faktycznie taka istnieje w bazie GUS) i raz na opisie pozycji typu "<2 dni" w usługach IT, gdzie po replace zostało "2 dni" i klient zauważył przy reklamacji.

Bezpieczniejsza opcja to escape, nie strip. W TSQL można sobie dorobić małą funkcję skalarną:

Kopiuj
CREATE FUNCTION dbo.XmlEscape(@s NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS BEGIN
  RETURN REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@s,
    '&','&amp;'),
    '<','&lt;'),
    '>','&gt;'),
    '"','&quot;'),
    '''','&apos;')
END

Albo zrezygnować z ręcznego concatu i wystawić xml przez FOR XML PATH('') (T-SQL sam robi escape) albo xml-typed temp table. Twój sposób jest okej dla 99% faktur, ale ten 1% trafia akurat zwykle u klientów z najbardziej ciekawymi nazwami.

Co do KSeF samego, ważne że schema FA(3) waliduje encoded XML, więc po proper escape wszystko przechodzi bez zmian semantycznych. Strip oznacza, że w UPO i fakturze widnieje już zmodyfikowana wartość, której odbiorca nie widział na umowie.

TK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 33
0

Cześć Panie i Panowie KSeF-owcy :). Mam pytanie o wystawianie faktur dla podmiotu z oddziału. Czy jak faktura jest wystawiana z oddziału który ma IDWew to co trzeba robić żeby faktury były widoczne dla tego oddziału a nie tylko dla głównego konta? Czy trzeba dodawać Podmiot3 w roli wystawcy czy trzeba mieć jakoś spoecjalnie ustawione filtry wyszukiwania aby widzieć wystawione w ramach swojego oddziału faktury. Dzięki z góry za odpowiedź :).

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 119
1

Kurde - 10 dni czekać... Jakby ktoś miał dość "Panie - nie ma stawek podatku Panie!" (https://github.com/CIRFMF/ksef-pdf-generator/issues/108)
W PDF-functions.ts podmieniłem getTStawkaPodatku.

Kopiuj
export function getTStawkaPodatku(code: string, version: 1 | 2 | 3 | 'RR', P_PMarzy?: string): string {
  let TStawkaPodatkuVersioned: Record<string, string> = {};

  switch (version) {
    case 1:
      TStawkaPodatkuVersioned = TStawkaPodatku_FA1;
      break;
    case 2:
      TStawkaPodatkuVersioned = TStawkaPodatku_FA2;
      break;
    case 3:
      TStawkaPodatkuVersioned = TStawkaPodatku_FA3;
      break;
    case 'RR':
      TStawkaPodatkuVersioned = TStawkaPodatku_FARR;
      break;
  }
  if (!code && P_PMarzy === '1') {
    return i18n.t('invoice.footer.margin'); // 'marża'
  }

  const translationKey = TStawkaPodatkuVersioned[code];
  if (translationKey) {
    return i18n.t(translationKey); 
  }

  return code; 
}

Trzeba ofkors dodać

Kopiuj
import i18n from "i18next";

Sprawdziłem tylko dla FA3 jbc

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3900
0

Pytanie o węzeł NrVatUE, czy wy tam wstawiacie NIP z przedrostkiem kraju (DE,ATU itd.) bo do tej pory tak wstawiałem czyli z prefiksem kraju.
Klient jednak wystawia fakturę na holenderski NIP który ma taką budowę NL111111111B01 co narusza pattern dla tego pola: (\d|[A-Z]|\+|\*){1,12}, więc zastanawiam się czy ten prefix dla NIP usunąc i wstawić bez, czy zgłaszać do MF, czy usuwać dla wszystkich nipów UE.

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 119
0

Żartopost zainspirowany wzmianką o kodzie kraju Grecji.

  • Przy weryfikacji faktury duplikaty numeru są wykrywane case insensitive.
  • Można wpisywać greckie znaczki w numerze faktury.
  • Mamy sobie sigmę (https://pl.wikipedia.org/wiki/Sigma)

Po wystawieniu (przyjęta w ksef) faktury o numerze

Kopiuj
Σ/1/2026Σ

nie można wystawić faktury o numerze

Kopiuj
σ/1/2026Σ

ponieważ jest to duplikat, ale fakturę o numerze

Kopiuj
Σ/1/2026ς

już można i nie jest ona duplikatem

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 119
0

Na wszelki wypadek tu też daję znać:
W ramach Propozycja: model zdarzeń biznesowych i synchronizacja zmian dla faktur #794 jest ogłoszenie o konsultacjach i na githubie pojawiło się info, że nie zaszkodzi wysłać mailowo swoich komentarzy (nawet jeśli są już na gh) na email podany w ogłoszeniu: https://ksef.podatki.gov.pl/komunikaty-techniczne/konsultacje-modelu-zdarzen-biznesowych-i-synchronizacja-zmian-dla-e-faktur-w-ksef-20/

R2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
0

Dobra, mamy KSeF. Jestem otwarty na totalną zmianę współpracy z księgowością. Jestem przedsiębiorcą i wkurza mnie, że nadal jesteśmy kasowani za liczbę faktur w miesiącu. Mamy ich setki sprzedażowych i kilkadziesiąt zakupowych - to się kompletnie nie skaluje i wiecznie są problemy z jakością.

Ja to widzę tak: faktury pobierane są z KSeF. Podpinamy wyciągi z rachunków bankowych i operatorów płatności. Program księgowy robi matchowanie - pokazuje, że brakuje jakiejś faktury, bo był przelew, ogarnia faktury płacone w ratach, wskazuje nieopłacone itd.

Księgowy przestaje być "wklepywaczem", a staje się gościem od kontroli i doradztwa - wynajmuję go na 2–3 godziny w miesiącu, siadamy i przeglądamy wszystko razem.

Słowem: jestem gotowy płacić dużo za soft, który to zautomatyzuje, i dużo za kilka godzin pracy ogarniętego doradcy. A i tak będę miał lepszą usługę niż "tradycyjne księgowanie", mniej błędów i finalnie niższy koszt.
Chcę mieć 100% kontoli i wglądu w procesu księgowania. Teraz to jest black box. Wkładam faktury dostaję kwotę do zapłaty.
Kto ma rozwiązanie dla mnie? Czyj soft to realnie umożliwia? Chętnie dopowiem więcej szczegółów.

Dzyszla
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 257
0

Kolejny przykład, że DEMO jednak nie jest żadnym odzwierciedleniem produkcji, wbrew wielu zapewnieniom:
https://github.com/CIRFMF/ksef-docs/issues/787#issuecomment-4387469323

N1ebieski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 42
0

Wyszedł update 2.5.0 > https://github.com/CIRFMF/ksef-docs/blob/main/api-changelog.md#wersja-250 i wygląda mi na to, że znów rozpierdzielili kontrakt:

Klucze publiczne KSeF (rotacja i selekcja kluczy)
Wprowadzono przekazywanie selektora publicKeyId w żądaniach do operacji, w których klient szyfruje dane kluczem publicznym KSeF - umożliwia to jednoznaczną identyfikację użytego klucza oraz poprawną i automatyczną obsługę re-certyfikacji/rotacji. Rozszerzenie dotyczy endpointów:

publicKeyId co prawda jest opcjonalny, ale co będzie gdy go nie podam, a oni zrobili rotację certa i w okresie przejściowym będą obowiązywać oba?

ZB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 89
0

Dramat z JST!
Niech mi ktoś poradzi.
Jest Szkoła z własnym NIP, podlega jako JST pod Gminę z innym NIP.
Czy szkoła aby pobierać swoje faktury i wystawiać faktury ma uwierzytelniać się do KSeF w kontekście swojego NIP czy NIP Gminy?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.