Steuerformular
Die Steuerdaten Ihres Kunden, schon bei der Eingabe mit denselben Regeln validiert, die Cord bei der Rechnungsstellung anwendet.
Das Fiscal Element erfasst die Steuerdaten des Rechnungsempfängers: an wen die Rechnung geht. Es validiert im Browser mit demselben Code, mit dem der Server von Cord vor dem Speichern validiert. Was das Formular akzeptiert, ist also genau das, was Cord akzeptiert. Ein RFC mit falsch eingegebener Prüfziffer fällt schon bei der Eingabe auf und nicht erst Tage später, wenn die Stempelung ihn ablehnt.
Welche Felder es abfragt und was es validiert
| Land | Felder | Regeln |
|---|---|---|
Mexiko (MX) |
RFC, Name oder Firmenname, Steuerregime, CFDI-Verwendung, steuerliche Postleitzahl | Format, Datum und Prüfziffer des RFC. Der RFC-Typ (12 Zeichen: juristische Person; 13: natürliche Person) filtert die zulässigen Steuerregime und Verwendungen. XAXX010101000 und XEXX010101000 (allgemeine Öffentlichkeit und Ausländer) legen das Steuerregime 616 und die Verwendung S01 fest. Hinweis, wenn der Firmenname einer juristischen Person den Rechtsformzusatz enthält („S.A. de C.V.“). Postleitzahl mit 5 Ziffern. |
Spanien (ES) |
NIF / CIF, Name oder Firmenname, Postleitzahl | Kontrollbuchstabe von NIF und NIE sowie Kontrollziffer des CIF. Postleitzahl mit 5 Ziffern. |
Vereinigte Staaten (US) |
EIN, rechtlicher Name, ZIP | Gültige EIN. ZIP mit 5 Ziffern oder 12345-6789. |
| Anderes Land | Steuernummer, Name | Es wird nur geprüft, ob die Angaben vorhanden sind, mit einem Hinweis unsupported_country. |
Steuerregime im Katalog: 601, 603, 605, 606, 612, 616, 620, 621 und 626. CFDI-Verwendungen: G01, G03, I01, I02, I04, I08, S01 und CP01.
Ist die Eingabe gültig, ist das Ergebnis der normalisierte Rechnungsempfänger:
{
"country": "MX",
"tax_id": "EKU9003173C9",
"legal_name": "ESCUELA KEMPER URGATE",
"regimen_fiscal": "601",
"uso_cfdi": "G03",
"cp_fiscal": "42501"
}
Außerhalb Mexikos kommen regimen_fiscal und uso_cfdi als null zurück.
Web Component: <cord-fiscal-form>
Der Import von @flouviahq/elements registriert <cord-fiscal-form> zusammen mit <cord-quote> und <cord-invoice>.
<script type="module" src="https://unpkg.com/@flouviahq/elements/dist/index.mjs"></script>
<form id="signup" method="post" action="/clients">
<cord-fiscal-form name="recipient" country="MX" lang="en"></cord-fiscal-form>
<button type="submit">Save</button>
</form>
Es ist ein formularassoziiertes Element: Innerhalb eines <form> liefert es seinen Wert unter seinem Attribut name (den normalisierten Rechnungsempfänger als JSON) und blockiert das Absenden, solange Fehler bestehen – genau wie ein <input required>. Der Browser zeigt den ersten Fehler neben dem Feld an, das ihn verursacht. In Safari vor Version 16.4, das diese API nicht hat, funktioniert das Formular, nimmt aber nicht am Absenden teil: Lesen Sie value selbst aus.
| Attribut | Werte |
|---|---|
country |
MX (Standard), ES, US oder ein anderer ISO-Code. Eine Änderung behält das bereits Eingegebene bei. |
lang |
es, en, pt, fr oder de; jeder andere Wert fällt auf en zurück. Ohne Angabe das lang Ihrer Seite. |
name |
Der Name, unter dem es seinen Wert an das Formular liefert. |
| Eigenschaft oder Methode | Was sie tut |
|---|---|
value |
Der normalisierte Rechnungsempfänger, wenn gültig; andernfalls null. |
state |
Der vollständige Zustand: Werte, berührte Felder, sichtbare Fehler, verfügbare Steuerregime und Verwendungen. |
setValues(data) |
Lädt Anfangswerte, zum Beispiel aus einem bereits gespeicherten Kunden. |
submit() |
Zeigt alle Fehler an und gibt den Rechnungsempfänger zurück, wenn er gültig ist, sonst null. |
<script type="module">
const fiscal = document.querySelector('cord-fiscal-form');
fiscal.setValues({ tax_id: 'EKU9003173C9', legal_name: 'ESCUELA KEMPER URGATE', cp_fiscal: '42501' });
fiscal.addEventListener('fiscalvalid', (e) => {
console.log('Recipient ready:', e.detail);
});
fiscal.addEventListener('fiscalchange', (e) => {
console.log('Visible errors:', e.detail.visibleErrors);
});
</script>
| Ereignis | detail |
|---|---|
fiscalchange |
Der vollständige Zustand, bei jeder Änderung. |
fiscalvalid |
Der normalisierte Rechnungsempfänger, jedes Mal, wenn er gültig wird. |
Fehler werden nur bei Feldern angezeigt, die die Person bereits berührt hat, oder nach submit() bei allen.
Styling
Das Formular lebt in einem Shadow DOM. Sie passen es mit Parts und Variablen an:
cord-fiscal-form::part(label) { font-weight: 500; }
cord-fiscal-form::part(input) { min-height: 48px; }
cord-fiscal-form::part(error) { font-size: 13px; }
cord-fiscal-form {
--cord-color-primary: #0a192f;
--cord-border-radius: 10px;
}
| Part | Element |
|---|---|
field |
Der Container jedes Felds. |
label |
Die Beschriftung. |
input |
Das Textfeld oder die Auswahlliste. |
error |
Die Fehlermeldung eines Felds. |
warning |
Der Hinweis eines Felds (zum Beispiel der Rechtsformzusatz im Firmennamen). |
Variablen: --cord-font-family, --cord-color-text, --cord-color-text-secondary, --cord-color-input, --cord-color-primary, --cord-color-danger und --cord-border-radius.
React: <CordFiscalForm> und <CordBuilder fiscal>
import { CordFiscalForm } from '@flouviahq/elements/react';
export function TaxDetails({ onReady }: { onReady: (recipient: unknown) => void }) {
return (
<CordFiscalForm
country="MX"
locale="en"
title="Billing details"
initial={{ tax_id: 'EKU9003173C9' }}
onValid={onReady}
/>
);
}
| Prop | Detail |
|---|---|
country |
Standardmäßig MX. |
initial |
Anfangswerte. |
locale |
es, en, pt, fr oder de. |
title |
Überschrift des Abschnitts. |
onValid |
Wird mit dem normalisierten Rechnungsempfänger aufgerufen, jedes Mal, wenn er gültig wird. |
className, style |
Für den Container. |
Im Builder fügt fiscal den Abschnitt hinzu, und der Rechnungsempfänger wird mit dem Angebot übertragen:
<CordProvider publishableKey="pk_test_...">
<CordBuilder fiscal />
</CordProvider>
Das Land stammt aus der Steuerkonfiguration Ihrer Organisation. Ist der Rechnungsempfänger nicht gültig, sendet der Builder nicht ab und markiert die fehlerhaften Felder. Wenn Sie den Zustand selbst steuern möchten, gibt useFiscalForm() denselben Zustand zurück wie die Komponente.
Vue: useCordFiscalForm
<script setup>
import { useCordFiscalForm } from '@flouviahq/elements/vue';
const { state, form } = useCordFiscalForm({ country: 'MX' });
function save() {
const recipient = form.submit();
if (recipient) console.log(recipient);
}
</script>
<template>
<label>
RFC
<input :value="state.values.tax_id" @input="form.set('tax_id', $event.target.value)" @blur="form.touch('tax_id')" />
</label>
<p v-for="e in state.visibleErrors" :key="e.field">{{ e.field }}: {{ e.code }}</p>
<button @click="save">Save</button>
</template>
state ist eine ShallowRef mit dem Zustand des Formulars; form ist das Headless-Formular (set, touch, submit). Um die Texte der einzelnen Fehler darzustellen, verwenden Sie fiscalText() aus @flouviahq/elements/headless.
Validierungscodes
| Code | Bedeutung |
|---|---|
required |
Die Angabe fehlt. |
too_long |
Überschreitet das Maximum (20 Zeichen für die Steuernummer, 300 für den Namen). |
invalid_tax_id |
Die Steuernummer ist für das Land nicht gültig. |
invalid_postal_code |
Die Postleitzahl entspricht nicht dem Format des Landes. |
regimen_not_for_persona |
Das Steuerregime passt nicht zum RFC-Typ. |
uso_not_for_persona |
Die CFDI-Verwendung passt nicht zum RFC-Typ. |
generic_requires_616_s01 |
Ein generischer RFC erfordert das Steuerregime 616 und die Verwendung S01. |
legal_name_has_regime_suffix |
Hinweis: Der Firmenname enthält den Rechtsformzusatz. |
unsupported_country |
Hinweis: Für dieses Land wird nur geprüft, ob die Angabe vorhanden ist. |
Auf der Serverseite
-
POST /api/v1/cotizacionesakzeptiert den Rechnungsempfänger incliente.fiscal. Ist er nicht gültig, antwortet die API mit400,code: "invalid_fiscal_data"und der Liste inissues:{ "error": "Los datos fiscales del cliente no son válidos.", "code": "invalid_fiscal_data", "issues": [{ "field": "tax_id", "code": "invalid_tax_id" }] } -
@flouviahq/nodeexportiertvalidateFiscalReceptor(),validRfc(),validSpainTaxId()undvalidEin(), damit Sie auf Ihrem Server mit demselben Code validieren können. -
Der MCP-Server hat das Tool
validar_datos_fiscales.