Jeg blev træt af at søge efter fakturaer, så jeg byggede en API, der genererer fem dokumenttyper
Søgningen efter "gratis fakturaer" er blevet udført så mange gange på tværs af så mange browsere, at det skulle kvalificere sig som en diagnostisk indikator for småvirksomhedsejerskap. Mønstret er altid det samme. En ny klient tilmelder sig, eller et nyt projekt begynder, eller den kvartalsvise faktureringscyklus kommer omkring, og nogen sætter sig ned for at udarbejde en faktura. Den eksisterende faktura, hvis den findes, er enten væk i en mappestruktur, som ingen husker at organisere, eller den blev bygget i en version af Microsoft Word, der ikke længere gengives korrekt, eller den tilhører en anden forretningsenhed og kræver betydelige ændringer, før den kan bruges til den aktuelle. Så søgningen begynder igen. "Professionel fakturaer." "Gratis fakturaer PDF." "Fakturaer med skatteberegning." Side efter side af resultater, der tilbyder fakturaer, der er næsten rigtige, men aldrig nøjagtigt rigtige, hver kræver tyve minutters justering, før de faktisk kan bruges.
At drive tre forskellige virksomheder med tre forskellige faktureringskrav omdannede denne lejlighedsvise irritation til en tilbagevendende operationel byrde. Hver virksomhed havde forskellige brandling, forskellige skatteforpligtelser, forskellige linjeemnestrukturer og forskellige dokumentnummeringsforpligtelser. En faktura, der virkede til en virksomheds servicebaserede fakturering, var helt forkert til en andens produktbaserede fakturering. At vedligeholde tre separate sæt fakturaer, hver i et tekstbehandlingsformat, der var tilbøjeligt til at formattere korruption og formelsfejl, brugte timer hver måned, der kunne have været brugt på faktisk produktivt arbejde. Frustrationen var ikke med nogen enkelt faktura. Det var med erkendelsen af, at hele tilgangen til skabelonbaseret fakturering var fundamentalt skrøbelig og ikke kunne skaleres på tværs af flere virksomheder uden at blive en vedligeholdelsesbyrde.
Alternativet, der til sidst opstod, var at holde op med at tænke på fakturaer som dokumenter, der skal designes, og begynde at tænke på dem som data, der skal gengives. Dataene, dvs. hvem, hvad, hvornår og hvor meget af hver faktureringshændelse, er allerede kendt på det tidspunkt, hvor fakturaen skal produceres. Hvad der mangler, er kun gengivelsen: transformationen af disse data til et professionelt dokument med korrekt layout, beregninger og formatering. Den gengivelse er nøjagtigt hvad en API kan gøre, og den kan gøre det konsekvent, korrekt og øjeblikkeligt for hver faktura, på tværs af hver virksomhed, uden en skabelon.
Fem dokumenttyper og hvorfor hver enkelt eksisterer
Fakturerings-API'et på yeb.to genererer fem forskellige dokumenttyper, hver tjener til et specifikt formål i fakturerings- og regnskabsarbejdsgangen. At forstå, hvorfor fem typer er nødvendige i stedet for blot en, forklarer meget om hvordan virksomhedsfakturering faktisk fungerer i praksis.
Proformaen kommer først i de fleste faktureingssekvenser. Det er et foreløbigt dokument, der sendes, før varer leveres eller tjenester udføres, med angivelse af hvad der skal faktureres og til hvilken pris. Proformaer bruges almindeligvis i international handel, hvor køber skal arrangere betaling eller importdokumentation, før varerne forlader sælgers lager. De bruges også indenlandsk som formelle tilbud, der har mere vægt end et uformelt prisestimat. Proformagenererings-endepunktet producerer disse dokumenter med alle de felter en proforma kræver: sælger- og køber-detaljer, itemiserede varer eller tjenester, prissætning og vilkår, men klart markeret som en proforma i stedet for en momsopgørelsefaktura for at undgå forvirring i regnskabsposterne.
Standard fakturaen er det primære faktureringsdokument, den som de fleste mennesker tænker på, når de hører ordet "faktura." Det registrerer en afsluttet transaktion, angiver det skyldige beløb og fungerer som det juridiske grundlag for at anmode om betaling. Momsopgørelser inkluderer moms eller salgsomkostningsberegninger, og API'en håndterer flere skattesatser inden for en enkelt faktura for jurisdiktioner, der anvender forskellige satser på forskellige produktkategorier. Dette er dokumenttypen, der bruges hyppigst og som de fleste fakturaer søger at finde.
Debitnotaer og kreditnotaer håndterer justeringer efter, at den oprindelige faktura er udstedt. En debitnota dokumenterer yderligere gebyrer, måske fordi den oprindelige faktura underbyggede for forsendelse, eller fordi der blev udført yderligere arbejde ud over det oprindelige område. En kreditnota dokumenterer reduktioner, såsom returnerede varer, overbetaling eller aftalt rabatter, der blev anvendt bagefter. Begge refererer til den oprindelige faktura, de ændrer, og bevarer revisionsslæben, som regnskabsregler kræver. Endelig bekræfter kvitteringen, at betaling er modtaget, hvilket afslutter faktureringscyklus for en bestemt transaktion.
Fra fakturaer til JSON-payload
Arbejdsgangforskellen mellem skabelonbaseret fakturering og API-baseret fakturering er dramatisk. Med skabeloner betyder det at producere en faktura at åbne en dokumentfil, erstatte pladsholder-tekst med faktiske klient- og faktureringdetaljer, kontrollere, at formler stadig fungerer efter at have tilføjet eller fjernet linjer, justere formatteringen, hvis noget blev flyttet, gemme resultatet som en PDF og arkivere både den redigerbar kilde og PDF-output. Med API'en betyder det at producere en faktura at samle en JSON-payload med faktureringsdataene og indsende den til endepunktet. Svaret er en færdig PDF. Der er ingen skabelon at åbne, ingen formel at kontrollere, ingen formatering at justere, ingen fil administration at udføre.
JSON-payloaden indeholder alt hvad API'en har brug for for at producere dokumentet: udstederens detaljer (navn, adresse, skatteidentifikationsnummer, bankoplysninger), modtagerens detaljer, fakturanummeret eller auto-nummererings-konfiguration, udstedelsesdato og forfaldsdato, linjens elementer med beskrivelser, mængder, enhedspriser og gældende skattesatser, eventuelle rabatvilkår, valuta og valgfrie noter eller betalingsinstruktioner. API'en udfører alle beregninger (linjesamlinger, subtotaler, skattebeløb, samlet total), anvender formatteringen og layoutet og gengiver det endelige dokument. Hele processen tager mindre end et sekund.
For virksomheder, der udsteder fakturaer programmatisk, måske fra en e-handelsplatform, et projektstyringsværktøj eller et brugerdefineret CRM, er API-integrationen ligetil. Systemet, der ved, hvad der skal faktureres, konstruerer JSON-payloaden fra sine egne data og kalder API'en. Ingen menneskelig indgriben er nødvendig mellem det øjeblik, en fakturerings-begivenhed finder sted, og det øjeblik, et professionelt faktureringsdokument findes. For virksomheder, der udsteder fakturaer manuelt, kan JSON samles gennem en simpel formulargrænseflade, der korresponderer med API'ens inputstruktur, stadig hurtigere og mere pålidelig end at redigere en tekstbehandlings-skabelon.
Ingen skabeloner at finde og ingen formularer at udfylde
Den dybere fordel ved API-baseret fakturering er ikke bare hastighed, men eliminering af en hel kategori af vedligeholdelses arbejde. Skabeloner bliver gamle. Virksomhedsadressen ændres, og nogen skal opdatere hver skabelon. En ny skattesats træder i kraft, og hver formel skal revideres. Virksomhedslógoen redesignes, og hver skabelon skal have det nye billede indsat i den rigtige position. Dette er små opgaver individuelt, men på tværs af tre virksomheder med flere skabelonvarianter hver, repræsenterer de et vedvarende baggrund dræn på tid og opmærksomhed.
Med API-tilgangen eksisterer ingen vedligeholdelse. Udstederens detaljer lagres som data og inkluderes i JSON-payloaden. Når adressen ændres, ændres dataene ét sted, og hver efterfølgende faktura afspejler opdateringen automatisk. Når en skattesats ændres, ændres satsparameteren i payloaden, og API'en beregner korrekt fra den første faktura under den nye sats. Når logoen ændres, ændres billede-URL'en i konfigurationen, og alle fremtidige dokumenter har det nye brand. Der er ingen skabelon fil at finde, redigere, teste og distribuere. Der er kun data, og data er nemme at opdatere.
Fraværet af formular-udfyldning er lige så betydeligt. Online faktureringtjenester, der erstattede skabeloner med webformularer, løste formatterings-problemet, men skabte en ny friktion: manuelt indtaste samme udsteder-detaljer, samme bankoplysninger, samme skatteregistreringsnumre og samme betalingsbetingelser i webformularer for hver faktura. API'en accepterer alt dette som strukturerede data, hvilket betyder, at det kan gemmes en gang og genbruges uendeligt. En virksomhed, der udsteder halvtreds fakturaer pr. måned til ti regulære kunder, kan gemme ti klient profiler og konstruere hver faktura-payload ved at kombinere en gemt klient profil med de specifikke linjeemner for den pågældende fakturerings periode. Per-faktura-indsatsen reduceres til at angive kun det, der er unikt for den særlige transaktion.
Hvorfor dette startede med tre virksomheder og ikke en
En enkelt virksomhed med enkle faktureringskrav kan klare sig med skabeloner. Frustrationen kan håndteres, når der kun er et sæt skabeloner at vedligeholde, en brand-standard at følge og en skattejurisdiktion at håndtere. Skabelon-tilgangen bryder sammen, når kompleksiteten stiger, og at drive tre separate virksomheder gav præcis den kompleksitet, der var nødvendig for at afsløre hver svaghed i den traditionelle tilgang.
Hver virksomhed opererede i en lidt forskellig sammenhæng. En udstedte service fakturaer til internationale kunder i flere valutaer, hvilket kræver fleksibel valuta håndtering og internationale bankoplysninger på alle dokumenter. En anden udstedte produkt fakturaer indenlandsk med bulgarsk moms-beregninger, der skulle overholde krav til lokale skattemyndigheder. Den tredje opererede i en hybrid model, der udstedte både service og produkt fakturaer til en blanding af indenlandske og internationale kunder. Tre forskellige skabeloner, tre forskellige beregnings krav, tre forskellige lovgivnings formatterings standarder. At vedligeholde alt dette i tekstbehandlings-filer var ikke bare ineffektivt; det var fejlbehæftet på måder, der havde rigtige regnskabs konsekvenser.
API'en løste alle tre tilfælde med en enkelt integration. JSON-payload strukturen er den samme uanset udsteder, valuta eller skattejurisdiktion. De eneste ting, der ændres, er data-værdier: forskellige udsteder detaljer, forskellige skattesatser, forskellige valutaer, forskellige linje element beskrivelser. Gengivelse-motoren håndterer variationen elegant, fordi det blev bygget til at imødekomme mangfoldighed i stedet for at være en statisk skabelon designet til ét specifikt tilfælde. Tre virksomheder, tre helt forskellige fakturerings profiler, og en API, der betjener alle tre uden nogen per-virksomhed skabelon vedligeholdelse.
Ofte stillede spørgsmål
Hvilke dokumentformater producerer fakturerings-API'en
API'en på yeb.to genererer PDF-dokumenter, der er klar til øjeblikkelig levering til kunder. PDF'er er standard formatet for virksomheds fakturaer på tværs af næsten alle industrier og jurisdiktioner, hvilket sikrer kompatibilitet med enhver kundes dokument håndtering arbejdsgang.
Kan forskellig branding anvendes på fakturaer for forskellige virksomheder
Ja. Udstederens detaljer i JSON-payloaden inkluderer brand elementer såsom logo, farveordning og virksomheds information. Hver API-opkald kan angive forskelligt brand, hvilket betyder, at fakturaer for forskellige virksomheder genereres med forskellige visuelle identiteter fra samme API-endepunkt.
Hvordan fungerer automatisk faktura nummerering
API'en understøtter automatisk sekventiel nummerering med konfigurerbare præfikser og start numre. Separate nummerings sekvenser kan vedligeholdes for hver dokumenttype og hver udstedende enhed, hvilket sikrer kontinuerlig, gap-fri nummerering, som de fleste skattemyndigheder kræver. API'en sporer den aktuelle sekvens position og øger automatisk med hver genereret dokument.
Håndteres skatte beregninger automatisk
Ja. Skatte satser angives pr. linje eller pr. faktura, og API'en beregner skat beløb, delsummer og samlet total automatisk. Flere skat satser inden for en enkelt faktura understøttes for jurisdiktioner, der anvender forskellige satser på forskellige produkt eller service kategorier.
Kan API'en generere fakturaer på andre sprog end engelsk
API'en gengiver hvad som helst tekst i JSON-payloaden, så fakturaer kan genereres på ethvert sprog blot ved at give relevant tekst (etiketter, beskrivelser, noter) på det pågældende sprog. Gengivelse motoren håndterer tegn sæt for latinsk, kyrillisk, CJK, arabisk og andre skrifter.
Hvad er forskellen mellem en debitnota og en kreditnota
En debitnota dokumenterer ekstra gebyrer tilføjet efter den oprindelige faktura blev udstedt, hvilket øger det skyldige beløb. En kreditnota dokumenterer reduktioner såsom returneringer eller korrektioner, der reducerer det skyldige beløb. Begge refererer til den oprindelige faktura og bevarer en klar revision trail til regnskabs formål.