ee421add1d
Le champ que `Encabezado.TipoMoneda` porte dans chaque e-CF DGII — `moneda.options = ["USD","DOP"]` — vit dans `ecf_spec.json` ET, byte-gaté par check_artifacts, dans `out/ecf_plan.json`. C'est une valeur CANONIQUE de CLAUDE.md #10 (« **USD + DOP** devises ») dont le README se réclame « #10 » (README:37/57/77). Or byte-gater une constante prouve la REPRODUCTIBILITÉ, PAS l'ANCRAGE : check_artifacts prouve ecf_plan==build depuis le spec, JAMAIS que spec[moneda]==#10. Les blocs fiscaux amont gatent le FormaPago (Cardnet · #10) + états/champs émetteurs, AVEUGLES au jeu de devises ; le bloc « Fiches #10 » ancre les fiches ERPNext/CRM, AVEUGLE au module fiscal. Piège #6 : RENOMMER/ÉTENDRE les devises dans CLAUDE.md #10 (`USD + DOP`→`USD + EUR`, ou +`EUR`) ET dans le spec de façon cohérente reste byte-VERT tout en faisant émettre à l'e-CF un `TipoMoneda` d'une devise qui CONTREDIT le mandat — « vert trompeur » de la classe de la marque SEO §Entités, la persona Chat OTOIA ou les tokens branding #4, qu'aucune suite tests/ (FONCTIONS de génération, jamais l'ancre à CLAUDE.md) n'attrape. L'agent ERPNext Backend câblerait TipoMoneda hors mandat. Correctif de déclaration : nouveau champ `moneda.options_source` (ecf_spec.json + requis dans ecf.schema.json) citant « CLAUDE.md #10 — devises **USD + DOP** », DISTINCT de `source` (taux TipoCambio, reste null/a_confirmer côté VPS · #8). Artefact régénéré (byte-gate re-verte · 39 tests module verts). Gate ajouté (ci/check_readme_claims.sh, bloc « Fiscal · ecf_dgii — le JEU DE DEVISES `moneda` … ANCRÉ sur CLAUDE.md #10 ») : RÉUTILISE exp["devises"] déjà recomputé depuis #10 (zéro duplication) ; (a) spec[moneda].options == devises #10 ORDRE exact ; (b) artefact byte-gaté idem ; (c) options_source cite CLAUDE.md #10 + chaque devise ; (d) prose README qui se réclame de #10 == jeu exact + toute mention moneda/devise d'une paire concordante (scan ancré sur contexte, évite le faux positif `RNC / ITBIS`). 7 morsures vérifiées (CLAUDE.md #10 rename = 4 bites en cascade · spec options régénéré = le vrai silent green · artefact seul · reorder · options_source sans ancre · README ligne #10 · README table), restauré vert, 7 gates re-verts. ci/README.md (clause récap + paragraphe « 4e surface du MÊME README ») mis à jour. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
203 lines
5.7 KiB
JSON
203 lines
5.7 KiB
JSON
{
|
|
"name": "OTO e-CF DGII (Compupar)",
|
|
"provider": "Compupar",
|
|
"devise_field": "devise",
|
|
"emisor": {
|
|
"rnc_emisor": null,
|
|
"razon_social": null,
|
|
"source": null,
|
|
"a_confirmer": true,
|
|
"note": "RNC + raison sociale de l'entité émettrice (WA SRL / AC Arias Cuevas selon projet) — jamais fabriqués ici ; renseignés par la Direction/Compta avec source (#6)."
|
|
},
|
|
"provider_config": {
|
|
"nom": "Compupar",
|
|
"role": "PAC — signe et transmet l'e-CF a la DGII pour le compte de l'emetteur ; recoit l'aprobacion comercial.",
|
|
"endpoint_recepcion": null,
|
|
"endpoint_aprobacion_comercial": null,
|
|
"credentials_ref": "/etc/oto/credentials (VPS · #8 · JAMAIS en repo)",
|
|
"certificat_ref": "certificat digital DGII cote VPS (#8)",
|
|
"source": "DGII · facturacion electronica — proveedor certifie (Compupar)",
|
|
"a_confirmer": true
|
|
},
|
|
"e_ncf": {
|
|
"prefix": "E",
|
|
"longueur": 13,
|
|
"regex": "^E[0-9]{12}$",
|
|
"structure": "E + tipoeCF (2 chiffres) + secuencia (10 chiffres)",
|
|
"note_secuencia": "La secuencia provient d'un RANGO autorise par la DGII (autorizacion de e-NCF) — jamais fabriquee en repo ; assignee cote VPS/Compupar (#8).",
|
|
"source": "DGII · formato e-NCF (Ley 32-23 de Facturacion Electronica)"
|
|
},
|
|
"tipos_ecf": [
|
|
{
|
|
"code": "31",
|
|
"label": "Factura de Credito Fiscal Electronica",
|
|
"en_scope": true
|
|
},
|
|
{
|
|
"code": "32",
|
|
"label": "Factura de Consumo Electronica",
|
|
"en_scope": true
|
|
},
|
|
{
|
|
"code": "33",
|
|
"label": "Nota de Debito Electronica",
|
|
"en_scope": true
|
|
},
|
|
{
|
|
"code": "34",
|
|
"label": "Nota de Credito Electronica",
|
|
"en_scope": true
|
|
},
|
|
{
|
|
"code": "41",
|
|
"label": "Compras Electronico",
|
|
"en_scope": false
|
|
},
|
|
{
|
|
"code": "43",
|
|
"label": "Gastos Menores Electronico",
|
|
"en_scope": false
|
|
},
|
|
{
|
|
"code": "44",
|
|
"label": "Regimenes Especiales Electronico",
|
|
"en_scope": false
|
|
},
|
|
{
|
|
"code": "45",
|
|
"label": "Gubernamental Electronico",
|
|
"en_scope": false
|
|
},
|
|
{
|
|
"code": "46",
|
|
"label": "Comprobante para Exportaciones Electronico",
|
|
"en_scope": true
|
|
},
|
|
{
|
|
"code": "47",
|
|
"label": "Comprobante para Pagos al Exterior Electronico",
|
|
"en_scope": false
|
|
}
|
|
],
|
|
"tipos_en_scope": [
|
|
"31",
|
|
"32",
|
|
"33",
|
|
"34",
|
|
"46"
|
|
],
|
|
"formas_pago": [
|
|
{
|
|
"code": "1",
|
|
"label": "Efectivo"
|
|
},
|
|
{
|
|
"code": "2",
|
|
"label": "Cheque/Transferencia/Deposito"
|
|
},
|
|
{
|
|
"code": "3",
|
|
"label": "Tarjeta Debito/Credito"
|
|
},
|
|
{
|
|
"code": "4",
|
|
"label": "Venta a Credito"
|
|
},
|
|
{
|
|
"code": "5",
|
|
"label": "Bonos o Certificados de regalo"
|
|
},
|
|
{
|
|
"code": "6",
|
|
"label": "Permuta"
|
|
},
|
|
{
|
|
"code": "7",
|
|
"label": "Nota de credito"
|
|
},
|
|
{
|
|
"code": "8",
|
|
"label": "Otras Formas de pago"
|
|
}
|
|
],
|
|
"forma_pago_defaut": {
|
|
"code": "3",
|
|
"motif": "Encaissements OTO par carte via Cardnet (CLAUDE.md #10) → FormaPago 3 (Tarjeta).",
|
|
"source": "DGII · tabla FormaPago (code 3) · CLAUDE.md #10 (Cardnet)"
|
|
},
|
|
"moneda": {
|
|
"tipo_moneda_field": "devise",
|
|
"options": [
|
|
"USD",
|
|
"DOP"
|
|
],
|
|
"options_source": "CLAUDE.md #10 — devises **USD + DOP** (source unique · jamais inventé · #6). Distinct de `source` (taux TipoCambio) qui reste null/a_confirmer.",
|
|
"tipo_cambio": null,
|
|
"note_cambio": "Un e-CF libelle en USD exige un TipoCambio (DOP/USD) SOURCE (taux du jour BCRD/DGII) — jamais fabrique (#6). En DOP, TipoCambio non requis.",
|
|
"source": null,
|
|
"a_confirmer": true
|
|
},
|
|
"taxes": [
|
|
{
|
|
"code": "ITBIS",
|
|
"label": "Impuesto sobre Transferencias de Bienes Industrializados y Servicios",
|
|
"taux_pct": null,
|
|
"source": null,
|
|
"a_confirmer": true,
|
|
"note": "Le taux ITBIS applicable (et l'exoneration eventuelle CONFOTUR sur l'immobilier touristique) est fiscal et depend du projet ; renseigne par le Fiscaliste eCF avec source (#6) — jamais fabrique ici."
|
|
}
|
|
],
|
|
"emission_events": [
|
|
{
|
|
"update_value": "contrat",
|
|
"tipo_ecf": null,
|
|
"base_field": "montant_contrat",
|
|
"role_id": "compta-fiscaliste-ecf",
|
|
"erpnext_role_name": "OTO Compta Fiscaliste eCF",
|
|
"libelle": "Emission e-CF sur contrat signe (comprobante principal)",
|
|
"a_confirmer": true
|
|
},
|
|
{
|
|
"update_value": "reservation",
|
|
"tipo_ecf": null,
|
|
"base_field": "montant_reservation",
|
|
"role_id": "compta-fiscaliste-ecf",
|
|
"erpnext_role_name": "OTO Compta Fiscaliste eCF",
|
|
"libelle": "Emission e-CF sur depot de reservation encaisse",
|
|
"a_confirmer": true
|
|
}
|
|
],
|
|
"field_map": [
|
|
{
|
|
"dossier_field": "client",
|
|
"ecf_element": "Comprador.RazonSocialComprador",
|
|
"note": "Customer ERPNext → razon social acheteur"
|
|
},
|
|
{
|
|
"dossier_field": "devise",
|
|
"ecf_element": "Encabezado.TipoMoneda",
|
|
"note": "Select USD/DOP → TipoMoneda (#10)"
|
|
},
|
|
{
|
|
"dossier_field": "montant_contrat",
|
|
"ecf_element": "Totales.MontoTotal",
|
|
"note": "base Currency contrat → MontoTotal"
|
|
},
|
|
{
|
|
"dossier_field": "montant_reservation",
|
|
"ecf_element": "Totales.MontoTotal",
|
|
"note": "base Currency reservation → MontoTotal (e-CF de reservation)"
|
|
},
|
|
{
|
|
"dossier_field": "projet",
|
|
"ecf_element": "DetallesItems.Item.NombreItem",
|
|
"note": "projet/unite → description de la ligne"
|
|
},
|
|
{
|
|
"dossier_field": "unite",
|
|
"ecf_element": "DetallesItems.Item.NombreItem",
|
|
"note": "reference d'unite → complement description"
|
|
}
|
|
]
|
|
}
|