@placeshakr/config 10.28.1 → 10.30.2-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/policy.js +6 -0
- package/dist/auth/policy.js.map +1 -1
- package/dist/billing/index.js +9 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/billing/pennylane.js +400 -0
- package/dist/billing/pennylane.js.map +1 -0
- package/dist/billing/permissions.js +27 -0
- package/dist/billing/permissions.js.map +1 -0
- package/dist/billing/prefill.js +208 -0
- package/dist/billing/prefill.js.map +1 -0
- package/dist/billing/types.js +3 -0
- package/dist/billing/types.js.map +1 -0
- package/dist/billing/validate.js +189 -0
- package/dist/billing/validate.js.map +1 -0
- package/dist/environment/base.js +30 -1
- package/dist/environment/base.js.map +1 -1
- package/dist/environment/decorators.js +2 -0
- package/dist/environment/decorators.js.map +1 -1
- package/dist/helpers/index.js +1 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/types/auth/policy.d.ts +2 -1
- package/dist/types/auth/policy.d.ts.map +1 -1
- package/dist/types/billing/index.d.ts +6 -0
- package/dist/types/billing/index.d.ts.map +1 -0
- package/dist/types/billing/pennylane.d.ts +191 -0
- package/dist/types/billing/pennylane.d.ts.map +1 -0
- package/dist/types/billing/permissions.d.ts +23 -0
- package/dist/types/billing/permissions.d.ts.map +1 -0
- package/dist/types/billing/prefill.d.ts +42 -0
- package/dist/types/billing/prefill.d.ts.map +1 -0
- package/dist/types/billing/types.d.ts +30 -0
- package/dist/types/billing/types.d.ts.map +1 -0
- package/dist/types/billing/validate.d.ts +48 -0
- package/dist/types/billing/validate.d.ts.map +1 -0
- package/dist/types/environment/base.d.ts.map +1 -1
- package/dist/types/environment/decorators.d.ts.map +1 -1
- package/dist/types/environment/types.d.ts +5 -0
- package/dist/types/environment/types.d.ts.map +1 -1
- package/dist/types/helpers/index.d.ts +1 -0
- package/dist/types/helpers/index.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.d.ts +478 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types.js +70 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/src/auth/policy.ts +21 -1
- package/src/billing/index.ts +5 -0
- package/src/billing/pennylane.ts +530 -0
- package/src/billing/permissions.ts +25 -0
- package/src/billing/prefill.ts +309 -0
- package/src/billing/types.ts +32 -0
- package/src/billing/validate.ts +198 -0
- package/src/environment/base.ts +32 -1
- package/src/environment/decorators.ts +2 -0
- package/src/environment/types.ts +5 -0
- package/src/helpers/index.ts +2 -0
- package/src/index.ts +2 -0
- package/src/types.ts +512 -1
package/dist/types/types.d.ts
CHANGED
|
@@ -396,6 +396,8 @@ export interface Enterprise extends Resource {
|
|
|
396
396
|
whatsapp?: boolean;
|
|
397
397
|
marketplace?: boolean;
|
|
398
398
|
multiProfessionals?: boolean;
|
|
399
|
+
/** Integracion con PennyLane: activa el listado Bills y el sync. */
|
|
400
|
+
pennylane?: boolean;
|
|
399
401
|
};
|
|
400
402
|
/**
|
|
401
403
|
* Used to save the last reference created for the two types of bills
|
|
@@ -532,6 +534,12 @@ export interface User extends Resource {
|
|
|
532
534
|
}
|
|
533
535
|
type Permissions = Record<string, boolean>;
|
|
534
536
|
export interface Profile extends Resource {
|
|
537
|
+
/**
|
|
538
|
+
* Datos de facturacion del tercero. Vive en Profile —y no en Client, Pro y
|
|
539
|
+
* Seller por separado— porque los tres lo heredan y el SDK escribe contra
|
|
540
|
+
* este tipo. Ver [[BillingIdentity]] y `config/src/billing`.
|
|
541
|
+
*/
|
|
542
|
+
billing?: BillingIdentity;
|
|
535
543
|
/**
|
|
536
544
|
*
|
|
537
545
|
*/
|
|
@@ -791,7 +799,11 @@ export interface Seller extends Profile {
|
|
|
791
799
|
/**
|
|
792
800
|
* the provider related
|
|
793
801
|
*/
|
|
794
|
-
provider
|
|
802
|
+
provider?: string;
|
|
803
|
+
/**
|
|
804
|
+
* the providers related
|
|
805
|
+
*/
|
|
806
|
+
providers?: string[];
|
|
795
807
|
/**
|
|
796
808
|
* indicates if is a team leader
|
|
797
809
|
*/
|
|
@@ -868,6 +880,11 @@ export interface Commissions {
|
|
|
868
880
|
* Represents an provider
|
|
869
881
|
*/
|
|
870
882
|
export interface Provider extends Resource {
|
|
883
|
+
/**
|
|
884
|
+
* Datos de facturacion. Se completa de forma incremental al facturar.
|
|
885
|
+
* Ver [[BillingIdentity]] y `config/src/billing`.
|
|
886
|
+
*/
|
|
887
|
+
billing?: BillingIdentity;
|
|
871
888
|
/**
|
|
872
889
|
* The provider name
|
|
873
890
|
*/
|
|
@@ -2037,9 +2054,30 @@ export type Bill = Resource & {
|
|
|
2037
2054
|
files?: File[];
|
|
2038
2055
|
metadata?: {
|
|
2039
2056
|
sentToIpaidthat?: boolean;
|
|
2057
|
+
/** @deprecated usar metadata.pennylane. Se mantiene hasta retirar el envio por email. */
|
|
2040
2058
|
sentToPennyLane?: boolean;
|
|
2059
|
+
/** @deprecated usar metadata.pennylane.lastSyncAt */
|
|
2041
2060
|
sentToPennyLaneDate?: number;
|
|
2061
|
+
/**
|
|
2062
|
+
* Estado de sincronizacion con PennyLane. Sustituye a los dos booleanos
|
|
2063
|
+
* de arriba: guarda el id contable, el hash del ultimo payload enviado
|
|
2064
|
+
* (idempotencia) y el error, para poder reintentar sin duplicar.
|
|
2065
|
+
*/
|
|
2066
|
+
pennylane?: PennylaneBillSync;
|
|
2042
2067
|
};
|
|
2068
|
+
/**
|
|
2069
|
+
* Origen del documento cuando no se ha creado en Articho. Las facturas con
|
|
2070
|
+
* source distinto de undefined no se editan ni se borran desde la app: la
|
|
2071
|
+
* autoridad esta en firestore.rules.
|
|
2072
|
+
*/
|
|
2073
|
+
source?: 'pennylane';
|
|
2074
|
+
imported?: boolean;
|
|
2075
|
+
/**
|
|
2076
|
+
* Datos de facturacion del destinatario, cuando este no tiene ficha propia
|
|
2077
|
+
* (fournisseur de materiaux, de services y personnalise). Para CLIENT, PRO y
|
|
2078
|
+
* PROVIDER viven en la ficha del tercero. Ver `config/src/billing`.
|
|
2079
|
+
*/
|
|
2080
|
+
billing?: BillingIdentity;
|
|
2043
2081
|
};
|
|
2044
2082
|
export type BillReceived = Bill & {
|
|
2045
2083
|
status: BillReceivedStatus;
|
|
@@ -2177,6 +2215,11 @@ export type Price = {
|
|
|
2177
2215
|
* Represents a materials provider
|
|
2178
2216
|
*/
|
|
2179
2217
|
export interface MaterialsProvider extends Resource {
|
|
2218
|
+
/**
|
|
2219
|
+
* Datos de facturacion. Se completa de forma incremental al facturar.
|
|
2220
|
+
* Ver [[BillingIdentity]] y `config/src/billing`.
|
|
2221
|
+
*/
|
|
2222
|
+
billing?: BillingIdentity;
|
|
2180
2223
|
/**
|
|
2181
2224
|
* The material provider name
|
|
2182
2225
|
*/
|
|
@@ -2831,6 +2874,10 @@ export interface Invitation {
|
|
|
2831
2874
|
* Invited user's provider name
|
|
2832
2875
|
*/
|
|
2833
2876
|
provider?: Provider;
|
|
2877
|
+
/**
|
|
2878
|
+
* Invited user's providers list
|
|
2879
|
+
*/
|
|
2880
|
+
providers?: Provider[] | string[];
|
|
2834
2881
|
/**
|
|
2835
2882
|
* Invited user's district where he/she works
|
|
2836
2883
|
*/
|
|
@@ -3793,5 +3840,435 @@ export declare enum EmailEventsEnum {
|
|
|
3793
3840
|
RESET_USER_PASSWORD = "RESET_USER_PASSWORD",
|
|
3794
3841
|
DOCUMENTS_ISSUES = "DOCUMENTS_ISSUES"
|
|
3795
3842
|
}
|
|
3843
|
+
/** Estado de la sincronizacion de una factura concreta con PennyLane. */
|
|
3844
|
+
export type PennylaneBillSync = {
|
|
3845
|
+
status: 'PENDING' | 'SYNCED' | 'FAILED' | 'SKIPPED';
|
|
3846
|
+
/** Id de la factura en PennyLane. */
|
|
3847
|
+
invoiceId?: string;
|
|
3848
|
+
/** Id de la factura acreditada en PennyLane (para avoirs). */
|
|
3849
|
+
creditedInvoiceId?: string;
|
|
3850
|
+
/** Id del avoir en PennyLane que cancela esta factura. */
|
|
3851
|
+
creditNoteId?: string;
|
|
3852
|
+
creditNoteNumber?: string;
|
|
3853
|
+
creditNoteStatus?: 'PENDING' | 'SYNCED' | 'FAILED' | 'SKIPPED';
|
|
3854
|
+
creditNoteError?: string;
|
|
3855
|
+
/** Documento espejo en enterprises/{id}/importedBills. */
|
|
3856
|
+
importedBillId?: string;
|
|
3857
|
+
fileAttachmentId?: string;
|
|
3858
|
+
/**
|
|
3859
|
+
* Hash del payload enviado. PennyLane no ofrece Idempotency-Key, asi que la
|
|
3860
|
+
* deduplicacion es nuestra: mismo hash que el ultimo SYNCED, no se reenvia.
|
|
3861
|
+
*/
|
|
3862
|
+
payloadHash?: string;
|
|
3863
|
+
attempts?: number;
|
|
3864
|
+
lastAttemptAt?: number;
|
|
3865
|
+
lastSyncAt?: number;
|
|
3866
|
+
syncedAt?: number;
|
|
3867
|
+
error?: {
|
|
3868
|
+
code: string;
|
|
3869
|
+
message: string;
|
|
3870
|
+
status?: number;
|
|
3871
|
+
};
|
|
3872
|
+
};
|
|
3873
|
+
/** De que campo de la factura de PennyLane se lee cada referencia. */
|
|
3874
|
+
export type PennylaneReferenceConfig = {
|
|
3875
|
+
/** Campo donde el proveedor escribe la referencia de chantier. */
|
|
3876
|
+
projectField: 'label' | 'invoice_number' | 'lines';
|
|
3877
|
+
/** Campo donde el proveedor escribe la referencia de devis. */
|
|
3878
|
+
devisField: 'label' | 'invoice_number' | 'lines';
|
|
3879
|
+
/** Expresion regular con un grupo de captura. */
|
|
3880
|
+
projectPattern?: string;
|
|
3881
|
+
devisPattern?: string;
|
|
3882
|
+
};
|
|
3883
|
+
export type PennylaneIgnoredSupplier = {
|
|
3884
|
+
name: string;
|
|
3885
|
+
regNo?: string | null;
|
|
3886
|
+
pennylaneId?: string | null;
|
|
3887
|
+
ignoredAt: number;
|
|
3888
|
+
ignoredBy?: string | null;
|
|
3889
|
+
};
|
|
3890
|
+
/** Configuracion de PennyLane por empresa: enterprises/{id}/configurations/pennylane */
|
|
3891
|
+
export type PennylaneConfiguration = {
|
|
3892
|
+
enabled: boolean;
|
|
3893
|
+
/** Identificador numérico de la empresa en PennyLane (ej. '156553'). */
|
|
3894
|
+
companyId?: string;
|
|
3895
|
+
push: {
|
|
3896
|
+
issued: boolean;
|
|
3897
|
+
received: boolean;
|
|
3898
|
+
};
|
|
3899
|
+
pull: {
|
|
3900
|
+
supplierInvoices: boolean;
|
|
3901
|
+
};
|
|
3902
|
+
/** false = enviar solo importes agregados + PDF. */
|
|
3903
|
+
sendLineItems: boolean;
|
|
3904
|
+
/** true mientras el mapeo contable no este cerrado con el contable. */
|
|
3905
|
+
importAsIncomplete: boolean;
|
|
3906
|
+
references: PennylaneReferenceConfig;
|
|
3907
|
+
/** Estados de PennyLane que no se traen (borradores y ruido inicial). */
|
|
3908
|
+
excludedStates?: string[];
|
|
3909
|
+
/** Dias hacia atras en la carga inicial o el resync completo. */
|
|
3910
|
+
lookbackDays?: number;
|
|
3911
|
+
defaultLedgerAccountId?: string;
|
|
3912
|
+
ledgerAccountByCategory?: Record<string, string>;
|
|
3913
|
+
/** Analitico por chantier. Ver [[PennylaneCategoryConfig]]. */
|
|
3914
|
+
categories?: PennylaneCategoryConfig;
|
|
3915
|
+
/** Lista de proveedores cuyas facturas se ignoran automáticamente al sincronizar. */
|
|
3916
|
+
ignoredSuppliers?: PennylaneIgnoredSupplier[];
|
|
3917
|
+
/** Estado del sync. Solo lo escriben las Cloud Functions. */
|
|
3918
|
+
sync?: {
|
|
3919
|
+
supplierInvoices?: PennylaneSyncState;
|
|
3920
|
+
customerInvoices?: PennylaneSyncState;
|
|
3921
|
+
};
|
|
3922
|
+
};
|
|
3923
|
+
/**
|
|
3924
|
+
* Analitico por chantier: una categoria de PennyLane por proyecto de Articho,
|
|
3925
|
+
* la misma para las facturas emitidas y las recibidas de ese proyecto.
|
|
3926
|
+
*
|
|
3927
|
+
* El GRUPO de categorias no se puede crear por API: lo da de alta una persona
|
|
3928
|
+
* en PennyLane y su id se pega aqui. Y las categorias, una vez creadas, NO se
|
|
3929
|
+
* pueden borrar por API —solo renombrar—, asi que se crean perezosamente: la
|
|
3930
|
+
* primera vez que un proyecto recibe o emite una factura, nunca al crear el
|
|
3931
|
+
* proyecto. Un proyecto que nunca factura no ensucia el plan analitico.
|
|
3932
|
+
*/
|
|
3933
|
+
export type PennylaneCategoryConfig = {
|
|
3934
|
+
/** Interruptor. Sin esto el sync no toca categorias. */
|
|
3935
|
+
enabled: boolean;
|
|
3936
|
+
/**
|
|
3937
|
+
* Id del grupo creado a mano en PennyLane (p. ej. "Chantiers Articho").
|
|
3938
|
+
* Es distinto en cada empresa: son espacios de PennyLane distintos.
|
|
3939
|
+
*/
|
|
3940
|
+
groupId: number;
|
|
3941
|
+
/** Categorizar tambien las facturas que Articho emite. */
|
|
3942
|
+
includeCustomerInvoices?: boolean;
|
|
3943
|
+
};
|
|
3944
|
+
export type PennylaneSyncState = {
|
|
3945
|
+
/**
|
|
3946
|
+
* Marca de tiempo del ultimo cambio procesado. El changelog de PennyLane
|
|
3947
|
+
* solo retiene 4 semanas: si esto se queda atras, hay perdida de datos.
|
|
3948
|
+
*/
|
|
3949
|
+
checkpoint: number;
|
|
3950
|
+
lastRunAt: number;
|
|
3951
|
+
lastError?: string | null;
|
|
3952
|
+
};
|
|
3953
|
+
export declare enum ImportedBillStatus {
|
|
3954
|
+
/** Llego de PennyLane y no se ha podido resolver proyecto o devis. */
|
|
3955
|
+
PENDING_ASSIGNMENT = "PENDING_ASSIGNMENT",
|
|
3956
|
+
/** Proyecto y devis resueltos: falta que un administrador confirme. */
|
|
3957
|
+
READY_TO_ASSIGN = "READY_TO_ASSIGN",
|
|
3958
|
+
/** Ya tiene una factura creada dentro de un proyecto. */
|
|
3959
|
+
ASSIGNED = "ASSIGNED",
|
|
3960
|
+
/** Descartada a mano. */
|
|
3961
|
+
IGNORED = "IGNORED",
|
|
3962
|
+
/** Duplicado de otra factura importada. */
|
|
3963
|
+
DUPLICATE = "DUPLICATE"
|
|
3964
|
+
}
|
|
3965
|
+
export declare enum PennylaneSyncEventType {
|
|
3966
|
+
IMPORTED = "IMPORTED",
|
|
3967
|
+
EXTERNAL_STATUS_CHANGE = "EXTERNAL_STATUS_CHANGE",
|
|
3968
|
+
BILL_STATUS_UPDATED = "BILL_STATUS_UPDATED",
|
|
3969
|
+
ASSIGNED = "ASSIGNED",
|
|
3970
|
+
IGNORED = "IGNORED",
|
|
3971
|
+
ERROR = "ERROR"
|
|
3972
|
+
}
|
|
3973
|
+
/**
|
|
3974
|
+
* Un evento por cada cosa que le pasa a una factura importada. Sin esto, una
|
|
3975
|
+
* factura que cambia sola de estado es indistinguible de un bug.
|
|
3976
|
+
*/
|
|
3977
|
+
export type PennylaneSyncEvent = {
|
|
3978
|
+
id: string;
|
|
3979
|
+
date: number;
|
|
3980
|
+
type: PennylaneSyncEventType;
|
|
3981
|
+
message: string;
|
|
3982
|
+
before?: Record<string, unknown>;
|
|
3983
|
+
after?: Record<string, unknown>;
|
|
3984
|
+
payload?: Record<string, unknown>;
|
|
3985
|
+
};
|
|
3986
|
+
/**
|
|
3987
|
+
* Espejo de una factura de PennyLane dentro de Articho.
|
|
3988
|
+
*
|
|
3989
|
+
* Vive a nivel de empresa y no dentro de un proyecto a proposito: una factura
|
|
3990
|
+
* que entra electronicamente no sabe a que proyecto pertenece. Es tambien la
|
|
3991
|
+
* fuente del listado "Bills" del menu de administradores.
|
|
3992
|
+
*/
|
|
3993
|
+
export type ImportedBill = {
|
|
3994
|
+
id: string;
|
|
3995
|
+
source: 'pennylane';
|
|
3996
|
+
direction: 'supplier' | 'customer';
|
|
3997
|
+
/** Id en PennyLane. Clave de deduplicacion. */
|
|
3998
|
+
externalId: string;
|
|
3999
|
+
enterpriseId: string;
|
|
4000
|
+
status: ImportedBillStatus;
|
|
4001
|
+
invoice: {
|
|
4002
|
+
reference: string;
|
|
4003
|
+
label?: string;
|
|
4004
|
+
date: number;
|
|
4005
|
+
dueDate?: number | null;
|
|
4006
|
+
currency: string;
|
|
4007
|
+
amountHT: number;
|
|
4008
|
+
amountTVA: number;
|
|
4009
|
+
amountTTC: number;
|
|
4010
|
+
isPaid: boolean;
|
|
4011
|
+
paidAt?: number | null;
|
|
4012
|
+
externalStatus?: string | null;
|
|
4013
|
+
/** Origen de la importacion en PennyLane: Email, API, PA/PDP... */
|
|
4014
|
+
externalSource?: string | null;
|
|
4015
|
+
fileUrl?: string | null;
|
|
4016
|
+
};
|
|
4017
|
+
counterparty: {
|
|
4018
|
+
name: string;
|
|
4019
|
+
regNo?: string | null;
|
|
4020
|
+
pennylaneId?: string | null;
|
|
4021
|
+
};
|
|
4022
|
+
/** Referencias tal y como venian en la factura, y de que campo salieron. */
|
|
4023
|
+
references: {
|
|
4024
|
+
projectRef?: string | null;
|
|
4025
|
+
devisRef?: string | null;
|
|
4026
|
+
sources?: {
|
|
4027
|
+
project?: string;
|
|
4028
|
+
devis?: string;
|
|
4029
|
+
};
|
|
4030
|
+
};
|
|
4031
|
+
/** Resolucion automatica. Nunca crea la factura por si sola. */
|
|
4032
|
+
suggestion?: {
|
|
4033
|
+
projectId?: string | null;
|
|
4034
|
+
devisId?: string | null;
|
|
4035
|
+
reasons: string[];
|
|
4036
|
+
};
|
|
4037
|
+
/** Asociacion confirmada por un administrador. */
|
|
4038
|
+
assignment?: {
|
|
4039
|
+
projectId: string;
|
|
4040
|
+
devisId: string;
|
|
4041
|
+
billId: string;
|
|
4042
|
+
projectName?: string | null;
|
|
4043
|
+
projectReference?: string | null;
|
|
4044
|
+
devisName?: string | null;
|
|
4045
|
+
assignedBy: string;
|
|
4046
|
+
assignedAt: number;
|
|
4047
|
+
} | null;
|
|
4048
|
+
lastSyncAt: number;
|
|
4049
|
+
createdAt: number;
|
|
4050
|
+
};
|
|
4051
|
+
/**
|
|
4052
|
+
* Direccion postal desglosada.
|
|
4053
|
+
*
|
|
4054
|
+
* El campo `address` suelto que ya existe en varias entidades no sirve para
|
|
4055
|
+
* facturar: PennyLane —y la facturacion electronica en general— exige calle,
|
|
4056
|
+
* codigo postal, ciudad y pais como campos separados. Y `GeoLocation` solo
|
|
4057
|
+
* guarda lat/lng, asi que no hay de donde derivarlos.
|
|
4058
|
+
*/
|
|
4059
|
+
export type PostalAddress = {
|
|
4060
|
+
address: string;
|
|
4061
|
+
postalCode: string;
|
|
4062
|
+
city: string;
|
|
4063
|
+
/** Codigo ISO de dos letras: FR, ES, BE... */
|
|
4064
|
+
countryAlpha2: string;
|
|
4065
|
+
};
|
|
4066
|
+
export declare enum BillingPaymentConditions {
|
|
4067
|
+
UPON_RECEIPT = "upon_receipt",
|
|
4068
|
+
DAYS_7 = "7_days",
|
|
4069
|
+
DAYS_15 = "15_days",
|
|
4070
|
+
DAYS_30 = "30_days",
|
|
4071
|
+
DAYS_30_EOM = "30_days_end_of_month",
|
|
4072
|
+
DAYS_45 = "45_days",
|
|
4073
|
+
DAYS_45_EOM = "45_days_end_of_month",
|
|
4074
|
+
DAYS_60 = "60_days"
|
|
4075
|
+
}
|
|
4076
|
+
export declare enum BillingLanguage {
|
|
4077
|
+
FR = "fr_FR",
|
|
4078
|
+
EN = "en_GB",
|
|
4079
|
+
DE = "de_DE",
|
|
4080
|
+
ES = "es_ES"
|
|
4081
|
+
}
|
|
4082
|
+
/**
|
|
4083
|
+
* Datos necesarios para emitir una factura a esta entidad.
|
|
4084
|
+
*
|
|
4085
|
+
* Es el mismo objeto para las cinco entidades facturables (Client, Pro,
|
|
4086
|
+
* Seller, Provider, MaterialsProvider) a proposito: un solo tipo, un solo
|
|
4087
|
+
* validador y un solo formulario, en lugar de cinco variantes que divergen.
|
|
4088
|
+
*
|
|
4089
|
+
* Se rellena de forma incremental: el modal de envio a PennyLane pide lo que
|
|
4090
|
+
* falte justo antes de facturar y lo guarda aqui, de modo que solo se completa
|
|
4091
|
+
* para las entidades a las que de verdad se les factura.
|
|
4092
|
+
*/
|
|
4093
|
+
/**
|
|
4094
|
+
* Persona juridica o persona fisica.
|
|
4095
|
+
*
|
|
4096
|
+
* No es un detalle de forma: decide que exige la ley y que endpoint de
|
|
4097
|
+
* PennyLane se usa. Una factura a una empresa entra en la facturacion
|
|
4098
|
+
* electronica —SIREN obligatorio, transmision por la red—; una a un particular
|
|
4099
|
+
* queda fuera del ambito y solo genera e-reporting, sin identificar al cliente.
|
|
4100
|
+
*
|
|
4101
|
+
* Un `undefined` significa "todavia no lo sabemos", que es distinto de las
|
|
4102
|
+
* otras dos: el formulario tiene que preguntarlo, no suponerlo.
|
|
4103
|
+
*/
|
|
4104
|
+
export type BillingLegalType = 'company' | 'individual';
|
|
4105
|
+
export type BillingIdentity = {
|
|
4106
|
+
/** Empresa o particular. Ver [[BillingLegalType]]. */
|
|
4107
|
+
legalType?: BillingLegalType;
|
|
4108
|
+
/**
|
|
4109
|
+
* Razon social. Obligatoria en empresas.
|
|
4110
|
+
*
|
|
4111
|
+
* En un particular no se pide: se compone de nombre y apellidos con
|
|
4112
|
+
* [[billingDisplayName]], para no tener dos sitios donde vive el mismo dato
|
|
4113
|
+
* y que acaben diciendo cosas distintas.
|
|
4114
|
+
*/
|
|
4115
|
+
legalName: string;
|
|
4116
|
+
/** Nombre. Obligatorio en particulares; PennyLane lo pide separado. */
|
|
4117
|
+
firstName?: string;
|
|
4118
|
+
/** Apellidos. Obligatorio en particulares. */
|
|
4119
|
+
lastName?: string;
|
|
4120
|
+
/** Direccion de facturacion. Obligatoria. */
|
|
4121
|
+
address: PostalAddress;
|
|
4122
|
+
/** Direccion de entrega, si difiere de la de facturacion. */
|
|
4123
|
+
deliveryAddress?: PostalAddress;
|
|
4124
|
+
/** SIREN (9 digitos) o SIRET (14). */
|
|
4125
|
+
registrationNumber?: string;
|
|
4126
|
+
/** Numero de TVA intracomunitario. No confundir con el tipo de IVA. */
|
|
4127
|
+
vatNumber?: string;
|
|
4128
|
+
/** Correos a los que enviar la factura. */
|
|
4129
|
+
emails?: string[];
|
|
4130
|
+
phone?: string;
|
|
4131
|
+
/** Persona o servicio destinatario dentro de la empresa. */
|
|
4132
|
+
recipient?: string;
|
|
4133
|
+
paymentConditions?: BillingPaymentConditions;
|
|
4134
|
+
language?: BillingLanguage;
|
|
4135
|
+
/** Notas que acompanan a la ficha del tercero. */
|
|
4136
|
+
notes?: string;
|
|
4137
|
+
/**
|
|
4138
|
+
* Id del tercero en PennyLane, cacheado tras la primera factura. Evita
|
|
4139
|
+
* volver a buscarlo y, sobre todo, evita duplicar la ficha.
|
|
4140
|
+
*/
|
|
4141
|
+
pennylaneCustomerId?: string;
|
|
4142
|
+
/**
|
|
4143
|
+
* Lo que dice el registro publico de la empresa, tal y como se leyo la
|
|
4144
|
+
* ultima vez. No va impreso en la factura: es la procedencia de lo que hay
|
|
4145
|
+
* arriba. Ver [[BillingInseeData]].
|
|
4146
|
+
*/
|
|
4147
|
+
insee?: BillingInseeData;
|
|
4148
|
+
/**
|
|
4149
|
+
* Que problemas se encontraron la ultima vez que se intento completar esta
|
|
4150
|
+
* ficha desde los registros publicos. Pensado para pintarse como tooltip.
|
|
4151
|
+
* Ver [[BillingEnrichment]].
|
|
4152
|
+
*/
|
|
4153
|
+
enrichment?: BillingEnrichment;
|
|
4154
|
+
updatedAt?: number;
|
|
4155
|
+
updatedBy?: string;
|
|
4156
|
+
};
|
|
4157
|
+
/**
|
|
4158
|
+
* Lo que el registro publico dice de la empresa de un tercero.
|
|
4159
|
+
*
|
|
4160
|
+
* Lo escribe `scripts/enrich-billing-from-insee.js`. Cuelga de
|
|
4161
|
+
* [[BillingIdentity]] junto al resto de lo que hace falta para facturar, pero
|
|
4162
|
+
* en su propio bloque: los campos de arriba son lo que va impreso en la
|
|
4163
|
+
* factura y los puede corregir una persona; esto es lo que dice el registro y
|
|
4164
|
+
* se reescribe en cada pasada.
|
|
4165
|
+
*/
|
|
4166
|
+
export interface BillingInseeData {
|
|
4167
|
+
/** SIREN, 9 digitos. */
|
|
4168
|
+
siren?: string;
|
|
4169
|
+
/** SIRET del establecimiento consultado, 14 digitos. */
|
|
4170
|
+
siret?: string;
|
|
4171
|
+
/** Si el establecimiento consultado es el domicilio social. */
|
|
4172
|
+
siege?: boolean;
|
|
4173
|
+
/** Categoria juridica (`categorieJuridiqueUniteLegale`). */
|
|
4174
|
+
legalForm?: string | null;
|
|
4175
|
+
/** Codigo APE/NAF (`activitePrincipaleUniteLegale`). */
|
|
4176
|
+
nafCode?: string | null;
|
|
4177
|
+
/** Estado de la unidad legal: `A` activa, `C` cesada. */
|
|
4178
|
+
state?: string | null;
|
|
4179
|
+
/** Estado del establecimiento: `A` activo, `F` cerrado. */
|
|
4180
|
+
establishmentState?: string | null;
|
|
4181
|
+
/** Nombre comercial, si difiere de la razon social. */
|
|
4182
|
+
tradeName?: string | null;
|
|
4183
|
+
/** Como se resolvio: `siret`, `siege` o `siege-fallback`. */
|
|
4184
|
+
matchedBy?: string;
|
|
4185
|
+
/**
|
|
4186
|
+
* Presente solo si el SIREN no venia en la ficha y se dedujo buscando por
|
|
4187
|
+
* razon social. Sirve para no confundir un dato aportado con uno inferido.
|
|
4188
|
+
*/
|
|
4189
|
+
sirenFoundBy?: string;
|
|
4190
|
+
/** Resultado de validar el numero de TVA contra VIES. */
|
|
4191
|
+
vatCheck?: BillingVatCheck;
|
|
4192
|
+
/** Cuando se consulto el registro por ultima vez. */
|
|
4193
|
+
checkedAt?: number;
|
|
4194
|
+
}
|
|
4195
|
+
/**
|
|
4196
|
+
* Validacion del numero de TVA intracomunitario contra el registro VIES.
|
|
4197
|
+
*
|
|
4198
|
+
* El numero no lo publica el INSEE: se calcula a partir del SIREN, y la
|
|
4199
|
+
* formula siempre devuelve algo bien formado, tambien para quien esta en
|
|
4200
|
+
* franquicia en base y no tiene numero real. `valid: false` significa que el
|
|
4201
|
+
* numero no existe, no que este mal escrito.
|
|
4202
|
+
*/
|
|
4203
|
+
export interface BillingVatCheck {
|
|
4204
|
+
/** El numero que se comprobo. */
|
|
4205
|
+
number: string;
|
|
4206
|
+
status: 'VALID' | 'INVALID' | 'UNAVAILABLE';
|
|
4207
|
+
/** `null` cuando VIES no contesto: no se sabe, que no es lo mismo que no. */
|
|
4208
|
+
valid: boolean | null;
|
|
4209
|
+
reason?: string | null;
|
|
4210
|
+
source: string;
|
|
4211
|
+
checkedAt: number;
|
|
4212
|
+
}
|
|
4213
|
+
/**
|
|
4214
|
+
* Gravedad de una incidencia de enriquecimiento.
|
|
4215
|
+
*
|
|
4216
|
+
* - `ok` la ficha se completo sin nada que senalar.
|
|
4217
|
+
* - `warning` se completo, pero hay algo que conviene mirar.
|
|
4218
|
+
* - `error` no se pudo completar: falta el identificador, no esta en el
|
|
4219
|
+
* registro, o la consulta fallo.
|
|
4220
|
+
*/
|
|
4221
|
+
export type BillingEnrichmentLevel = 'ok' | 'warning' | 'error';
|
|
4222
|
+
/**
|
|
4223
|
+
* Codigo de cada incidencia. Existe para poder filtrar y contar sin parsear
|
|
4224
|
+
* el texto, que esta escrito para leerse y puede cambiar de redaccion.
|
|
4225
|
+
*/
|
|
4226
|
+
export declare enum BillingEnrichmentCode {
|
|
4227
|
+
/** La ficha no trae ni SIREN ni SIRET. */
|
|
4228
|
+
NO_IDENTIFIER = "NO_IDENTIFIER",
|
|
4229
|
+
/** Hay varias empresas con esa razon social: hace falta elegir a mano. */
|
|
4230
|
+
SIREN_AMBIGUOUS = "SIREN_AMBIGUOUS",
|
|
4231
|
+
/** El identificador no aparece en el registro. */
|
|
4232
|
+
NOT_FOUND = "NOT_FOUND",
|
|
4233
|
+
/** La unidad legal figura cesada. */
|
|
4234
|
+
COMPANY_CLOSED = "COMPANY_CLOSED",
|
|
4235
|
+
/** El establecimiento figura cerrado; la empresa puede seguir viva. */
|
|
4236
|
+
ESTABLISHMENT_CLOSED = "ESTABLISHMENT_CLOSED",
|
|
4237
|
+
/** El numero de TVA no consta en VIES. Probable franquicia en base. */
|
|
4238
|
+
VAT_NOT_REGISTERED = "VAT_NOT_REGISTERED",
|
|
4239
|
+
/** VIES no contesto: el numero se guardo sin verificar. */
|
|
4240
|
+
VAT_UNVERIFIED = "VAT_UNVERIFIED",
|
|
4241
|
+
/** VIES devuelve una razon social distinta de la del INSEE. */
|
|
4242
|
+
VAT_NAME_MISMATCH = "VAT_NAME_MISMATCH",
|
|
4243
|
+
/** Establecimiento fuera de Francia: falta informar el pais. */
|
|
4244
|
+
FOREIGN_ADDRESS = "FOREIGN_ADDRESS",
|
|
4245
|
+
MISSING_POSTAL_CODE = "MISSING_POSTAL_CODE",
|
|
4246
|
+
MISSING_STREET = "MISSING_STREET",
|
|
4247
|
+
/** La consulta al registro fallo (red, cuota, credenciales). */
|
|
4248
|
+
LOOKUP_ERROR = "LOOKUP_ERROR"
|
|
4249
|
+
}
|
|
4250
|
+
/**
|
|
4251
|
+
* Que paso la ultima vez que se intento completar los datos de facturacion de
|
|
4252
|
+
* esta ficha desde los registros publicos.
|
|
4253
|
+
*
|
|
4254
|
+
* `text` es el campo que se pinta: texto plano, un mensaje por linea, listo
|
|
4255
|
+
* para un `title` o un tooltip. `messages` y `codes` estan para quien prefiera
|
|
4256
|
+
* pintarlos sueltos o filtrar por tipo de incidencia.
|
|
4257
|
+
*
|
|
4258
|
+
* El bloque se reescribe entero en cada pasada. Que este ausente significa que
|
|
4259
|
+
* la ficha nunca se reviso; que `level` sea `ok` significa que se reviso y no
|
|
4260
|
+
* habia nada que senalar.
|
|
4261
|
+
*/
|
|
4262
|
+
export interface BillingEnrichment {
|
|
4263
|
+
/** Un mensaje por linea, separados por `\n`. Vacio cuando `level` es `ok`. */
|
|
4264
|
+
text: string;
|
|
4265
|
+
/** Los mismos mensajes, sin unir. */
|
|
4266
|
+
messages: string[];
|
|
4267
|
+
codes: BillingEnrichmentCode[];
|
|
4268
|
+
level: BillingEnrichmentLevel;
|
|
4269
|
+
/** Quien lo escribio, p. ej. `insee-script`. */
|
|
4270
|
+
source: string;
|
|
4271
|
+
checkedAt: number;
|
|
4272
|
+
}
|
|
3796
4273
|
export {};
|
|
3797
4274
|
//# sourceMappingURL=types.d.ts.map
|