Przejdź do głównej treści
VeriFactu

Błąd 4102 VeriFactu: «El XML no cumple el esquema. Falta informar campo obligatorio»

Błąd 4102 to błąd struktury par excellence: w XML otrzymanym przez AEAT, hiszpańską administrację podatkową, brakuje pola, którego wymaga schemat. Ponieważ jest to błąd strukturalny, AEAT odrzuca całe żądanie wraz ze wszystkimi fakturami, jakie zawierało. Z naszym modułem zwykle zobaczysz go w Odoo, zanim cokolwiek zostanie wysłane, a nie jako odpowiedź AEAT.

FlexigoTech · Odpowiada: Víctor Gómez · Aktualizacja: 4 listopada 2026

Najważniejsze

Moduł
VeriFactu
Wersje
Odoo 17, 18, 19 i 20
Sprawdzone
w kodzie źródłowym modułu, wersja 20.0 · w źródłach podanych na końcu
Czas czytania
3 min

Dlaczego zatrzymuje całe wysłanie

Dokument walidacji AEAT rozróżnia trzy rodzaje kontroli: strukturalne, składniowe i biznesowe. Kontrole strukturalne sprawdzają, czy XML jest zgodny ze schematem, z jego obowiązkowymi znacznikami, a gdy nie przechodzą, odrzucany jest cały komunikat. Takie odrzucenie wraca jako SoapFault i żadna faktura z tego żądania nie zostaje zarejestrowana, nawet poprawne.

Oficjalna lista mówi to wprost: „El XML no cumple el esquema. Falta informar campo obligatorio.” Znajduje się w pierwszej sekcji, czyli kodach odrzucających całe wysłanie.

Karta kodu 4102 VeriFactu
Kod 4102 na czerwono: odrzuca całe żądanie i w kolejce modułu zostawia wysyłkę w stanie Failed.

Co robi moduł, żeby do tego nie doszło

Jeden źle sformowany rekord pociągnąłby za sobą wszystkie pozostałe rekordy tego samego wysłania. Aby temu zapobiec, moduł waliduje każdy rekord względem oficjalnego schematu AEAT, zanim go wyśle. Zawiera kopię tego schematu, plik SuministroLR.xsd wraz z zależnościami, a ścieżka wygląda tak:

  1. Po zaksięgowaniu faktury Powstaje jej rekord fakturowania, który już się nie zmienia.
  2. Przy kolejnym przebiegu kolejki Każdy oczekujący rekord jest zamieniany na XML i walidowany względem schematu.
  3. Jeśli rekord jest niezgodny Zostaje oznaczony w Odoo jako odrzucony z komunikatem schematu, bez kodu AEAT, i nie wychodzi.
  4. Reszta Trafia do AEAT w tym samym żądaniu, bez złego rekordu.

Dzięki temu wadliwy rekord nie pociąga za sobą poprawnych faktur, które jadą razem z nim.

Jak to zobaczysz w Odoo

W kolejce wysyłki zatrzymany rekord widnieje jako Failed, a w polu ostatniego błędu jest komunikat walidatora zamiast czterocyfrowego kodu. Ten komunikat wskazuje element, którego brakuje lub który jest nie na miejscu, czyli dokładnie to, czego potrzebujesz, żeby ustalić źródło problemu. Na liście rekordów fakturowania jego status to „Rechazado AEAT”, czyli odrzucony przez AEAT, mimo że AEAT go nigdy nie widziała.

Kolejka wysyłki do AEAT pogrupowana według statusu
Kolejka pogrupowana według statusu: wysyłki w Failed to te, które nie będą ponawiane samodzielnie. Zrzut ekranu Odoo 20 z danymi demonstracyjnymi; odpowiedzi AEAT są symulowane.

Jeszcze przed schematem są dane, bez których moduł w ogóle nie zbuduje XML, i informuje o tym własnym komunikatem:

  • Company … has no NIF for Veri*Factu. gdy firma nie ma NIF.
  • Record … has no tax breakdown (Desglose) to declare. gdy rekord nie ma rozbicia podatków.

Jeśli 4102 przyjdzie z AEAT

Jeśli odpowiedź z kodem 4102 pochodzi bezpośrednio od AEAT, rekord przeszedł lokalną walidację, a AEAT odrzuciła go własnym schematem. Rozsądne wyjaśnienie jest takie, że schemat AEAT i kopia zawarta w module przestały się zgadzać. W takim przypadku ponowne wysłanie nie ma sensu: napisz na comercial@flexigobe.com z pełną odpowiedzią, polem Raw Response z kolejki, abyśmy mogli sprawdzić kopię schematu.

Czy mogę poprawić dane i ponowić?

Zależy to od tego, gdzie leżą dane. Nagłówek budowany jest przy każdym wysłaniu z danych firmy obowiązujących w tym momencie: jeśli błąd dotyczył nazwy, popraw ją i użyj opcji Reintentar Selección w Errores AEAT. Jeśli dotyczył NIF, sama poprawka nie wystarczy, bo NIF wszedł też do skrótu każdej faktury przy jej zaksięgowaniu, a ponowne wysłanie wróci z kodem 2000. Jeśli dane znajdują się w rekordzie faktury, ponowienie wyśle to samo i znów się nie powiedzie. W tych dwóch przypadkach napisz do nas.

Czy faktura przepada?

Nie. Rekord pozostaje w Odoo, połączony w łańcuch, a kolejka przetwarza oczekujące rekordy co 1 minutę, gdy tylko problem zostanie rozwiązany.

Czytaj dalej

Błędy VeriFactu z formatem wysyłki: nieczytelny XML, UTF-8 i puste żądaniaBłędy VeriFactu formatu wysyłki (4103, 4119, 4135 do 4138, 1100, 1251): nieczytelny XML, UTF-8, GET lub puste żądania i sposób wysyłki Odoo.Błędy 4113 i 4114 VeriFactu: za dużo rekordów w jednej wysyłceBłędy 4113 i 4114 VeriFactu: za dużo rekordów w jednej wysyłce. Limit 1000 na żądanie, limity poszczególnych bloków i jak Odoo 17 do 20 je respektuje.Błąd 4134 VeriFactu: „Servicio no activo”, co dzieje się z Twoimi fakturami i jak je ponownie wysłaćCo oznacza błąd 4134 AEAT w VeriFactu, dlaczego odrzuca całe wysłanie i jak ponownie przesłać faktury z Odoo 17, 18, 19 i 20 bez utraty żadnej.
Sprawdzone w kodzie źródłowym modułu (wersja 20.0) i w podlinkowanych źródłach

Źródła