@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.
Files changed (62) hide show
  1. package/dist/auth/policy.js +6 -0
  2. package/dist/auth/policy.js.map +1 -1
  3. package/dist/billing/index.js +9 -0
  4. package/dist/billing/index.js.map +1 -0
  5. package/dist/billing/pennylane.js +400 -0
  6. package/dist/billing/pennylane.js.map +1 -0
  7. package/dist/billing/permissions.js +27 -0
  8. package/dist/billing/permissions.js.map +1 -0
  9. package/dist/billing/prefill.js +208 -0
  10. package/dist/billing/prefill.js.map +1 -0
  11. package/dist/billing/types.js +3 -0
  12. package/dist/billing/types.js.map +1 -0
  13. package/dist/billing/validate.js +189 -0
  14. package/dist/billing/validate.js.map +1 -0
  15. package/dist/environment/base.js +30 -1
  16. package/dist/environment/base.js.map +1 -1
  17. package/dist/environment/decorators.js +2 -0
  18. package/dist/environment/decorators.js.map +1 -1
  19. package/dist/helpers/index.js +1 -0
  20. package/dist/helpers/index.js.map +1 -1
  21. package/dist/index.js +3 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/types/auth/policy.d.ts +2 -1
  24. package/dist/types/auth/policy.d.ts.map +1 -1
  25. package/dist/types/billing/index.d.ts +6 -0
  26. package/dist/types/billing/index.d.ts.map +1 -0
  27. package/dist/types/billing/pennylane.d.ts +191 -0
  28. package/dist/types/billing/pennylane.d.ts.map +1 -0
  29. package/dist/types/billing/permissions.d.ts +23 -0
  30. package/dist/types/billing/permissions.d.ts.map +1 -0
  31. package/dist/types/billing/prefill.d.ts +42 -0
  32. package/dist/types/billing/prefill.d.ts.map +1 -0
  33. package/dist/types/billing/types.d.ts +30 -0
  34. package/dist/types/billing/types.d.ts.map +1 -0
  35. package/dist/types/billing/validate.d.ts +48 -0
  36. package/dist/types/billing/validate.d.ts.map +1 -0
  37. package/dist/types/environment/base.d.ts.map +1 -1
  38. package/dist/types/environment/decorators.d.ts.map +1 -1
  39. package/dist/types/environment/types.d.ts +5 -0
  40. package/dist/types/environment/types.d.ts.map +1 -1
  41. package/dist/types/helpers/index.d.ts +1 -0
  42. package/dist/types/helpers/index.d.ts.map +1 -1
  43. package/dist/types/index.d.ts +2 -1
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/dist/types/types.d.ts +478 -1
  46. package/dist/types/types.d.ts.map +1 -1
  47. package/dist/types.js +70 -1
  48. package/dist/types.js.map +1 -1
  49. package/package.json +2 -2
  50. package/src/auth/policy.ts +21 -1
  51. package/src/billing/index.ts +5 -0
  52. package/src/billing/pennylane.ts +530 -0
  53. package/src/billing/permissions.ts +25 -0
  54. package/src/billing/prefill.ts +309 -0
  55. package/src/billing/types.ts +32 -0
  56. package/src/billing/validate.ts +198 -0
  57. package/src/environment/base.ts +32 -1
  58. package/src/environment/decorators.ts +2 -0
  59. package/src/environment/types.ts +5 -0
  60. package/src/helpers/index.ts +2 -0
  61. package/src/index.ts +2 -0
  62. package/src/types.ts +512 -1
@@ -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: string;
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