2026-03-30 11:47:24 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-03-30 11:47:24 [INFO] init_payment | {"email":"comallagency@gmail.com","nom":"gtu","plan":"mensuel"} 2026-03-30 11:47:24 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'comallagency@gmail.com'"} 2026-03-30 11:47:26 [INFO] Airtable SEARCH result | {"code":200,"found":1} 2026-03-30 11:47:26 [INFO] Client existant trouvé | {"id":"recf6KZggr3sjwySl"} 2026-03-30 11:47:26 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":["nom_etablissement","plan","activity_type","parcours_status"]} 2026-03-30 11:47:26 [INFO] Airtable PATCH OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 11:47:26 [INFO] Création customer Stripe 2026-03-30 11:47:26 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-03-30 11:47:27 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UF6d6Q03x3A5PX"} 2026-03-30 11:47:27 [INFO] init_payment OK | {"customer_id":"cus_UF6d6Q03x3A5PX","airtable_id":"recf6KZggr3sjwySl"} 2026-03-30 11:47:39 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-03-30 11:47:39 [INFO] confirm_subscription | {"customer_id":"cus_UF6d6Q03x3A5PX","price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0","pm":"pm_1TGcQ3R...","at_id":"recf6KZggr3sjwySl"} 2026-03-30 11:47:39 [INFO] Attach payment method 2026-03-30 11:47:39 [DEBUG] Stripe POST /v1/payment_methods/pm_1TGcQ3RVbk0a9x0coAbvUPsc/attach | {"keys":["customer"]} 2026-03-30 11:47:40 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TGcQ3RVbk0a9x0coAbvUPsc\/attach","id":"pm_1TGcQ3RVbk0a9x0coAbvUPsc"} 2026-03-30 11:47:40 [DEBUG] Stripe POST /v1/customers/cus_UF6d6Q03x3A5PX | {"keys":["invoice_settings"]} 2026-03-30 11:47:40 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UF6d6Q03x3A5PX","id":"cus_UF6d6Q03x3A5PX"} 2026-03-30 11:47:40 [INFO] Création abonnement Stripe | {"price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0"} 2026-03-30 11:47:40 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-03-30 11:47:44 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TGcQ4RVbk0a9x0c5jCrEmhs"} 2026-03-30 11:47:44 [INFO] Abonnement créé | {"sub_id":"sub_1TGcQ4RVbk0a9x0c5jCrEmhs","end":"2026-04-30"} 2026-03-30 11:47:44 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription","parcours_status","payment_confirmed_at"]} 2026-03-30 11:47:44 [INFO] Airtable PATCH OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 11:47:44 [INFO] Email send | {"to":"comallagency@gmail.com","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-03-30 11:47:44 [INFO] confirm_subscription OK | {"token":"8bea4eed..."} 2026-03-30 11:47:47 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-03-30 11:47:47 [INFO] save_declaration | {"client_id":"recf6KZggr3sjwySl"} 2026-03-30 11:47:47 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":[]} 2026-03-30 11:47:48 [INFO] Airtable GET OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 11:47:48 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":["cgv_acceptees","parcours_status"]} 2026-03-30 11:47:48 [INFO] Airtable PATCH OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 11:47:48 [INFO] Declaration saved OK 2026-03-30 11:48:15 [INFO] POST reçu | {"action":"submit_haccp","keys":["ajax_action","client_id","token","siret","raison_sociale","adresse","code_postal","ville","pays","responsable","telephone","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage"]} 2026-03-30 11:48:15 [INFO] submit_haccp START | {"client_id":"recf6KZggr3sjwySl","token_len":64,"post_keys":"ajax_action,client_id,token,siret,raison_sociale,adresse,code_postal,ville,pays,responsable,telephone,staff_count,zones,zones_nuisibles,freq_surveillance,freq_nettoyage,freq_dechets,produits_nettoyage,controle_reception,types_stockage"} 2026-03-30 11:48:15 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":[]} 2026-03-30 11:48:15 [INFO] Airtable GET OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 11:48:15 [INFO] Client trouvé | {"status":"active","token_match":true} 2026-03-30 11:48:15 [INFO] Création établissement Airtable | {"nom":"gtu","siret":"1222233","zones":"Cuisine, Zone de préparation"} 2026-03-30 11:48:15 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblZzVv6s6xpjZei7","body_keys":["name","siret","raison_sociale","adresse","city","telephone","responsible_name","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","activity_type","client_id","version_count"]} 2026-03-30 11:48:16 [INFO] Airtable POST OK | {"code":200,"id":"recI3mAzOneHoGQ5O"} 2026-03-30 11:48:16 [INFO] Établissement créé | {"estab_id":"recI3mAzOneHoGQ5O"} 2026-03-30 11:48:16 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":["cgv_acceptees","parcours_status","form2_completed_at"]} 2026-03-30 11:48:16 [INFO] Airtable PATCH OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 11:48:16 [INFO] Envoi réponse client OK — démarrage génération 2026-03-30 11:48:16 [INFO] Début generer_documents() 2026-03-30 11:48:16 [INFO] === DÉBUT GÉNÉRATION DOCUMENTS === | {"client_id":"recf6KZggr3sjwySl","estab_id":"recI3mAzOneHoGQ5O","email":"comallagency@gmail.com"} 2026-03-30 11:48:16 [DEBUG] Payload Docupilot | {"keys":["client_id","establishment_id","email","magic_link_token","nom_etablissement","siret","raison_sociale","adresse","adresse_rue","code_postal","ville","pays","responsable","telephone","activite","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","plan","date_generation","validity_end","reference_dossier","version_document"],"siret":"1222233"} 2026-03-30 11:48:16 [INFO] Génération doc 1/7 | {"type":"Attestation","template_id":"104458"} 2026-03-30 11:48:16 [DEBUG] Docupilot merge | {"template":"104458","data_keys":["client_id","establishment_id","email","magic_link_token","nom_etablissement","siret","raison_sociale","adresse","adresse_rue","code_postal","ville","pays","responsable","telephone","activite","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","plan","date_generation","validity_end","reference_dossier","version_document"]} 2026-03-30 11:48:17 [ERROR] Docupilot HTTP 403 | {"template":"104458","response":"\n\n\n\n \n \n 403 Forbidden<\/title>\n <style type=\"text\/css\">\n html * { padding:0; margin:0; }\n body * { padding:10px 20px; }\n body * * { padding:0; }\n body { font:small sans-serif; background:#eee; color:#000; }\n body>div { border-bottom:1px solid #ddd; }\n h1 { font-weight:normal; margin-bottom:.4em; }\n h1 span { font-size"} 2026-03-30 11:48:17 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 11:48:17 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 11:48:17 [WARN] Doc Attestation | {"url":null,"at_id":"ERREUR"} 2026-03-30 11:48:17 [INFO] Génération doc 2/7 | {"type":"PMS","template_id":"104459"} 2026-03-30 11:48:17 [DEBUG] Docupilot merge | {"template":"104459","data_keys":["client_id","establishment_id","email","magic_link_token","nom_etablissement","siret","raison_sociale","adresse","adresse_rue","code_postal","ville","pays","responsable","telephone","activite","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","plan","date_generation","validity_end","reference_dossier","version_document"]} 2026-03-30 11:48:18 [ERROR] Docupilot HTTP 403 | {"template":"104459","response":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">\n <meta name=\"robots\" content=\"NONE,NOARCHIVE\">\n <title>403 Forbidden<\/title>\n <style type=\"text\/css\">\n html * { padding:0; margin:0; }\n body * { padding:10px 20px; }\n body * * { padding:0; }\n body { font:small sans-serif; background:#eee; color:#000; }\n body>div { border-bottom:1px solid #ddd; }\n h1 { font-weight:normal; margin-bottom:.4em; }\n h1 span { font-size"} 2026-03-30 11:48:18 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 11:48:18 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 11:48:18 [WARN] Doc PMS | {"url":null,"at_id":"ERREUR"} 2026-03-30 11:48:18 [INFO] Génération doc 3/7 | {"type":"Plan_Implantation","template_id":"104460"} 2026-03-30 11:48:18 [DEBUG] Docupilot merge | {"template":"104460","data_keys":["client_id","establishment_id","email","magic_link_token","nom_etablissement","siret","raison_sociale","adresse","adresse_rue","code_postal","ville","pays","responsable","telephone","activite","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","plan","date_generation","validity_end","reference_dossier","version_document"]} 2026-03-30 11:48:19 [ERROR] Docupilot HTTP 403 | {"template":"104460","response":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">\n <meta name=\"robots\" content=\"NONE,NOARCHIVE\">\n <title>403 Forbidden<\/title>\n <style type=\"text\/css\">\n html * { padding:0; margin:0; }\n body * { padding:10px 20px; }\n body * * { padding:0; }\n body { font:small sans-serif; background:#eee; color:#000; }\n body>div { border-bottom:1px solid #ddd; }\n h1 { font-weight:normal; margin-bottom:.4em; }\n h1 span { font-size"} 2026-03-30 11:48:19 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 11:48:19 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 11:48:19 [WARN] Doc Plan_Implantation | {"url":null,"at_id":"ERREUR"} 2026-03-30 11:48:19 [INFO] Génération doc 4/7 | {"type":"Registre_Nuisibles","template_id":"104461"} 2026-03-30 11:48:19 [DEBUG] Docupilot merge | {"template":"104461","data_keys":["client_id","establishment_id","email","magic_link_token","nom_etablissement","siret","raison_sociale","adresse","adresse_rue","code_postal","ville","pays","responsable","telephone","activite","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","plan","date_generation","validity_end","reference_dossier","version_document"]} 2026-03-30 11:48:20 [ERROR] Docupilot HTTP 403 | {"template":"104461","response":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">\n <meta name=\"robots\" content=\"NONE,NOARCHIVE\">\n <title>403 Forbidden<\/title>\n <style type=\"text\/css\">\n html * { padding:0; margin:0; }\n body * { padding:10px 20px; }\n body * * { padding:0; }\n body { font:small sans-serif; background:#eee; color:#000; }\n body>div { border-bottom:1px solid #ddd; }\n h1 { font-weight:normal; margin-bottom:.4em; }\n h1 span { font-size"} 2026-03-30 11:48:20 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 11:48:20 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 11:48:20 [WARN] Doc Registre_Nuisibles | {"url":null,"at_id":"ERREUR"} 2026-03-30 11:48:20 [INFO] Génération doc 5/7 | {"type":"Fiches_Suivi","template_id":"104462"} 2026-03-30 11:48:20 [DEBUG] Docupilot merge | {"template":"104462","data_keys":["client_id","establishment_id","email","magic_link_token","nom_etablissement","siret","raison_sociale","adresse","adresse_rue","code_postal","ville","pays","responsable","telephone","activite","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","plan","date_generation","validity_end","reference_dossier","version_document"]} 2026-03-30 11:48:21 [ERROR] Docupilot HTTP 403 | {"template":"104462","response":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">\n <meta name=\"robots\" content=\"NONE,NOARCHIVE\">\n <title>403 Forbidden<\/title>\n <style type=\"text\/css\">\n html * { padding:0; margin:0; }\n body * { padding:10px 20px; }\n body * * { padding:0; }\n body { font:small sans-serif; background:#eee; color:#000; }\n body>div { border-bottom:1px solid #ddd; }\n h1 { font-weight:normal; margin-bottom:.4em; }\n h1 span { font-size"} 2026-03-30 11:48:21 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 11:48:21 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 11:48:21 [WARN] Doc Fiches_Suivi | {"url":null,"at_id":"ERREUR"} 2026-03-30 11:48:21 [INFO] Génération doc 6/7 | {"type":"Procedures_Ecrites","template_id":"104463"} 2026-03-30 11:48:21 [DEBUG] Docupilot merge | {"template":"104463","data_keys":["client_id","establishment_id","email","magic_link_token","nom_etablissement","siret","raison_sociale","adresse","adresse_rue","code_postal","ville","pays","responsable","telephone","activite","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","plan","date_generation","validity_end","reference_dossier","version_document"]} 2026-03-30 11:48:22 [ERROR] Docupilot HTTP 403 | {"template":"104463","response":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">\n <meta name=\"robots\" content=\"NONE,NOARCHIVE\">\n <title>403 Forbidden<\/title>\n <style type=\"text\/css\">\n html * { padding:0; margin:0; }\n body * { padding:10px 20px; }\n body * * { padding:0; }\n body { font:small sans-serif; background:#eee; color:#000; }\n body>div { border-bottom:1px solid #ddd; }\n h1 { font-weight:normal; margin-bottom:.4em; }\n h1 span { font-size"} 2026-03-30 11:48:22 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 11:48:22 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 11:48:22 [WARN] Doc Procedures_Ecrites | {"url":null,"at_id":"ERREUR"} 2026-03-30 11:48:22 [INFO] Génération doc 7/7 | {"type":"Registre_Tracabilite","template_id":"104464"} 2026-03-30 11:48:22 [DEBUG] Docupilot merge | {"template":"104464","data_keys":["client_id","establishment_id","email","magic_link_token","nom_etablissement","siret","raison_sociale","adresse","adresse_rue","code_postal","ville","pays","responsable","telephone","activite","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","plan","date_generation","validity_end","reference_dossier","version_document"]} 2026-03-30 11:48:23 [ERROR] Docupilot HTTP 403 | {"template":"104464","response":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">\n <meta name=\"robots\" content=\"NONE,NOARCHIVE\">\n <title>403 Forbidden<\/title>\n <style type=\"text\/css\">\n html * { padding:0; margin:0; }\n body * { padding:10px 20px; }\n body * * { padding:0; }\n body { font:small sans-serif; background:#eee; color:#000; }\n body>div { border-bottom:1px solid #ddd; }\n h1 { font-weight:normal; margin-bottom:.4em; }\n h1 span { font-size"} 2026-03-30 11:48:23 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 11:48:23 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 11:48:23 [WARN] Doc Registre_Tracabilite | {"url":null,"at_id":"ERREUR"} 2026-03-30 11:48:23 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":["parcours_status","docs_generated_at"]} 2026-03-30 11:48:24 [INFO] Airtable PATCH OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 11:48:24 [INFO] Email send | {"to":"comallagency@gmail.com","subject":"Vos 7 documents HACCP sont prêts — gtu","sent":true} 2026-03-30 11:48:24 [INFO] === FIN GÉNÉRATION DOCUMENTS === | {"docs":7} 2026-03-30 11:48:24 [INFO] Fin generer_documents() 2026-03-30 12:44:54 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-03-30 12:44:54 [INFO] init_payment | {"email":"comallagency@gmail.com","nom":"ffff","plan":"mensuel"} 2026-03-30 12:44:54 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'comallagency@gmail.com'"} 2026-03-30 12:44:56 [INFO] Airtable SEARCH result | {"code":200,"found":1} 2026-03-30 12:44:56 [INFO] Client existant trouvé | {"id":"recf6KZggr3sjwySl"} 2026-03-30 12:44:56 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":["nom_etablissement","plan","activity_type","parcours_status"]} 2026-03-30 12:44:57 [INFO] Airtable PATCH OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 12:44:57 [INFO] Création customer Stripe 2026-03-30 12:44:57 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-03-30 12:44:57 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UF7YhTPQUs3gHT"} 2026-03-30 12:44:57 [INFO] init_payment OK | {"customer_id":"cus_UF7YhTPQUs3gHT","airtable_id":"recf6KZggr3sjwySl"} 2026-03-30 12:51:35 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-03-30 12:51:35 [INFO] confirm_subscription | {"customer_id":"cus_UF7YhTPQUs3gHT","price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0","pm":"pm_1TGdPuR...","at_id":"recf6KZggr3sjwySl"} 2026-03-30 12:51:35 [INFO] Attach payment method 2026-03-30 12:51:35 [DEBUG] Stripe POST /v1/payment_methods/pm_1TGdPuRVbk0a9x0cqRmk6loK/attach | {"keys":["customer"]} 2026-03-30 12:51:35 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TGdPuRVbk0a9x0cqRmk6loK\/attach","id":"pm_1TGdPuRVbk0a9x0cqRmk6loK"} 2026-03-30 12:51:35 [DEBUG] Stripe POST /v1/customers/cus_UF7YhTPQUs3gHT | {"keys":["invoice_settings"]} 2026-03-30 12:51:36 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UF7YhTPQUs3gHT","id":"cus_UF7YhTPQUs3gHT"} 2026-03-30 12:51:36 [INFO] Création abonnement Stripe | {"price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0"} 2026-03-30 12:51:36 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-03-30 12:51:40 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TGdPwRVbk0a9x0czitG5Qu9"} 2026-03-30 12:51:40 [INFO] Abonnement créé | {"sub_id":"sub_1TGdPwRVbk0a9x0czitG5Qu9","end":"2026-04-30"} 2026-03-30 12:51:40 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription","parcours_status","payment_confirmed_at"]} 2026-03-30 12:51:42 [INFO] Airtable PATCH OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 12:51:42 [INFO] Email send | {"to":"comallagency@gmail.com","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-03-30 12:51:42 [INFO] confirm_subscription OK | {"token":"9772021f..."} 2026-03-30 12:51:45 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-03-30 12:51:45 [INFO] save_declaration | {"client_id":"recf6KZggr3sjwySl"} 2026-03-30 12:51:45 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":[]} 2026-03-30 12:51:46 [INFO] Airtable GET OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 12:51:46 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":["cgv_acceptees","parcours_status"]} 2026-03-30 12:51:46 [INFO] Airtable PATCH OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 12:51:46 [INFO] Declaration saved OK 2026-03-30 12:52:12 [INFO] POST reçu | {"action":"submit_haccp","keys":["ajax_action","client_id","token","siret","raison_sociale","adresse","code_postal","ville","pays","responsable","telephone","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage"]} 2026-03-30 12:52:12 [INFO] submit_haccp START | {"client_id":"recf6KZggr3sjwySl","token_len":64,"post_keys":"ajax_action,client_id,token,siret,raison_sociale,adresse,code_postal,ville,pays,responsable,telephone,staff_count,zones,zones_nuisibles,freq_surveillance,freq_nettoyage,freq_dechets,produits_nettoyage,controle_reception,types_stockage"} 2026-03-30 12:52:12 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":[]} 2026-03-30 12:52:12 [INFO] Airtable GET OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 12:52:12 [INFO] Client trouvé | {"status":"active","token_match":true} 2026-03-30 12:52:12 [INFO] Création établissement Airtable | {"nom":"ffff","siret":"1222233","zones":"Zone de préparation"} 2026-03-30 12:52:12 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblZzVv6s6xpjZei7","body_keys":["name","siret","raison_sociale","adresse","city","telephone","responsible_name","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","activity_type","client_id","version_count"]} 2026-03-30 12:52:13 [INFO] Airtable POST OK | {"code":200,"id":"recdAuMYFAvuhuTGv"} 2026-03-30 12:52:13 [INFO] Établissement créé | {"estab_id":"recdAuMYFAvuhuTGv"} 2026-03-30 12:52:13 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":["cgv_acceptees","parcours_status","form2_completed_at"]} 2026-03-30 12:52:13 [INFO] Airtable PATCH OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 12:52:13 [INFO] Envoi réponse client OK — démarrage génération 2026-03-30 12:52:13 [INFO] Début generer_documents() 2026-03-30 12:52:13 [INFO] === DÉBUT GÉNÉRATION DOCUMENTS === | {"client_id":"recf6KZggr3sjwySl","estab_id":"recdAuMYFAvuhuTGv","email":"comallagency@gmail.com"} 2026-03-30 12:52:13 [DEBUG] Payload Docupilot | {"keys":["client_id","establishment_id","email","magic_link_token","nom_etablissement","siret","raison_sociale","adresse","adresse_rue","code_postal","ville","pays","responsable","telephone","activite","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","plan","date_generation","validity_end","reference_dossier","version_document"],"siret":"1222233"} 2026-03-30 12:52:13 [INFO] Génération doc 1/7 | {"type":"Attestation","template_id":"104458"} 2026-03-30 12:52:13 [DEBUG] Docupilot merge | {"template":"104458"} 2026-03-30 12:52:17 [INFO] Docupilot merge OK | {"template":"104458","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104458\/generated\/ddd8de4f-a6d7-4b46-a1e2-4d8b5bdc484e\/PMS_template_2026-03-30%2012_52_14.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=%2F1OM0j81vQ14RKa1LfMZ4%2FKZCz4%3D&Expires=1774871537"} 2026-03-30 12:52:17 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 12:52:18 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 12:52:18 [INFO] Doc Attestation | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104458\/generated\/ddd8de4f-a6d7-4b46-a1e2-4d8b5bdc484e\/PMS_template_2026-03-30%2012_52_14.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=%2F1OM0j81vQ14RKa1LfMZ4%2FKZCz4%3D&Expires=1774871537","at_id":"ERREUR"} 2026-03-30 12:52:18 [INFO] Génération doc 2/7 | {"type":"PMS","template_id":"104459"} 2026-03-30 12:52:18 [DEBUG] Docupilot merge | {"template":"104459"} 2026-03-30 12:52:21 [INFO] Docupilot merge OK | {"template":"104459","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104459\/generated\/aa6895ba-2262-494b-b891-5cbc4cd8e436\/Attestation_Conformite_template_2026-03-30%2012_52_18.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=oPW9KltFX1EEOIJ6jwTuYmWi33Q%3D&Expires=1774871541"} 2026-03-30 12:52:21 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 12:52:22 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 12:52:22 [INFO] Doc PMS | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104459\/generated\/aa6895ba-2262-494b-b891-5cbc4cd8e436\/Attestation_Conformite_template_2026-03-30%2012_52_18.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=oPW9KltFX1EEOIJ6jwTuYmWi33Q%3D&Expires=1774871541","at_id":"ERREUR"} 2026-03-30 12:52:22 [INFO] Génération doc 3/7 | {"type":"Plan_Implantation","template_id":"104460"} 2026-03-30 12:52:22 [DEBUG] Docupilot merge | {"template":"104460"} 2026-03-30 12:52:26 [INFO] Docupilot merge OK | {"template":"104460","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104460\/generated\/6269f5b0-6d2f-4e5a-b6f9-1de728dbd185\/Plan_Implantation_2026-03-30%2012_52_22.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=auAqv8%2BvRSAkVIIRheLrCmgk3Ro%3D&Expires=1774871546"} 2026-03-30 12:52:26 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 12:52:27 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 12:52:27 [INFO] Doc Plan_Implantation | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104460\/generated\/6269f5b0-6d2f-4e5a-b6f9-1de728dbd185\/Plan_Implantation_2026-03-30%2012_52_22.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=auAqv8%2BvRSAkVIIRheLrCmgk3Ro%3D&Expires=1774871546","at_id":"ERREUR"} 2026-03-30 12:52:27 [INFO] Génération doc 4/7 | {"type":"Registre_Nuisibles","template_id":"104461"} 2026-03-30 12:52:27 [DEBUG] Docupilot merge | {"template":"104461"} 2026-03-30 12:52:30 [INFO] Docupilot merge OK | {"template":"104461","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104461\/generated\/8add9195-c35e-40c8-9b9d-b6821187c771\/Registre_Nuisibles_2026-03-30%2012_52_28.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=2ma6uv%2BEE9ASII%2BGAERfdV2UvSw%3D&Expires=1774871550"} 2026-03-30 12:52:30 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 12:52:31 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 12:52:31 [INFO] Doc Registre_Nuisibles | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104461\/generated\/8add9195-c35e-40c8-9b9d-b6821187c771\/Registre_Nuisibles_2026-03-30%2012_52_28.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=2ma6uv%2BEE9ASII%2BGAERfdV2UvSw%3D&Expires=1774871550","at_id":"ERREUR"} 2026-03-30 12:52:31 [INFO] Génération doc 5/7 | {"type":"Fiches_Suivi","template_id":"104462"} 2026-03-30 12:52:31 [DEBUG] Docupilot merge | {"template":"104462"} 2026-03-30 12:52:34 [INFO] Docupilot merge OK | {"template":"104462","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104462\/generated\/e14ff3eb-96ef-42b1-b7da-c51f4508ea94\/Fiches_Suivi_2026-03-30%2012_52_32.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=6rnbhqbJeZxFNHrZlKhlql40l3w%3D&Expires=1774871554"} 2026-03-30 12:52:34 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 12:52:35 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 12:52:35 [INFO] Doc Fiches_Suivi | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104462\/generated\/e14ff3eb-96ef-42b1-b7da-c51f4508ea94\/Fiches_Suivi_2026-03-30%2012_52_32.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=6rnbhqbJeZxFNHrZlKhlql40l3w%3D&Expires=1774871554","at_id":"ERREUR"} 2026-03-30 12:52:35 [INFO] Génération doc 6/7 | {"type":"Procedures_Ecrites","template_id":"104463"} 2026-03-30 12:52:35 [DEBUG] Docupilot merge | {"template":"104463"} 2026-03-30 12:52:38 [INFO] Docupilot merge OK | {"template":"104463","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104463\/generated\/28167ccf-e7e4-4460-a2a1-8ee3e0b71055\/Procedures_Ecrites_2026-03-30%2012_52_36.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=Ec5qHdn45Dw%2B5fGhkbKcbBct3VQ%3D&Expires=1774871558"} 2026-03-30 12:52:38 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 12:52:39 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 12:52:39 [INFO] Doc Procedures_Ecrites | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104463\/generated\/28167ccf-e7e4-4460-a2a1-8ee3e0b71055\/Procedures_Ecrites_2026-03-30%2012_52_36.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=Ec5qHdn45Dw%2B5fGhkbKcbBct3VQ%3D&Expires=1774871558","at_id":"ERREUR"} 2026-03-30 12:52:39 [INFO] Génération doc 7/7 | {"type":"Registre_Tracabilite","template_id":"104464"} 2026-03-30 12:52:39 [DEBUG] Docupilot merge | {"template":"104464"} 2026-03-30 12:52:43 [INFO] Docupilot merge OK | {"template":"104464","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104464\/generated\/085ba904-1f44-40ea-a389-2a8e6c89466c\/Registre_Tracabilite_2026-03-30%2012_52_40.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=JTcrX82p1JoRlYDkNlRk%2B6j0fQs%3D&Expires=1774871563"} 2026-03-30 12:52:43 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","body_keys":["document_type","file_name","cloudinary_url","establishment_id","client_id","version","validity_end","created_at","status"]} 2026-03-30 12:52:43 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tblJ9l8XSbsQ0u2jl","response":"{\"error\":{\"type\":\"UNKNOWN_FIELD_NAME\",\"message\":\"Unknown field name: \\\"client_id\\\"\"}}"} 2026-03-30 12:52:43 [INFO] Doc Registre_Tracabilite | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104464\/generated\/085ba904-1f44-40ea-a389-2a8e6c89466c\/Registre_Tracabilite_2026-03-30%2012_52_40.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=JTcrX82p1JoRlYDkNlRk%2B6j0fQs%3D&Expires=1774871563","at_id":"ERREUR"} 2026-03-30 12:52:43 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/apps4ghLAXNMLkq4r\/tbliVOGv17qq4ILEp\/recf6KZggr3sjwySl","body_keys":["parcours_status","docs_generated_at"]} 2026-03-30 12:52:44 [INFO] Airtable PATCH OK | {"code":200,"id":"recf6KZggr3sjwySl"} 2026-03-30 12:52:44 [INFO] Email send | {"to":"comallagency@gmail.com","subject":"Vos 7 documents HACCP sont prêts — ffff","sent":true} 2026-03-30 12:52:44 [INFO] === FIN GÉNÉRATION DOCUMENTS === | {"docs":7} 2026-03-30 12:52:44 [INFO] Fin generer_documents() 2026-03-30 13:28:49 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-03-30 13:28:49 [INFO] init_payment | {"email":"comallagency@gmail.com","nom":"tripo","plan":"mensuel"} 2026-03-30 13:28:49 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'comallagency@gmail.com'"} 2026-03-30 13:28:51 [INFO] Airtable SEARCH result | {"code":200,"found":0} 2026-03-30 13:28:51 [INFO] Nouveau client — création Airtable 2026-03-30 13:28:51 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4","body_keys":["email","nom_etablissement","plan","date_inscription"]} 2026-03-30 13:28:52 [INFO] Airtable POST OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:28:52 [INFO] Client créé | {"id":"recywbI9u8QutTBrn"} 2026-03-30 13:28:52 [INFO] Création customer Stripe 2026-03-30 13:28:52 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-03-30 13:28:52 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UF8GfoOpRaRTVa"} 2026-03-30 13:28:52 [INFO] init_payment OK | {"customer_id":"cus_UF8GfoOpRaRTVa","airtable_id":"recywbI9u8QutTBrn"} 2026-03-30 13:29:06 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-03-30 13:29:06 [INFO] confirm_subscription | {"customer_id":"cus_UF8GfoOpRaRTVa","price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0","pm":"pm_1TGe0DR...","at_id":"recywbI9u8QutTBrn"} 2026-03-30 13:29:06 [INFO] Attach payment method 2026-03-30 13:29:06 [DEBUG] Stripe POST /v1/payment_methods/pm_1TGe0DRVbk0a9x0cxp5zak93/attach | {"keys":["customer"]} 2026-03-30 13:29:06 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TGe0DRVbk0a9x0cxp5zak93\/attach","id":"pm_1TGe0DRVbk0a9x0cxp5zak93"} 2026-03-30 13:29:06 [DEBUG] Stripe POST /v1/customers/cus_UF8GfoOpRaRTVa | {"keys":["invoice_settings"]} 2026-03-30 13:29:07 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UF8GfoOpRaRTVa","id":"cus_UF8GfoOpRaRTVa"} 2026-03-30 13:29:07 [INFO] Création abonnement Stripe | {"price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0"} 2026-03-30 13:29:07 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-03-30 13:29:11 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TGe0FRVbk0a9x0cuwPWpsl0"} 2026-03-30 13:29:11 [INFO] Abonnement créé | {"sub_id":"sub_1TGe0FRVbk0a9x0cuwPWpsl0","end":"2026-04-30"} 2026-03-30 13:29:11 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription"]} 2026-03-30 13:29:11 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:29:11 [INFO] Email send | {"to":"comallagency@gmail.com","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-03-30 13:29:11 [INFO] confirm_subscription OK | {"token":"7b379f7b..."} 2026-03-30 13:29:14 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-03-30 13:29:14 [INFO] save_declaration | {"client_id":"recywbI9u8QutTBrn"} 2026-03-30 13:29:14 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":[]} 2026-03-30 13:29:15 [INFO] Airtable GET OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:29:15 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["cgv_acceptees"]} 2026-03-30 13:29:15 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:29:15 [INFO] Declaration saved OK 2026-03-30 13:29:37 [INFO] POST reçu | {"action":"submit_haccp","keys":["ajax_action","client_id","token","siret","raison_sociale","adresse","code_postal","ville","pays","responsable","telephone","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage"]} 2026-03-30 13:29:37 [INFO] submit_haccp START | {"client_id":"recywbI9u8QutTBrn","token_len":64,"post_keys":"ajax_action,client_id,token,siret,raison_sociale,adresse,code_postal,ville,pays,responsable,telephone,staff_count,zones,zones_nuisibles,freq_surveillance,freq_nettoyage,freq_dechets,produits_nettoyage,controle_reception,types_stockage"} 2026-03-30 13:29:37 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":[]} 2026-03-30 13:29:38 [INFO] Airtable GET OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:29:38 [INFO] Client trouvé | {"status":"active","token_match":true} 2026-03-30 13:29:38 [INFO] Création établissement Airtable | {"nom":"tripo","siret":"1222233","zones":"Zone de préparation"} 2026-03-30 13:29:38 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblDKTCLFL4QMRYwU","body_keys":["name","siret","legal_form","city","responsible_name","staff_count","zones","cleaning_protocols","waste_management","reception_procedures","storage_temps","pest_prevention","activity_type","client_id","version_count"]} 2026-03-30 13:29:38 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblDKTCLFL4QMRYwU","response":"{\"error\":{\"type\":\"INVALID_MULTIPLE_CHOICE_OPTIONS\",\"message\":\"Insufficient permissions to create new select option \\\"\\\"\\\"\\\"\"}}"} 2026-03-30 13:29:38 [ERROR] Échec création établissement | {"response":{"error":{"type":"INVALID_MULTIPLE_CHOICE_OPTIONS","message":"Insufficient permissions to create new select option \"\"\"\""}}} 2026-03-30 13:29:49 [INFO] POST reçu | {"action":"submit_haccp","keys":["ajax_action","client_id","token","siret","raison_sociale","adresse","code_postal","ville","pays","responsable","telephone","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage"]} 2026-03-30 13:29:49 [INFO] submit_haccp START | {"client_id":"recywbI9u8QutTBrn","token_len":64,"post_keys":"ajax_action,client_id,token,siret,raison_sociale,adresse,code_postal,ville,pays,responsable,telephone,staff_count,zones,zones_nuisibles,freq_surveillance,freq_nettoyage,freq_dechets,produits_nettoyage,controle_reception,types_stockage"} 2026-03-30 13:29:49 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":[]} 2026-03-30 13:29:49 [INFO] Airtable GET OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:29:49 [INFO] Client trouvé | {"status":"active","token_match":true} 2026-03-30 13:29:49 [INFO] Création établissement Airtable | {"nom":"tripo","siret":"1222233","zones":"Zone de préparation"} 2026-03-30 13:29:49 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblDKTCLFL4QMRYwU","body_keys":["name","siret","legal_form","city","responsible_name","staff_count","zones","cleaning_protocols","waste_management","reception_procedures","storage_temps","pest_prevention","activity_type","client_id","version_count"]} 2026-03-30 13:29:50 [ERROR] Airtable HTTP 422 | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblDKTCLFL4QMRYwU","response":"{\"error\":{\"type\":\"INVALID_MULTIPLE_CHOICE_OPTIONS\",\"message\":\"Insufficient permissions to create new select option \\\"\\\"\\\"\\\"\"}}"} 2026-03-30 13:29:50 [ERROR] Échec création établissement | {"response":{"error":{"type":"INVALID_MULTIPLE_CHOICE_OPTIONS","message":"Insufficient permissions to create new select option \"\"\"\""}}} 2026-03-30 13:43:23 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-03-30 13:43:23 [INFO] init_payment | {"email":"comallagency@gmail.com","nom":"kipo","plan":"mensuel"} 2026-03-30 13:43:23 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'comallagency@gmail.com'"} 2026-03-30 13:43:24 [INFO] Airtable SEARCH result | {"code":200,"found":1} 2026-03-30 13:43:24 [INFO] Client existant trouvé | {"id":"recywbI9u8QutTBrn"} 2026-03-30 13:43:24 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["nom_etablissement","plan"]} 2026-03-30 13:43:25 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:43:25 [INFO] Création customer Stripe 2026-03-30 13:43:25 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-03-30 13:43:25 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UF8V5zOwiFLAts"} 2026-03-30 13:43:25 [INFO] init_payment OK | {"customer_id":"cus_UF8V5zOwiFLAts","airtable_id":"recywbI9u8QutTBrn"} 2026-03-30 13:43:38 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-03-30 13:43:38 [INFO] confirm_subscription | {"customer_id":"cus_UF8V5zOwiFLAts","price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0","pm":"pm_1TGeEIR...","at_id":"recywbI9u8QutTBrn"} 2026-03-30 13:43:38 [INFO] Attach payment method 2026-03-30 13:43:38 [DEBUG] Stripe POST /v1/payment_methods/pm_1TGeEIRVbk0a9x0cycQbukdT/attach | {"keys":["customer"]} 2026-03-30 13:43:39 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TGeEIRVbk0a9x0cycQbukdT\/attach","id":"pm_1TGeEIRVbk0a9x0cycQbukdT"} 2026-03-30 13:43:39 [DEBUG] Stripe POST /v1/customers/cus_UF8V5zOwiFLAts | {"keys":["invoice_settings"]} 2026-03-30 13:43:39 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UF8V5zOwiFLAts","id":"cus_UF8V5zOwiFLAts"} 2026-03-30 13:43:39 [INFO] Création abonnement Stripe | {"price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0"} 2026-03-30 13:43:39 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-03-30 13:43:43 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TGeEJRVbk0a9x0cdeCTrRVA"} 2026-03-30 13:43:43 [INFO] Abonnement créé | {"sub_id":"sub_1TGeEJRVbk0a9x0cdeCTrRVA","end":"2026-04-30"} 2026-03-30 13:43:43 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription"]} 2026-03-30 13:43:44 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:43:44 [INFO] Email send | {"to":"comallagency@gmail.com","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-03-30 13:43:44 [INFO] confirm_subscription OK | {"token":"1aace2d0..."} 2026-03-30 13:43:48 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-03-30 13:43:48 [INFO] save_declaration | {"client_id":"recywbI9u8QutTBrn"} 2026-03-30 13:43:48 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":[]} 2026-03-30 13:43:48 [INFO] Airtable GET OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:43:48 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["cgv_acceptees"]} 2026-03-30 13:43:48 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:43:48 [INFO] Declaration saved OK 2026-03-30 13:44:21 [INFO] POST reçu | {"action":"submit_haccp","keys":["ajax_action","client_id","token","siret","raison_sociale","adresse","code_postal","ville","pays","responsable","telephone","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage"]} 2026-03-30 13:44:21 [INFO] submit_haccp START | {"client_id":"recywbI9u8QutTBrn","token_len":64,"post_keys":"ajax_action,client_id,token,siret,raison_sociale,adresse,code_postal,ville,pays,responsable,telephone,staff_count,zones,zones_nuisibles,freq_surveillance,freq_nettoyage,freq_dechets,produits_nettoyage,controle_reception,types_stockage"} 2026-03-30 13:44:21 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":[]} 2026-03-30 13:44:21 [INFO] Airtable GET OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:44:21 [INFO] Client trouvé | {"status":"active","token_match":true} 2026-03-30 13:44:21 [INFO] Création établissement Airtable | {"nom":"kipo","siret":"1222233","zones":"Zone de préparation"} 2026-03-30 13:44:21 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblDKTCLFL4QMRYwU","body_keys":["name","siret","legal_form","city","responsible_name","staff_count","zones","cleaning_protocols","waste_management","reception_procedures","storage_temps","pest_prevention","activity_type","client_id","version_count"]} 2026-03-30 13:44:22 [INFO] Airtable POST OK | {"code":200,"id":"recmn7nXE7Zef95P1"} 2026-03-30 13:44:22 [INFO] Établissement créé | {"estab_id":"recmn7nXE7Zef95P1"} 2026-03-30 13:44:22 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["cgv_acceptees"]} 2026-03-30 13:44:22 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:44:22 [INFO] Envoi réponse client OK — démarrage génération 2026-03-30 13:44:22 [INFO] Début generer_documents() 2026-03-30 13:44:22 [INFO] === DÉBUT GÉNÉRATION DOCUMENTS === | {"client_id":"recywbI9u8QutTBrn","estab_id":"recmn7nXE7Zef95P1","email":"comallagency@gmail.com"} 2026-03-30 13:44:22 [DEBUG] Payload Docupilot | {"keys":["client_id","establishment_id","email","magic_link_token","nom_etablissement","siret","raison_sociale","adresse","adresse_rue","code_postal","ville","pays","responsable","telephone","activite","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","plan","date_generation","validity_end","reference_dossier","version_document"],"siret":"1222233"} 2026-03-30 13:44:22 [INFO] Génération doc 1/7 | {"type":"Attestation","template_id":"104458"} 2026-03-30 13:44:22 [DEBUG] Docupilot merge | {"template":"104458"} 2026-03-30 13:44:26 [INFO] Docupilot OK | {"tpl":"104458","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104458\/generated\/316c84c5-fefb-43eb-8c69-27f86f5dc531\/PMS_template_2026-03-30%2013_44_23.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=bxkTC%2FyZJokhEANiIIfV%2BwyNMuc%3D&Expires=1774874666"} 2026-03-30 13:44:26 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 13:44:27 [INFO] Airtable POST OK | {"code":200,"id":"recrIl9UxlJhvRYVB"} 2026-03-30 13:44:27 [INFO] Doc Attestation | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104458\/generated\/316c84c5-fefb-43eb-8c69-27f86f5dc531\/PMS_template_2026-03-30%2013_44_23.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=bxkTC%2FyZJokhEANiIIfV%2BwyNMuc%3D&Expires=1774874666","at_id":"recrIl9UxlJhvRYVB"} 2026-03-30 13:44:27 [INFO] Génération doc 2/7 | {"type":"PMS","template_id":"104459"} 2026-03-30 13:44:27 [DEBUG] Docupilot merge | {"template":"104459"} 2026-03-30 13:44:30 [INFO] Docupilot OK | {"tpl":"104459","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104459\/generated\/90e5c84b-b03b-495b-8c96-08adfaf9fddb\/Attestation_Conformite_template_2026-03-30%2013_44_27.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=XSV%2Fa4c3SbJz04T4riLIodL%2B3Ts%3D&Expires=1774874670"} 2026-03-30 13:44:30 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 13:44:31 [INFO] Airtable POST OK | {"code":200,"id":"rec5QokJu8i3z1o1t"} 2026-03-30 13:44:31 [INFO] Doc PMS | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104459\/generated\/90e5c84b-b03b-495b-8c96-08adfaf9fddb\/Attestation_Conformite_template_2026-03-30%2013_44_27.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=XSV%2Fa4c3SbJz04T4riLIodL%2B3Ts%3D&Expires=1774874670","at_id":"rec5QokJu8i3z1o1t"} 2026-03-30 13:44:31 [INFO] Génération doc 3/7 | {"type":"Plan_Implantation","template_id":"104460"} 2026-03-30 13:44:31 [DEBUG] Docupilot merge | {"template":"104460"} 2026-03-30 13:44:35 [INFO] Docupilot OK | {"tpl":"104460","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104460\/generated\/7149b775-1c45-409f-a461-c5bd44767a73\/Plan_Implantation_2026-03-30%2013_44_32.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=ZABdZYqhq9RIfCXIPiRcWLjLV20%3D&Expires=1774874675"} 2026-03-30 13:44:35 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 13:44:36 [INFO] Airtable POST OK | {"code":200,"id":"recYfAQB2HXvJFWV9"} 2026-03-30 13:44:36 [INFO] Doc Plan_Implantation | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104460\/generated\/7149b775-1c45-409f-a461-c5bd44767a73\/Plan_Implantation_2026-03-30%2013_44_32.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=ZABdZYqhq9RIfCXIPiRcWLjLV20%3D&Expires=1774874675","at_id":"recYfAQB2HXvJFWV9"} 2026-03-30 13:44:36 [INFO] Génération doc 4/7 | {"type":"Registre_Nuisibles","template_id":"104461"} 2026-03-30 13:44:36 [DEBUG] Docupilot merge | {"template":"104461"} 2026-03-30 13:44:39 [INFO] Docupilot OK | {"tpl":"104461","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104461\/generated\/82300073-a200-492f-bb54-aba3a6d3e77e\/Registre_Nuisibles_2026-03-30%2013_44_36.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=70QYNipfqoBfm2Wlzk5R2T%2FUOss%3D&Expires=1774874679"} 2026-03-30 13:44:39 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 13:44:40 [INFO] Airtable POST OK | {"code":200,"id":"reca7ygMvXZ3d8vae"} 2026-03-30 13:44:40 [INFO] Doc Registre_Nuisibles | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104461\/generated\/82300073-a200-492f-bb54-aba3a6d3e77e\/Registre_Nuisibles_2026-03-30%2013_44_36.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=70QYNipfqoBfm2Wlzk5R2T%2FUOss%3D&Expires=1774874679","at_id":"reca7ygMvXZ3d8vae"} 2026-03-30 13:44:40 [INFO] Génération doc 5/7 | {"type":"Fiches_Suivi","template_id":"104462"} 2026-03-30 13:44:40 [DEBUG] Docupilot merge | {"template":"104462"} 2026-03-30 13:44:45 [INFO] Docupilot OK | {"tpl":"104462","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104462\/generated\/61790b8f-e2e8-43ac-be14-8cbd66bcf214\/Fiches_Suivi_2026-03-30%2013_44_41.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=ZoNQEvOW5mXHIBE5ONQT%2FJyEAEE%3D&Expires=1774874685"} 2026-03-30 13:44:45 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 13:44:45 [INFO] Airtable POST OK | {"code":200,"id":"recp4iO2wQg28yCRL"} 2026-03-30 13:44:45 [INFO] Doc Fiches_Suivi | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104462\/generated\/61790b8f-e2e8-43ac-be14-8cbd66bcf214\/Fiches_Suivi_2026-03-30%2013_44_41.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=ZoNQEvOW5mXHIBE5ONQT%2FJyEAEE%3D&Expires=1774874685","at_id":"recp4iO2wQg28yCRL"} 2026-03-30 13:44:45 [INFO] Génération doc 6/7 | {"type":"Procedures_Ecrites","template_id":"104463"} 2026-03-30 13:44:45 [DEBUG] Docupilot merge | {"template":"104463"} 2026-03-30 13:44:49 [INFO] Docupilot OK | {"tpl":"104463","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104463\/generated\/03131568-1543-4b9a-ad3e-2096cca3282f\/Procedures_Ecrites_2026-03-30%2013_44_46.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=vyOSpK8DcU8TxaP203OINlAW718%3D&Expires=1774874689"} 2026-03-30 13:44:49 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 13:44:50 [INFO] Airtable POST OK | {"code":200,"id":"reciHkl8iIM5yj18x"} 2026-03-30 13:44:50 [INFO] Doc Procedures_Ecrites | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104463\/generated\/03131568-1543-4b9a-ad3e-2096cca3282f\/Procedures_Ecrites_2026-03-30%2013_44_46.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=vyOSpK8DcU8TxaP203OINlAW718%3D&Expires=1774874689","at_id":"reciHkl8iIM5yj18x"} 2026-03-30 13:44:50 [INFO] Génération doc 7/7 | {"type":"Registre_Tracabilite","template_id":"104464"} 2026-03-30 13:44:50 [DEBUG] Docupilot merge | {"template":"104464"} 2026-03-30 13:44:54 [INFO] Docupilot OK | {"tpl":"104464","url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104464\/generated\/de7c5a24-de43-4c98-ae3c-95fcad7a3370\/Registre_Tracabilite_2026-03-30%2013_44_51.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=WersGO%2BxKw3OQf7piUu2DZEO5a0%3D&Expires=1774874694"} 2026-03-30 13:44:54 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 13:44:54 [INFO] Airtable POST OK | {"code":200,"id":"recxOUCyO2VnAk3yi"} 2026-03-30 13:44:54 [INFO] Doc Registre_Tracabilite | {"url":"https:\/\/app-dp-private.s3.amazonaws.com\/workspaces\/w15213\/templates\/t104464\/generated\/de7c5a24-de43-4c98-ae3c-95fcad7a3370\/Registre_Tracabilite_2026-03-30%2013_44_51.pdf?AWSAccessKeyId=AKIA3LAUV7E3YX4ESOVH&Signature=WersGO%2BxKw3OQf7piUu2DZEO5a0%3D&Expires=1774874694","at_id":"recxOUCyO2VnAk3yi"} 2026-03-30 13:44:54 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["cgv_acceptees"]} 2026-03-30 13:44:55 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 13:44:55 [INFO] Email send | {"to":"comallagency@gmail.com","subject":"Vos 7 documents HACCP sont prêts — kipo","sent":true} 2026-03-30 13:44:55 [INFO] === FIN GÉNÉRATION DOCUMENTS === | {"docs":7} 2026-03-30 13:44:55 [INFO] Fin generer_documents() 2026-03-30 14:02:40 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-03-30 14:02:40 [INFO] init_payment | {"email":"comallagency@gmail.com","nom":"ddddd","plan":"trimestriel"} 2026-03-30 14:02:40 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'comallagency@gmail.com'"} 2026-03-30 14:02:41 [INFO] Airtable SEARCH result | {"code":200,"found":1} 2026-03-30 14:02:41 [INFO] Client existant trouvé | {"id":"recywbI9u8QutTBrn"} 2026-03-30 14:02:41 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["nom_etablissement","plan"]} 2026-03-30 14:02:42 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 14:02:42 [INFO] Création customer Stripe 2026-03-30 14:02:42 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-03-30 14:02:42 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UF8olxt3UXvn64"} 2026-03-30 14:02:42 [INFO] init_payment OK | {"customer_id":"cus_UF8olxt3UXvn64","airtable_id":"recywbI9u8QutTBrn"} 2026-03-30 14:02:54 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-03-30 14:02:54 [INFO] confirm_subscription | {"customer_id":"cus_UF8olxt3UXvn64","price_id":"price_1T1MiORVbk0a9x0cD4lTO6H8","pm":"pm_1TGeWvR...","at_id":"recywbI9u8QutTBrn"} 2026-03-30 14:02:54 [INFO] Attach payment method 2026-03-30 14:02:54 [DEBUG] Stripe POST /v1/payment_methods/pm_1TGeWvRVbk0a9x0c3TYVDhko/attach | {"keys":["customer"]} 2026-03-30 14:02:54 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TGeWvRVbk0a9x0c3TYVDhko\/attach","id":"pm_1TGeWvRVbk0a9x0c3TYVDhko"} 2026-03-30 14:02:54 [DEBUG] Stripe POST /v1/customers/cus_UF8olxt3UXvn64 | {"keys":["invoice_settings"]} 2026-03-30 14:02:55 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UF8olxt3UXvn64","id":"cus_UF8olxt3UXvn64"} 2026-03-30 14:02:55 [INFO] Création abonnement Stripe | {"price_id":"price_1T1MiORVbk0a9x0cD4lTO6H8"} 2026-03-30 14:02:55 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-03-30 14:02:58 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TGeWxRVbk0a9x0cnpy9vA5k"} 2026-03-30 14:02:58 [INFO] Abonnement créé | {"sub_id":"sub_1TGeWxRVbk0a9x0cnpy9vA5k","end":"2026-06-30"} 2026-03-30 14:02:58 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription"]} 2026-03-30 14:02:59 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 14:02:59 [INFO] Email send | {"to":"comallagency@gmail.com","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-03-30 14:02:59 [INFO] confirm_subscription OK | {"token":"456a0837..."} 2026-03-30 14:03:02 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-03-30 14:03:02 [INFO] save_declaration | {"client_id":"recywbI9u8QutTBrn"} 2026-03-30 14:03:02 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":[]} 2026-03-30 14:03:02 [INFO] Airtable GET OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 14:03:02 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["cgv_acceptees"]} 2026-03-30 14:03:03 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 14:03:03 [INFO] Declaration saved OK 2026-03-30 14:03:29 [INFO] POST reçu | {"action":"submit_haccp","keys":["ajax_action","client_id","token","siret","raison_sociale","adresse","code_postal","ville","pays","responsable","telephone","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage"]} 2026-03-30 14:03:29 [INFO] submit_haccp START | {"client_id":"recywbI9u8QutTBrn","token_len":64,"post_keys":"ajax_action,client_id,token,siret,raison_sociale,adresse,code_postal,ville,pays,responsable,telephone,staff_count,zones,zones_nuisibles,freq_surveillance,freq_nettoyage,freq_dechets,produits_nettoyage,controle_reception,types_stockage"} 2026-03-30 14:03:29 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":[]} 2026-03-30 14:03:30 [INFO] Airtable GET OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 14:03:30 [INFO] Client trouvé | {"status":"active","token_match":true} 2026-03-30 14:03:30 [INFO] Création établissement Airtable | {"nom":"ddddd","siret":"1222233444","zones":"Zone de préparation"} 2026-03-30 14:03:30 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblDKTCLFL4QMRYwU","body_keys":["name","siret","legal_form","city","responsible_name","staff_count","zones","cleaning_protocols","waste_management","reception_procedures","storage_temps","pest_prevention","activity_type","client_id","version_count"]} 2026-03-30 14:03:31 [INFO] Airtable POST OK | {"code":200,"id":"recqnwWrCAIJuOqIL"} 2026-03-30 14:03:31 [INFO] Établissement créé | {"estab_id":"recqnwWrCAIJuOqIL"} 2026-03-30 14:03:31 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["cgv_acceptees"]} 2026-03-30 14:03:31 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 14:03:31 [INFO] Envoi réponse client OK — démarrage génération 2026-03-30 14:03:31 [INFO] Début generer_documents() 2026-03-30 14:03:31 [INFO] === DÉBUT GÉNÉRATION DOCUMENTS === | {"client_id":"recywbI9u8QutTBrn","estab_id":"recqnwWrCAIJuOqIL","email":"comallagency@gmail.com"} 2026-03-30 14:03:31 [DEBUG] Payload Docupilot | {"keys":["client_id","establishment_id","email","magic_link_token","nom_etablissement","siret","raison_sociale","adresse","adresse_rue","code_postal","ville","pays","responsable","telephone","activite","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage","plan","date_generation","validity_end","reference_dossier","version_document"],"siret":"1222233444"} 2026-03-30 14:03:31 [INFO] Génération doc 1/7 | {"type":"Attestation","template_id":"104458"} 2026-03-30 14:03:31 [DEBUG] Docupilot merge | {"template":"104458"} 2026-03-30 14:03:35 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104458"} 2026-03-30 14:03:36 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104458_104458.pdf","size":88237} 2026-03-30 14:03:36 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 14:03:36 [INFO] Airtable POST OK | {"code":200,"id":"recLy6FgiURTZZXI0"} 2026-03-30 14:03:36 [INFO] Doc Attestation | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104458_104458.pdf","at_id":"recLy6FgiURTZZXI0"} 2026-03-30 14:03:36 [INFO] Génération doc 2/7 | {"type":"PMS","template_id":"104459"} 2026-03-30 14:03:36 [DEBUG] Docupilot merge | {"template":"104459"} 2026-03-30 14:03:40 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104459"} 2026-03-30 14:03:41 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104459_104459.pdf","size":60653} 2026-03-30 14:03:41 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 14:03:42 [INFO] Airtable POST OK | {"code":200,"id":"rec5TSUX1Hgrazbl2"} 2026-03-30 14:03:42 [INFO] Doc PMS | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104459_104459.pdf","at_id":"rec5TSUX1Hgrazbl2"} 2026-03-30 14:03:42 [INFO] Génération doc 3/7 | {"type":"Plan_Implantation","template_id":"104460"} 2026-03-30 14:03:42 [DEBUG] Docupilot merge | {"template":"104460"} 2026-03-30 14:03:46 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104460"} 2026-03-30 14:03:46 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104460_104460.pdf","size":55845} 2026-03-30 14:03:46 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 14:03:47 [INFO] Airtable POST OK | {"code":200,"id":"recWcuqxYLXw45u19"} 2026-03-30 14:03:47 [INFO] Doc Plan_Implantation | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104460_104460.pdf","at_id":"recWcuqxYLXw45u19"} 2026-03-30 14:03:47 [INFO] Génération doc 4/7 | {"type":"Registre_Nuisibles","template_id":"104461"} 2026-03-30 14:03:47 [DEBUG] Docupilot merge | {"template":"104461"} 2026-03-30 14:03:51 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104461"} 2026-03-30 14:03:51 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104461_104461.pdf","size":59066} 2026-03-30 14:03:51 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 14:03:52 [INFO] Airtable POST OK | {"code":200,"id":"reclslyGTkSiBm12w"} 2026-03-30 14:03:52 [INFO] Doc Registre_Nuisibles | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104461_104461.pdf","at_id":"reclslyGTkSiBm12w"} 2026-03-30 14:03:52 [INFO] Génération doc 5/7 | {"type":"Fiches_Suivi","template_id":"104462"} 2026-03-30 14:03:52 [DEBUG] Docupilot merge | {"template":"104462"} 2026-03-30 14:03:56 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104462"} 2026-03-30 14:03:56 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104462_104462.pdf","size":58448} 2026-03-30 14:03:56 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 14:03:57 [INFO] Airtable POST OK | {"code":200,"id":"recONfd3RnVhZrITo"} 2026-03-30 14:03:57 [INFO] Doc Fiches_Suivi | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104462_104462.pdf","at_id":"recONfd3RnVhZrITo"} 2026-03-30 14:03:57 [INFO] Génération doc 6/7 | {"type":"Procedures_Ecrites","template_id":"104463"} 2026-03-30 14:03:57 [DEBUG] Docupilot merge | {"template":"104463"} 2026-03-30 14:04:00 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104463"} 2026-03-30 14:04:01 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104463_104463.pdf","size":59605} 2026-03-30 14:04:01 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 14:04:02 [INFO] Airtable POST OK | {"code":200,"id":"rec1hmRZLS6J0Td6D"} 2026-03-30 14:04:02 [INFO] Doc Procedures_Ecrites | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104463_104463.pdf","at_id":"rec1hmRZLS6J0Td6D"} 2026-03-30 14:04:02 [INFO] Génération doc 7/7 | {"type":"Registre_Tracabilite","template_id":"104464"} 2026-03-30 14:04:02 [DEBUG] Docupilot merge | {"template":"104464"} 2026-03-30 14:04:06 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104464"} 2026-03-30 14:04:06 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104464_104464.pdf","size":59074} 2026-03-30 14:04:06 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-03-30 14:04:07 [INFO] Airtable POST OK | {"code":200,"id":"recvdVoS6XpwSGUGQ"} 2026-03-30 14:04:07 [INFO] Doc Registre_Tracabilite | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/456a08375b89b905\/104464_104464.pdf","at_id":"recvdVoS6XpwSGUGQ"} 2026-03-30 14:04:07 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recywbI9u8QutTBrn","body_keys":["cgv_acceptees"]} 2026-03-30 14:04:07 [INFO] Airtable PATCH OK | {"code":200,"id":"recywbI9u8QutTBrn"} 2026-03-30 14:04:07 [INFO] Email send | {"to":"comallagency@gmail.com","subject":"Vos 7 documents HACCP sont prêts — ddddd","sent":true} 2026-03-30 14:04:07 [INFO] === FIN GÉNÉRATION DOCUMENTS === | {"docs":7} 2026-03-30 14:04:07 [INFO] Fin generer_documents() 2026-03-31 13:30:49 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-03-31 13:30:49 [INFO] init_payment | {"email":"roychetrit55@gmail.com","nom":"Foufito","plan":"mensuel"} 2026-03-31 13:30:49 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'roychetrit55@gmail.com'"} 2026-03-31 13:30:57 [INFO] Airtable SEARCH result | {"code":200,"found":0} 2026-03-31 13:30:57 [INFO] Nouveau client — création Airtable 2026-03-31 13:30:57 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4","body_keys":["email","nom_etablissement","plan","date_inscription"]} 2026-03-31 13:31:05 [INFO] Airtable POST OK | {"code":200,"id":"reciz7giqkr4nAJtJ"} 2026-03-31 13:31:05 [INFO] Client créé | {"id":"reciz7giqkr4nAJtJ"} 2026-03-31 13:31:05 [INFO] Création customer Stripe 2026-03-31 13:31:05 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-03-31 13:31:05 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UFVWSP7iQscNg8"} 2026-03-31 13:31:05 [INFO] init_payment OK | {"customer_id":"cus_UFVWSP7iQscNg8","airtable_id":"reciz7giqkr4nAJtJ"} 2026-03-31 22:41:57 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-03-31 22:41:57 [INFO] init_payment | {"email":"kevin.s@lesderatiseurs.fr","nom":"Hhgh","plan":"trimestriel"} 2026-03-31 22:41:57 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'kevin.s@lesderatiseurs.fr'"} 2026-03-31 22:41:58 [INFO] Airtable SEARCH result | {"code":200,"found":0} 2026-03-31 22:41:58 [INFO] Nouveau client — création Airtable 2026-03-31 22:41:58 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4","body_keys":["email","nom_etablissement","plan","date_inscription"]} 2026-03-31 22:41:59 [INFO] Airtable POST OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-03-31 22:41:59 [INFO] Client créé | {"id":"recFPG7QTPwXOi9EI"} 2026-03-31 22:41:59 [INFO] Création customer Stripe 2026-03-31 22:41:59 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-03-31 22:42:00 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UFePfYskGxu4CO"} 2026-03-31 22:42:00 [INFO] init_payment OK | {"customer_id":"cus_UFePfYskGxu4CO","airtable_id":"recFPG7QTPwXOi9EI"} 2026-04-05 12:24:34 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-04-05 12:24:34 [INFO] init_payment | {"email":"levin.s@lesderatiseurs.fr","nom":"X","plan":"trimestriel"} 2026-04-05 12:24:34 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'levin.s@lesderatiseurs.fr'"} 2026-04-05 12:24:36 [INFO] Airtable SEARCH result | {"code":200,"found":0} 2026-04-05 12:24:36 [INFO] Nouveau client — création Airtable 2026-04-05 12:24:36 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4","body_keys":["email","nom_etablissement","plan","date_inscription"]} 2026-04-05 12:24:44 [INFO] Airtable POST OK | {"code":200,"id":"rec48ITeyhNiyWWhJ"} 2026-04-05 12:24:44 [INFO] Client créé | {"id":"rec48ITeyhNiyWWhJ"} 2026-04-05 12:24:44 [INFO] Création customer Stripe 2026-04-05 12:24:44 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-04-05 12:24:44 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UHMae7WQBTBh4W"} 2026-04-05 12:24:44 [INFO] init_payment OK | {"customer_id":"cus_UHMae7WQBTBh4W","airtable_id":"rec48ITeyhNiyWWhJ"} 2026-04-07 18:43:42 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-04-07 18:43:42 [INFO] init_payment | {"email":"kevin.s@lesderatiseurs.fr","nom":"Les deratiseurs","plan":"trimestriel"} 2026-04-07 18:43:42 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'kevin.s@lesderatiseurs.fr'"} 2026-04-07 18:43:44 [INFO] Airtable SEARCH result | {"code":200,"found":1} 2026-04-07 18:43:44 [INFO] Client existant trouvé | {"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:43:44 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["nom_etablissement","plan"]} 2026-04-07 18:43:51 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:43:51 [INFO] Création customer Stripe 2026-04-07 18:43:51 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-04-07 18:43:52 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UID9WpdFWLawh3"} 2026-04-07 18:43:52 [INFO] init_payment OK | {"customer_id":"cus_UID9WpdFWLawh3","airtable_id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:44:06 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-04-07 18:44:06 [INFO] confirm_subscription | {"customer_id":"cus_UID9WpdFWLawh3","price_id":"price_1T1MiORVbk0a9x0cD4lTO6H8","pm":"pm_1TJcjSR...","at_id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:44:06 [INFO] Attach payment method 2026-04-07 18:44:06 [DEBUG] Stripe POST /v1/payment_methods/pm_1TJcjSRVbk0a9x0cw0WbmXeO/attach | {"keys":["customer"]} 2026-04-07 18:44:07 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TJcjSRVbk0a9x0cw0WbmXeO\/attach","id":"pm_1TJcjSRVbk0a9x0cw0WbmXeO"} 2026-04-07 18:44:07 [DEBUG] Stripe POST /v1/customers/cus_UID9WpdFWLawh3 | {"keys":["invoice_settings"]} 2026-04-07 18:44:08 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UID9WpdFWLawh3","id":"cus_UID9WpdFWLawh3"} 2026-04-07 18:44:08 [INFO] Création abonnement Stripe | {"price_id":"price_1T1MiORVbk0a9x0cD4lTO6H8"} 2026-04-07 18:44:08 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-04-07 18:44:12 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TJcjURVbk0a9x0cTWWDksVY"} 2026-04-07 18:44:12 [INFO] Abonnement créé | {"sub_id":"sub_1TJcjURVbk0a9x0cTWWDksVY","end":"2026-07-07"} 2026-04-07 18:44:12 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription"]} 2026-04-07 18:44:12 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:44:12 [INFO] Email send | {"to":"kevin.s@lesderatiseurs.fr","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-04-07 18:44:12 [INFO] confirm_subscription OK | {"token":"db3ba184..."} 2026-04-07 18:45:05 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-04-07 18:45:05 [INFO] save_declaration | {"client_id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:45:05 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":[]} 2026-04-07 18:45:05 [INFO] Airtable GET OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:45:06 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["cgv_acceptees"]} 2026-04-07 18:45:06 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:45:06 [INFO] Declaration saved OK 2026-04-07 18:47:09 [INFO] POST reçu | {"action":"submit_haccp","keys":["ajax_action","client_id","token","siret","raison_sociale","adresse","code_postal","ville","pays","responsable","telephone","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage"]} 2026-04-07 18:47:09 [INFO] submit_haccp START | {"client_id":"recFPG7QTPwXOi9EI","token_len":64,"post_keys":"ajax_action,client_id,token,siret,raison_sociale,adresse,code_postal,ville,pays,responsable,telephone,staff_count,zones,zones_nuisibles,freq_surveillance,freq_nettoyage,freq_dechets,produits_nettoyage,controle_reception,types_stockage"} 2026-04-07 18:47:09 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":[]} 2026-04-07 18:47:10 [INFO] Airtable GET OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:47:10 [INFO] Client trouvé | {"status":"active","token_match":true} 2026-04-07 18:47:10 [INFO] Création établissement Airtable | {"nom":"Les deratiseurs","siret":"12345678910152","zones":"Cuisine, Zone de préparation, Zone de stockage, Chambre froide, Zone de vente, Réserve, Local déchets, Sanitaires, Vestiaires"} 2026-04-07 18:47:10 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblDKTCLFL4QMRYwU","body_keys":["name","siret","legal_form","city","responsible_name","staff_count","zones","cleaning_protocols","waste_management","reception_procedures","storage_temps","pest_prevention","activity_type","client_id","version_count"]} 2026-04-07 18:47:11 [INFO] Airtable POST OK | {"code":200,"id":"recQzvLlhiz6o52V2"} 2026-04-07 18:47:11 [INFO] Établissement créé | {"estab_id":"recQzvLlhiz6o52V2"} 2026-04-07 18:47:11 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["cgv_acceptees"]} 2026-04-07 18:47:11 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:47:11 [INFO] Envoi réponse client OK — démarrage génération 2026-04-07 18:47:11 [INFO] Début generer_documents() 2026-04-07 18:47:11 [INFO] === DÉBUT GÉNÉRATION DOCUMENTS === | {"client_id":"recFPG7QTPwXOi9EI","estab_id":"recQzvLlhiz6o52V2","email":"kevin.s@lesderatiseurs.fr"} 2026-04-07 18:47:11 [DEBUG] Payload Docupilot | {"keys":["client_id","establishment_id","email","magic_link_token","plan","nom_etablissement","raison_sociale","siret","adresse_etablissement","activite_principale","responsable_hygiene","effectif","zones","zone_controlee","frequence_nettoyage","produits_nettoyage","dechets","local_dechets","controle_reception","stockage","prevention_nuisibles","frequence_nuisibles","date_controle","observation","action_corrective","responsable_controle","version_document","date_emission","date_debut_validite","date_fin_validite","reference_dossier"],"siret":"12345678910152"} 2026-04-07 18:47:11 [INFO] Génération doc 1/7 | {"type":"Attestation","template_id":"104458"} 2026-04-07 18:47:11 [DEBUG] Docupilot merge | {"template":"104458"} 2026-04-07 18:47:15 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104458"} 2026-04-07 18:47:16 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Attestation_Conformite_V001.pdf","size":89057} 2026-04-07 18:47:16 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 18:47:16 [INFO] Airtable POST OK | {"code":200,"id":"recqckp79s0I7g67j"} 2026-04-07 18:47:16 [INFO] Doc Attestation | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Attestation_Conformite_V001.pdf","at_id":"recqckp79s0I7g67j"} 2026-04-07 18:47:16 [INFO] Génération doc 2/7 | {"type":"PMS","template_id":"104459"} 2026-04-07 18:47:16 [DEBUG] Docupilot merge | {"template":"104459"} 2026-04-07 18:47:20 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104459"} 2026-04-07 18:47:21 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Plan_Maitrise_Sanitaire_V001.pdf","size":60970} 2026-04-07 18:47:21 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 18:47:22 [INFO] Airtable POST OK | {"code":200,"id":"rec2Fh4V4YxqBfHKi"} 2026-04-07 18:47:22 [INFO] Doc PMS | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Plan_Maitrise_Sanitaire_V001.pdf","at_id":"rec2Fh4V4YxqBfHKi"} 2026-04-07 18:47:22 [INFO] Génération doc 3/7 | {"type":"Plan_Implantation","template_id":"104460"} 2026-04-07 18:47:22 [DEBUG] Docupilot merge | {"template":"104460"} 2026-04-07 18:47:25 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104460"} 2026-04-07 18:47:26 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Plan_Implantation_V001.pdf","size":57070} 2026-04-07 18:47:26 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 18:47:26 [INFO] Airtable POST OK | {"code":200,"id":"recWADLUxHvgAYN66"} 2026-04-07 18:47:26 [INFO] Doc Plan_Implantation | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Plan_Implantation_V001.pdf","at_id":"recWADLUxHvgAYN66"} 2026-04-07 18:47:26 [INFO] Génération doc 4/7 | {"type":"Registre_Nuisibles","template_id":"104461"} 2026-04-07 18:47:26 [DEBUG] Docupilot merge | {"template":"104461"} 2026-04-07 18:47:30 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104461"} 2026-04-07 18:47:31 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Registre_Nuisibles_V001.pdf","size":60602} 2026-04-07 18:47:31 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 18:47:31 [INFO] Airtable POST OK | {"code":200,"id":"rec02DX1VQZwyp1cl"} 2026-04-07 18:47:31 [INFO] Doc Registre_Nuisibles | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Registre_Nuisibles_V001.pdf","at_id":"rec02DX1VQZwyp1cl"} 2026-04-07 18:47:31 [INFO] Génération doc 5/7 | {"type":"Fiches_Suivi","template_id":"104462"} 2026-04-07 18:47:31 [DEBUG] Docupilot merge | {"template":"104462"} 2026-04-07 18:47:35 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104462"} 2026-04-07 18:47:36 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Fiches_Suivi_V001.pdf","size":60934} 2026-04-07 18:47:36 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 18:47:37 [INFO] Airtable POST OK | {"code":200,"id":"recacCoMIGzrvtTYJ"} 2026-04-07 18:47:37 [INFO] Doc Fiches_Suivi | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Fiches_Suivi_V001.pdf","at_id":"recacCoMIGzrvtTYJ"} 2026-04-07 18:47:37 [INFO] Génération doc 6/7 | {"type":"Procedures_Ecrites","template_id":"104463"} 2026-04-07 18:47:37 [DEBUG] Docupilot merge | {"template":"104463"} 2026-04-07 18:47:41 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104463"} 2026-04-07 18:47:42 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Procedures_Ecrites_V001.pdf","size":60909} 2026-04-07 18:47:42 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 18:47:42 [INFO] Airtable POST OK | {"code":200,"id":"recotHAuzYw32wwux"} 2026-04-07 18:47:42 [INFO] Doc Procedures_Ecrites | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Procedures_Ecrites_V001.pdf","at_id":"recotHAuzYw32wwux"} 2026-04-07 18:47:42 [INFO] Génération doc 7/7 | {"type":"Registre_Tracabilite","template_id":"104464"} 2026-04-07 18:47:42 [DEBUG] Docupilot merge | {"template":"104464"} 2026-04-07 18:47:46 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104464"} 2026-04-07 18:47:47 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Registre_Tracabilite_V001.pdf","size":60666} 2026-04-07 18:47:47 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 18:47:47 [INFO] Airtable POST OK | {"code":200,"id":"rec3yUFUKMT3tJ0pP"} 2026-04-07 18:47:47 [INFO] Doc Registre_Tracabilite | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/db3ba18487867029\/Registre_Tracabilite_V001.pdf","at_id":"rec3yUFUKMT3tJ0pP"} 2026-04-07 18:47:47 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["cgv_acceptees"]} 2026-04-07 18:47:48 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:47:48 [INFO] Email send | {"to":"kevin.s@lesderatiseurs.fr","subject":"Vos 7 documents HACCP sont prêts — Les deratiseurs","sent":true} 2026-04-07 18:47:48 [INFO] === FIN GÉNÉRATION DOCUMENTS === | {"docs":7} 2026-04-07 18:47:48 [INFO] Fin generer_documents() 2026-04-07 18:57:19 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-04-07 18:57:19 [INFO] init_payment | {"email":"kevin.s@lesderatiseurs.fr","nom":"Baa","plan":"trimestriel"} 2026-04-07 18:57:19 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'kevin.s@lesderatiseurs.fr'"} 2026-04-07 18:57:24 [INFO] Airtable SEARCH result | {"code":200,"found":1} 2026-04-07 18:57:24 [INFO] Client existant trouvé | {"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:57:24 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["nom_etablissement","plan"]} 2026-04-07 18:57:25 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:57:25 [INFO] Création customer Stripe 2026-04-07 18:57:25 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-04-07 18:57:25 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UIDN49wVfjKWdl"} 2026-04-07 18:57:25 [INFO] init_payment OK | {"customer_id":"cus_UIDN49wVfjKWdl","airtable_id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:58:00 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-04-07 18:58:00 [INFO] confirm_subscription | {"customer_id":"cus_UIDN49wVfjKWdl","price_id":"price_1T1MiORVbk0a9x0cD4lTO6H8","pm":"pm_1TJcwuR...","at_id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:58:00 [INFO] Attach payment method 2026-04-07 18:58:00 [DEBUG] Stripe POST /v1/payment_methods/pm_1TJcwuRVbk0a9x0cIxN4uhKL/attach | {"keys":["customer"]} 2026-04-07 18:58:01 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TJcwuRVbk0a9x0cIxN4uhKL\/attach","id":"pm_1TJcwuRVbk0a9x0cIxN4uhKL"} 2026-04-07 18:58:01 [DEBUG] Stripe POST /v1/customers/cus_UIDN49wVfjKWdl | {"keys":["invoice_settings"]} 2026-04-07 18:58:01 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UIDN49wVfjKWdl","id":"cus_UIDN49wVfjKWdl"} 2026-04-07 18:58:01 [INFO] Création abonnement Stripe | {"price_id":"price_1T1MiORVbk0a9x0cD4lTO6H8"} 2026-04-07 18:58:01 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-04-07 18:58:05 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TJcwwRVbk0a9x0cL5hLWxi1"} 2026-04-07 18:58:05 [INFO] Abonnement créé | {"sub_id":"sub_1TJcwwRVbk0a9x0cL5hLWxi1","end":"2026-07-07"} 2026-04-07 18:58:05 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription"]} 2026-04-07 18:58:06 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:58:06 [INFO] Email send | {"to":"kevin.s@lesderatiseurs.fr","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-04-07 18:58:06 [INFO] confirm_subscription OK | {"token":"fc11c583..."} 2026-04-07 18:58:19 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-04-07 18:58:19 [INFO] save_declaration | {"client_id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:58:19 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":[]} 2026-04-07 18:58:19 [INFO] Airtable GET OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:58:19 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["cgv_acceptees"]} 2026-04-07 18:58:20 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-07 18:58:20 [INFO] Declaration saved OK 2026-04-07 19:16:07 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-04-07 19:16:07 [INFO] init_payment | {"email":"jeltyje@hotmail.com","nom":"Jelty","plan":"mensuel"} 2026-04-07 19:16:07 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'jeltyje@hotmail.com'"} 2026-04-07 19:16:08 [INFO] Airtable SEARCH result | {"code":200,"found":0} 2026-04-07 19:16:08 [INFO] Nouveau client — création Airtable 2026-04-07 19:16:08 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4","body_keys":["email","nom_etablissement","plan","date_inscription"]} 2026-04-07 19:16:09 [INFO] Airtable POST OK | {"code":200,"id":"recY8rjDITuP9MXgB"} 2026-04-07 19:16:09 [INFO] Client créé | {"id":"recY8rjDITuP9MXgB"} 2026-04-07 19:16:09 [INFO] Création customer Stripe 2026-04-07 19:16:09 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-04-07 19:16:10 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UIDfrhdnu9DPit"} 2026-04-07 19:16:10 [INFO] init_payment OK | {"customer_id":"cus_UIDfrhdnu9DPit","airtable_id":"recY8rjDITuP9MXgB"} 2026-04-07 19:16:39 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-04-07 19:16:39 [INFO] confirm_subscription | {"customer_id":"cus_UIDfrhdnu9DPit","price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0","pm":"pm_1TJdEwR...","at_id":"recY8rjDITuP9MXgB"} 2026-04-07 19:16:39 [INFO] Attach payment method 2026-04-07 19:16:39 [DEBUG] Stripe POST /v1/payment_methods/pm_1TJdEwRVbk0a9x0cCCyvgsPz/attach | {"keys":["customer"]} 2026-04-07 19:16:39 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TJdEwRVbk0a9x0cCCyvgsPz\/attach","id":"pm_1TJdEwRVbk0a9x0cCCyvgsPz"} 2026-04-07 19:16:39 [DEBUG] Stripe POST /v1/customers/cus_UIDfrhdnu9DPit | {"keys":["invoice_settings"]} 2026-04-07 19:16:40 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UIDfrhdnu9DPit","id":"cus_UIDfrhdnu9DPit"} 2026-04-07 19:16:40 [INFO] Création abonnement Stripe | {"price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0"} 2026-04-07 19:16:40 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-04-07 19:16:43 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TJdEyRVbk0a9x0cd6FG0mzf"} 2026-04-07 19:16:43 [INFO] Abonnement créé | {"sub_id":"sub_1TJdEyRVbk0a9x0cd6FG0mzf","end":"2026-05-07"} 2026-04-07 19:16:43 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recY8rjDITuP9MXgB","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription"]} 2026-04-07 19:16:44 [INFO] Airtable PATCH OK | {"code":200,"id":"recY8rjDITuP9MXgB"} 2026-04-07 19:16:44 [INFO] Email send | {"to":"jeltyje@hotmail.com","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-04-07 19:16:44 [INFO] confirm_subscription OK | {"token":"af94cadc..."} 2026-04-07 19:16:51 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-04-07 19:16:51 [INFO] save_declaration | {"client_id":"recY8rjDITuP9MXgB"} 2026-04-07 19:16:51 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recY8rjDITuP9MXgB","body_keys":[]} 2026-04-07 19:16:51 [INFO] Airtable GET OK | {"code":200,"id":"recY8rjDITuP9MXgB"} 2026-04-07 19:16:51 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recY8rjDITuP9MXgB","body_keys":["cgv_acceptees"]} 2026-04-07 19:16:52 [INFO] Airtable PATCH OK | {"code":200,"id":"recY8rjDITuP9MXgB"} 2026-04-07 19:16:52 [INFO] Declaration saved OK 2026-04-07 19:23:52 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-04-07 19:23:52 [INFO] init_payment | {"email":"eurostore1@gmail.com","nom":"Ficart","plan":"mensuel"} 2026-04-07 19:23:52 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'eurostore1@gmail.com'"} 2026-04-07 19:23:54 [INFO] Airtable SEARCH result | {"code":200,"found":0} 2026-04-07 19:23:54 [INFO] Nouveau client — création Airtable 2026-04-07 19:23:54 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4","body_keys":["email","nom_etablissement","plan","date_inscription"]} 2026-04-07 19:23:55 [INFO] Airtable POST OK | {"code":200,"id":"recDqMiQ7p6mOJ7xu"} 2026-04-07 19:23:55 [INFO] Client créé | {"id":"recDqMiQ7p6mOJ7xu"} 2026-04-07 19:23:55 [INFO] Création customer Stripe 2026-04-07 19:23:55 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-04-07 19:23:55 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UIDnVGSUH4iFxA"} 2026-04-07 19:23:55 [INFO] init_payment OK | {"customer_id":"cus_UIDnVGSUH4iFxA","airtable_id":"recDqMiQ7p6mOJ7xu"} 2026-04-07 19:24:41 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-04-07 19:24:41 [INFO] confirm_subscription | {"customer_id":"cus_UIDnVGSUH4iFxA","price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0","pm":"pm_1TJdMiR...","at_id":"recDqMiQ7p6mOJ7xu"} 2026-04-07 19:24:41 [INFO] Attach payment method 2026-04-07 19:24:41 [DEBUG] Stripe POST /v1/payment_methods/pm_1TJdMiRVbk0a9x0cyAJYncrt/attach | {"keys":["customer"]} 2026-04-07 19:24:41 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TJdMiRVbk0a9x0cyAJYncrt\/attach","id":"pm_1TJdMiRVbk0a9x0cyAJYncrt"} 2026-04-07 19:24:41 [DEBUG] Stripe POST /v1/customers/cus_UIDnVGSUH4iFxA | {"keys":["invoice_settings"]} 2026-04-07 19:24:42 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UIDnVGSUH4iFxA","id":"cus_UIDnVGSUH4iFxA"} 2026-04-07 19:24:42 [INFO] Création abonnement Stripe | {"price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0"} 2026-04-07 19:24:42 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-04-07 19:24:46 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TJdMkRVbk0a9x0cSZRtCzzb"} 2026-04-07 19:24:46 [INFO] Abonnement créé | {"sub_id":"sub_1TJdMkRVbk0a9x0cSZRtCzzb","end":"2026-05-07"} 2026-04-07 19:24:46 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recDqMiQ7p6mOJ7xu","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription"]} 2026-04-07 19:24:46 [INFO] Airtable PATCH OK | {"code":200,"id":"recDqMiQ7p6mOJ7xu"} 2026-04-07 19:24:46 [INFO] Email send | {"to":"eurostore1@gmail.com","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-04-07 19:24:46 [INFO] confirm_subscription OK | {"token":"24e6da3d..."} 2026-04-07 19:25:09 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-04-07 19:25:09 [INFO] save_declaration | {"client_id":"recDqMiQ7p6mOJ7xu"} 2026-04-07 19:25:09 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recDqMiQ7p6mOJ7xu","body_keys":[]} 2026-04-07 19:25:09 [INFO] Airtable GET OK | {"code":200,"id":"recDqMiQ7p6mOJ7xu"} 2026-04-07 19:25:09 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recDqMiQ7p6mOJ7xu","body_keys":["cgv_acceptees"]} 2026-04-07 19:25:10 [INFO] Airtable PATCH OK | {"code":200,"id":"recDqMiQ7p6mOJ7xu"} 2026-04-07 19:25:10 [INFO] Declaration saved OK 2026-04-07 19:38:33 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-04-07 19:38:33 [INFO] init_payment | {"email":"katysoufir@gmail.com","nom":"GROUPE APB","plan":"mensuel"} 2026-04-07 19:38:33 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'katysoufir@gmail.com'"} 2026-04-07 19:38:35 [INFO] Airtable SEARCH result | {"code":200,"found":0} 2026-04-07 19:38:35 [INFO] Nouveau client — création Airtable 2026-04-07 19:38:35 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4","body_keys":["email","nom_etablissement","plan","date_inscription"]} 2026-04-07 19:38:36 [INFO] Airtable POST OK | {"code":200,"id":"recAfGISrKaEWxdsw"} 2026-04-07 19:38:36 [INFO] Client créé | {"id":"recAfGISrKaEWxdsw"} 2026-04-07 19:38:36 [INFO] Création customer Stripe 2026-04-07 19:38:36 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-04-07 19:38:36 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UIE2UO5xFIC4Sf"} 2026-04-07 19:38:36 [INFO] init_payment OK | {"customer_id":"cus_UIE2UO5xFIC4Sf","airtable_id":"recAfGISrKaEWxdsw"} 2026-04-07 19:39:34 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-04-07 19:39:34 [INFO] confirm_subscription | {"customer_id":"cus_UIE2UO5xFIC4Sf","price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0","pm":"pm_1TJdb8R...","at_id":"recAfGISrKaEWxdsw"} 2026-04-07 19:39:34 [INFO] Attach payment method 2026-04-07 19:39:34 [DEBUG] Stripe POST /v1/payment_methods/pm_1TJdb8RVbk0a9x0cs1ssYNRS/attach | {"keys":["customer"]} 2026-04-07 19:39:35 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TJdb8RVbk0a9x0cs1ssYNRS\/attach","id":"pm_1TJdb8RVbk0a9x0cs1ssYNRS"} 2026-04-07 19:39:35 [DEBUG] Stripe POST /v1/customers/cus_UIE2UO5xFIC4Sf | {"keys":["invoice_settings"]} 2026-04-07 19:39:36 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UIE2UO5xFIC4Sf","id":"cus_UIE2UO5xFIC4Sf"} 2026-04-07 19:39:36 [INFO] Création abonnement Stripe | {"price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0"} 2026-04-07 19:39:36 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-04-07 19:39:39 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TJdbARVbk0a9x0cxF1Ku9SD"} 2026-04-07 19:39:39 [INFO] Abonnement créé | {"sub_id":"sub_1TJdbARVbk0a9x0cxF1Ku9SD","end":"2026-05-07"} 2026-04-07 19:39:39 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recAfGISrKaEWxdsw","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription"]} 2026-04-07 19:39:40 [INFO] Airtable PATCH OK | {"code":200,"id":"recAfGISrKaEWxdsw"} 2026-04-07 19:39:40 [INFO] Email send | {"to":"katysoufir@gmail.com","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-04-07 19:39:40 [INFO] confirm_subscription OK | {"token":"e88cac10..."} 2026-04-07 19:40:04 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-04-07 19:40:04 [INFO] save_declaration | {"client_id":"recAfGISrKaEWxdsw"} 2026-04-07 19:40:04 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recAfGISrKaEWxdsw","body_keys":[]} 2026-04-07 19:40:05 [INFO] Airtable GET OK | {"code":200,"id":"recAfGISrKaEWxdsw"} 2026-04-07 19:40:05 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recAfGISrKaEWxdsw","body_keys":["cgv_acceptees"]} 2026-04-07 19:40:05 [INFO] Airtable PATCH OK | {"code":200,"id":"recAfGISrKaEWxdsw"} 2026-04-07 19:40:05 [INFO] Declaration saved OK 2026-04-07 19:42:16 [INFO] POST reçu | {"action":"submit_haccp","keys":["ajax_action","client_id","token","siret","raison_sociale","adresse","code_postal","ville","pays","responsable","telephone","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage"]} 2026-04-07 19:42:16 [INFO] submit_haccp START | {"client_id":"recAfGISrKaEWxdsw","token_len":64,"post_keys":"ajax_action,client_id,token,siret,raison_sociale,adresse,code_postal,ville,pays,responsable,telephone,staff_count,zones,zones_nuisibles,freq_surveillance,freq_nettoyage,freq_dechets,produits_nettoyage,controle_reception,types_stockage"} 2026-04-07 19:42:16 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recAfGISrKaEWxdsw","body_keys":[]} 2026-04-07 19:42:17 [INFO] Airtable GET OK | {"code":200,"id":"recAfGISrKaEWxdsw"} 2026-04-07 19:42:17 [INFO] Client trouvé | {"status":"active","token_match":true} 2026-04-07 19:42:17 [INFO] Création établissement Airtable | {"nom":"GROUPE APB","siret":"44444","zones":"Zone de stockage, Réserve"} 2026-04-07 19:42:17 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblDKTCLFL4QMRYwU","body_keys":["name","siret","legal_form","city","responsible_name","staff_count","zones","cleaning_protocols","waste_management","reception_procedures","storage_temps","pest_prevention","activity_type","client_id","version_count"]} 2026-04-07 19:42:17 [INFO] Airtable POST OK | {"code":200,"id":"recwwoKLzXTj7ErxX"} 2026-04-07 19:42:17 [INFO] Établissement créé | {"estab_id":"recwwoKLzXTj7ErxX"} 2026-04-07 19:42:17 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recAfGISrKaEWxdsw","body_keys":["cgv_acceptees"]} 2026-04-07 19:42:18 [INFO] Airtable PATCH OK | {"code":200,"id":"recAfGISrKaEWxdsw"} 2026-04-07 19:42:18 [INFO] Envoi réponse client OK — démarrage génération 2026-04-07 19:42:18 [INFO] Début generer_documents() 2026-04-07 19:42:18 [INFO] === DÉBUT GÉNÉRATION DOCUMENTS === | {"client_id":"recAfGISrKaEWxdsw","estab_id":"recwwoKLzXTj7ErxX","email":"katysoufir@gmail.com"} 2026-04-07 19:42:18 [DEBUG] Payload Docupilot | {"keys":["client_id","establishment_id","email","magic_link_token","plan","nom_etablissement","raison_sociale","siret","adresse_etablissement","activite_principale","responsable_hygiene","effectif","zones","zone_controlee","frequence_nettoyage","produits_nettoyage","dechets","local_dechets","controle_reception","stockage","prevention_nuisibles","frequence_nuisibles","date_controle","observation","action_corrective","responsable_controle","version_document","date_emission","date_debut_validite","date_fin_validite","reference_dossier"],"siret":"44444"} 2026-04-07 19:42:18 [INFO] Génération doc 1/7 | {"type":"Attestation","template_id":"104458"} 2026-04-07 19:42:18 [DEBUG] Docupilot merge | {"template":"104458"} 2026-04-07 19:42:22 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104458"} 2026-04-07 19:42:23 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Attestation_Conformite_V001.pdf","size":89032} 2026-04-07 19:42:23 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 19:42:23 [INFO] Airtable POST OK | {"code":200,"id":"recUHQJ274TWflKeo"} 2026-04-07 19:42:23 [INFO] Doc Attestation | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Attestation_Conformite_V001.pdf","at_id":"recUHQJ274TWflKeo"} 2026-04-07 19:42:23 [INFO] Génération doc 2/7 | {"type":"PMS","template_id":"104459"} 2026-04-07 19:42:23 [DEBUG] Docupilot merge | {"template":"104459"} 2026-04-07 19:42:28 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104459"} 2026-04-07 19:42:28 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Plan_Maitrise_Sanitaire_V001.pdf","size":61453} 2026-04-07 19:42:28 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 19:42:29 [INFO] Airtable POST OK | {"code":200,"id":"recaZsfaV9beWe53T"} 2026-04-07 19:42:29 [INFO] Doc PMS | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Plan_Maitrise_Sanitaire_V001.pdf","at_id":"recaZsfaV9beWe53T"} 2026-04-07 19:42:29 [INFO] Génération doc 3/7 | {"type":"Plan_Implantation","template_id":"104460"} 2026-04-07 19:42:29 [DEBUG] Docupilot merge | {"template":"104460"} 2026-04-07 19:42:33 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104460"} 2026-04-07 19:42:33 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Plan_Implantation_V001.pdf","size":56927} 2026-04-07 19:42:33 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 19:42:34 [INFO] Airtable POST OK | {"code":200,"id":"rec2a5rBKy7X7j6F2"} 2026-04-07 19:42:34 [INFO] Doc Plan_Implantation | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Plan_Implantation_V001.pdf","at_id":"rec2a5rBKy7X7j6F2"} 2026-04-07 19:42:34 [INFO] Génération doc 4/7 | {"type":"Registre_Nuisibles","template_id":"104461"} 2026-04-07 19:42:34 [DEBUG] Docupilot merge | {"template":"104461"} 2026-04-07 19:42:38 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104461"} 2026-04-07 19:42:39 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Registre_Nuisibles_V001.pdf","size":60467} 2026-04-07 19:42:39 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 19:42:40 [INFO] Airtable POST OK | {"code":200,"id":"recDK8p504VcpAjWO"} 2026-04-07 19:42:40 [INFO] Doc Registre_Nuisibles | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Registre_Nuisibles_V001.pdf","at_id":"recDK8p504VcpAjWO"} 2026-04-07 19:42:40 [INFO] Génération doc 5/7 | {"type":"Fiches_Suivi","template_id":"104462"} 2026-04-07 19:42:40 [DEBUG] Docupilot merge | {"template":"104462"} 2026-04-07 19:42:44 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104462"} 2026-04-07 19:42:45 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Fiches_Suivi_V001.pdf","size":59900} 2026-04-07 19:42:45 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 19:42:46 [INFO] Airtable POST OK | {"code":200,"id":"recswnWn3TgBCLbeS"} 2026-04-07 19:42:46 [INFO] Doc Fiches_Suivi | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Fiches_Suivi_V001.pdf","at_id":"recswnWn3TgBCLbeS"} 2026-04-07 19:42:46 [INFO] Génération doc 6/7 | {"type":"Procedures_Ecrites","template_id":"104463"} 2026-04-07 19:42:46 [DEBUG] Docupilot merge | {"template":"104463"} 2026-04-07 19:42:49 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104463"} 2026-04-07 19:42:50 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Procedures_Ecrites_V001.pdf","size":61250} 2026-04-07 19:42:50 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 19:42:51 [INFO] Airtable POST OK | {"code":200,"id":"rec7D9DD1EeknAbO8"} 2026-04-07 19:42:51 [INFO] Doc Procedures_Ecrites | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Procedures_Ecrites_V001.pdf","at_id":"rec7D9DD1EeknAbO8"} 2026-04-07 19:42:51 [INFO] Génération doc 7/7 | {"type":"Registre_Tracabilite","template_id":"104464"} 2026-04-07 19:42:51 [DEBUG] Docupilot merge | {"template":"104464"} 2026-04-07 19:42:54 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104464"} 2026-04-07 19:42:55 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Registre_Tracabilite_V001.pdf","size":60726} 2026-04-07 19:42:55 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-07 19:42:56 [INFO] Airtable POST OK | {"code":200,"id":"recIeJeh3rb8RGkKt"} 2026-04-07 19:42:56 [INFO] Doc Registre_Tracabilite | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/e88cac10851d4f09\/Registre_Tracabilite_V001.pdf","at_id":"recIeJeh3rb8RGkKt"} 2026-04-07 19:42:56 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recAfGISrKaEWxdsw","body_keys":["cgv_acceptees"]} 2026-04-07 19:42:56 [INFO] Airtable PATCH OK | {"code":200,"id":"recAfGISrKaEWxdsw"} 2026-04-07 19:42:56 [INFO] Email send | {"to":"katysoufir@gmail.com","subject":"Vos 7 documents HACCP sont prêts — GROUPE APB","sent":true} 2026-04-07 19:42:56 [INFO] === FIN GÉNÉRATION DOCUMENTS === | {"docs":7} 2026-04-07 19:42:56 [INFO] Fin generer_documents() 2026-04-12 20:11:53 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-04-12 20:11:53 [INFO] init_payment | {"email":"yonatoferetwp@gmail.com","nom":"malki","plan":"mensuel"} 2026-04-12 20:11:53 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'yonatoferetwp@gmail.com'"} 2026-04-12 20:11:53 [INFO] Airtable SEARCH result | {"code":200,"found":0} 2026-04-12 20:11:53 [INFO] Nouveau client — création Airtable 2026-04-12 20:11:53 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4","body_keys":["email","nom_etablissement","plan","date_inscription"]} 2026-04-12 20:11:54 [INFO] Airtable POST OK | {"code":200,"id":"recg4hyqlDQZ6iAjT"} 2026-04-12 20:11:54 [INFO] Client créé | {"id":"recg4hyqlDQZ6iAjT"} 2026-04-12 20:11:54 [INFO] Création customer Stripe 2026-04-12 20:11:54 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-04-12 20:11:55 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UK6hPxOqIm1Pkk"} 2026-04-12 20:11:55 [INFO] init_payment OK | {"customer_id":"cus_UK6hPxOqIm1Pkk","airtable_id":"recg4hyqlDQZ6iAjT"} 2026-04-12 20:12:12 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-04-12 20:12:12 [INFO] confirm_subscription | {"customer_id":"cus_UK6hPxOqIm1Pkk","price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0","pm":"pm_1TLSUSR...","at_id":"recg4hyqlDQZ6iAjT"} 2026-04-12 20:12:12 [INFO] Attach payment method 2026-04-12 20:12:12 [DEBUG] Stripe POST /v1/payment_methods/pm_1TLSUSRVbk0a9x0cT9b3f1sJ/attach | {"keys":["customer"]} 2026-04-12 20:12:13 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TLSUSRVbk0a9x0cT9b3f1sJ\/attach","id":"pm_1TLSUSRVbk0a9x0cT9b3f1sJ"} 2026-04-12 20:12:13 [DEBUG] Stripe POST /v1/customers/cus_UK6hPxOqIm1Pkk | {"keys":["invoice_settings"]} 2026-04-12 20:12:13 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UK6hPxOqIm1Pkk","id":"cus_UK6hPxOqIm1Pkk"} 2026-04-12 20:12:13 [INFO] Création abonnement Stripe | {"price_id":"price_1T1Mh5RVbk0a9x0cna56ZSo0"} 2026-04-12 20:12:13 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-04-12 20:12:17 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TLSUTRVbk0a9x0cRBXF6rXS"} 2026-04-12 20:12:17 [INFO] Abonnement créé | {"sub_id":"sub_1TLSUTRVbk0a9x0cRBXF6rXS","end":"2026-05-12"} 2026-04-12 20:12:17 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recg4hyqlDQZ6iAjT","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription"]} 2026-04-12 20:12:18 [INFO] Airtable PATCH OK | {"code":200,"id":"recg4hyqlDQZ6iAjT"} 2026-04-12 20:12:18 [INFO] Email send | {"to":"yonatoferetwp@gmail.com","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-04-12 20:12:18 [INFO] confirm_subscription OK | {"token":"1d5b0166..."} 2026-04-12 20:12:21 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-04-12 20:12:21 [INFO] save_declaration | {"client_id":"recg4hyqlDQZ6iAjT"} 2026-04-12 20:12:21 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recg4hyqlDQZ6iAjT","body_keys":[]} 2026-04-12 20:12:22 [INFO] Airtable GET OK | {"code":200,"id":"recg4hyqlDQZ6iAjT"} 2026-04-12 20:12:22 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recg4hyqlDQZ6iAjT","body_keys":["cgv_acceptees"]} 2026-04-12 20:12:22 [INFO] Airtable PATCH OK | {"code":200,"id":"recg4hyqlDQZ6iAjT"} 2026-04-12 20:12:22 [INFO] Declaration saved OK 2026-04-12 20:12:47 [INFO] POST reçu | {"action":"submit_haccp","keys":["ajax_action","client_id","token","siret","raison_sociale","adresse","code_postal","ville","pays","responsable","telephone","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage"]} 2026-04-12 20:12:47 [INFO] submit_haccp START | {"client_id":"recg4hyqlDQZ6iAjT","token_len":64,"post_keys":"ajax_action,client_id,token,siret,raison_sociale,adresse,code_postal,ville,pays,responsable,telephone,staff_count,zones,zones_nuisibles,freq_surveillance,freq_nettoyage,freq_dechets,produits_nettoyage,controle_reception,types_stockage"} 2026-04-12 20:12:47 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recg4hyqlDQZ6iAjT","body_keys":[]} 2026-04-12 20:12:48 [INFO] Airtable GET OK | {"code":200,"id":"recg4hyqlDQZ6iAjT"} 2026-04-12 20:12:48 [INFO] Client trouvé | {"status":"active","token_match":true} 2026-04-12 20:12:48 [INFO] Création établissement Airtable | {"nom":"malki","siret":"1111111111","zones":"Zone de préparation"} 2026-04-12 20:12:48 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblDKTCLFL4QMRYwU","body_keys":["name","siret","legal_form","city","responsible_name","staff_count","zones","cleaning_protocols","waste_management","reception_procedures","storage_temps","pest_prevention","activity_type","client_id","version_count"]} 2026-04-12 20:12:48 [INFO] Airtable POST OK | {"code":200,"id":"recxn3hI8lzjw2jj5"} 2026-04-12 20:12:48 [INFO] Établissement créé | {"estab_id":"recxn3hI8lzjw2jj5"} 2026-04-12 20:12:48 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recg4hyqlDQZ6iAjT","body_keys":["cgv_acceptees"]} 2026-04-12 20:12:49 [INFO] Airtable PATCH OK | {"code":200,"id":"recg4hyqlDQZ6iAjT"} 2026-04-12 20:12:49 [INFO] Envoi réponse client OK — démarrage génération 2026-04-12 20:12:49 [INFO] Début generer_documents() 2026-04-12 20:12:49 [INFO] === DÉBUT GÉNÉRATION DOCUMENTS === | {"client_id":"recg4hyqlDQZ6iAjT","estab_id":"recxn3hI8lzjw2jj5","email":"yonatoferetwp@gmail.com"} 2026-04-12 20:12:49 [DEBUG] Payload Docupilot | {"keys":["client_id","establishment_id","email","magic_link_token","plan","nom_etablissement","raison_sociale","siret","adresse_etablissement","activite_principale","responsable_hygiene","effectif","zones","zone_controlee","frequence_nettoyage","produits_nettoyage","dechets","local_dechets","controle_reception","stockage","prevention_nuisibles","frequence_nuisibles","date_controle","observation","action_corrective","responsable_controle","version_document","date_emission","date_debut_validite","date_fin_validite","reference_dossier"],"siret":"1111111111"} 2026-04-12 20:12:49 [INFO] Génération doc 1/7 | {"type":"Attestation","template_id":"104458"} 2026-04-12 20:12:49 [DEBUG] Docupilot merge | {"template":"104458"} 2026-04-12 20:12:53 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104458"} 2026-04-12 20:12:54 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Attestation_Conformite_V001.pdf","size":89414} 2026-04-12 20:12:54 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-12 20:12:54 [INFO] Airtable POST OK | {"code":200,"id":"recSmpViBqJM2PcR5"} 2026-04-12 20:12:54 [INFO] Doc Attestation | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Attestation_Conformite_V001.pdf","at_id":"recSmpViBqJM2PcR5"} 2026-04-12 20:12:54 [INFO] Génération doc 2/7 | {"type":"PMS","template_id":"104459"} 2026-04-12 20:12:54 [DEBUG] Docupilot merge | {"template":"104459"} 2026-04-12 20:12:58 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104459"} 2026-04-12 20:12:58 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Plan_Maitrise_Sanitaire_V001.pdf","size":61164} 2026-04-12 20:12:58 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-12 20:12:59 [INFO] Airtable POST OK | {"code":200,"id":"recvZlRSv6zaswehV"} 2026-04-12 20:12:59 [INFO] Doc PMS | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Plan_Maitrise_Sanitaire_V001.pdf","at_id":"recvZlRSv6zaswehV"} 2026-04-12 20:12:59 [INFO] Génération doc 3/7 | {"type":"Plan_Implantation","template_id":"104460"} 2026-04-12 20:12:59 [DEBUG] Docupilot merge | {"template":"104460"} 2026-04-12 20:13:03 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104460"} 2026-04-12 20:13:04 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Plan_Implantation_V001.pdf","size":55826} 2026-04-12 20:13:04 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-12 20:13:05 [INFO] Airtable POST OK | {"code":200,"id":"recWQHvbuvJaB2sDe"} 2026-04-12 20:13:05 [INFO] Doc Plan_Implantation | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Plan_Implantation_V001.pdf","at_id":"recWQHvbuvJaB2sDe"} 2026-04-12 20:13:05 [INFO] Génération doc 4/7 | {"type":"Registre_Nuisibles","template_id":"104461"} 2026-04-12 20:13:05 [DEBUG] Docupilot merge | {"template":"104461"} 2026-04-12 20:13:08 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104461"} 2026-04-12 20:13:09 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Registre_Nuisibles_V001.pdf","size":59426} 2026-04-12 20:13:09 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-12 20:13:10 [INFO] Airtable POST OK | {"code":200,"id":"recX3sNUGBqOTU0ZF"} 2026-04-12 20:13:10 [INFO] Doc Registre_Nuisibles | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Registre_Nuisibles_V001.pdf","at_id":"recX3sNUGBqOTU0ZF"} 2026-04-12 20:13:10 [INFO] Génération doc 5/7 | {"type":"Fiches_Suivi","template_id":"104462"} 2026-04-12 20:13:10 [DEBUG] Docupilot merge | {"template":"104462"} 2026-04-12 20:13:13 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104462"} 2026-04-12 20:13:14 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Fiches_Suivi_V001.pdf","size":59529} 2026-04-12 20:13:14 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-12 20:13:15 [INFO] Airtable POST OK | {"code":200,"id":"recpQ3ZTXj9CoWZdU"} 2026-04-12 20:13:15 [INFO] Doc Fiches_Suivi | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Fiches_Suivi_V001.pdf","at_id":"recpQ3ZTXj9CoWZdU"} 2026-04-12 20:13:15 [INFO] Génération doc 6/7 | {"type":"Procedures_Ecrites","template_id":"104463"} 2026-04-12 20:13:15 [DEBUG] Docupilot merge | {"template":"104463"} 2026-04-12 20:13:18 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104463"} 2026-04-12 20:13:19 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Procedures_Ecrites_V001.pdf","size":59956} 2026-04-12 20:13:19 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-12 20:13:19 [INFO] Airtable POST OK | {"code":200,"id":"recEnub81YLyUaq5L"} 2026-04-12 20:13:19 [INFO] Doc Procedures_Ecrites | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Procedures_Ecrites_V001.pdf","at_id":"recEnub81YLyUaq5L"} 2026-04-12 20:13:19 [INFO] Génération doc 7/7 | {"type":"Registre_Tracabilite","template_id":"104464"} 2026-04-12 20:13:19 [DEBUG] Docupilot merge | {"template":"104464"} 2026-04-12 20:13:23 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104464"} 2026-04-12 20:13:24 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Registre_Tracabilite_V001.pdf","size":59883} 2026-04-12 20:13:24 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-12 20:13:24 [INFO] Airtable POST OK | {"code":200,"id":"reczWLfavDmrIgSRl"} 2026-04-12 20:13:24 [INFO] Doc Registre_Tracabilite | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/1d5b0166ae714789\/Registre_Tracabilite_V001.pdf","at_id":"reczWLfavDmrIgSRl"} 2026-04-12 20:13:24 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recg4hyqlDQZ6iAjT","body_keys":["cgv_acceptees"]} 2026-04-12 20:13:25 [INFO] Airtable PATCH OK | {"code":200,"id":"recg4hyqlDQZ6iAjT"} 2026-04-12 20:13:25 [INFO] Email send | {"to":"yonatoferetwp@gmail.com","subject":"Vos 7 documents HACCP sont prêts — malki","sent":true} 2026-04-12 20:13:25 [INFO] === FIN GÉNÉRATION DOCUMENTS === | {"docs":7} 2026-04-12 20:13:25 [INFO] Fin generer_documents() 2026-04-13 21:37:46 [INFO] POST reçu | {"action":"init_payment","keys":["ajax_action","email","nom_etablissement","plan","activity_type"]} 2026-04-13 21:37:46 [INFO] init_payment | {"email":"kevin.s@lesderatiseurs.fr","nom":"les deratiseurs","plan":"trimestriel"} 2026-04-13 21:37:46 [DEBUG] Airtable SEARCH | {"formula":"{email} = 'kevin.s@lesderatiseurs.fr'"} 2026-04-13 21:37:48 [INFO] Airtable SEARCH result | {"code":200,"found":1} 2026-04-13 21:37:48 [INFO] Client existant trouvé | {"id":"recFPG7QTPwXOi9EI"} 2026-04-13 21:37:48 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["nom_etablissement","plan"]} 2026-04-13 21:37:56 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-13 21:37:56 [INFO] Création customer Stripe 2026-04-13 21:37:56 [DEBUG] Stripe POST /v1/customers | {"keys":["email","name","metadata"]} 2026-04-13 21:37:56 [INFO] Stripe OK | {"endpoint":"\/v1\/customers","id":"cus_UKVJHYgoisI7qW"} 2026-04-13 21:37:56 [INFO] init_payment OK | {"customer_id":"cus_UKVJHYgoisI7qW","airtable_id":"recFPG7QTPwXOi9EI"} 2026-04-13 21:38:13 [INFO] POST reçu | {"action":"confirm_subscription","keys":["ajax_action","customer_id","price_id","payment_method","airtable_id","email","nom_etablissement","plan"]} 2026-04-13 21:38:13 [INFO] confirm_subscription | {"customer_id":"cus_UKVJHYgoisI7qW","price_id":"price_1T1MiORVbk0a9x0cD4lTO6H8","pm":"pm_1TLqJFR...","at_id":"recFPG7QTPwXOi9EI"} 2026-04-13 21:38:13 [INFO] Attach payment method 2026-04-13 21:38:13 [DEBUG] Stripe POST /v1/payment_methods/pm_1TLqJFRVbk0a9x0cP7hZB7a7/attach | {"keys":["customer"]} 2026-04-13 21:38:14 [INFO] Stripe OK | {"endpoint":"\/v1\/payment_methods\/pm_1TLqJFRVbk0a9x0cP7hZB7a7\/attach","id":"pm_1TLqJFRVbk0a9x0cP7hZB7a7"} 2026-04-13 21:38:14 [DEBUG] Stripe POST /v1/customers/cus_UKVJHYgoisI7qW | {"keys":["invoice_settings"]} 2026-04-13 21:38:14 [INFO] Stripe OK | {"endpoint":"\/v1\/customers\/cus_UKVJHYgoisI7qW","id":"cus_UKVJHYgoisI7qW"} 2026-04-13 21:38:14 [INFO] Création abonnement Stripe | {"price_id":"price_1T1MiORVbk0a9x0cD4lTO6H8"} 2026-04-13 21:38:14 [DEBUG] Stripe POST /v1/subscriptions | {"keys":["customer","items","default_payment_method","expand"]} 2026-04-13 21:38:18 [INFO] Stripe OK | {"endpoint":"\/v1\/subscriptions","id":"sub_1TLqJGRVbk0a9x0c6V4JT34G"} 2026-04-13 21:38:18 [INFO] Abonnement créé | {"sub_id":"sub_1TLqJGRVbk0a9x0c6V4JT34G","end":"2026-07-13"} 2026-04-13 21:38:18 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["subscription_status","stripe_customer_id","stripe_subscription_id","current_period_start","current_period_end","magic_link_token","date_inscription"]} 2026-04-13 21:38:19 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-13 21:38:19 [INFO] Email send | {"to":"kevin.s@lesderatiseurs.fr","subject":"Paiement confirmé — Finalisez votre dossier HACCP","sent":true} 2026-04-13 21:38:19 [INFO] confirm_subscription OK | {"token":"affa521d..."} 2026-04-13 21:38:40 [INFO] POST reçu | {"action":"save_declaration","keys":["ajax_action","client_id","token"]} 2026-04-13 21:38:40 [INFO] save_declaration | {"client_id":"recFPG7QTPwXOi9EI"} 2026-04-13 21:38:40 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":[]} 2026-04-13 21:38:40 [INFO] Airtable GET OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-13 21:38:40 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["cgv_acceptees"]} 2026-04-13 21:38:41 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-13 21:38:41 [INFO] Declaration saved OK 2026-04-13 21:39:59 [INFO] POST reçu | {"action":"submit_haccp","keys":["ajax_action","client_id","token","siret","raison_sociale","adresse","code_postal","ville","pays","responsable","telephone","staff_count","zones","zones_nuisibles","freq_surveillance","freq_nettoyage","freq_dechets","produits_nettoyage","controle_reception","types_stockage"]} 2026-04-13 21:39:59 [INFO] submit_haccp START | {"client_id":"recFPG7QTPwXOi9EI","token_len":64,"post_keys":"ajax_action,client_id,token,siret,raison_sociale,adresse,code_postal,ville,pays,responsable,telephone,staff_count,zones,zones_nuisibles,freq_surveillance,freq_nettoyage,freq_dechets,produits_nettoyage,controle_reception,types_stockage"} 2026-04-13 21:39:59 [DEBUG] Airtable GET | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":[]} 2026-04-13 21:40:00 [INFO] Airtable GET OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-13 21:40:00 [INFO] Client trouvé | {"status":"active","token_match":true} 2026-04-13 21:40:00 [INFO] Création établissement Airtable | {"nom":"les deratiseurs","siret":"99999999999999","zones":"Cuisine, Zone de préparation, Zone de stockage, Chambre froide, Réserve"} 2026-04-13 21:40:00 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblDKTCLFL4QMRYwU","body_keys":["name","siret","legal_form","city","responsible_name","staff_count","zones","cleaning_protocols","waste_management","reception_procedures","storage_temps","pest_prevention","activity_type","client_id","version_count"]} 2026-04-13 21:40:00 [INFO] Airtable POST OK | {"code":200,"id":"rec3sfEDaeMbdseFd"} 2026-04-13 21:40:00 [INFO] Établissement créé | {"estab_id":"rec3sfEDaeMbdseFd"} 2026-04-13 21:40:00 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["cgv_acceptees"]} 2026-04-13 21:40:01 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-13 21:40:01 [INFO] Envoi réponse client OK — démarrage génération 2026-04-13 21:40:01 [INFO] Début generer_documents() 2026-04-13 21:40:01 [INFO] === DÉBUT GÉNÉRATION DOCUMENTS === | {"client_id":"recFPG7QTPwXOi9EI","estab_id":"rec3sfEDaeMbdseFd","email":"kevin.s@lesderatiseurs.fr"} 2026-04-13 21:40:01 [DEBUG] Payload Docupilot | {"keys":["client_id","establishment_id","email","magic_link_token","plan","nom_etablissement","raison_sociale","siret","adresse_etablissement","activite_principale","responsable_hygiene","effectif","zones","zone_controlee","frequence_nettoyage","produits_nettoyage","dechets","local_dechets","controle_reception","stockage","prevention_nuisibles","frequence_nuisibles","date_controle","observation","action_corrective","responsable_controle","version_document","date_emission","date_debut_validite","date_fin_validite","reference_dossier"],"siret":"99999999999999"} 2026-04-13 21:40:01 [INFO] Génération doc 1/7 | {"type":"Attestation","template_id":"104458"} 2026-04-13 21:40:01 [DEBUG] Docupilot merge | {"template":"104458"} 2026-04-13 21:40:06 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104458"} 2026-04-13 21:40:07 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Attestation_Conformite_V001.pdf","size":89537} 2026-04-13 21:40:07 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-13 21:40:07 [INFO] Airtable POST OK | {"code":200,"id":"recjVrS2Gty5RCpHC"} 2026-04-13 21:40:07 [INFO] Doc Attestation | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Attestation_Conformite_V001.pdf","at_id":"recjVrS2Gty5RCpHC"} 2026-04-13 21:40:07 [INFO] Génération doc 2/7 | {"type":"PMS","template_id":"104459"} 2026-04-13 21:40:07 [DEBUG] Docupilot merge | {"template":"104459"} 2026-04-13 21:40:11 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104459"} 2026-04-13 21:40:12 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Plan_Maitrise_Sanitaire_V001.pdf","size":61102} 2026-04-13 21:40:12 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-13 21:40:12 [INFO] Airtable POST OK | {"code":200,"id":"recojR1pae65fzdfC"} 2026-04-13 21:40:12 [INFO] Doc PMS | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Plan_Maitrise_Sanitaire_V001.pdf","at_id":"recojR1pae65fzdfC"} 2026-04-13 21:40:12 [INFO] Génération doc 3/7 | {"type":"Plan_Implantation","template_id":"104460"} 2026-04-13 21:40:12 [DEBUG] Docupilot merge | {"template":"104460"} 2026-04-13 21:40:16 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104460"} 2026-04-13 21:40:17 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Plan_Implantation_V001.pdf","size":56180} 2026-04-13 21:40:17 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-13 21:40:17 [INFO] Airtable POST OK | {"code":200,"id":"recpbLilQXdbIslo0"} 2026-04-13 21:40:17 [INFO] Doc Plan_Implantation | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Plan_Implantation_V001.pdf","at_id":"recpbLilQXdbIslo0"} 2026-04-13 21:40:17 [INFO] Génération doc 4/7 | {"type":"Registre_Nuisibles","template_id":"104461"} 2026-04-13 21:40:17 [DEBUG] Docupilot merge | {"template":"104461"} 2026-04-13 21:40:22 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104461"} 2026-04-13 21:40:23 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Registre_Nuisibles_V001.pdf","size":59797} 2026-04-13 21:40:23 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-13 21:40:23 [INFO] Airtable POST OK | {"code":200,"id":"recyadIUOwEpuCyhW"} 2026-04-13 21:40:23 [INFO] Doc Registre_Nuisibles | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Registre_Nuisibles_V001.pdf","at_id":"recyadIUOwEpuCyhW"} 2026-04-13 21:40:23 [INFO] Génération doc 5/7 | {"type":"Fiches_Suivi","template_id":"104462"} 2026-04-13 21:40:23 [DEBUG] Docupilot merge | {"template":"104462"} 2026-04-13 21:40:27 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104462"} 2026-04-13 21:40:28 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Fiches_Suivi_V001.pdf","size":60259} 2026-04-13 21:40:28 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-13 21:40:28 [INFO] Airtable POST OK | {"code":200,"id":"reczbmpnXTle82UE8"} 2026-04-13 21:40:28 [INFO] Doc Fiches_Suivi | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Fiches_Suivi_V001.pdf","at_id":"reczbmpnXTle82UE8"} 2026-04-13 21:40:28 [INFO] Génération doc 6/7 | {"type":"Procedures_Ecrites","template_id":"104463"} 2026-04-13 21:40:28 [DEBUG] Docupilot merge | {"template":"104463"} 2026-04-13 21:40:32 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104463"} 2026-04-13 21:40:33 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Procedures_Ecrites_V001.pdf","size":60400} 2026-04-13 21:40:33 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-13 21:40:34 [INFO] Airtable POST OK | {"code":200,"id":"recH7MwpIaVoFKYf3"} 2026-04-13 21:40:34 [INFO] Doc Procedures_Ecrites | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Procedures_Ecrites_V001.pdf","at_id":"recH7MwpIaVoFKYf3"} 2026-04-13 21:40:34 [INFO] Génération doc 7/7 | {"type":"Registre_Tracabilite","template_id":"104464"} 2026-04-13 21:40:34 [DEBUG] Docupilot merge | {"template":"104464"} 2026-04-13 21:40:38 [INFO] Docupilot OK — téléchargement PDF | {"tpl":"104464"} 2026-04-13 21:40:39 [INFO] PDF sauvegardé | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Registre_Tracabilite_V001.pdf","size":60277} 2026-04-13 21:40:39 [DEBUG] Airtable POST | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tblEEyOtd4gFDSLOp","body_keys":["document_type","file_name","cloudinary_url","establishment_id","version","validity_end","validity_start","status"]} 2026-04-13 21:40:40 [INFO] Airtable POST OK | {"code":200,"id":"recJMlSnZ3QLlbdWC"} 2026-04-13 21:40:40 [INFO] Doc Registre_Tracabilite | {"url":"https:\/\/www.groupederatiseurs.com\/docs\/affa521d4d504206\/Registre_Tracabilite_V001.pdf","at_id":"recJMlSnZ3QLlbdWC"} 2026-04-13 21:40:40 [DEBUG] Airtable PATCH | {"url":"https:\/\/api.airtable.com\/v0\/appfBIcuGcTsz6v8B\/tbl56aKDz3gIhb2Y4\/recFPG7QTPwXOi9EI","body_keys":["cgv_acceptees"]} 2026-04-13 21:40:40 [INFO] Airtable PATCH OK | {"code":200,"id":"recFPG7QTPwXOi9EI"} 2026-04-13 21:40:40 [INFO] Email send | {"to":"kevin.s@lesderatiseurs.fr","subject":"Vos 7 documents HACCP sont prêts — les deratiseurs","sent":true} 2026-04-13 21:40:40 [INFO] === FIN GÉNÉRATION DOCUMENTS === | {"docs":7} 2026-04-13 21:40:40 [INFO] Fin generer_documents()